@tradestack/paymaster 1.2.39 → 1.2.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -3340,7 +3340,7 @@ export declare const getPublicClient: (chainConfig: EVMChainConfig) => {
|
|
|
3340
3340
|
authorizationList: import("viem").TransactionSerializableEIP7702["authorizationList"];
|
|
3341
3341
|
} ? "eip7702" : never) | (request["type"] extends string | undefined ? Extract<request["type"], string> : never)>) ? T_12 extends "eip7702" ? import("viem").TransactionRequestEIP7702 : never : never : never)>> & {
|
|
3342
3342
|
chainId?: number | undefined;
|
|
3343
|
-
}, (request["parameters"] extends readonly import("viem").PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "chainId" | "type" | "nonce" | "
|
|
3343
|
+
}, (request["parameters"] extends readonly import("viem").PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "chainId" | "type" | "nonce" | "blobVersionedHashes" | "gas" | "fees") extends infer T_13 ? T_13 extends (request["parameters"] extends readonly import("viem").PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "chainId" | "type" | "nonce" | "blobVersionedHashes" | "gas" | "fees") ? T_13 extends "fees" ? "gasPrice" | "maxPriorityFeePerGas" | "maxFeePerGas" : T_13 : never : never> & (unknown extends request["kzg"] ? {} : Pick<request, "kzg">) & {
|
|
3344
3344
|
_capabilities?: {
|
|
3345
3345
|
[x: string]: any;
|
|
3346
3346
|
} | undefined;
|
|
@@ -3355,8 +3355,8 @@ export declare const getPublicClient: (chainConfig: EVMChainConfig) => {
|
|
|
3355
3355
|
verifyHash: (args: import("viem").VerifyHashActionParameters) => Promise<import("viem").VerifyHashActionReturnType>;
|
|
3356
3356
|
verifyMessage: (args: import("viem").VerifyMessageActionParameters) => Promise<import("viem").VerifyMessageActionReturnType>;
|
|
3357
3357
|
verifySiweMessage: (args: {
|
|
3358
|
-
blockNumber?: bigint | undefined | undefined;
|
|
3359
3358
|
blockTag?: import("viem").BlockTag | undefined;
|
|
3359
|
+
blockNumber?: bigint | undefined | undefined;
|
|
3360
3360
|
address?: `0x${string}` | undefined;
|
|
3361
3361
|
nonce?: string | undefined | undefined;
|
|
3362
3362
|
domain?: string | undefined | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paymaster.service.d.ts","sourceRoot":"","sources":["../../../../src/backend/services/paymaster.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAiB,MAAM,kBAAkB,CAAC;AAQjE,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,GAAG,EACX,cAAa,cAAwD,KACpE,OAAO,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"paymaster.service.d.ts","sourceRoot":"","sources":["../../../../src/backend/services/paymaster.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAiB,MAAM,kBAAkB,CAAC;AAQjE,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,GAAG,EACX,cAAa,cAAwD,KACpE,OAAO,CAAC,MAAM,CA0EhB,CAAC"}
|
|
@@ -1,81 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
exports.signUserOperation = void 0;
|
|
4
7
|
const ethers_1 = require("ethers");
|
|
5
8
|
const chains_1 = require("../config/chains");
|
|
9
|
+
const index_1 = __importDefault(require("../config/index"));
|
|
6
10
|
const contract_1 = require("../contract/contract");
|
|
7
11
|
const signUserOperation = async (userOp, chainConfig = chains_1.CHAIN_CONFIGS.sepolia) => {
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const validUntil = validAfter + 3600; // Valid for 1 hour
|
|
11
|
-
console.log(`[${chainConfig.name}] validAfter: ${validAfter} (${new Date(validAfter * 1000).toISOString()})`);
|
|
12
|
-
console.log(`[${chainConfig.name}] validUntil: ${validUntil} (${new Date(validUntil * 1000).toISOString()})`);
|
|
12
|
+
const validAfter = Math.floor(Date.now() / 1000);
|
|
13
|
+
const validUntil = validAfter + index_1.default.signatureExpirySeconds;
|
|
13
14
|
const paymasterContract = (0, contract_1.getPaymasterContract)(chainConfig);
|
|
14
15
|
const provider = (0, contract_1.getProvider)(chainConfig);
|
|
15
16
|
const connectedSigner = contract_1.signer.connect(provider);
|
|
16
|
-
|
|
17
|
-
const signerAddress = await connectedSigner.getAddress();
|
|
18
|
-
const expectedSigner = await paymasterContract.signerAddress();
|
|
19
|
-
console.log(`[${chainConfig.name}] Signer address: ${signerAddress}`);
|
|
20
|
-
console.log(`[${chainConfig.name}] Expected signer: ${expectedSigner}`);
|
|
21
|
-
if (signerAddress.toLowerCase() !== expectedSigner.toLowerCase()) {
|
|
22
|
-
throw new Error(`Signer mismatch! Got ${signerAddress}, expected ${expectedSigner}`);
|
|
23
|
-
}
|
|
24
|
-
// Handle initCode
|
|
25
|
-
const initCode = userOp.factory && userOp.factory !== "0x"
|
|
17
|
+
const initCode = userOp.factory
|
|
26
18
|
? ethers_1.ethers.concat([userOp.factory, userOp.factoryData || "0x"])
|
|
27
19
|
: "0x";
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
let gasFees = userOp.gasFees;
|
|
37
|
-
if (!gasFees || gasFees === "0x") {
|
|
38
|
-
const maxPriorityFeePerGas = BigInt(userOp.maxPriorityFeePerGas || 1000000000);
|
|
39
|
-
const maxFeePerGas = BigInt(userOp.maxFeePerGas || 1000000000);
|
|
40
|
-
gasFees = ethers_1.ethers.zeroPadValue(ethers_1.ethers.toBeHex((maxPriorityFeePerGas << 128n) | maxFeePerGas), 32);
|
|
41
|
-
}
|
|
42
|
-
// Pack paymaster gas limits
|
|
43
|
-
const paymasterVerificationGasLimit = 250000n;
|
|
44
|
-
const paymasterPostOpGasLimit = 150000n;
|
|
20
|
+
const verificationGasLimit = BigInt(userOp.verificationGasLimit || 0);
|
|
21
|
+
const callGasLimit = BigInt(userOp.callGasLimit || 0);
|
|
22
|
+
const accountGasLimits = ethers_1.ethers.zeroPadValue(ethers_1.ethers.toBeHex((verificationGasLimit << 128n) | callGasLimit), 32);
|
|
23
|
+
const maxPriorityFeePerGas = BigInt(userOp.maxPriorityFeePerGas || 0);
|
|
24
|
+
const maxFeePerGas = BigInt(userOp.maxFeePerGas || 0);
|
|
25
|
+
const gasFees = ethers_1.ethers.zeroPadValue(ethers_1.ethers.toBeHex((maxPriorityFeePerGas << 128n) | maxFeePerGas), 32);
|
|
26
|
+
const paymasterVerificationGasLimit = 200000n;
|
|
27
|
+
const paymasterPostOpGasLimit = 100000n;
|
|
45
28
|
const paymasterGasLimitsPacked = ethers_1.ethers.zeroPadValue(ethers_1.ethers.toBeHex((paymasterVerificationGasLimit << 128n) | paymasterPostOpGasLimit), 32);
|
|
46
|
-
// ✅ IMPORTANT: For hash calculation, include paymaster address + gas limits + timestamps + empty signature
|
|
47
29
|
const paymasterAndDataForHash = ethers_1.ethers.concat([
|
|
48
30
|
chainConfig.paymasterAddress,
|
|
49
31
|
paymasterGasLimitsPacked,
|
|
50
32
|
ethers_1.ethers.AbiCoder.defaultAbiCoder().encode(["uint48", "uint48"], [validUntil, validAfter]),
|
|
51
|
-
"0x" + "00".repeat(65),
|
|
33
|
+
"0x" + "00".repeat(65),
|
|
52
34
|
]);
|
|
53
|
-
|
|
54
|
-
const packedUserOp = {
|
|
35
|
+
const hash = await paymasterContract.getHash({
|
|
55
36
|
sender: userOp.sender,
|
|
56
|
-
nonce:
|
|
57
|
-
initCode
|
|
37
|
+
nonce: userOp.nonce,
|
|
38
|
+
initCode,
|
|
58
39
|
callData: userOp.callData,
|
|
59
|
-
accountGasLimits
|
|
60
|
-
preVerificationGas:
|
|
61
|
-
gasFees
|
|
40
|
+
accountGasLimits,
|
|
41
|
+
preVerificationGas: userOp.preVerificationGas || 0,
|
|
42
|
+
gasFees,
|
|
62
43
|
paymasterAndData: paymasterAndDataForHash,
|
|
63
|
-
signature: "0x",
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const hash = await paymasterContract.getHash(packedUserOp, validUntil, validAfter);
|
|
67
|
-
console.log(`[${chainConfig.name}] Hash to sign: ${hash}`);
|
|
68
|
-
// Sign the hash
|
|
44
|
+
signature: userOp.signature || "0x",
|
|
45
|
+
}, validUntil, validAfter);
|
|
46
|
+
console.log(`[${chainConfig.name}] Hash from contract getHash: ${hash}`);
|
|
69
47
|
const signature = await connectedSigner.signMessage(ethers_1.ethers.getBytes(hash));
|
|
70
|
-
console.log(`[${chainConfig.name}] Signature length: ${signature.length} bytes`);
|
|
71
|
-
// ✅ IMPORTANT: paymasterData should NOT include the paymaster address
|
|
72
|
-
// Only: gas limits + timestamps + signature
|
|
73
48
|
const paymasterData = ethers_1.ethers.concat([
|
|
74
|
-
paymasterGasLimitsPacked,
|
|
75
49
|
ethers_1.ethers.AbiCoder.defaultAbiCoder().encode(["uint48", "uint48"], [validUntil, validAfter]),
|
|
76
50
|
signature,
|
|
77
51
|
]);
|
|
78
|
-
console.log(`[${chainConfig.name}] Final paymasterData: ${paymasterData}`);
|
|
79
52
|
return paymasterData;
|
|
80
53
|
};
|
|
81
54
|
exports.signUserOperation = signUserOperation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paymaster.service.js","sourceRoot":"","sources":["../../../../src/backend/services/paymaster.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paymaster.service.js","sourceRoot":"","sources":["../../../../src/backend/services/paymaster.service.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAgC;AAChC,6CAAiE;AACjE,4DAAqC;AACrC,mDAI8B;AAEvB,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAAW,EACX,cAA8B,sBAAa,CAAC,OAAyB,EACpD,EAAE;IACnB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,UAAU,GAAG,eAAM,CAAC,sBAAsB,CAAC;IAE9D,MAAM,iBAAiB,GAAG,IAAA,+BAAoB,EAAC,WAAW,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,IAAA,sBAAW,EAAC,WAAW,CAAC,CAAC;IAC1C,MAAM,eAAe,GAAG,iBAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO;QAC7B,CAAC,CAAC,eAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;IACtD,MAAM,gBAAgB,GAAG,eAAM,CAAC,YAAY,CAC1C,eAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,IAAI,IAAI,CAAC,GAAG,YAAY,CAAC,EAC7D,EAAE,CACH,CAAC;IAEF,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,eAAM,CAAC,YAAY,CACjC,eAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,IAAI,IAAI,CAAC,GAAG,YAAY,CAAC,EAC7D,EAAE,CACH,CAAC;IAEF,MAAM,6BAA6B,GAAG,OAAO,CAAC;IAC9C,MAAM,uBAAuB,GAAG,OAAO,CAAC;IACxC,MAAM,wBAAwB,GAAG,eAAM,CAAC,YAAY,CAClD,eAAM,CAAC,OAAO,CACZ,CAAC,6BAA6B,IAAI,IAAI,CAAC,GAAG,uBAAuB,CAClE,EACD,EAAE,CACH,CAAC;IAEF,MAAM,uBAAuB,GAAG,eAAM,CAAC,MAAM,CAAC;QAC5C,WAAW,CAAC,gBAAgB;QAC5B,wBAAwB;QACxB,eAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,MAAM,CACtC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACpB,CAAC,UAAU,EAAE,UAAU,CAAC,CACzB;QACD,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;KACvB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAC1C;QACE,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ;QACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,gBAAgB;QAChB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,CAAC;QAClD,OAAO;QACP,gBAAgB,EAAE,uBAAuB;QACzC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;KACpC,EACD,UAAU,EACV,UAAU,CACX,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,iCAAiC,IAAI,EAAE,CAAC,CAAC;IAEzE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,eAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAE3E,MAAM,aAAa,GAAG,eAAM,CAAC,MAAM,CAAC;QAClC,eAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC,MAAM,CACtC,CAAC,QAAQ,EAAE,QAAQ,CAAC,EACpB,CAAC,UAAU,EAAE,UAAU,CAAC,CACzB;QACD,SAAS;KACV,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AA7EW,QAAA,iBAAiB,qBA6E5B"}
|
package/package.json
CHANGED