@biconomy/sdk
Version:
SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.
84 lines • 3.55 kB
JavaScript
import { encodeFunctionData, getContract, pad, parseAbi, toHex } from "viem";
import { MEE_VALIDATOR_ADDRESS, NEXUS_BOOTSTRAP_ADDRESS, REGISTRY_ADDRESS } from "../../constants/index.js";
import { NexusBootstrapAbi } from "../../constants/abi/NexusBootstrapAbi.js";
/**
* Generates encoded factory data for K1 account creation
*
* @param params - {@link GetK1FactoryDataParams} Parameters for K1 account creation
* @param params.signerAddress - The address of the EOA signer
* @param params.index - Account index for deterministic deployment
* @param params.attesters - Array of attester addresses
* @param params.attesterThreshold - Minimum number of attesters required
*
* @returns Promise resolving to {@link Hex} encoded function data for account creation
*
* @example
* const factoryData = await getK1FactoryData({
* signerAddress: "0x123...",
* index: BigInt(0),
* attesters: ["0xabc...", "0xdef..."],
* attesterThreshold: 2
* });
*/
export const getK1FactoryData = async ({ signerAddress, index, attesters, attesterThreshold }) => encodeFunctionData({
abi: parseAbi([
"function createAccount(address eoaOwner, uint256 index, address[] attesters, uint8 threshold) external returns (address)"
]),
functionName: "createAccount",
args: [signerAddress, index, attesters, attesterThreshold]
});
/**
* Generates encoded factory data for MEE account creation
*
* @param params - {@link GetMeeFactoryDataParams} Parameters for MEE account creation
* @param params.validatorAddress - Optional validator address
* @param params.attesters - Array of attester addresses
* @param params.registryAddress - Optional registry contract address
* @param params.attesterThreshold - Minimum number of attesters required
* @param params.publicClient - Viem public client instance
* @param params.walletClient - Viem wallet client instance
* @param params.bootStrapAddress - Optional bootstrap contract address
* @param params.signerAddress - The address of the EOA signer
* @param params.index - Account index for deterministic deployment
*
* @returns Promise resolving to {@link Hex} encoded function data for account creation
*
* @example
* const factoryData = await getMeeFactoryData({
* signerAddress: "0x123...",
* index: BigInt(0),
* attesters: ["0xabc...", "0xdef..."],
* attesterThreshold: 2,
* publicClient: viemPublicClient,
* walletClient: viemWalletClient,
* validatorAddress: "0x789..." // optional
* });
*/
export const getMeeFactoryData = async ({ validatorAddress = MEE_VALIDATOR_ADDRESS, attesters, registryAddress = REGISTRY_ADDRESS, attesterThreshold, publicClient, walletClient, bootStrapAddress = NEXUS_BOOTSTRAP_ADDRESS, signerAddress, index }) => {
const nexusBootstrap = getContract({
address: bootStrapAddress,
abi: NexusBootstrapAbi,
client: {
public: publicClient,
wallet: walletClient
}
});
const initData = await nexusBootstrap.read.getInitNexusWithSingleValidatorCalldata([
{
module: validatorAddress,
data: signerAddress
},
registryAddress,
attesters,
attesterThreshold
]);
const salt = pad(toHex(index), { size: 32 });
return encodeFunctionData({
abi: parseAbi([
"function createAccount(bytes initData, bytes32 salt) external returns (address)"
]),
functionName: "createAccount",
args: [initData, salt]
});
};
//# sourceMappingURL=getFactoryData.js.map