This guide provides instructions for Livepeer participants using a contract wallet (i.e., multisig) to stake on L1 (Ethereum Mainnet), to migrate this stake to L2 (Arbitrum Mainnet) as per the Livepeer Confluence upgrade.
This guide is designed to be used in conjunction with the Livepeer Explorer L2 Contract Wallet Migration Tools to support migrating to Arbitrum:
The migration process will transfer ownership of funds (i.e., stake) owned by your L1 address to the L2 address.
Before moving your stake, you MUST confirm that you have a valid L2 address that can own funds migrated from L1. Otherwise, you could lose access to your L1 assets after the migration if you use the L1 address of your contract wallet as the L2 address
The L2 address can be that of a contract wallet (i.e. Gnosis Safe) deployed on L2, or an EOA (an externally owned account managed by a hardware wallet (e.g., Ledger)), or a browser wallet (e.g., Metamask).
If you would like to use a contract wallet on L2 you MUST make sure that the contract wallet is deployed on L2 and that you have control of it before proceeding.
Note: If you are unsure about how to ensure you have a valid L2 address, please reach out to the core team on Discord.
Use the Contract Wallet Tool to generate the required parameters for the migration transactions. These parameters will be required in upcoming steps:
Once you enter the L1 address, and an L2 address (the address you created in the prior step), the tool will display the following:
migrateDelegator
transaction parameters if the L1 address has stake to
migratemigrateUnbondingLocks
transaction parameters if the L1 address has
unbonding locks (i.e., undelegated stake) to migrateIf your L1 address has stake to migrate:
Submit the stake migration transaction from your contract wallet, a function call to the L1Migrator on Ethereum Mainnet.
The contract address is 0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A
Copy the contract ABI
The function name is migrateDelegator
with the following parameters:
address _l1Addr
: the address of your L1 contract wallet that has stake to
migrateaddress _l2Addr
: the address on L2 that will receive migrated stake (the
L2 address you created prior).bytes _sig
: this parameter can be left blankuint256 _maxGas
: the maxGas
printed by the command-line tooluint256 _gasPriceBid
: the gasPriceBid
printed by the command-line tooluint256 _maxSubmissionCost
: the maxSubmissionCost
printed by the
command-line toolThe ETH value to include with the function call should be the value
printed
by the command-line tool. The value
printed by the command-line tool is
denominated in Wei, so make sure to convert it into the units (i.e.,
Ether) required by the tool you are using to submit the transaction.
If your L1 address has unbonding locks to migrate, submit an unbonding locks migration transaction from your contract wallet; a function call to the L1Migrator on Ethereum Mainnet.
0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A
migrateUnbondingLocks
with the following parameters:
address _l1Addr
: the address of your L1 contract wallet that has unbonding
locks to migrateaddress _l2Addr
: the address on L2 that will receive the total stake of
migrated unbonding locks (the L2 address you created prior).uint256[] _unbondingLockIds
: The array of IDs for unbonding locks that
will be migratedbytes _sig
: This parameter can be ignored and left blankuint256 _maxGas
: This should be the maxGas
printed by the command-line
tooluint256 _gasPriceBid
: This should be the gasPriceBid
printed by the
command-line tooluint256 _maxSubmissionCost
: This should be the maxSubmissionCost
printed
by the command-line toolvalue
printed
by the command-line tool. The value
printed by the command-line tool is
denominated in Wei, so make sure to convert it into the units (i.e.,
Ether) required by the tool you are using to submit the transaction.After a migration transaction is submitted by the contract wallet and confirmed on L1, it takes about ~10 minutes to finalize on L2. You can use a command-line tool to confirm the transaction is finalized on L2:
<L1_TX_HASH>
is the hash of the L1 transaction submitted by your contract
wallet.
The command will notify you when the transaction is finalized on L2. You should then be able to navigate to the Livepeer Explorer to find the L2 address you specified and view the migrated stake owned by that address.
This guide provides instructions for Livepeer participants using a contract wallet (i.e., multisig) to stake on L1 (Ethereum Mainnet), to migrate this stake to L2 (Arbitrum Mainnet) as per the Livepeer Confluence upgrade.
This guide is designed to be used in conjunction with the Livepeer Explorer L2 Contract Wallet Migration Tools to support migrating to Arbitrum:
The migration process will transfer ownership of funds (i.e., stake) owned by your L1 address to the L2 address.
Before moving your stake, you MUST confirm that you have a valid L2 address that can own funds migrated from L1. Otherwise, you could lose access to your L1 assets after the migration if you use the L1 address of your contract wallet as the L2 address
The L2 address can be that of a contract wallet (i.e. Gnosis Safe) deployed on L2, or an EOA (an externally owned account managed by a hardware wallet (e.g., Ledger)), or a browser wallet (e.g., Metamask).
If you would like to use a contract wallet on L2 you MUST make sure that the contract wallet is deployed on L2 and that you have control of it before proceeding.
Note: If you are unsure about how to ensure you have a valid L2 address, please reach out to the core team on Discord.
Use the Contract Wallet Tool to generate the required parameters for the migration transactions. These parameters will be required in upcoming steps:
Once you enter the L1 address, and an L2 address (the address you created in the prior step), the tool will display the following:
migrateDelegator
transaction parameters if the L1 address has stake to
migratemigrateUnbondingLocks
transaction parameters if the L1 address has
unbonding locks (i.e., undelegated stake) to migrateIf your L1 address has stake to migrate:
Submit the stake migration transaction from your contract wallet, a function call to the L1Migrator on Ethereum Mainnet.
The contract address is 0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A
Copy the contract ABI
The function name is migrateDelegator
with the following parameters:
address _l1Addr
: the address of your L1 contract wallet that has stake to
migrateaddress _l2Addr
: the address on L2 that will receive migrated stake (the
L2 address you created prior).bytes _sig
: this parameter can be left blankuint256 _maxGas
: the maxGas
printed by the command-line tooluint256 _gasPriceBid
: the gasPriceBid
printed by the command-line tooluint256 _maxSubmissionCost
: the maxSubmissionCost
printed by the
command-line toolThe ETH value to include with the function call should be the value
printed
by the command-line tool. The value
printed by the command-line tool is
denominated in Wei, so make sure to convert it into the units (i.e.,
Ether) required by the tool you are using to submit the transaction.
If your L1 address has unbonding locks to migrate, submit an unbonding locks migration transaction from your contract wallet; a function call to the L1Migrator on Ethereum Mainnet.
0x21146B872D3A95d2cF9afeD03eE5a783DaE9A89A
migrateUnbondingLocks
with the following parameters:
address _l1Addr
: the address of your L1 contract wallet that has unbonding
locks to migrateaddress _l2Addr
: the address on L2 that will receive the total stake of
migrated unbonding locks (the L2 address you created prior).uint256[] _unbondingLockIds
: The array of IDs for unbonding locks that
will be migratedbytes _sig
: This parameter can be ignored and left blankuint256 _maxGas
: This should be the maxGas
printed by the command-line
tooluint256 _gasPriceBid
: This should be the gasPriceBid
printed by the
command-line tooluint256 _maxSubmissionCost
: This should be the maxSubmissionCost
printed
by the command-line toolvalue
printed
by the command-line tool. The value
printed by the command-line tool is
denominated in Wei, so make sure to convert it into the units (i.e.,
Ether) required by the tool you are using to submit the transaction.After a migration transaction is submitted by the contract wallet and confirmed on L1, it takes about ~10 minutes to finalize on L2. You can use a command-line tool to confirm the transaction is finalized on L2:
<L1_TX_HASH>
is the hash of the L1 transaction submitted by your contract
wallet.
The command will notify you when the transaction is finalized on L2. You should then be able to navigate to the Livepeer Explorer to find the L2 address you specified and view the migrated stake owned by that address.