EIP-3074 allows EOAs to delegate control to specified contracts, thereby gaining rich execution capabilities similar to contracts. Before EIP-3074, an EOA could only perform one operation per transaction, such as approving an ERC20 token or making a swap on Uniswap. Post-EIP-3074, an EOA can complete multiple operations in a single transaction, enabling previously unimaginable use cases. In essence, EIP-3074 significantly improves the user experience and reshapes familiar authorization methods while enhancing security.
Moreover, with EIP-3074, EOAs no longer need to send transactions on-chain themselves, thus eliminating the need to first acquire ETH to pay for transaction fees.
Contracts that can gain control of EOAs are called Invoker contracts. Not just any contract can gain control; the EOA must sign with its private key, specifying which Invoker contract and which operations it authorizes the Invoker to perform.
The process typically involves:
Alice signs with her EOA private key, specifying the Invoker contract and authorized operations.
Alice submits the signed content and signature to a Relayer.
The Relayer submits the transaction on-chain to the Invoker contract.
The Invoker verifies the signature and, upon validation, executes the operations as Alice’s EOA, such as approving USDC, swapping assets on Uniswap, and using some USDC to pay the Relayer as a fee.
Note: The Relayer is optional; Alice can submit the signed content and signature on-chain herself.
The Invoker executes operations as if it has limited control of Alice’s EOA. However, the EOA’s nonce does not increase after execution, meaning the same signature could potentially be reused as long as the EOA’s nonce remains unchanged. Therefore, the Invoker must implement its nonce mechanism to prevent replay attacks.
Learn More
For a detailed introduction to the workings of EIP-3074, please refer to:https://medium.com/taipei-ethereum-meetup/eip3074-%E7%B0%A1%E4%BB%8B-2a880b918234
Batchcall allows users to combine multiple transactions into one, saving the process of multiple authorization signatures and some gas costs. Note that this requires DApps to support Batchcall functionality, such as the currently promoted EIP-5792. Without such support, DApps will prompt a separate transaction for each operation, treating the user as a regular EOA.
For more information on EIP-5792, please refer to: EIP-5792.
Session Key
Users can delegate operations to a third party under specific conditions using a session key. In the example below, the delegate key represents the authorized third party, while the access policy defines the operational constraints, such as limiting actions to Uniswap, capping transfers at 1 ETH per day, or setting an authorization expiration date. These conditions are designed and checked within the Invoker contract. Once the checks pass, the third party can perform operations as the user’s EOA.
For instance, a Telegram Bot could be granted specific permissions to execute operations on behalf of the user’s EOA.
Native ETH Permit
If the conditions are met (i.e., the permit signature is valid), operations can be executed as the authorizing EOA, enabling native ETH Permit functionality.
Limit Order
Users can set limit order conditions, which, once met, allow operations to be executed as the user’s EOA. This includes approving relevant digital assets for a DEX and swapping assets on the DEX. Compared to the limit order functionality provided by DEXs themselves, users do not need to pre-approve assets for the DEX.
For example, when Alice completes a limit order, the approval is executed simultaneously, eliminating the need for prior approval.
By designing the conditions more generally, an Intent contract can be created: as long as the specified conditions are met, anyone can execute the intent on behalf of the user’s EOA.
Social Recovery
If a user loses their EOA private key, they can use the previously signed EIP-3074 authorization, along with signatures from authorized parties (e.g., Husband and Trust Agent), to transfer all assets from the EOA. This recovers the (transferable) assets, not the account control. Once the EOA private key is lost, the EOA cannot be used again.
EIP-3074 has the potential to improve or even replace current approve/permit methods. DApps currently operate under the assumption that users are EOAs: users must pre-approve a sufficiently large amount of assets to the DApp contract to avoid staying online constantly and repeatedly approving transactions. This significantly improves the user experience.
For example, conditional applications such as limit orders or DCA require users to pre-approve a large amount of assets so the DApp can execute operations when conditions are met, potentially multiple times.
However, this requires users to trust the DApp or avoid approving fake DApps, and they must be able to remove approvals in real-time.
Recent permit models like EIP-2612 or the non-native Permit2 aim to improve the approve model’s user experience and security. Users do not need to approve large amounts of assets for each DApp contract; instead, they can authorize DApps to withdraw a specified amount of assets within a specified time by signing once. This greatly reduces the attack surface and enhances the user experience.
△ Users only need to sign off-chain, and they can specify the asset amount and validity period, providing a better user experience and security than approve.
However, in reality, not just approve, the permit mode is still frequently exploited as a scam method. Victims mistakenly sign permits they believe are for DApp use but are actually giving authorization to attackers.
△ When users sign a permit, they can only see who they are authorizing but do not know what operations will be performed in conjunction with it.
Note: The current permit design is incompatible with DApps requiring repetitive operations, such as DCA or other periodic payment applications. This is because the permit has an anti-replay mechanism, so once a transaction is completed, the same permit cannot be used again. Essentially, users need to pre-sign permits for each future repetitive operation.
Learn More:
To understand more about incidents where the permit mode has been exploited as a scam method, please copy the following links into your browser for more information:
However, EIP-3074 brings a chance for change: when DApp developers realize that EOA can perform various complex operations through Invoker, the design of DApp interactions will no longer need to sacrifice security for better user experience, such as “users approving a large amount of assets in advance” or “users signing a permit message to authorize withdrawals.”
Instead, users will tie the DApp operation with the approve action, executing them atomically through Invoker: either both the approve and the DApp operation succeed together or fail together. There is no possibility of the approve action succeeding alone, so users can be sure that this approve action is specifically for the current operation.
Moreover, users authorize using off-chain signatures, so the user experience is the same as with permit! This means that DApps will no longer need the permit mode! In the future, wallets can directly block or more strictly scrutinize permit signature requests without worrying about preventing users from accessing certain DApps (but rather being exploited by scams).
△ Users will no longer just authorize a certain address but also specify what actions can be taken, and they can even see simulated execution results.
Note: This does not mean scams can be completely prevented! Users can still be tricked into scam websites, and scam websites can still craft approve or transfer operations for users to sign. However, at this point, users can at least see what operations the signature is authorizing. Wallets can even simulate and display execution results, showing users clearly who will lose money and who will gain money. Compared to permits where users cannot know the operations or execution results, users now have more information to decide whether to authorize. While not a perfect solution, it is still a significant improvement over the current situation.
Currently, the design of EIP-3074 includes the EOA nonce value in the signature content. Therefore, as soon as the EOA submits a transaction on-chain that alters the nonce value, all existing EIP-3074 authorizations become invalid.
If a user authorizes others to operate their EOA on their behalf, such as through the Session Key or Social Recovery methods mentioned above, the EOA’s nonce must remain unchanged. Otherwise, all authorizations must be re-signed and handed over to the trustee, which significantly impacts both user experience and the robustness of the mechanism.
If the user is authorizing themselves to operate, then there is no need to avoid changing the EOA nonce. EIP-3074 signatures, like transactions, are expected to be executed within a certain period. However, wallets must manage EIP-3074 transactions for the EOA: if there is an EIP-3074 signature waiting to be on-chain, any EOA transactions must wait.
Note: The Invoker contract itself should maintain a separate nonce mechanism, so each signature must be renewed regardless of changes to the EOA nonce.
Session Key and Social Recovery are likely to be widely adopted only after EIP-3074 modifies the rules to remove the EOA nonce from the signature content. Therefore, wallets should focus on the scenario where “users authorize themselves to operate” and treat EIP-3074 signatures as they would transactions, avoiding concerns about EOA transactions altering the nonce.
However, if users want to submit their EIP-3074 signature on-chain themselves, there are two drawbacks:
Users need to sign twice: once for the EIP-3074 signature and once for the on-chain transaction signature.
Since the on-chain transaction will increment the EOA nonce before execution, the EIP-3074 signature’s EOA nonce must be pre-incremented to match the nonce change caused by the on-chain transaction.
△ Because the on-chain transaction increments the EOA nonce, EIP-3074 signature verification will fail if the nonces do not match.
△ Users need to pre-increment the EOA nonce in the EIP-3074 signature to pass verification successfully.
By understanding these nuances, wallet providers can better manage EOA nonce handling, ensuring a smoother and more secure user experience with EIP-3074 authorizations.
EIP-3074 allows EOAs to delegate control to specified contracts, thereby gaining rich execution capabilities similar to contracts. Before EIP-3074, an EOA could only perform one operation per transaction, such as approving an ERC20 token or making a swap on Uniswap. Post-EIP-3074, an EOA can complete multiple operations in a single transaction, enabling previously unimaginable use cases. In essence, EIP-3074 significantly improves the user experience and reshapes familiar authorization methods while enhancing security.
Moreover, with EIP-3074, EOAs no longer need to send transactions on-chain themselves, thus eliminating the need to first acquire ETH to pay for transaction fees.
Contracts that can gain control of EOAs are called Invoker contracts. Not just any contract can gain control; the EOA must sign with its private key, specifying which Invoker contract and which operations it authorizes the Invoker to perform.
The process typically involves:
Alice signs with her EOA private key, specifying the Invoker contract and authorized operations.
Alice submits the signed content and signature to a Relayer.
The Relayer submits the transaction on-chain to the Invoker contract.
The Invoker verifies the signature and, upon validation, executes the operations as Alice’s EOA, such as approving USDC, swapping assets on Uniswap, and using some USDC to pay the Relayer as a fee.
Note: The Relayer is optional; Alice can submit the signed content and signature on-chain herself.
The Invoker executes operations as if it has limited control of Alice’s EOA. However, the EOA’s nonce does not increase after execution, meaning the same signature could potentially be reused as long as the EOA’s nonce remains unchanged. Therefore, the Invoker must implement its nonce mechanism to prevent replay attacks.
Learn More
For a detailed introduction to the workings of EIP-3074, please refer to:https://medium.com/taipei-ethereum-meetup/eip3074-%E7%B0%A1%E4%BB%8B-2a880b918234
Batchcall allows users to combine multiple transactions into one, saving the process of multiple authorization signatures and some gas costs. Note that this requires DApps to support Batchcall functionality, such as the currently promoted EIP-5792. Without such support, DApps will prompt a separate transaction for each operation, treating the user as a regular EOA.
For more information on EIP-5792, please refer to: EIP-5792.
Session Key
Users can delegate operations to a third party under specific conditions using a session key. In the example below, the delegate key represents the authorized third party, while the access policy defines the operational constraints, such as limiting actions to Uniswap, capping transfers at 1 ETH per day, or setting an authorization expiration date. These conditions are designed and checked within the Invoker contract. Once the checks pass, the third party can perform operations as the user’s EOA.
For instance, a Telegram Bot could be granted specific permissions to execute operations on behalf of the user’s EOA.
Native ETH Permit
If the conditions are met (i.e., the permit signature is valid), operations can be executed as the authorizing EOA, enabling native ETH Permit functionality.
Limit Order
Users can set limit order conditions, which, once met, allow operations to be executed as the user’s EOA. This includes approving relevant digital assets for a DEX and swapping assets on the DEX. Compared to the limit order functionality provided by DEXs themselves, users do not need to pre-approve assets for the DEX.
For example, when Alice completes a limit order, the approval is executed simultaneously, eliminating the need for prior approval.
By designing the conditions more generally, an Intent contract can be created: as long as the specified conditions are met, anyone can execute the intent on behalf of the user’s EOA.
Social Recovery
If a user loses their EOA private key, they can use the previously signed EIP-3074 authorization, along with signatures from authorized parties (e.g., Husband and Trust Agent), to transfer all assets from the EOA. This recovers the (transferable) assets, not the account control. Once the EOA private key is lost, the EOA cannot be used again.
EIP-3074 has the potential to improve or even replace current approve/permit methods. DApps currently operate under the assumption that users are EOAs: users must pre-approve a sufficiently large amount of assets to the DApp contract to avoid staying online constantly and repeatedly approving transactions. This significantly improves the user experience.
For example, conditional applications such as limit orders or DCA require users to pre-approve a large amount of assets so the DApp can execute operations when conditions are met, potentially multiple times.
However, this requires users to trust the DApp or avoid approving fake DApps, and they must be able to remove approvals in real-time.
Recent permit models like EIP-2612 or the non-native Permit2 aim to improve the approve model’s user experience and security. Users do not need to approve large amounts of assets for each DApp contract; instead, they can authorize DApps to withdraw a specified amount of assets within a specified time by signing once. This greatly reduces the attack surface and enhances the user experience.
△ Users only need to sign off-chain, and they can specify the asset amount and validity period, providing a better user experience and security than approve.
However, in reality, not just approve, the permit mode is still frequently exploited as a scam method. Victims mistakenly sign permits they believe are for DApp use but are actually giving authorization to attackers.
△ When users sign a permit, they can only see who they are authorizing but do not know what operations will be performed in conjunction with it.
Note: The current permit design is incompatible with DApps requiring repetitive operations, such as DCA or other periodic payment applications. This is because the permit has an anti-replay mechanism, so once a transaction is completed, the same permit cannot be used again. Essentially, users need to pre-sign permits for each future repetitive operation.
Learn More:
To understand more about incidents where the permit mode has been exploited as a scam method, please copy the following links into your browser for more information:
However, EIP-3074 brings a chance for change: when DApp developers realize that EOA can perform various complex operations through Invoker, the design of DApp interactions will no longer need to sacrifice security for better user experience, such as “users approving a large amount of assets in advance” or “users signing a permit message to authorize withdrawals.”
Instead, users will tie the DApp operation with the approve action, executing them atomically through Invoker: either both the approve and the DApp operation succeed together or fail together. There is no possibility of the approve action succeeding alone, so users can be sure that this approve action is specifically for the current operation.
Moreover, users authorize using off-chain signatures, so the user experience is the same as with permit! This means that DApps will no longer need the permit mode! In the future, wallets can directly block or more strictly scrutinize permit signature requests without worrying about preventing users from accessing certain DApps (but rather being exploited by scams).
△ Users will no longer just authorize a certain address but also specify what actions can be taken, and they can even see simulated execution results.
Note: This does not mean scams can be completely prevented! Users can still be tricked into scam websites, and scam websites can still craft approve or transfer operations for users to sign. However, at this point, users can at least see what operations the signature is authorizing. Wallets can even simulate and display execution results, showing users clearly who will lose money and who will gain money. Compared to permits where users cannot know the operations or execution results, users now have more information to decide whether to authorize. While not a perfect solution, it is still a significant improvement over the current situation.
Currently, the design of EIP-3074 includes the EOA nonce value in the signature content. Therefore, as soon as the EOA submits a transaction on-chain that alters the nonce value, all existing EIP-3074 authorizations become invalid.
If a user authorizes others to operate their EOA on their behalf, such as through the Session Key or Social Recovery methods mentioned above, the EOA’s nonce must remain unchanged. Otherwise, all authorizations must be re-signed and handed over to the trustee, which significantly impacts both user experience and the robustness of the mechanism.
If the user is authorizing themselves to operate, then there is no need to avoid changing the EOA nonce. EIP-3074 signatures, like transactions, are expected to be executed within a certain period. However, wallets must manage EIP-3074 transactions for the EOA: if there is an EIP-3074 signature waiting to be on-chain, any EOA transactions must wait.
Note: The Invoker contract itself should maintain a separate nonce mechanism, so each signature must be renewed regardless of changes to the EOA nonce.
Session Key and Social Recovery are likely to be widely adopted only after EIP-3074 modifies the rules to remove the EOA nonce from the signature content. Therefore, wallets should focus on the scenario where “users authorize themselves to operate” and treat EIP-3074 signatures as they would transactions, avoiding concerns about EOA transactions altering the nonce.
However, if users want to submit their EIP-3074 signature on-chain themselves, there are two drawbacks:
Users need to sign twice: once for the EIP-3074 signature and once for the on-chain transaction signature.
Since the on-chain transaction will increment the EOA nonce before execution, the EIP-3074 signature’s EOA nonce must be pre-incremented to match the nonce change caused by the on-chain transaction.
△ Because the on-chain transaction increments the EOA nonce, EIP-3074 signature verification will fail if the nonces do not match.
△ Users need to pre-increment the EOA nonce in the EIP-3074 signature to pass verification successfully.
By understanding these nuances, wallet providers can better manage EOA nonce handling, ensuring a smoother and more secure user experience with EIP-3074 authorizations.