UNPKG

@owlprotocol/contracts-account-abstraction

Version:

ERC4337 Account Abstraction support for deploying relevant smart contracts and interacting with UserOps.

34 lines (33 loc) 1.11 kB
import { encodeDeployData, encodeFunctionData, getCreate2Address, getCreateAddress, numberToBytes } from "viem"; import { abi as SimpleAccountAbi } from "./artifacts/SimpleAccount.js"; import { ERC1967Proxy } from "./artifacts/ERC1967Proxy.js"; import { SIMPLE_ACCOUNT_FACTORY_ADDRESS } from "./constants.js"; function getSimpleAccountAddress(args, options) { const { factoryAddress, proxyBytecode } = options ?? { factoryAddress: SIMPLE_ACCOUNT_FACTORY_ADDRESS, proxyBytecode: ERC1967Proxy.bytecode }; const simpleAccountImplementation = getCreateAddress({ from: factoryAddress, nonce: 1n }); const initData = encodeFunctionData({ abi: SimpleAccountAbi, functionName: "initialize", args: [args.owner] }); const proxyDeployData = encodeDeployData({ bytecode: proxyBytecode, abi: ERC1967Proxy.abi, args: [simpleAccountImplementation, initData] }); const salt = args.salt ?? 0n; return getCreate2Address({ from: factoryAddress, salt: numberToBytes(salt, { size: 32 }), bytecode: proxyDeployData }); } export { getSimpleAccountAddress };