Skip to main content

ETH bridging

Ether (ETH) is the native currency of Ethereum and all Arbitrum chains. It is used to pay the necessary fees to execute a transaction in those chains. Bridging ETH from Ethereum (parent chain) to an Arbitrum chain (child chain) follows, thus, a different process than the one followed when bridging other types of asset.

Depositing ether

To move ETH from the parent chain to the child chain, you execute a deposit transaction via Inbox.depositEth. This transfers funds to the Bridge contract on the parent chain and credits the same funds to you inside the Arbitrum chain at the specified address.

function depositEth(address destAddr) external payable override returns (uint256)

The following diagram depicts the process that funds follow during a deposit operation.

900px-img

As far as the parent chain knows, all deposited funds are held by Arbitrum's Bridge contract.

Withdrawing ether

Withdrawing ether can be done using the ArbSys precompile's withdrawEth method:

ArbSys(100).withdrawEth{ value: 2300000 }(destAddress)

Upon withdrawing, the Ether balance is burnt on the Arbitrum side, and will later be made available on the Ethereum side.

ArbSys.withdrawEth is a convenience function equivalent to calling ArbSys.sendTxToL1 with empty calldataForL1. Like any other sendTxToL1 call, it will require an additional call to Outbox.executeTransaction on the parent chain after the dispute period elapses for the user to finalize claiming their funds on the parent chain (see "Child chain to parent cahin Messages"). Once the withdrawal is executed from the Outbox, the user's Ether balance will be credited on the parent chain.

The following diagram depicts the process that funds follow during a withdraw operation.

900px-img