@biconomy/abstractjs
Version:
SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.
40 lines • 1.58 kB
JavaScript
import { concatHex, encodeAbiParameters } from "viem";
import { DEFAULT_PREFIX } from "../../clients/decorators/mee/index.js";
import { createMerkleTree } from "../../modules/index.js";
export const sponsorSupertransaction = async (mcNexus, params) => {
const { chainId, quote } = params;
const { signer } = mcNexus.deploymentOn(chainId, true);
const leafHashes = quote.userOps.map((userOp) => {
return userOp.shortEncoding ? userOp.userOpHash : userOp.meeUserOpHash;
});
const merkleTree = createMerkleTree(leafHashes);
if (merkleTree.root !== quote.hash) {
throw new Error("Invalid merkle tree rebuilt from the quote. Cant approve sponsorship.");
}
const rawSignature = await signer.signMessage({
message: {
raw: quote.hash
}
});
const proof = merkleTree.getProof(0);
const sponsorshipSignedQuote = quote;
sponsorshipSignedQuote.userOps[0].userOp.signature = concatHex([
DEFAULT_PREFIX,
encodeAbiParameters([
{ type: "bytes32" },
{ type: "uint48" },
{ type: "uint48" },
{ type: "bytes32[]" },
{ type: "bytes" }
], [
sponsorshipSignedQuote.hash,
Number(sponsorshipSignedQuote.userOps[0].lowerBoundTimestamp),
Number(sponsorshipSignedQuote.userOps[0].upperBoundTimestamp),
proof,
rawSignature
])
]);
return sponsorshipSignedQuote;
};
export default sponsorSupertransaction;
//# sourceMappingURL=sponsorSupertransaction.js.map