@abstract-foundation/agw-client
Version:
Abstract Global Wallet Client SDK
37 lines • 1.68 kB
JavaScript
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