Skip to content

Fireblocks

Fireblocks is an enterprise grade MPC wallet provider providing industry's most secure custodial and non-custodial wallets. Fireblocks has created a multi-layer security matrix that layers MPC, secure enclaves, our signature Policy Engine, and an asset transfer network to provide the strongest software and hardware defense available against evolving attack vectors.

Fireblocks' security structure provides a truly secure environment for storing, transferring, and issuing digital assets. This ensures that your assets are protected from cyberattacks, internal colluders, and human errors. As a result, Fireblocks serves as the foundation for thousands of digital asset businesses and has securely transferred over $3T in digital assets.

Fireblocks' MPC wallets are EOA accounts, which in any account abstraction enabled wallet is the root of their security & trust model. Using Fireblocks MPC based EOA wallets in combination with the Account Kit will give you the best of both worlds; Enterprise grade security for securing your off-chain key material, and the utmost flexibility of your on-chain smart accounts.

Integration

Install the Fireblocks Web3 Provider

Using FireblocksSigner in the aa-signers package requires installation of the @fireblocks/fireblocks-web3-provider SDK. aa-signers lists it as optional dependency.

npm
npm i -s @fireblocks/fireblocks-web3-provider

Create a SmartAccountSigner

Next, setup the Fireblocks SDK and create an authenticated FireblocksSigner using the aa-signers package:

fireblocks.ts
import { FireblocksSigner } from "@alchemy/aa-signers/fireblocks";
import { ChainId } from "@fireblocks/fireblocks-web3-provider";
 
export const createFireblocksSigner = async () => {
  const fireblocksSigner = new FireblocksSigner({
    privateKey: process.env.FIREBLOCKS_API_PRIVATE_KEY_PATH!,
    apiKey: process.env.FIREBLOCKS_API_KEY!,
    vaultAccountIds: process.env.FIREBLOCKS_VAULT_ACCOUNT_IDS,
    chainId: ChainId.SEPOLIA,
  });
 
  await fireblocksSigner.authenticate();
 
  return fireblocksSigner;
};

Use it with Modular Account

Let's see it in action with aa-alchemy:

example.ts
import { createModularAccountAlchemyClient } from "@alchemy/aa-alchemy";
import { sepolia } from "@alchemy/aa-core";
import { createFireblocksSigner } from "./fireblocks";
 
const chain = sepolia;
const provider = await createModularAccountAlchemyClient({
  apiKey: "ALCHEMY_API_KEY",
  chain,
  signer: await createFireblocksSigner(),
});