This proposal extends ERC-7204 compliant smart contract wallets with an off-chain signature flow for token transfers, allowing wallet owners to delegate transfers via typed-data signatures presented by any relayer. The extension defines a canonical EIP-712 schema, nonce accounting, and execution requirements for compliant implementations.
Unlike token-native standards, this extension operates at the wallet level, enabling gasless transfers for any ERC-20 token without requiring token contract modifications.
Motivation
ERC-7204 enables programmable token management directly in smart contract wallets but requires on-chain transactions for every transfer. This creates friction for gasless use cases such as red packets, claimable airdrops, and relayer-sponsored transfers.
Traditional off-chain authorization standards like EIP-3009 require support from the token contract itself. Many legacy and new tokens do not implement these, limiting gasless usability.
By implementing authorization at the ERC-7204 compliant wallet level, this extension enables gasless transfers for all ERC-20 tokens managed by the wallet, significantly expanding the reach of gasless applications.
A standardized off-chain transfer signature reduces bespoke integrations and paves the way for widespread adoption of token-based payments in Web3.
Specification
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119 and RFC 8174.
Compliant ERC-7204 implementations that support this extension MUST include the following functions and behavior.
Interface
interface IERC8188 {
function tokenTransferNonce(address asset, address to) external view returns (uint256);
function tokenTransferWithSig(
address asset,
address to,
uint256 value,
uint256 deadline,
bytes calldata signature
) external returns (bool success);
tokenTransferNonceMUST return a monotonically increasing nonce scoped to(asset, to).tokenTransferWithSigMUST verify the signature viaisValidSignature, reject expired signatures (unlessdeadline == 0), increment the nonce before performing the transfer, and execute the same logic astokenTransferin ERC-7204.
Implementations MUST support wallets that validate signatures through ERC-1271. Wallets MAY wrap signatures but the module MUST unwrap them prior to verification.
Typed Data
Compliant implementations MUST use the following EIP-712 typed data structure. The wallet field identifies the smart contract wallet that will execute the transfer.
| Function | Primary Type | Fields |
|---|---|---|
tokenTransferWithSig |
TokenTransferWithSig |
wallet, asset, to, value, nonce, deadline |
Every permit MUST use the EIP-712 domain:
name = "TokenManage Transfer"version = "1"chainIdequal to the executing chainverifyingContract = address(this)
Nonce Semantics
tokenTransferNonceMUST be scoped per(asset, to).
Each WithSig function MUST increment its nonce immediately before state changes and MUST revert on signature reuse.
Execution Requirements
Implementations MUST:
- Treat
deadline = 0as non-expiring; otherwise enforceblock.timestamp <= deadline. - Recover the signer from the EIP-712 digest. Validate the digest using ERC-1271 on the wallet address. The recovered/validated signer MUST be authorized to act on behalf of the wallet (typically its owner).
- Verify the provided nonce matches the current stored nonce for the corresponding scope.
- Increment the scoped nonce before invoking the underlying ERC-7204 function.
- Emit the same events as the underlying ERC-7204 functions.
- Revert if signature validation fails, inputs mismatch, or deadlines are exceeded.
Wallets MAY offer helper wrappers, but they MUST NOT alter the semantics described above.
Rationale
- Reusing the existing ERC-7204 entry points keeps events and accounting compatible with current deployments.
- This wallet-level approach supports gasless transfers for all ERC-20 tokens, including those without native off-chain authorization mechanisms.
Backwards Compatibility
Existing ERC-7204 implementations remain valid. Clients SHOULD feature-detect permit support by checking for IERC8188 via ERC-165 or probing the new function selectors.