Skip to content

[evm, sdk, simplex]: gateway release 4 and the official ERC-4337 and Permit2 interfaces - #1385

Merged
seunlanlege merged 8 commits into
mainfrom
account-abstraction-contracts
Oct 10, 2026
Merged

seunlanlege merged 8 commits into
mainfrom
account-abstraction-contracts

Conversation

@seunlanlege

@seunlanlege seunlanlege commented Oct 10, 2026 •

Copy link
Copy Markdown
Member

IntentGatewayV2 now lands proxies at version 4, the release that binds solver selection to the EntryPoint v0.9 UserOperation from #1375. Storage did not change, so migrate() only moves a version-3 proxy to 4. It takes no arguments and refuses any proxy that is not exactly one version behind. The old v2 path is removed, because every live proxy (nine mainnet chains, BSC testnet and Amoy) is already at 3.

Governance upgrades each gateway with execute_on_gateway carrying upgradeToAndCall(newImpl, migrate()), which the deploy script prints. The paymasters use upgrade_paymaster with migrate() as before.

The SDK now requires gateway release 4. A filler on this SDK refuses a gateway until it is upgraded, and a filler on the old SDK refuses it afterwards. So the SDK release and the gateway upgrades go out together. On testnet chains it also accepts release 3, because the testnet gateways already run the new solver selection but still report 3. The SDK ships as @hyperbridge/sdk 3.0.0.

The contracts also stop declaring their own third-party interfaces. The EntryPoint ones come from @account-abstraction/contracts 0.9.0-rc.1. Permit2's come from Uniswap/permit2 pinned at cc56ad0, because its Solidity is not published to npm. SimplexPaymaster keeps OpenZeppelin's IEntryPoint, which its base contract requires, and reads getDepositInfo through the package's IStakeManager.

Two smaller changes ride along. The gateway gains an entrypoint() getter. fillOrder checks each leg just before filling it, and a bad later leg still reverts the whole fill.

The gateway, SolverAccount, paymaster and Permit2 forge suites pass on mainnet, BSC and Base forks (498 passed, 1 skipped), including an upgrade of the live mainnet proxy to 4. The SDK codec and simplex posting tests pass.

The new contracts are deployed on mainnet and source-verified on every chain's explorer. The proxies keep their addresses and still run their previous implementations until governance upgrades them.

Contract Address Chains
SimplexPaymaster implementation 0xc2094F7094623fbA8751C58061Dd9Fe26CE5E59a Ethereum, Arbitrum, Base, BSC, Polygon
SolverAccount 0xaAd062555800a97Af062795189e32a3CBd045612 Ethereum, Arbitrum, Base, BSC, Polygon, Polkadot Hub
IntentGatewayV2 implementation 0xF159b72f168bceb982e591176d81ca6568d008Dd Ethereum, Arbitrum, Base, BSC, Polygon, Polkadot Hub
IntrinsicModule 0x022a168d64D85007ED8C7F08A672fd997e0C4bdD Ethereum, Arbitrum, Base, BSC, Polygon, Polkadot Hub
ExtrinsicModule 0x5f925b8870f730B3feb8BdDAEd7Ad088c62a32C2 Ethereum, Arbitrum, Base, BSC, Polygon, Polkadot Hub

The same addresses also exist on Optimism, Gnosis and Soneium, but those chains are being dropped and their proxies will not be upgraded.

The SDK's mainnet config, which simplex reads, now points at the new SolverAccount on those six chains, with EntryPoint v0.9 where one is deployed. The indexer recognises the new account alongside the previous one, so solvers keep counting while they re-delegate. The docs' mainnet address page shows the new SolverAccount and implementations.

BRIDGE (0x5b0c50fDd52ECC0d4c682c441eaBaD41FfDEABBB) becomes a supported token on BSC and Polygon. The SDK's chain config lists it, simplex ships it as a registry symbol, and the indexer tracks solver inventory in it.

…Permit2 interfaces

IntentGatewayV2 lands proxies at VERSION 4. migrate() takes a proxy from
3 to 4 and writes nothing else; it runs only on a proxy one version
behind. The deploy script builds that init data for execute_on_gateway.
The gateway exposes entrypoint(), and fillOrder checks each leg just
before filling it. IIntentGatewayV2 no longer declares migrate.

The SDK requires gateway release 4, so it ships with the gateway upgrades.

evm/ takes IEntryPoint and IStakeManager from
@account-abstraction/contracts 0.9.0-rc.1 and ISignatureTransfer and
IAllowanceTransfer from Uniswap/permit2 instead of declaring its own.
SimplexPaymaster keeps OpenZeppelin's IEntryPoint and makes its v0.8
calls explicit.
The SimplexPaymaster implementation, SolverAccount, and the
IntentGatewayV2 implementation and modules from this branch are deployed
and source-verified on mainnet. The proxies still run their previous
implementations until governance upgrades them.
The SDK's mainnet config uses SolverAccount 0xaAd0...5612 on Ethereum,
BSC, Arbitrum, Base, Polygon and Polkadot Hub, and EntryPoint v0.9 on the
first five, the EntryPoint that account validates against. Optimism,
Gnosis and Soneium keep their previous values. Simplex reads both from
this config.

The indexer lists the new account first and 0x77c3...90cC second on its
five mainnet chains, and drops 0xd553...9279.
On Ethereum, Arbitrum, Base, BSC, Polygon and Polkadot Hub, the mainnet
page lists SolverAccount 0xaAd0...5612, the IntentGatewayV2
implementation 0xF159...08Dd and, where there is a paymaster, the
SimplexPaymaster implementation 0xc209...E59a. Optimism, Gnosis and
Soneium are unchanged.
A major version: the SDK requires gateway release 4 and refuses every
release-3 gateway.
@seunlanlege
seunlanlege force-pushed the account-abstraction-contracts branch from e2c5350 to 57793c2 Compare October 10, 2026 09:44
seunlanlege and others added 3 commits October 10, 2026 09:58
The testnet gateways already run the userOpHash solver selection that
release 4 brings to mainnet, but still report version 3, so the SDK
refused them. assertGatewayRelease and supportsRateFills now take the
destination state machine id: a chain in TESTNET_CHAINS accepts 3 or 4,
and mainnet still requires 4.
@seunlanlege
seunlanlege merged commit b1da65a into main Oct 10, 2026
7 checks passed
@seunlanlege
seunlanlege deleted the account-abstraction-contracts branch October 10, 2026 11:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants