@biconomy/sdk
Version:
SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.
71 lines • 2.89 kB
JavaScript
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