User Proxy Reference
This page is the ABI reference for the V6 UserProxyFactoryV6 and UserProxyV6 deployment listed
on the intent addresses page. This page is separate from the
Intents ABI reference, whose selectors, contracts, and order types are not
interchangeable with the User Proxy.
Chains and addresses
Section titled “Chains and addresses”| Chain | Chain ID | UserProxyFactoryV6 |
UserProxyV6 implementation |
|---|---|---|---|
| Base | 8453 |
0xc1660e4BbC825f8367dA92b60dccc17E4E10bc26 |
0x6E4065a3E864Acf36BfaB95cEE31713b48F8dBd6 |
| Arbitrum One | 42161 |
0xc1660e4BbC825f8367dA92b60dccc17E4E10bc26 |
0x6E4065a3E864Acf36BfaB95cEE31713b48F8dBd6 |
| BNB Smart Chain | 56 |
0xc1660e4BbC825f8367dA92b60dccc17E4E10bc26 |
0x6E4065a3E864Acf36BfaB95cEE31713b48F8dBd6 |
| Robinhood Chain | 4663 |
0xc1660e4BbC825f8367dA92b60dccc17E4E10bc26 |
0x6E4065a3E864Acf36BfaB95cEE31713b48F8dBd6 |
| Arc | 5042 |
0xc1660e4BbC825f8367dA92b60dccc17E4E10bc26 |
0x6E4065a3E864Acf36BfaB95cEE31713b48F8dBd6 |
For the separate swap paths, the canonical Permit2 address is:
0x000000000022D473030F116dDEE9F6B43aC78BA3Constants and domain
Section titled “Constants and domain”| Item | Value |
|---|---|
NATIVE |
0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE |
ACTION_EXECUTE |
0x01 |
AGENT_ORDER_TYPEHASH() getter |
0x5b56c616 selector |
| EIP-712 name | AgentSwap UserProxy |
| EIP-712 version | 5 |
domainSeparator() returns the proxy domain separator. Use the proxy’s domain for AgentOrder.
The intent functions use (O) for the complete 12-field IntentOrder tuple:
(address owner,address recipient,address tokenIn,uint256 amountIn, address tokenOut,uint256 startAmountOut,uint256 endAmountOut, uint256 startTime,uint256 decayEndTime,uint256 endTime, bytes32 appData,uint256 nonce)Function selectors
Section titled “Function selectors”Factory
Section titled “Factory”| Selector | Signature |
|---|---|
0x1cff614d |
predictProxy(address) |
0x4c96a389 |
deploy(address) |
0x5c60da1b |
implementation() |
0xc1a9a508 |
proxyOf(address) |
0xab221a76 |
settler() |
| 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) |
0xda0f2deb |
executeAsAgent((address,uint64,address,address,uint256,address,uint256,uint256,uint256),bytes,address,bytes) |
0xf514d6e5 |
policyOf(address) |
0x27e2f125 |
agentTokenInfo(address,address) |
0xd5669740 |
hashAgentOrder((address,uint64,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() |
0x97133fab |
allowedSettler(address) |
0xef276f55 |
allowSettler(address,bool) |
0xd8d75058 |
pullForIntent((O),bytes) |
0x08c488c2 |
isIntentAuthorized((O),bytes) |
0xc7df4069 |
hashIntentOrder((O)) |
0x2a7dacec |
invalidateOwnerNonces(uint256,uint256) |
0x208a0d46 |
killOrders(bytes32[]) |
0x1914ddd6 |
isOwnerNonceUsed(uint256) |
0x4626e43d |
isOrderKilled(bytes32) |
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.
Events
Section titled “Events”| 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 |
SettlerAllowed |
address indexed settler, bool allowed |
OwnerNoncesInvalidated |
uint256 indexed word, uint256 mask |
OrderKilled |
bytes32 indexed id |
PulledForOwnerIntent |
address indexed pulledTo, bytes32 indexed orderHash, address tokenIn, uint256 amountIn |
PulledForAgentIntent |
address indexed agent, address indexed pulledTo, bytes32 indexed orderHash, address tokenIn, uint256 amountIn, uint256 debit |
Custom errors
Section titled “Custom errors”| 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() |
OwnerNonceUsed |
OwnerNonceUsed(uint256 nonce) |
DebitExceedsSignedAmount |
DebitExceedsSignedAmount(uint256 debit,uint256 signed) |
EmptyNonceMask |
EmptyNonceMask() |
EmptyOrderList |
EmptyOrderList() |
RecipientNotOwner |
RecipientNotOwner() |
AuthorizationExpired |
AuthorizationExpired(uint64 deadline) |
AuthorizationExpiresBeforeOrderOpens |
AuthorizationExpiresBeforeOrderOpens(uint64 deadline,uint256 startTime) |
PolicyExpiresBeforeOrderOpens |
PolicyExpiresBeforeOrderOpens(uint64 expiry,uint256 startTime) |
AuthOrderMismatch |
AuthOrderMismatch() |
ZeroAddress |
ZeroAddress() (factory) |
NotSettler |
NotSettler(address caller,address expected) |
BadSettler |
BadSettler(address settlerAddr) |