Skip to content

This page is the ABI reference for UserProxyFactoryV4 and UserProxyV4. It is separate from the Intents ABI reference, whose selectors, contracts, and order types are not interchangeable with the User Proxy.

Chain Chain ID UserProxyFactoryV4 UserProxyV4 implementation
Base 8453 0x9944fE0d7a40E55a63aCb2d3d5DD70B7950A6540 0xee28b3554639F27417043EF167A41091B593c8c4
Arbitrum One 42161 0x9944fE0d7a40E55a63aCb2d3d5DD70B7950A6540 0xee28b3554639F27417043EF167A41091B593c8c4
Robinhood Chain 4663 0x9944fE0d7a40E55a63aCb2d3d5DD70B7950A6540 0xee28b3554639F27417043EF167A41091B593c8c4

The canonical Permit2 address on these deployments is:

0x000000000022D473030F116dDEE9F6B43aC78BA3

The User Proxy is not deployed on BNB Smart Chain 56. BNB is present in the Intents deployment list, but that is a different protocol and does not extend the proxy’s chain list.

Item Value
NATIVE 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
ACTION_EXECUTE 0x01
AGENT_ORDER_TYPEHASH() getter 0x5b56c616 selector
EIP-712 name AgentSwap UserProxy
EIP-712 version 2

The EIP-712 version is "2", not "4". domainSeparator() returns the proxy domain separator. Use the proxy’s domain for AgentOrder; it is not the Permit2 witness domain used by Intents.

Selector Signature
0x1cff614d predictProxy(address)
0x4c96a389 deploy(address)
0x5c60da1b implementation()
0xc1a9a508 proxyOf(address)
Selector Signature
0x19ab453c init(address)
0x7ee8ff6e execute(address,address,address,uint256,address,uint256,bytes)
0x4cb75e2e executePermit2In(((address,uint256),uint256,uint256),bytes,address,address,address,uint256,bytes)
0xca1f43a9 grantAgent(address,uint64,uint32,uint8,address[],uint256[])
0x7da6ac0d revokeAgent(address)
0x950301fa setAgentCap(address,address,uint256)
0xcfb47d19 executeAsAgent((address,address,address,uint256,address,uint256,uint256,uint256),bytes,address,bytes)
0xf514d6e5 policyOf(address)
0x27e2f125 agentTokenInfo(address,address)
0xb352cf8e hashAgentOrder((address,address,address,uint256,address,uint256,uint256,uint256))
0x353eea55 isAgentNonceUsed(address,uint256)
0x5b56c616 AGENT_ORDER_TYPEHASH()
0xf698da25 domainSeparator()
0x84b0196e eip712Domain()
0x8da5cb5b owner()
0xa0cf0aea NATIVE()
0x6afdd850 PERMIT2()
0xf05b55ef ACTION_EXECUTE()

The proxy also declares receive() external payable {}, which has no selector and so has no row above. It is what lets a router refund native ETH to the proxy mid-swap; sweepNative is how the owner retrieves any that stays. | 0x1be19560 | sweepToken(address) | | 0xab803a76 | sweepNative() | | 0x78c093cf | sweepNative(address) |

0xf05b55ef is the selector for the public ACTION_EXECUTE() getter. The typehash getter selector is a typed-data lookup, not an entry-point selector.

Event Fields
Initialized address indexed owner
ProxyDeployed address indexed user, address indexed proxy
Executed address indexed router, address indexed tokenIn, address indexed tokenOut, uint256 amountIn, uint256 amountOut
ExecutedV2 address indexed router, address indexed spender, address indexed pull, bool usedPermit2, address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOut
AgentGranted address indexed agent, uint64 gen, uint64 expiry, uint32 epochLen, uint8 actionMask
AgentRevoked address indexed agent, uint64 gen
AgentCapSet address indexed agent, uint64 gen, address indexed tokenIn, uint256 cap
ExecutedAsAgent address indexed agent, address indexed router, address indexed relayer, address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOut
Error Signature
AlreadyInitialized AlreadyInitialized()
NotOwner NotOwner()
SlippageExceeded SlippageExceeded(uint256 received,uint256 minOut)
RouterCallFailed RouterCallFailed(bytes returnData)
InvalidSignature InvalidSignature()
NonceAlreadyUsed NonceAlreadyUsed()
SameToken SameToken()
UnexpectedEthValue UnexpectedEthValue(uint256 sent)
EthValueMismatch EthValueMismatch(uint256 sent,uint256 expected)
NativeNotSupportedInOrder NativeNotSupportedInOrder()
InsufficientOwnerDelivery InsufficientOwnerDelivery(uint256 delivered,uint256 required)
Permit2AmountOverflow Permit2AmountOverflow(uint256 amount)
InvalidAgent InvalidAgent()
InvalidToken InvalidToken()
InvalidExpiry InvalidExpiry()
InvalidEpochLen InvalidEpochLen()
LengthMismatch LengthMismatch()
PolicyInactive PolicyInactive()
ActionNotAllowed ActionNotAllowed()
TokenNotAllowed TokenNotAllowed()
AgentOrderExpired AgentOrderExpired()
CapExceeded CapExceeded(uint256 used,uint256 amount,uint256 cap)
MinOutZero MinOutZero()
Reentrancy Reentrancy()
AmountInZero AmountInZero()
SpenderNotAllowed SpenderNotAllowed()
ZeroAddress ZeroAddress() (factory)