UNPKG

@runonflux/aa-schnorr-multisig-sdk

Version:

Account Abstraction Schnorr Multi-Signatures SDK

94 lines (93 loc) 3.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MULTISIG_ACCOUNT_SOURCE = void 0; exports.createMultiSigSmartAccount = createMultiSigSmartAccount; const aa_core_1 = require("@alchemy/aa-core"); const viem_1 = require("viem"); const ethers_1 = require("ethers"); const deployments_1 = require("../generated/deployments"); const abi_1 = require("../generated/abi"); const abi_2 = require("../abi"); exports.MULTISIG_ACCOUNT_SOURCE = "MultiSigSmartAccount"; async function createMultiSigSmartAccount({ transport, chain, entryPoint = (0, aa_core_1.getEntryPoint)(chain, { version: "0.6.0" }), accountAddress, combinedAddress = [], salt: _salt, }) { const client = (0, aa_core_1.createBundlerClient)({ transport, chain, }); const salt = _salt ?? ethers_1.ethers.encodeBytes32String("salt"); const getAccountInitCode = async () => { return (0, viem_1.concatHex)([ deployments_1.deployments[chain.id]?.MultiSigSmartAccountFactory, (0, viem_1.encodeFunctionData)({ abi: abi_2.MultiSigSmartAccountFactory_abi, functionName: "createAccount", args: [combinedAddress, salt], }), ]); }; const address = await (0, aa_core_1.getAccountAddress)({ client, entryPoint, accountAddress, getAccountInitCode, }); const encodeUpgradeToAndCall = async ({ upgradeToAddress, upgradeToInitData }) => { const storage = await client.getStorageAt({ address, // the slot at which impl addresses are stored by UUPS slot: "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", }); if (storage === null) throw new aa_core_1.FailedToGetStorageSlotError("0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc", "Proxy Implementation Address"); return (0, viem_1.encodeFunctionData)({ abi: abi_1.MultiSigSmartAccount_abi, functionName: "upgradeToAndCall", args: [upgradeToAddress, upgradeToInitData], }); }; const account = await (0, aa_core_1.toSmartContractAccount)({ transport, chain, entryPoint, accountAddress: address, source: "MultiSigSmartAccount", getAccountInitCode, encodeExecute: async ({ target, data, value }) => { return (0, viem_1.encodeFunctionData)({ abi: abi_1.MultiSigSmartAccount_abi, functionName: "execute", args: [target, value ?? 0n, data], }); }, encodeBatchExecute: async (txs) => { const [targets, values, datas] = txs.reduce((accum, curr) => { accum[0].push(curr.target); accum[1].push(curr.value ?? 0n); accum[2].push(curr.data); return accum; }, [[], [], []]); return (0, viem_1.encodeFunctionData)({ abi: abi_1.MultiSigSmartAccount_abi, functionName: "executeBatch", args: [targets, values, datas], }); }, signUserOperationHash: async () => { throw new Error("Use Schnorr Signer to get user operation hash signature"); }, async signMessage() { throw new Error("Use Schnorr Signer to sign message"); }, async signTypedData() { throw new Error("Use Schnorr Signer to sign message"); }, getDummySignature: () => { return "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c"; }, encodeUpgradeToAndCall, }); return { ...account, source: "MultiSigSmartAccount", }; }