aa-schnorr-multisig-sdk
Version:
Account Abstraction Schnorr Multi-Signatures SDK
69 lines (68 loc) • 3.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createMultiSigAccountAbstraction = exports.MultiSigAccountAbstraction = void 0;
const aa_core_1 = require("@alchemy/aa-core");
const ethers_1 = require("ethers");
const viem_1 = require("viem");
const abi_1 = require("../generated/abi");
const schema_1 = require("./schema");
class MultiSigAccountAbstraction extends aa_core_1.BaseSmartContractAccount {
constructor(params) {
var _a, _b, _c, _d, _e;
(0, schema_1.MultiSigSmartAccountParamsSchema)().parse(params);
super(params);
this.owner = params.owner;
this.combinedAddress = (_b = (_a = params.combinedAddress) === null || _a === void 0 ? void 0 : _a.map((key) => key)) !== null && _b !== void 0 ? _b : [];
this.salt = (_c = params.salt) !== null && _c !== void 0 ? _c : ethers_1.utils.formatBytes32String("salt");
this.factoryAddress = ((_d = params.factoryAddress) !== null && _d !== void 0 ? _d : "0x");
this.entryPointAddress = ((_e = params.entryPointAddress) !== null && _e !== void 0 ? _e : (0, aa_core_1.getDefaultEntryPointAddress)(params.chain));
}
getDummySignature() {
return "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
}
// eslint-disable-next-line @typescript-eslint/require-await
async encodeExecute(target, value, data) {
return (0, viem_1.encodeFunctionData)({
abi: abi_1.MultiSigSmartAccount_abi,
functionName: "execute",
args: [target, value, data],
});
}
// eslint-disable-next-line @typescript-eslint/require-await
async encodeBatchExecute(_txs) {
const [targets, datas] = _txs.reduce((accum, curr) => {
accum[0].push(curr.target);
accum[1].push(curr.data);
return accum;
}, [[], []]);
return (0, viem_1.encodeFunctionData)({
abi: abi_1.MultiSigSmartAccount_abi,
functionName: "executeBatch",
args: [targets, datas],
});
}
signMessage(msg) {
let _encodedMsg = msg;
if (typeof msg === "string" && msg.startsWith("0x"))
_encodedMsg = (0, viem_1.hexToBytes)(msg);
else if (typeof msg === "string")
_encodedMsg = new TextEncoder().encode(msg);
return this.owner.signMessage(_encodedMsg);
}
// eslint-disable-next-line @typescript-eslint/require-await
async getAccountInitCode() {
return (0, viem_1.concatHex)([
this.factoryAddress,
(0, viem_1.encodeFunctionData)({
abi: abi_1.MultiSigSmartAccountFactory_abi,
functionName: "createAccount",
args: [this.combinedAddress, this.salt],
}),
]);
}
}
exports.MultiSigAccountAbstraction = MultiSigAccountAbstraction;
function createMultiSigAccountAbstraction(params) {
return new MultiSigAccountAbstraction(params);
}
exports.createMultiSigAccountAbstraction = createMultiSigAccountAbstraction;