@tradestack/paymaster 1.2.39 → 1.2.40
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.
|
@@ -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,CA2HhB,CAAC"}
|
|
@@ -5,52 +5,52 @@ const ethers_1 = require("ethers");
|
|
|
5
5
|
const chains_1 = require("../config/chains");
|
|
6
6
|
const contract_1 = require("../contract/contract");
|
|
7
7
|
const signUserOperation = async (userOp, chainConfig = chains_1.CHAIN_CONFIGS.sepolia) => {
|
|
8
|
-
// Use current time
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
console.log(`[${chainConfig.name}]
|
|
8
|
+
// ✅ Use SIMPLE timestamps - current time only
|
|
9
|
+
const now = Math.floor(Date.now() / 1000);
|
|
10
|
+
const validAfter = now - 60; // 1 minute ago
|
|
11
|
+
const validUntil = now + 300; // 5 minutes from now (short expiry for testing)
|
|
12
|
+
console.log(`[${chainConfig.name}] NOW: ${now}, validAfter: ${validAfter}, validUntil: ${validUntil}`);
|
|
13
13
|
const paymasterContract = (0, contract_1.getPaymasterContract)(chainConfig);
|
|
14
14
|
const provider = (0, contract_1.getProvider)(chainConfig);
|
|
15
15
|
const connectedSigner = contract_1.signer.connect(provider);
|
|
16
|
-
// Verify signer
|
|
16
|
+
// Verify signer
|
|
17
17
|
const signerAddress = await connectedSigner.getAddress();
|
|
18
18
|
const expectedSigner = await paymasterContract.signerAddress();
|
|
19
|
-
console.log(`[${chainConfig.name}] Signer
|
|
20
|
-
console.log(`[${chainConfig.name}] Expected signer: ${expectedSigner}`);
|
|
19
|
+
console.log(`[${chainConfig.name}] Signer: ${signerAddress}, Expected: ${expectedSigner}`);
|
|
21
20
|
if (signerAddress.toLowerCase() !== expectedSigner.toLowerCase()) {
|
|
22
|
-
throw new Error(`Signer mismatch
|
|
21
|
+
throw new Error(`Signer mismatch!`);
|
|
23
22
|
}
|
|
23
|
+
// Get deposit status
|
|
24
|
+
const deposit = await paymasterContract.getDeposit();
|
|
25
|
+
console.log(`[${chainConfig.name}] Paymaster deposit: ${ethers_1.ethers.formatEther(deposit)} MNT`);
|
|
24
26
|
// Handle initCode
|
|
25
27
|
const initCode = userOp.factory && userOp.factory !== "0x"
|
|
26
28
|
? ethers_1.ethers.concat([userOp.factory, userOp.factoryData || "0x"])
|
|
27
29
|
: "0x";
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
|
30
|
+
// SIMPLE: Use fixed 32-byte values for gas fields
|
|
31
|
+
// accountGasLimits = (verificationGasLimit << 128) | callGasLimit
|
|
32
|
+
const verificationGasLimit = 250000n;
|
|
33
|
+
const callGasLimit = 50000n;
|
|
34
|
+
const accountGasLimits = ethers_1.ethers.zeroPadValue(ethers_1.ethers.toBeHex((verificationGasLimit << 128n) | callGasLimit), 32);
|
|
35
|
+
// gasFees = (maxPriorityFeePerGas << 128) | maxFeePerGas
|
|
36
|
+
const maxPriorityFeePerGas = 1000000000n; // 1 gwei
|
|
37
|
+
const maxFeePerGas = 1000000000n; // 1 gwei
|
|
38
|
+
const gasFees = ethers_1.ethers.zeroPadValue(ethers_1.ethers.toBeHex((maxPriorityFeePerGas << 128n) | maxFeePerGas), 32);
|
|
39
|
+
// Paymaster gas limits
|
|
43
40
|
const paymasterVerificationGasLimit = 250000n;
|
|
44
41
|
const paymasterPostOpGasLimit = 150000n;
|
|
45
42
|
const paymasterGasLimitsPacked = ethers_1.ethers.zeroPadValue(ethers_1.ethers.toBeHex((paymasterVerificationGasLimit << 128n) | paymasterPostOpGasLimit), 32);
|
|
46
|
-
//
|
|
43
|
+
// Encode timestamps
|
|
44
|
+
const timestampData = ethers_1.ethers.AbiCoder.defaultAbiCoder().encode(["uint48", "uint48"], [validUntil, validAfter]);
|
|
45
|
+
// Create paymasterAndData with empty signature for hash
|
|
46
|
+
const emptySignature = "0x" + "00".repeat(65);
|
|
47
47
|
const paymasterAndDataForHash = ethers_1.ethers.concat([
|
|
48
48
|
chainConfig.paymasterAddress,
|
|
49
49
|
paymasterGasLimitsPacked,
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
timestampData,
|
|
51
|
+
emptySignature,
|
|
52
52
|
]);
|
|
53
|
-
// Prepare
|
|
53
|
+
// Prepare user operation for hash
|
|
54
54
|
const packedUserOp = {
|
|
55
55
|
sender: userOp.sender,
|
|
56
56
|
nonce: BigInt(userOp.nonce),
|
|
@@ -62,20 +62,19 @@ const signUserOperation = async (userOp, chainConfig = chains_1.CHAIN_CONFIGS.se
|
|
|
62
62
|
paymasterAndData: paymasterAndDataForHash,
|
|
63
63
|
signature: "0x",
|
|
64
64
|
};
|
|
65
|
-
// Get hash from
|
|
65
|
+
// Get hash from contract
|
|
66
66
|
const hash = await paymasterContract.getHash(packedUserOp, validUntil, validAfter);
|
|
67
|
-
console.log(`[${chainConfig.name}] Hash
|
|
68
|
-
// Sign
|
|
67
|
+
console.log(`[${chainConfig.name}] Hash: ${hash}`);
|
|
68
|
+
// Sign
|
|
69
69
|
const signature = await connectedSigner.signMessage(ethers_1.ethers.getBytes(hash));
|
|
70
|
-
console.log(`[${chainConfig.name}] Signature
|
|
71
|
-
//
|
|
72
|
-
// Only: gas limits + timestamps + signature
|
|
70
|
+
console.log(`[${chainConfig.name}] Signature: ${signature.substring(0, 66)}...`);
|
|
71
|
+
// Build final paymasterData (NO address, just gas limits + timestamps + signature)
|
|
73
72
|
const paymasterData = ethers_1.ethers.concat([
|
|
74
73
|
paymasterGasLimitsPacked,
|
|
75
|
-
|
|
74
|
+
timestampData,
|
|
76
75
|
signature,
|
|
77
76
|
]);
|
|
78
|
-
console.log(`[${chainConfig.name}]
|
|
77
|
+
console.log(`[${chainConfig.name}] paymasterData length: ${paymasterData.length / 2} bytes`);
|
|
79
78
|
return paymasterData;
|
|
80
79
|
};
|
|
81
80
|
exports.signUserOperation = signUserOperation;
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
1
|
+
{"version":3,"file":"paymaster.service.js","sourceRoot":"","sources":["../../../../src/backend/services/paymaster.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED