UNPKG

@biconomy/abstractjs

Version:

SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.

187 lines 9.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getStxValidatorStubSignature = exports.toStxValidator = void 0; const viem_1 = require("viem"); const experimental_1 = require("viem/experimental"); const ownership_1 = require("../../../account/decorators/ownership.js"); const smartSessions_1 = require("../smartSessions/index.js"); const toValidator_1 = require("../toValidator.js"); const MOCK_SUPERTXN_HASH_AND_TIMESTAMPS = "0x9e1cce57126e9205fe085888ed6b5ca0033f168e26b8927adb1c6da566cf7c5100000000000000000000000000000000000000000000000000000000642622800000000000000000000000000000000000000000000000000000000064262668"; const toStxValidator = (parameters) => { const { signatureType = "no-stx", superTxEntriesCount = 3 } = parameters; if (!parameters.walletClient.account) { throw new Error("Account should be defined in the wallet client provided to the module"); } let initData; const isP256 = parameters.signer?.source === "p256"; const statelessValidator = parameters.statelessValidator ?? (isP256 ? parameters.submodules?.P256StatelessValidator : parameters.submodules?.EoaStatelessValidator); let ownershipData; if (parameters.ownershipData) { ownershipData = parameters.ownershipData; } else if (isP256 && parameters.signer) { ownershipData = (0, ownership_1.deriveOwnershipData)(parameters.signer, "p256"); } else { ownershipData = (0, viem_1.encodePacked)(["address"], [parameters.walletClient.account.address]); } if (!statelessValidator) { throw new Error("Either provide statelessValidator or submodules with a StatelessValidator address"); } const safeSenders = parameters.safeSenders ?? []; const safeSendersCount = safeSenders.length; if (parameters.stxModeVerifier && parameters.configId) { const types = [ "address", "address", "bytes32", "uint8" ]; const values = [ statelessValidator, parameters.stxModeVerifier, parameters.configId, safeSendersCount ]; for (let i = 0; i < safeSendersCount; i++) { types.push("address"); values.push(safeSenders[i]); } types.push("bytes"); values.push(ownershipData); initData = (0, viem_1.encodePacked)(types, values); } else { const types = [ "address", "uint8" ]; const values = [ statelessValidator, safeSendersCount ]; for (let i = 0; i < safeSendersCount; i++) { types.push("address"); values.push(safeSenders[i]); } types.push("bytes"); values.push(ownershipData); initData = (0, viem_1.encodePacked)(types, values); } const data = initData; const walletClient7739 = parameters.walletClient.extend((0, experimental_1.erc7739Actions)()); const signMessageErc7739 = async (message, verifierDomain) => { return await walletClient7739.signMessage({ account: parameters.walletClient.account, message, verifierDomain: verifierDomain }); }; const signTypedDataErc7739 = async (typedData, verifierDomain) => { const { domain, types, primaryType, message } = typedData; (0, viem_1.validateTypedData)({ domain, types, primaryType, message }); return await walletClient7739.signTypedData({ account: parameters.walletClient.account, domain: domain, types: types, primaryType: primaryType, message: message, verifierDomain: verifierDomain }); }; const signer = parameters.signer; const signUserOperationHash = isP256 && signer?.sign ? async (hash) => await signer.sign({ hash }) : undefined; const { signer: _signer, ...restParameters } = parameters; return (0, toValidator_1.toValidator)({ initData, data, deInitData: "0x", ...restParameters, address: parameters.module, module: parameters.module, type: "validator", signMessageErc7739, signTypedDataErc7739, ...(signUserOperationHash ? { signUserOperationHash } : {}), getStubSignature: async () => (0, exports.getStxValidatorStubSignature)(signatureType, superTxEntriesCount), erc7739VersionSupported_: 1 }); }; exports.toStxValidator = toStxValidator; const getStxValidatorStubSignature = (signatureType, superTxEntriesCount) => { const leafCount = superTxEntriesCount + 1; const proofSize = Math.ceil(Math.log2(leafCount)); let prefix = "0x"; let mockModePayload = "0x"; if (signatureType === "no-stx") { return smartSessions_1.DUMMY_SIGNATURE; } if (signatureType === "simple") { prefix = "0x177eee00"; mockModePayload = (0, viem_1.concatHex)([ MOCK_SUPERTXN_HASH_AND_TIMESTAMPS, "0x00000000000000000000000000000000000000000000000000000000000000a0", "0x0000000000000000000000000000000000000000000000000000000000000100" ]); } if (signatureType === "permit") { prefix = "0x177eee01"; mockModePayload = (0, viem_1.concatHex)([ "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000001d1499e622d69689cdf9004d05ec547d650ff211000000000000000000000000a0cb889707d426a7a386870a03bc70d1b0697598fe8244a8453f6a5a1623e38a7117cfcadf84d670fe741a32e447cd5f5671a68b0000000000000000000000000000000000000000000000003782dace9d9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027d5730e3c64852e56f4f10c0c27a8d96651193fd13663c1dd652b5f18677458", MOCK_SUPERTXN_HASH_AND_TIMESTAMPS, "0x00000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000000250e2ad6bd90d6121dc5166dc6968f23ba43497594de5c7ca655f58e96d31775d" ]); } if (signatureType === "on-chain") { prefix = "0x177eee02"; mockModePayload = (0, viem_1.concatHex)([ "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000001d1499e622d69689cdf9004d05ec547d650ff211000000000000000000000000a0cb889707d426a7a386870a03bc70d1b0697598fe8244a8453f6a5a1623e38a7117cfcadf84d670fe741a32e447cd5f5671a68b000000000000000000000000000000000000000000000001158e460913d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", MOCK_SUPERTXN_HASH_AND_TIMESTAMPS, "0x000000000000000000000000000000000000000000000000000000000000000568f7d0137aa459fc3d87c0405f9df08008c9b97b3da85ef4f663b0e4fc910b518146837426fd3167918049cae2bc9fdf90aabc1e9db16244b56a12463711c2d500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ]); } if (signatureType === "safe-sa") { prefix = "0x177eee04"; mockModePayload = (0, viem_1.concatHex)([ "0x0000000000000000000000000000000000000000000000000000000000000020", "0x47e79534a245952e8b16893a336b85a3d9ea9fa8fa568c00004d05ec547d0001", "0x000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000180", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x00000000000000000000000000000000000000000000000000000000000001c0", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000001", "0x0000000000000000000000000000000000000000000000000000000000000044", "0x095ea7b3000000000000000000000000a0cb889707d426a7a386870a03bc70d1", "0x0b6975980000000000000000000000000000000000000000000000003782dace", "0x0000000000000000000000000000000000000000000000000000000000000041", smartSessions_1.DUMMY_SIGNATURE ]); } const leaves = Array.from({ length: proofSize }, () => "0x3239aa7c79368121ae1a0e73b662a9fd8f0c7f6aa1a7dfdc2eebdbeb2f9b070c"); const proofPayload = (0, viem_1.concatHex)([ `0x${proofSize.toString(16).padStart(64, "0")}`, ...leaves ]); return (0, viem_1.concatHex)([ prefix, mockModePayload, proofPayload, "0x0000000000000000000000000000000000000000000000000000000000000041", smartSessions_1.DUMMY_SIGNATURE ]); }; exports.getStxValidatorStubSignature = getStxValidatorStubSignature; //# sourceMappingURL=toStxValidator.js.map