EIP-7702 authorizations¶
EIP-7702 lets an externally owned account (EOA) delegate its execution to a smart contract. The account owner signs an authorization tuple naming a delegate contract. When the tuple is applied on-chain, the EOA's code becomes the 23-byte delegation designator 0xef0100 || delegateAddress, and calls to the EOA from then on run the delegate's code in the account's context. The account keeps its address, balance, and nonce — it gains contract behavior without migrating to a new address.
Photon relays these for you. Pass signed tuples in the authorizationList field of Submit a transaction (or the tx object of Submit and wait), and the relayer includes them in the transaction it broadcasts. The relayer pays the gas — the authority account needs no native token to become delegated.
Authorization tuple format¶
Each entry in authorizationList is an object:
| Field | Type | Description |
|---|---|---|
chainId |
number | Chain the authorization is valid for. 0 is a wildcard accepted on every EIP-7702 chain. |
address |
string | Delegate contract address: 0x-prefixed, 40 hex characters. |
nonce |
number | Authority nonce the tuple is valid for — see the nonce rule below. |
r |
string | Signature r as a 0x-prefixed hex quantity (at most 32 bytes). |
s |
string | Signature s as a 0x-prefixed hex quantity (at most 32 bytes). |
yParity |
number | Signature parity: 0 or 1. Any other value is rejected. |
v |
number | Optional legacy field. Accepted for compatibility and ignored — yParity is authoritative. |
The signed payload is keccak256(0x05 || rlp([chainId, address, nonce])). Wallet libraries that support EIP-7702 produce this signature for you.
The nonce rule¶
An authorization is only valid if its nonce equals the authority's account nonce at the moment the tuple is applied.
Warning
Photon's relayer sends the transaction, so the authority's own nonce is not consumed by it. Sign the tuple with the authority's current nonce — do not add 1. The +1 adjustment only applies when an EOA sponsors its own type-0x04 transaction, because that transaction increments the sender's nonce before the authorization list is processed.
Concretely: if the authority's account nonce is 7 and Photon relays, sign the tuple with nonce: 7.
Submit an authorization¶
Requires an api-key header — Get API access.
curl -X POST https://photon.example.com/api/submit-tx \
-H "api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
"callData": "0xb61d27f60000000000000000000000003dbe34f2c21b3b2980d4dc53f3c7e51e39663f49",
"chainId": 84532,
"authorizationList": [
{
"chainId": 84532,
"address": "0xd6CEDDe84be40893d153Be9d467CD6aD37875a28",
"nonce": 7,
"r": "0x1b5e1e14fc2b3b1b96b56b8ec8c1b3b1b96b56b8ec8c1b3b1b96b56b8ec8c1b3",
"s": "0x0b5e1e14fc2b3b1b96b56b8ec8c1b3b1b96b56b8ec8c1b3b1b96b56b8ec8c1b3",
"yParity": 1
}
]
}'
const res = await fetch("https://photon.example.com/api/submit-tx", {
method: "POST",
headers: { "api-key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
to: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", // the authority EOA
callData: "0xb61d27f60000000000000000000000003dbe34f2c21b3b2980d4dc53f3c7e51e39663f49",
chainId: 84532,
authorizationList: [
{
chainId: 84532,
address: "0xd6CEDDe84be40893d153Be9d467CD6aD37875a28", // the delegate
nonce: 7, // authority's CURRENT nonce
r: "0x1b5e1e14fc2b3b1b96b56b8ec8c1b3b1b96b56b8ec8c1b3b1b96b56b8ec8c1b3",
s: "0x0b5e1e14fc2b3b1b96b56b8ec8c1b3b1b96b56b8ec8c1b3b1b96b56b8ec8c1b3",
yParity: 1,
},
],
}),
});
const body = await res.json();
Response — 201 Created:
{
"success": true,
"data": {
"txId": "68fa3450539a3c9d28bbca33",
"estimatedCostUSD": 0.02
},
"timestamp": "2026-07-29T09:15:12.345Z"
}
Once the transaction executes, the authority's on-chain code is exactly 0xef0100 followed by the delegate address (23 bytes). You can verify a delegation at any time by reading the account's code and checking for that prefix.
Constraints¶
authorizationListis not allowed withtransactionType: "flash-blocks"— the submission is rejected with a validation error.- Transactions carrying an
authorizationListnever join a Multicall batch; they always relay solo, even whenshouldBatchInMulticallis set. yParitymust be0or1;address,r, andsmust be well-formed0x-prefixed hex, or the request fails validation. See Error codes.
Chain availability¶
EIP-7702 is an EVM feature, supported on:
| Network | Chain ID |
|---|---|
| Ethereum | 1 |
| OP Mainnet | 10 |
| Base | 8453 |
| Arbitrum One | 42161 |
| Sepolia | 11155111 |
| OP Sepolia | 11155420 |
| Base Sepolia | 84532 |
| Arbitrum Sepolia | 421614 |
Solana does not support EIP-7702. For what is relayable right now, see Supported networks.