How To Delegate LPT Using MyCrypto and a Hardware Wallet (Ledger Nano S, Trezor, etc.)

How To Delegate Livepeer Token Using MyCrypto and a Hardware Wallet (Ledger Nano S, Trezor, etc.)

Below is some information describing the workflow for delegating Livepeer Token (LPT) using MyCrypto and a hardware wallet such as a Ledger Nano S or Trezor. Please be aware that directly interacting with the smart contracts in the manner described in this workflow is not advised for most users due to the number of steps involved and because it is easy to make a mistake. Most users are advised to use the Livepeer Explorer to delegate their LPT and hardware wallet support will be available within the application soon which will give users the benefits of both hardware wallet transaction signing and in-application guides/user protections that would reduce the possibility of errors in the delegation process.

If you are not bonding additional LPT to be delegated, you may skip Step 1 and go directly to Step 2. If you are bonding additional LPT to be delegated, you will need to follow Step 1 in order to approve some amount of LPT to be transferred by the BondingManager contract (this is a part of the ERC20 approval workflow) before following Step 2 to delegate your LPT.

The contracts (deployed on mainnet) used in the following steps can be verified on Etherscan:

Step 1: Approve the BondingManager To Transfer LPT

Let APPROVE_AMOUNT be the amount of LPT that should be bonded.

  1. Visit https://mycrypto.com/
    1. IMPORTANT: Make sure that this is the correct site for MyCrypto and beware of fake sites!
  2. Click the “Contracts” tab
  3. In the “Contract Address” box, enter 0x58b6a8a3302369daec383334672404ee733ab239
    1. 0x58b6a8a3302369daec383334672404ee733ab239 is the address of the LivepeerToken contract on mainnet
  4. In the “ABI / JSON Interface” box enter the ABI from the “Contract ABI” box found at https://etherscan.io/address/0x58b6a8a3302369daec383334672404ee733ab239#code
    1. The ABI allows MyCrypto to display named functions that are invokable for the provided contract address
  5. Click “Access”
  6. In the “Read / Write Contract” dropdown, select the function name “approve”
  7. In the _spender box, enter 0x511bc4556d823ae99630ae8de28b9b80df90ea2e
    1. 0x511bc4556d823ae99630ae8de28b9b80df90ea2e is the address of the BondingManager proxy contract on mainnet
  8. In the _value box, enter APPROVE_AMOUNT
  9. MyCrypto will ask you the method with which you would like to access your wallet. Select your preferred method

Your screen should look something like this:

  1. Follow the prompts from MyCrypto to sign your transaction using your device and then submit the transaction
    a. Make sure you are connected to the right Ethereum network (mainnet) using the dropdown in the top right hand corner
    b. Make sure to double check that the gas limit and gas price (https://ethgasstation.info/) for the transaction are reasonable

Step 2: Delegate LPT

Let DELEGATE_ADDRESS be the address that your bonded LPT should be delegated towards. Let BOND_AMOUNT be the additional amount of LPT that should be bonded and then delegated toward DELEGATE_ADDRESS. If you are not bonding any additional LPT, BOND_AMOUNT should be 0. If you are bonding additional LPT, BOND_AMOUNT should be at most the value of APPROVE_AMOUNT used in Step 1.

  1. Visit https://mycrypto.com/
    1. IMPORTANT: Make sure that this is the correct site for MyCrypto and beware of fake sites!
  2. Click the “Contracts” tab
  3. In the “Contract Address” box, enter 0x511bc4556d823ae99630ae8de28b9b80df90ea2e
    1. 0x511bc4556d823ae99630ae8de28b9b80df90ea2e is the address of the BondingManager proxy contract on mainnet
  4. In the “ABI / JSON Interface” box enter the ABI from the “Contract ABI” box found at https://etherscan.io/address/0xDC6eE74A18994caD3876a078B6fa4920FD9C507d#code
    1. Note: The ABI used here is the ABI for the BondingManager target implementation contract and NOT the ABI for the BondingManager proxy contract which
      is why the Etherscan link provided is for the address page for 0xDC6eE74A18994caD3876a078B6fa4920FD9C507d (BondingManager target implementation contract)
      as opposed to the address page for 0x511bc4556d823ae99630ae8de28b9b80df90ea2e (BondingManager proxy contract)
    2. The ABI allows MyCrypto to display named functions that are invokable for the provided contract address
  5. Click “Access”
  6. In the “Read / Write Contract” dropdown, select the function name “bond”
  7. In the _amount box, enter BOND_AMOUNT
  8. In the _to box, enter DELEGATE_ADDRESS
  9. MyCrypto will ask you the method with which you would like to access your wallet. Select your preferred method

Your screen should look something like this:

  1. Follow the prompts from MyCrypto to sign your transaction using your device and then submit the transaction
    a. Make sure you are connected to the right Ethereum network (mainnet) using the dropdown in the top right hand corner
    b. Make sure to double check that the gas limit and gas price (https://ethgasstation.info/) for the transaction are reasonable

Great post @yondon - is there also a way to explain to users how to MerkleMine their 2.44 LPT using a Ledger or a Trezor?

Yep see How to generate Livepeer Token using MyCrypto, MyEtherwallet (Ledger, Trezor support)

Hey @yondon, thanks for this post.

Now that MetaMask have added support for Trezor and Ledger, is it easier to merklemine and bond using MetaMask?

Yeah now that Metamask supports signing via hardware wallets this post isn’t as relevant anymore (which is great!)

@yondon Mind updating the original post to reflect the new address of the target bonding manager? 0xcbaa6ea4886b535fc7abace3f3985ed03b3b80a0

I point people to this frequently, not just for Ledger support, but for Mycrypto one off’s.

1 Like

Updated OP with updated address for the BondingManager target implementation.

Since this thread is being referenced as instructions on how to stake from a multisig, I wanted to point out that the updated BondingManager target address, from which you would get the correct ABI, is now 0xDC6eE74A18994caD3876a078B6fa4920FD9C507d.

Also updated the OP with the updated address for the BondingManager target implementation.

The latest BondingManagerTarget address (and ABI) is at 0xc8a695155648F18B0cfd6989498B6f8b2c4cc56A