Exploring Bridging Behaviors with EIP-7702
Last updated
Last updated
To avoid the risk of potential fund loss, always use the L1StandardBridge
and L2StandardBridge
contracts when bridging ETH and ERC-20 tokens, and use the L1ERC721Bridge
and L2ERC721Bridge
contracts when bridging ERC-721 tokens.
EIP-7702 enables EOAs to execute smart contract code directly. However, this comes with some nuances to be wary of when it comes to bridging.
ETH may be temporarily locked on the destination network if the receiving delegated account lacks a function to accept ETH (e.g., receive() external payable
). To resolve this, either undelegate the code or update it to include an ETH-receiving function, then replay the message on the destination network.
The L1StandardBridge
and L2StandardBridge
contracts include a convenience receive()
function that initiates the bridging process with a fixed gas limit for the destination network. If the receiving delegated account implements a receive()
function with complex logic that consumes significant gas, it may trigger an out-of-gas error. To avoid unexpected behavior in such cases, use bridgeETH
or bridgeETHTo
instead, specifying a custom gas limit that ensures successful execution on the destination chain.
ERC-721 may be temporarily locked on the destination network if the receiving delegated account lacks a correctly implemented onERC721Received()
function. To resolve this, either undelegate the code or update it to include an onERC721Received()
function, then replay the message on the destination network.
For delegated 7702 EOAs on L1, unset the code first.
Go to the OptimismPortalProxy
page on Etherscan. You can find the Mainnet link .
Open the transaction hash page where the proveWithdrawalTransaction
errors occurred.
Go to the Internal Txns
tab.
Open and decode input data for the Relay Message
method.
Go to the L1CrossDomainMessengerProxy
page on Etherscan. You can find the Mainnet link .
Send a relayMessage
transaction using the exact same decoded input data from Step 6. Set the payableAmount
to 0. Once the transaction is confirmed, the funds should appear in your wallet.
For delegated 7702 EOAs on L2, unset the code first.
Open the transaction hash page where the relayMessage
error occurred.
Copy the Input Data
and run the folllowing command:
Send a relayMessage
transaction using the exact same decoded input data from Step 4. Set the payableAmount
to 0. Once the transaction is confirmed, the funds should appear in your wallet.
Go to the L2CrossDomainMessenger
page on Zircuit explorer. You can find the Mainnet link .
Go to the L2CrossDomainMessenger
page on Etherscan. You can find the Mainnet link .