Repository navigation
[evm, sdk, simplex]: gateway release 4 and the official ERC-4337 and Permit2 interfaces - #1385
Merged
Merged
Conversation
…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
force-pushed
the
account-abstraction-contracts
branch
from
October 10, 2026 09:44
e2c5350 to
57793c2
Compare
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.
Wizdave97
approved these changes
Oct 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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_gatewaycarryingupgradeToAndCall(newImpl, migrate()), which the deploy script prints. The paymasters useupgrade_paymasterwithmigrate()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/sdk3.0.0.The contracts also stop declaring their own third-party interfaces. The EntryPoint ones come from
@account-abstraction/contracts0.9.0-rc.1. Permit2's come fromUniswap/permit2pinned atcc56ad0, because its Solidity is not published to npm. SimplexPaymaster keeps OpenZeppelin'sIEntryPoint, which its base contract requires, and readsgetDepositInfothrough the package'sIStakeManager.Two smaller changes ride along. The gateway gains an
entrypoint()getter.fillOrderchecks 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.
0xc2094F7094623fbA8751C58061Dd9Fe26CE5E59a0xaAd062555800a97Af062795189e32a3CBd0456120xF159b72f168bceb982e591176d81ca6568d008Dd0x022a168d64D85007ED8C7F08A672fd997e0C4bdD0x5f925b8870f730B3feb8BdDAEd7Ad088c62a32C2The 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.