@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
JavaScript
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
};