Skip to content

Commit c89e4a4

Browse files
authored
[evm, sdk, docs]: deploy SimplexPaymaster to Ethereum, Arbitrum, Base, Polygon & BSC (#1055)
1 parent a7bf6a5 commit c89e4a4

6 files changed

Lines changed: 30 additions & 9 deletions

File tree

docs/content/developers/evm/contract-addresses/mainnet.mdx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ ISMP contract addresses for the following networks:
2121
| `CallDispatcher` | [`0xE2C7e576E26E0bE7aC97c6fE925bcDAbD87c4bEd`](https://etherscan.io/address/0xE2C7e576E26E0bE7aC97c6fE925bcDAbD87c4bEd) |
2222
| `IntentGatewayV2` | [`0xAe041F7B0CB581876832830baeB6a2Aa2a3C9716`](https://etherscan.io/address/0xAe041F7B0CB581876832830baeB6a2Aa2a3C9716) |
2323
| `SolverAccount` | [`0xfCd233b937D7622AAc63ced3C9A1A12F4a6B64E3`](https://etherscan.io/address/0xfCd233b937D7622AAc63ced3C9A1A12F4a6B64E3) |
24+
| `SimplexPaymaster` | [`0xD4340d7466e040626383cb9cda9307ba8E081149`](https://etherscan.io/address/0xD4340d7466e040626383cb9cda9307ba8E081149) |
25+
| `SimplexPaymaster (Implementation)` | [`0x58F678b5dA7997C7121621495ECFD8984D525e79`](https://etherscan.io/address/0x58F678b5dA7997C7121621495ECFD8984D525e79) |
2426
| `BandwidthManager` | [`0x6A67533Ce73756FfaB17c05578A5FBBa5d9B2d8d`](https://etherscan.io/address/0x6A67533Ce73756FfaB17c05578A5FBBa5d9B2d8d) |
2527
| `ConsensusStateId` | `ETH0` |
2628
| `StateMachine` | `EVM-1` |
@@ -40,6 +42,8 @@ ISMP contract addresses for the following networks:
4042
| `CallDispatcher` | [`0xE2C7e576E26E0bE7aC97c6fE925bcDAbD87c4bEd`](https://arbiscan.io/address/0xE2C7e576E26E0bE7aC97c6fE925bcDAbD87c4bEd) |
4143
| `IntentGatewayV2` | [`0xAe041F7B0CB581876832830baeB6a2Aa2a3C9716`](https://arbiscan.io/address/0xAe041F7B0CB581876832830baeB6a2Aa2a3C9716) |
4244
| `SolverAccount` | [`0xfCd233b937D7622AAc63ced3C9A1A12F4a6B64E3`](https://arbiscan.io/address/0xfCd233b937D7622AAc63ced3C9A1A12F4a6B64E3) |
45+
| `SimplexPaymaster` | [`0x7281Bccb4f0BCE44F3B8542d1fC5e51c2F5fC08C`](https://arbiscan.io/address/0x7281Bccb4f0BCE44F3B8542d1fC5e51c2F5fC08C) |
46+
| `SimplexPaymaster (Implementation)` | [`0x58F678b5dA7997C7121621495ECFD8984D525e79`](https://arbiscan.io/address/0x58F678b5dA7997C7121621495ECFD8984D525e79) |
4347
| `BandwidthManager` | [`0x6A67533Ce73756FfaB17c05578A5FBBa5d9B2d8d`](https://arbiscan.io/address/0x6A67533Ce73756FfaB17c05578A5FBBa5d9B2d8d) |
4448
| `ConsensusStateId` | Messaging: `ETH0` / Consensus: `ARB0` |
4549
| `StateMachine` | `EVM-42161` |
@@ -76,6 +80,8 @@ ISMP contract addresses for the following networks:
7680
| `CallDispatcher` | [`0xE2C7e576E26E0bE7aC97c6fE925bcDAbD87c4bEd`](https://basescan.org/address/0xE2C7e576E26E0bE7aC97c6fE925bcDAbD87c4bEd) |
7781
| `IntentGatewayV2` | [`0xAe041F7B0CB581876832830baeB6a2Aa2a3C9716`](https://basescan.org/address/0xAe041F7B0CB581876832830baeB6a2Aa2a3C9716) |
7882
| `SolverAccount` | [`0xfCd233b937D7622AAc63ced3C9A1A12F4a6B64E3`](https://basescan.org/address/0xfCd233b937D7622AAc63ced3C9A1A12F4a6B64E3) |
83+
| `SimplexPaymaster` | [`0x15b3B03C870c7ef252029c35A12d3b339F5c8d7f`](https://basescan.org/address/0x15b3B03C870c7ef252029c35A12d3b339F5c8d7f) |
84+
| `SimplexPaymaster (Implementation)` | [`0x58F678b5dA7997C7121621495ECFD8984D525e79`](https://basescan.org/address/0x58F678b5dA7997C7121621495ECFD8984D525e79) |
7985
| `BandwidthManager` | [`0x6A67533Ce73756FfaB17c05578A5FBBa5d9B2d8d`](https://basescan.org/address/0x6A67533Ce73756FfaB17c05578A5FBBa5d9B2d8d) |
8086
| `ConsensusStateId` | Messaging: `ETH0` / Consensus: `BASE` |
8187
| `StateMachine` | `EVM-8453` |
@@ -94,6 +100,8 @@ ISMP contract addresses for the following networks:
94100
| `CallDispatcher` | [`0xE2C7e576E26E0bE7aC97c6fE925bcDAbD87c4bEd`](https://bscscan.com/address/0xE2C7e576E26E0bE7aC97c6fE925bcDAbD87c4bEd) |
95101
| `IntentGatewayV2` | [`0xAe041F7B0CB581876832830baeB6a2Aa2a3C9716`](https://bscscan.com/address/0xAe041F7B0CB581876832830baeB6a2Aa2a3C9716) |
96102
| `SolverAccount` | [`0xfCd233b937D7622AAc63ced3C9A1A12F4a6B64E3`](https://bscscan.com/address/0xfCd233b937D7622AAc63ced3C9A1A12F4a6B64E3) |
103+
| `SimplexPaymaster` | [`0xeD02f9f0df8F562B89cC5b25867Ad3C2d61252A9`](https://bscscan.com/address/0xeD02f9f0df8F562B89cC5b25867Ad3C2d61252A9) |
104+
| `SimplexPaymaster (Implementation)` | [`0x58F678b5dA7997C7121621495ECFD8984D525e79`](https://bscscan.com/address/0x58F678b5dA7997C7121621495ECFD8984D525e79) |
97105
| `BandwidthManager` | [`0x6A67533Ce73756FfaB17c05578A5FBBa5d9B2d8d`](https://bscscan.com/address/0x6A67533Ce73756FfaB17c05578A5FBBa5d9B2d8d) |
98106
| `ConsensusStateId` | `BSC0` |
99107
| `StateMachine` | `EVM-56` |
@@ -155,6 +163,8 @@ ISMP contract addresses for the following networks:
155163
| `CallDispatcher` | [`0xE2C7e576E26E0bE7aC97c6fE925bcDAbD87c4bEd`](https://polygonscan.com/address/0xE2C7e576E26E0bE7aC97c6fE925bcDAbD87c4bEd) |
156164
| `IntentGatewayV2` | [`0xAe041F7B0CB581876832830baeB6a2Aa2a3C9716`](https://polygonscan.com/address/0xAe041F7B0CB581876832830baeB6a2Aa2a3C9716) |
157165
| `SolverAccount` | [`0xfCd233b937D7622AAc63ced3C9A1A12F4a6B64E3`](https://polygonscan.com/address/0xfCd233b937D7622AAc63ced3C9A1A12F4a6B64E3) |
166+
| `SimplexPaymaster` | [`0xe99acFe0f5fC4C8ea54A187D8D3b05f136150095`](https://polygonscan.com/address/0xe99acFe0f5fC4C8ea54A187D8D3b05f136150095) |
167+
| `SimplexPaymaster (Implementation)` | [`0x58F678b5dA7997C7121621495ECFD8984D525e79`](https://polygonscan.com/address/0x58F678b5dA7997C7121621495ECFD8984D525e79) |
158168
| `BandwidthManager` | [`0x6A67533Ce73756FfaB17c05578A5FBBa5d9B2d8d`](https://polygonscan.com/address/0x6A67533Ce73756FfaB17c05578A5FBBa5d9B2d8d) |
159169
| `ConsensusStateId` | `POLY` |
160170
| `StateMachine` | `EVM-137` |

docs/content/developers/evm/intent-gateway/simplex.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ Both curves are expressed in **exotic tokens per USD**. A higher bid means the f
5555

5656
HyperFX always uses the solver selection path: it submits a signed bid to Hyperbridge via `IntentsCoprocessor` rather than calling `fillOrder` directly. This requires `substratePrivateKey` and `hyperbridgeWsUrl` in `[simplex]`, plus a `bundlerUrl` on each `[[chains]]` entry.
5757

58-
On startup, Simplex automatically delegates the filler's EOA to the `SolverAccount` contract via EIP-7702 — submitting a no-op UserOp through the bundler so the delegation lands without requiring the EOA to hold native gas. Circle Paymaster covers the delegation tx (and subsequent fills) in USDC on chains where it is deployed; on chains without the paymaster (e.g. BSC), Simplex falls back to a direct type-0x04 delegation tx and tops up the ERC-4337 EntryPoint deposit to cover `targetGasUnits` (default 3M) at current gas price.
58+
On startup, Simplex automatically delegates the filler's EOA to the `SolverAccount` contract via EIP-7702 — submitting a no-op UserOp through the bundler so the delegation lands without requiring the EOA to hold native gas. A paymaster covers the delegation tx (and subsequent fills) in stablecoins on chains where one is deployed: the Circle Paymaster (USDC) is tried first, then the `SimplexPaymaster` (USDC or USDT), which is live on Ethereum, Arbitrum, Base, Polygon, and BSC — see [Mainnet Contract Addresses](/developers/evm/contract-addresses/mainnet). On chains without any paymaster, Simplex falls back to a direct type-0x04 delegation tx and tops up the ERC-4337 EntryPoint deposit to cover `targetGasUnits` (default 3M) at current gas price.
5959

6060
```toml lineNumbers
6161
[[strategies]]
@@ -283,8 +283,8 @@ Create an API keypair in the Turnkey Dashboard under user details. The <code>sig
283283

284284
Solver selection requires each filler's EOA to be delegated to the `SolverAccount` contract. Simplex performs this automatically at startup via EIP-7702:
285285

286-
- **Primary path** — builds a no-op UserOperation with an attached EIP-7702 authorization and submits it through the configured bundler. When the Circle Paymaster is deployed on the chain and the filler holds ≥1 USDC, the paymaster pays gas in USDC (EIP-2612 permit) so the filler never needs native gas for delegation.
287-
- **Fallback** — if the bundler path fails or the chain has no paymaster (e.g. BSC), Simplex sends a direct type-0x04 delegation tx using the filler's native balance. On these chains it also keeps the ERC-4337 EntryPoint deposit topped up to cover `targetGasUnits` (default 3,000,000) at the current gas price.
286+
- **Primary path** — builds a no-op UserOperation with an attached EIP-7702 authorization and submits it through the configured bundler. When a paymaster is deployed on the chain — Circle Paymaster (USDC) preferred, then the `SimplexPaymaster` (USDC or USDT) — and the filler holds at least one whole token of a supported stablecoin, the paymaster pays gas in that stablecoin (via EIP-2612 permit, or a small capped approval for tokens without permit support such as BSC stables) so the filler never needs native gas for delegation.
287+
- **Fallback** — if the bundler path fails or the chain has no paymaster, Simplex sends a direct type-0x04 delegation tx using the filler's native balance. On paymaster-less chains it also keeps the ERC-4337 EntryPoint deposit topped up to cover `targetGasUnits` (default 3,000,000) at the current gas price.
288288

289289
No manual steps are required — delegation is idempotent and skipped if the EOA is already delegated to the correct contract.
290290

@@ -640,7 +640,7 @@ Switch to a premium RPC provider or reduce `maxConcurrentOrders`.
640640
---
641641

642642
### **HyperFX bid submission fails**
643-
Confirm `substratePrivateKey`, `hyperbridgeWsUrl`, and `bundlerUrl` are set in `[simplex]`, and that your Substrate account has BRIDGE tokens. On chains with the Circle Paymaster, make sure the filler's smart account holds 1 USDC so the paymaster can cover gas. On chains without the paymaster (e.g. BSC), the filler needs native balance — Simplex automatically tops up the ERC-4337 EntryPoint deposit to cover `targetGasUnits` (default 3M) at current gas price. If using MPC Vault, verify the client-signer container is running and reachable.
643+
Confirm `substratePrivateKey`, `hyperbridgeWsUrl`, and `bundlerUrl` are set in `[simplex]`, and that your Substrate account has BRIDGE tokens. On chains with a paymaster (Circle or Simplex), make sure the filler's smart account holds at least 1 USDC (or 1 USDT, for the `SimplexPaymaster`) so the paymaster can cover gas. On chains without any paymaster, the filler needs native balance — Simplex automatically tops up the ERC-4337 EntryPoint deposit to cover `targetGasUnits` (default 3M) at current gas price. If using MPC Vault, verify the client-signer container is running and reachable.
644644

645645
---
646646

evm/config.mainnet.toml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ USDC_TOKEN = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
2222
USDC_ORACLE = "0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6"
2323
USDT_TOKEN = "0xdAC17F958D2ee523a2206206994597C13D831ec7"
2424
USDT_ORACLE = "0x3E7d1eAB13ad0104d2750B8863b489D65364e32D"
25+
SIMPLEX_PAYMASTER = "0xD4340d7466e040626383cb9cda9307ba8E081149"
2526

2627
[1.uint]
2728
MAX_FEE = 500
@@ -56,6 +57,7 @@ USDC_TOKEN = "0xaf88d065e77c8cC2239327C5EDb3A432268e5831"
5657
USDC_ORACLE = "0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3"
5758
USDT_TOKEN = "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9"
5859
USDT_ORACLE = "0x3f3f5dF88dC9F13eac63DF89EC16ef6e7E25DdE7"
60+
SIMPLEX_PAYMASTER = "0x7281Bccb4f0BCE44F3B8542d1fC5e51c2F5fC08C"
5961

6062
[42161.uint]
6163
DEFAULT_FEE = 500
@@ -114,10 +116,12 @@ CONSENSUS_ROUTER = "0xfb9D64c710298DF88B959d3248a8C3eE69f71f05"
114116
BANDWIDTH_MANAGER = "0x6A67533Ce73756FfaB17c05578A5FBBa5d9B2d8d"
115117
HANDLER_V2 = "0x2a18AB35DEa43474882E05A661e2F20fe89c0535"
116118
SP1_VERIFIER = "0x70303aA3434e13B64F150CE72bad43e13c8eD186"
117-
SIMPLEX_PAYMASTER = "0x18654D0319ffDC18c200c90C1A666AcbDf0E3762"
119+
SIMPLEX_PAYMASTER = "0x15b3B03C870c7ef252029c35A12d3b339F5c8d7f"
118120
NATIVE_ORACLE = "0x71041dddad3595F9CEd3DcCFBe3D1F4b0a16Bb70"
119121
USDC_TOKEN = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
120122
USDC_ORACLE = "0x7e860098F58bBFC8648a4311b374B1D669a2bc6B"
123+
USDT_TOKEN = "0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2"
124+
USDT_ORACLE = "0xf19d560eB8d2ADf07BD6D13ed03e1D11215721F9"
121125

122126
[8453.uint]
123127
DEFAULT_FEE = 3000
@@ -146,7 +150,7 @@ CONSENSUS_ROUTER = "0xfb9D64c710298DF88B959d3248a8C3eE69f71f05"
146150
BANDWIDTH_MANAGER = "0x6A67533Ce73756FfaB17c05578A5FBBa5d9B2d8d"
147151
HANDLER_V2 = "0x2a18AB35DEa43474882E05A661e2F20fe89c0535"
148152
SP1_VERIFIER = "0x70303aA3434e13B64F150CE72bad43e13c8eD186"
149-
SIMPLEX_PAYMASTER = "0xCcE8B5f5C453e1Ff1acd227585d9e680c012462c"
153+
SIMPLEX_PAYMASTER = "0xeD02f9f0df8F562B89cC5b25867Ad3C2d61252A9"
150154
NATIVE_ORACLE = "0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE"
151155
USDC_TOKEN = "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"
152156
USDC_ORACLE = "0x51597f405303C4377E36123cBc172b13269EA163"
@@ -234,6 +238,7 @@ USDC_TOKEN = "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"
234238
USDC_ORACLE = "0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7"
235239
USDT_TOKEN = "0xc2132D05D31c914a87C6611C10748AEb04B58e8F"
236240
USDT_ORACLE = "0x0A6513e40db6EB1b165753AD52E80663aeA50545"
241+
SIMPLEX_PAYMASTER = "0xe99acFe0f5fC4C8ea54A187D8D3b05f136150095"
237242

238243
[137.uint]
239244
MAX_FEE = 500

evm/script/BaseScript.sol

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ abstract contract BaseScript is Script, Config {
9393

9494
/// @notice Abstract deploy function to be implemented by child contracts
9595
/// @dev This function should contain all deployment logic
96-
/// @dev Will be called within a broadcast context (vm.startBroadcast/stopBroadcast)
96+
/// @dev Called with a broadcast already started. It must end with the broadcast
97+
/// stopped (vm.stopBroadcast) — an open broadcast makes the multi-chain
98+
/// path revert on the next vm.createSelectFork.
9799
function deploy() internal virtual;
98100
}

evm/script/DeploySimplexPaymaster.s.sol

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ contract DeployScript is BaseScript {
6363
console.log(" Registered USDT:", tokens[1], "oracle:", address(oracles[1]));
6464
}
6565

66+
vm.stopBroadcast();
6667
config.set("SIMPLEX_PAYMASTER", address(paymaster));
6768

6869
console.log("");

sdk/packages/sdk/src/configs/chain.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,7 @@ export const chainConfigs: Record<number, ChainConfigData> = {
344344
Permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
345345
EntryPointV08: "0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108",
346346
CirclePaymaster: "0x0578cFB241215b77442a541325d6A4E6dFE700Ec",
347+
SimplexPaymaster: "0xD4340d7466e040626383cb9cda9307ba8E081149",
347348
Usdt0Oft: "0x6C96dE32CEa08842dcc4058c14d3aaAD7Fa41dee",
348349
},
349350
rpcEnvKey: "ETH_MAINNET",
@@ -398,7 +399,7 @@ export const chainConfigs: Record<number, ChainConfigData> = {
398399
Calldispatcher: "0xc71251c8b3e7b02697a84363eef6dce8dfbdf333",
399400
Permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
400401
EntryPointV08: "0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108",
401-
SimplexPaymaster: "0xCcE8B5f5C453e1Ff1acd227585d9e680c012462c",
402+
SimplexPaymaster: "0xeD02f9f0df8F562B89cC5b25867Ad3C2d61252A9",
402403
// "Usdt0Oft": Not available on BSC
403404
},
404405
rpcEnvKey: "BSC_MAINNET",
@@ -456,6 +457,7 @@ export const chainConfigs: Record<number, ChainConfigData> = {
456457
Permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
457458
EntryPointV08: "0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108",
458459
CirclePaymaster: "0x0578cFB241215b77442a541325d6A4E6dFE700Ec",
460+
SimplexPaymaster: "0x7281Bccb4f0BCE44F3B8542d1fC5e51c2F5fC08C",
459461
Usdt0Oft: "0x14E4A1B13bf7F943c8ff7C51fb60FA964A298D92",
460462
},
461463
rpcEnvKey: "ARBITRUM_MAINNET",
@@ -510,7 +512,7 @@ export const chainConfigs: Record<number, ChainConfigData> = {
510512
Permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
511513
EntryPointV08: "0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108",
512514
CirclePaymaster: "0x0578cFB241215b77442a541325d6A4E6dFE700Ec",
513-
SimplexPaymaster: "0x18654D0319ffDC18c200c90C1A666AcbDf0E3762",
515+
SimplexPaymaster: "0x15b3B03C870c7ef252029c35A12d3b339F5c8d7f",
514516
AerodromeRouter: "0xcF77a3Ba9A5CA399B7c97c74d54e5b1Beb874E43",
515517
UniswapV4PositionManager: "0x7c5f5a4bbd8fd63184577525326123b519429bdc",
516518
UniswapV4PoolManager: "0x498581ff718922c3f8e6a244956af099b2652b2b",
@@ -573,6 +575,7 @@ export const chainConfigs: Record<number, ChainConfigData> = {
573575
Permit2: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
574576
EntryPointV08: "0x4337084D9E255Ff0702461CF8895CE9E3b5Ff108",
575577
CirclePaymaster: "0x0578cFB241215b77442a541325d6A4E6dFE700Ec",
578+
SimplexPaymaster: "0xe99acFe0f5fC4C8ea54A187D8D3b05f136150095",
576579
Usdt0Oft: "0x6BA10300f0DC58B7a1e4c0e41f5daBb7D7829e13",
577580
},
578581
rpcEnvKey: "POLYGON_MAINNET",

0 commit comments

Comments
 (0)