UNPKG

@biconomy/sdk

Version:

SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.

71 lines 2.89 kB
import { http } from "viem"; import { MEE_VALIDATOR_ADDRESS, NEXUS_ACCOUNT_FACTORY, TEMP_MEE_ATTESTER_ADDR } from "../constants/index.js"; import { toNexusAccount } from "./toNexusAccount.js"; import { build as buildDecorator } from "./decorators/build.js"; import { buildBridgeInstructions as buildBridgeInstructionsDecorator } from "./decorators/buildBridgeInstructions.js"; import { getUnifiedERC20Balance as getUnifiedERC20BalanceDecorator } from "./decorators/getUnifiedERC20Balance.js"; import { queryBridge as queryBridgeDecorator } from "./decorators/queryBridge.js"; /** * Creates a multichain Nexus account across specified chains * * @param parameters - {@link MultichainNexusParams} Configuration for multichain account creation * @param parameters.signer - The signer instance used for account creation * @param parameters.chains - Array of chains where the account will be deployed * * @returns Promise resolving to {@link MultichainSmartAccount} instance * * @throws Error if account creation fails on any chain * * @example * const account = await toMultichainNexusAccount({ * signer: mySigner, * chains: [optimism, base] * }); * * // Get deployment on specific chain * const optimismDeployment = account.deploymentOn(10); * * // Check token balance across chains * const balance = await account.getUnifiedERC20Balance(mcUSDC); * * // Build bridge transaction * const bridgeInstructions = await account.buildBridgeInstructions({ * amount: BigInt("1000000"), // 1 USDC * mcToken: mcUSDC, * toChain: base * }); */ export async function toMultichainNexusAccount(parameters) { const { signer, chains } = parameters; const deployments = await Promise.all(chains.map((chain) => toNexusAccount({ chain, signer, transport: http(), validatorAddress: MEE_VALIDATOR_ADDRESS, factoryAddress: NEXUS_ACCOUNT_FACTORY, attesters: [TEMP_MEE_ATTESTER_ADDR] }))); const deploymentOn = (chainId) => { const deployment = deployments.find((dep) => dep.client.chain?.id === chainId); return deployment; }; const baseAccount = { deployments, signer, deploymentOn }; const getUnifiedERC20Balance = (mcToken) => { return getUnifiedERC20BalanceDecorator({ mcToken, account: baseAccount }); }; const build = (params, currentInstructions) => buildDecorator({ currentInstructions, account: baseAccount }, params); const buildBridgeInstructions = (params) => buildBridgeInstructionsDecorator({ ...params, account: baseAccount }); const queryBridge = (params) => queryBridgeDecorator({ ...params, account: baseAccount }); return { ...baseAccount, getUnifiedERC20Balance, build, buildBridgeInstructions, queryBridge }; } //# sourceMappingURL=toMultiChainNexusAccount.js.map