Fireblocks

Liquid Collective Platforms can use Fireblocks to custody digital assets.

Fireblocks is an easy-to-use platform to create new blockchain-based products and manage day-to-day digital asset operations. Fireblocks provides an MPC-based wallet allowing users to store their digital assets.

This guide will provide Platforms with a step-by-step process for using Fireblocks to interact with the Liquid Collective protocol.

Fireblocks' offerings are third-party products that are not offered by or in partnership or affiliation with Alluvial. Products and services offered by Fireblocks and other third parties are subject to separate terms and conditions. Please visit https://www.fireblocks.com/ for more information. Any links provided are for your convenience and informational purposes only. Inclusion of any link does not constitute an endorsement or an approval of any such third-party products by Alluvial or any other Liquid Collective protocol service provider.

Architecture

Below is an example architecture for a Platform that uses Fireblocks as a custodian when the Platform's users stake ETH and/or redeem LsETH.

Architecture

Implementation

This implementation will take advantage of the Fireblocks SDK, specifically the Javascript SDK. Please follow the Fireblocks Javascript Guide to install the appropriate dependencies.

This guide uses the Goerli network and the Alluvial Staging API.

Dependencies

Create a new Javascript file, such as index.js.

Define dependencies at top of file.

Vault & wallet

Create or use an existing Fireblocks vault.

Response:

Next, put digital assets into the Fireblocks account.

Admin permissions are needed to add ERC-20 digital assets to a Fireblocks account. Please review this information on the Fireblocks website.

Define the contract address for Goerli:

Call the supported digital assets in Fireblocks.

Response:

Add the LsETH to the newly created vault.

Request:

Response:

Creating Depositor and Allowlisting

Now that you have an address associated with your Fireblocks account, you will create a Depositor object and add the wallet address to the Liquid Collective protocol Allowlist via the Alluvial API.

The steps for onboarding and adding to the Allowlist can be found in the staking guide. Come back to this guide once your wallet(s) have been successfully added to the Allowlist.

Stake ETH

Now that you have successfully added your wallets to the Allowlist you can continue with staking.

In order to interact with the Liquid Collective protocol you will need to invoke Smart Contract functions.

This guide will use the Fireblocks Ethers.js provider, created by the Fireblocks team. To install read the Fireblocks documentation.

In the index.js file add new dependencies

The Liquid Collective uses a TUPProxy architecture. Below are the details about the Proxy address and implementation contract.

Ethereum Network
Proxy
Implementation

Goerli

0x3ecCAdA3e11c1Cc3e9B5a53176A67cc3ABDD3E46

0xF32fC26C9604a380c311e7eC0c5E545917e7934f

Mainnet

0x8c1BEd5b9a0928467c9B1341Da1D7BD5e10b6549

0x48D93d8C45Fb25125F13cdd40529BbeaA97A6565

Create a separate file called Contract.json.

In the file, add the ABI for the Liquid Collective protocol:

  • Goerli can be found here

  • Mainnet can be found here

Define the ABI address for Goerli.

Define the EIP-1193 Provider.

Create a function that calls the deposit function.

You will need to have ETH in your Fireblocks vault to fund the deposit & gas fee.

Request:

You've successfully staked ETH and should see LsETH returned in your Fireblocks vault.

Response:

Now you can implement the LsETH redemption flow, providing your users the ability to redeem their LsETH for ETH.

Redeem LsETH

The next step is to allow the allowlisted wallets the ability to redeem their LsETH for ETH, thereby burning their LsETH.

There is a two-step process to receive the redeemed ETH. First, you will create a RedeemRequest that results in a redemption ID being returned. Once the redemption has been satisfied (full or partial) you can make a claimRedeemRequest call.

For more information check out Liquid Collective's redemption documentation.

Create a redemption request

The first function you will call is the requestRedeem.

Request:

A request redeem ID will be generated.

You can retrieve the request redeem ID either via the Alluvial API or by listening the the Redeem Manager contract events. More information can be found here.

Resolve redeem request

In order to get the Withdrawal Event ID, invoke the resolveRedeemRequest or call via the Alluvial API.

The example below will show invoking the resolveRedeemRequest function.

Request:

Response:

111

The resolveRedeemRequest function returns the status of the Withdrawal Event ID. More can be found here.

You can proceed to make a claim now that you have both your redemption ID (53) and Withdrawal Event ID (111).

Create a claim request

To make a claim request provide both the redemption request ID and the Withdrawal Event ID in an array.

Request:

After the claim is processed you will see the the deposit of ETH into your Fireblocks wallet.

To see the status of the claim you can either listen for events or use the Alluvial API. More information on the claiming process can be found here.

Congratulations! You have now implemented the ETH staking and LsETH redemption flow using a Fireblocks account and SDK.

Appendix:

Below is the full code from the snippets above:

To call a function uncomment the function declaration.

Last updated

Was this helpful?