UNPKG

@abstract-foundation/agw-client

Version:
37 lines 1.68 kB
import { encodeFunctionData, keccak256, toBytes, zeroAddress, } from 'viem'; import AccountFactoryAbi from '../abis/AccountFactory.js'; import { EOA_VALIDATOR_ADDRESS, SMART_ACCOUNT_FACTORY_ADDRESS, } from '../constants.js'; import { getInitializerCalldata, getSmartAccountAddressFromInitialSigner, isSmartAccountDeployed, } from '../utils.js'; export async function deployAccount(params) { const { initialSignerAddress, walletClient, publicClient, ...rest } = params; const initialSigner = initialSignerAddress ?? walletClient.account.address; const address = await getSmartAccountAddressFromInitialSigner(initialSigner, publicClient); let deploymentTransaction = undefined; const isDeployed = await isSmartAccountDeployed(publicClient, address); if (!isDeployed) { const initializerCallData = getInitializerCalldata(initialSigner, EOA_VALIDATOR_ADDRESS, { allowFailure: false, callData: '0x', value: 0n, target: zeroAddress, }); const addressBytes = toBytes(initialSigner); const salt = keccak256(addressBytes); const deploymentCalldata = encodeFunctionData({ abi: AccountFactoryAbi, functionName: 'deployAccount', args: [salt, initializerCallData], }); deploymentTransaction = await walletClient.sendTransaction({ account: walletClient.account, to: SMART_ACCOUNT_FACTORY_ADDRESS, data: deploymentCalldata, ...rest, }); } return { smartAccountAddress: address, deploymentTransaction, }; } //# sourceMappingURL=deployAccount.js.map