@tradestack/paymaster 1.2.37 → 1.2.38
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" | "gas" | "blobVersionedHashes" | "fees") extends infer T_13 ? T_13 extends (request["parameters"] extends readonly import("viem").PrepareTransactionRequestParameterType[] ? request["parameters"][number] : "chainId" | "type" | "nonce" | "gas" | "blobVersionedHashes" | "fees") ? T_13 extends "fees" ? "gasPrice" | "maxFeePerGas" | "maxPriorityFeePerGas" : 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
|
-
blockTag?: import("viem").BlockTag | undefined;
|
|
3359
3358
|
blockNumber?: bigint | undefined | undefined;
|
|
3359
|
+
blockTag?: import("viem").BlockTag | 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,CAqHhB,CAAC"}
|
|
@@ -1,63 +1,89 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.signUserOperation = void 0;
|
|
7
4
|
const ethers_1 = require("ethers");
|
|
8
5
|
const chains_1 = require("../config/chains");
|
|
9
|
-
const index_1 = __importDefault(require("../config/index"));
|
|
10
6
|
const contract_1 = require("../contract/contract");
|
|
11
7
|
const signUserOperation = async (userOp, chainConfig = chains_1.CHAIN_CONFIGS.sepolia) => {
|
|
12
|
-
|
|
13
|
-
const
|
|
8
|
+
// Use current time for realistic timestamps
|
|
9
|
+
const validAfter = Math.floor(Date.now() / 1000) - 300; // 5 minutes ago (allow clock drift)
|
|
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()})`);
|
|
14
13
|
const paymasterContract = (0, contract_1.getPaymasterContract)(chainConfig);
|
|
15
14
|
const provider = (0, contract_1.getProvider)(chainConfig);
|
|
16
15
|
const connectedSigner = contract_1.signer.connect(provider);
|
|
17
|
-
|
|
16
|
+
// Handle initCode (factory + factoryData)
|
|
17
|
+
const initCode = userOp.factory && userOp.factory !== "0x"
|
|
18
18
|
? ethers_1.ethers.concat([userOp.factory, userOp.factoryData || "0x"])
|
|
19
19
|
: "0x";
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
// Get the packed values from userOp if they exist, otherwise pack them
|
|
21
|
+
let accountGasLimits = userOp.accountGasLimits;
|
|
22
|
+
let gasFees = userOp.gasFees;
|
|
23
|
+
// If accountGasLimits is not provided or is "0x", pack it
|
|
24
|
+
if (!accountGasLimits || accountGasLimits === "0x") {
|
|
25
|
+
const verificationGasLimit = BigInt(userOp.verificationGasLimit || 250000);
|
|
26
|
+
const callGasLimit = BigInt(userOp.callGasLimit || 50000);
|
|
27
|
+
accountGasLimits = ethers_1.ethers.zeroPadValue(ethers_1.ethers.toBeHex((verificationGasLimit << 128n) | callGasLimit), 32);
|
|
28
|
+
}
|
|
29
|
+
// If gasFees is not provided or is "0x", pack it
|
|
30
|
+
if (!gasFees || gasFees === "0x") {
|
|
31
|
+
const maxPriorityFeePerGas = BigInt(userOp.maxPriorityFeePerGas || 1000000000);
|
|
32
|
+
const maxFeePerGas = BigInt(userOp.maxFeePerGas || 1000000000);
|
|
33
|
+
gasFees = ethers_1.ethers.zeroPadValue(ethers_1.ethers.toBeHex((maxPriorityFeePerGas << 128n) | maxFeePerGas), 32);
|
|
34
|
+
}
|
|
35
|
+
// Pack paymaster gas limits (these are always packed)
|
|
36
|
+
const paymasterVerificationGasLimit = 250000n;
|
|
37
|
+
const paymasterPostOpGasLimit = 150000n;
|
|
30
38
|
const paymasterGasLimitsPacked = ethers_1.ethers.zeroPadValue(ethers_1.ethers.toBeHex((paymasterVerificationGasLimit << 128n) | paymasterPostOpGasLimit), 32);
|
|
31
|
-
//
|
|
39
|
+
// IMPORTANT: The paymasterAndData for hash calculation MUST include:
|
|
40
|
+
// 1. paymaster address (20 bytes)
|
|
41
|
+
// 2. paymaster gas limits packed (32 bytes)
|
|
42
|
+
// 3. validUntil + validAfter encoded (variable)
|
|
43
|
+
// 4. Empty signature placeholder (65 bytes of zeros)
|
|
32
44
|
const paymasterAndDataForHash = ethers_1.ethers.concat([
|
|
33
45
|
chainConfig.paymasterAddress,
|
|
34
46
|
paymasterGasLimitsPacked,
|
|
35
47
|
ethers_1.ethers.AbiCoder.defaultAbiCoder().encode(["uint48", "uint48"], [validUntil, validAfter]),
|
|
36
|
-
"0x" + "00".repeat(65), // 65
|
|
48
|
+
"0x" + "00".repeat(65), // 65 bytes of zeros for signature placeholder
|
|
37
49
|
]);
|
|
38
|
-
console.log(`[${chainConfig.name}]
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
// Get hash from paymaster contract
|
|
42
|
-
const hash = await paymasterContract.getHash({
|
|
50
|
+
console.log(`[${chainConfig.name}] PaymasterAndData (for hash): ${paymasterAndDataForHash}`);
|
|
51
|
+
// Prepare the PackedUserOperation for the getHash call
|
|
52
|
+
const packedUserOp = {
|
|
43
53
|
sender: userOp.sender,
|
|
44
|
-
nonce: userOp.nonce,
|
|
54
|
+
nonce: BigInt(userOp.nonce),
|
|
45
55
|
initCode: initCode,
|
|
46
56
|
callData: userOp.callData,
|
|
47
57
|
accountGasLimits: accountGasLimits,
|
|
48
58
|
preVerificationGas: BigInt(userOp.preVerificationGas || 50000),
|
|
49
59
|
gasFees: gasFees,
|
|
50
60
|
paymasterAndData: paymasterAndDataForHash,
|
|
51
|
-
signature:
|
|
52
|
-
}
|
|
61
|
+
signature: "0x", // Empty signature for hash calculation
|
|
62
|
+
};
|
|
63
|
+
console.log(`[${chainConfig.name}] PackedUserOp for hash:`, {
|
|
64
|
+
sender: packedUserOp.sender,
|
|
65
|
+
nonce: packedUserOp.nonce.toString(),
|
|
66
|
+
initCode: packedUserOp.initCode,
|
|
67
|
+
callData: packedUserOp.callData,
|
|
68
|
+
accountGasLimits: packedUserOp.accountGasLimits,
|
|
69
|
+
preVerificationGas: packedUserOp.preVerificationGas.toString(),
|
|
70
|
+
gasFees: packedUserOp.gasFees,
|
|
71
|
+
paymasterAndData: packedUserOp.paymasterAndData,
|
|
72
|
+
});
|
|
73
|
+
// Get hash from paymaster contract
|
|
74
|
+
const hash = await paymasterContract.getHash(packedUserOp, validUntil, validAfter);
|
|
53
75
|
console.log(`[${chainConfig.name}] Hash from contract: ${hash}`);
|
|
54
76
|
// Sign the hash
|
|
55
77
|
const signature = await connectedSigner.signMessage(ethers_1.ethers.getBytes(hash));
|
|
56
|
-
|
|
78
|
+
console.log(`[${chainConfig.name}] Signature: ${signature}`);
|
|
79
|
+
// Build final paymasterData (same structure as paymasterAndDataForHash but with real signature)
|
|
57
80
|
const paymasterData = ethers_1.ethers.concat([
|
|
81
|
+
chainConfig.paymasterAddress,
|
|
82
|
+
paymasterGasLimitsPacked,
|
|
58
83
|
ethers_1.ethers.AbiCoder.defaultAbiCoder().encode(["uint48", "uint48"], [validUntil, validAfter]),
|
|
59
84
|
signature,
|
|
60
85
|
]);
|
|
86
|
+
console.log(`[${chainConfig.name}] Final paymasterData length: ${paymasterData.length / 2} bytes`);
|
|
61
87
|
return paymasterData;
|
|
62
88
|
};
|
|
63
89
|
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;AAEjE,mDAI8B;AAEvB,MAAM,iBAAiB,GAAG,KAAK,EACpC,MAAW,EACX,cAA8B,sBAAa,CAAC,OAAyB,EACpD,EAAE;IACnB,4CAA4C;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,oCAAoC;IAC5F,MAAM,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,mBAAmB;IAEzD,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,iBAAiB,UAAU,KAAK,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC9G,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,iBAAiB,UAAU,KAAK,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAE9G,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,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;QACxD,CAAC,CAAC,eAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;QAC7D,CAAC,CAAC,IAAI,CAAC;IAET,uEAAuE;IACvE,IAAI,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IAC/C,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAE7B,0DAA0D;IAC1D,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAoB,IAAI,MAAM,CAAC,CAAC;QAC3E,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC,CAAC;QAC1D,gBAAgB,GAAG,eAAM,CAAC,YAAY,CACpC,eAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,IAAI,IAAI,CAAC,GAAG,YAAY,CAAC,EAC7D,EAAE,CACH,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACjC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAoB,IAAI,UAAU,CAAC,CAAC;QAC/E,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,UAAU,CAAC,CAAC;QAC/D,OAAO,GAAG,eAAM,CAAC,YAAY,CAC3B,eAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,IAAI,IAAI,CAAC,GAAG,YAAY,CAAC,EAC7D,EAAE,CACH,CAAC;IACJ,CAAC;IAED,sDAAsD;IACtD,MAAM,6BAA6B,GAAG,OAAO,CAAC;IAC9C,MAAM,uBAAuB,GAAG,OAAO,CAAC;IACxC,MAAM,wBAAwB,GAAG,eAAM,CAAC,YAAY,CAClD,eAAM,CAAC,OAAO,CAAC,CAAC,6BAA6B,IAAI,IAAI,CAAC,GAAG,uBAAuB,CAAC,EACjF,EAAE,CACH,CAAC;IAEF,qEAAqE;IACrE,kCAAkC;IAClC,4CAA4C;IAC5C,gDAAgD;IAChD,qDAAqD;IACrD,MAAM,uBAAuB,GAAG,eAAM,CAAC,MAAM,CAAC;QAC5C,WAAW,CAAC,gBAA0B;QACtC,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,EAAE,8CAA8C;KACvE,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,kCAAkC,uBAAuB,EAAE,CAAC,CAAC;IAE7F,uDAAuD;IACvD,MAAM,YAAY,GAAG;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,gBAAgB,EAAE,gBAAgB;QAClC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,IAAI,KAAK,CAAC;QAC9D,OAAO,EAAE,OAAO;QAChB,gBAAgB,EAAE,uBAAuB;QACzC,SAAS,EAAE,IAAI,EAAE,uCAAuC;KACzD,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,0BAA0B,EAAE;QAC1D,MAAM,EAAE,YAAY,CAAC,MAAM;QAC3B,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE;QACpC,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,QAAQ,EAAE,YAAY,CAAC,QAAQ;QAC/B,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;QAC/C,kBAAkB,EAAE,YAAY,CAAC,kBAAkB,CAAC,QAAQ,EAAE;QAC9D,OAAO,EAAE,YAAY,CAAC,OAAO;QAC7B,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;KAChD,CAAC,CAAC;IAEH,mCAAmC;IACnC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAC1C,YAAY,EACZ,UAAU,EACV,UAAU,CACX,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,yBAAyB,IAAI,EAAE,CAAC,CAAC;IAEjE,gBAAgB;IAChB,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,eAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,gBAAgB,SAAS,EAAE,CAAC,CAAC;IAE7D,gGAAgG;IAChG,MAAM,aAAa,GAAG,eAAM,CAAC,MAAM,CAAC;QAClC,WAAW,CAAC,gBAA0B;QACtC,wBAAwB;QACxB,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,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,iCAAiC,aAAa,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEnG,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AAxHW,QAAA,iBAAiB,qBAwH5B"}
|
package/package.json
CHANGED