@tradestack/paymaster 1.0.22

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.
Files changed (85) hide show
  1. package/README.md +276 -0
  2. package/dist/backend/config/chains.d.ts +18 -0
  3. package/dist/backend/config/chains.d.ts.map +1 -0
  4. package/dist/backend/config/chains.js +45 -0
  5. package/dist/backend/config/chains.js.map +1 -0
  6. package/dist/backend/config/constants.d.ts +58 -0
  7. package/dist/backend/config/constants.d.ts.map +1 -0
  8. package/dist/backend/config/constants.js +165 -0
  9. package/dist/backend/config/constants.js.map +1 -0
  10. package/dist/backend/config/db.context.d.ts +5 -0
  11. package/dist/backend/config/db.context.d.ts.map +1 -0
  12. package/dist/backend/config/db.context.js +63 -0
  13. package/dist/backend/config/db.context.js.map +1 -0
  14. package/dist/backend/config/db.d.ts +5 -0
  15. package/dist/backend/config/db.d.ts.map +1 -0
  16. package/dist/backend/config/db.js +35 -0
  17. package/dist/backend/config/db.js.map +1 -0
  18. package/dist/backend/config/index.d.ts +16 -0
  19. package/dist/backend/config/index.d.ts.map +1 -0
  20. package/dist/backend/config/index.js +44 -0
  21. package/dist/backend/config/index.js.map +1 -0
  22. package/dist/backend/contract/abi/ERC20Abi.json +413 -0
  23. package/dist/backend/contract/abi/HalalPaymasterAbi.json +544 -0
  24. package/dist/backend/contract/abi/entryPointAbi.json +166 -0
  25. package/dist/backend/contract/constant.d.ts +4 -0
  26. package/dist/backend/contract/constant.d.ts.map +1 -0
  27. package/dist/backend/contract/constant.js +7 -0
  28. package/dist/backend/contract/constant.js.map +1 -0
  29. package/dist/backend/contract/contract.d.ts +11 -0
  30. package/dist/backend/contract/contract.d.ts.map +1 -0
  31. package/dist/backend/contract/contract.js +34 -0
  32. package/dist/backend/contract/contract.js.map +1 -0
  33. package/dist/backend/helper/hotwallet.d.ts +4 -0
  34. package/dist/backend/helper/hotwallet.d.ts.map +1 -0
  35. package/dist/backend/helper/hotwallet.js +25 -0
  36. package/dist/backend/helper/hotwallet.js.map +1 -0
  37. package/dist/backend/services/chains/evm.service.d.ts +5760 -0
  38. package/dist/backend/services/chains/evm.service.d.ts.map +1 -0
  39. package/dist/backend/services/chains/evm.service.js +263 -0
  40. package/dist/backend/services/chains/evm.service.js.map +1 -0
  41. package/dist/backend/services/chains/solana.service.d.ts +15 -0
  42. package/dist/backend/services/chains/solana.service.d.ts.map +1 -0
  43. package/dist/backend/services/chains/solana.service.js +192 -0
  44. package/dist/backend/services/chains/solana.service.js.map +1 -0
  45. package/dist/backend/services/chains/tron.service.d.ts +14 -0
  46. package/dist/backend/services/chains/tron.service.d.ts.map +1 -0
  47. package/dist/backend/services/chains/tron.service.js +255 -0
  48. package/dist/backend/services/chains/tron.service.js.map +1 -0
  49. package/dist/backend/services/paymaster.service.d.ts +3 -0
  50. package/dist/backend/services/paymaster.service.d.ts.map +1 -0
  51. package/dist/backend/services/paymaster.service.js +55 -0
  52. package/dist/backend/services/paymaster.service.js.map +1 -0
  53. package/dist/backend/services/sweep.service.d.ts +14 -0
  54. package/dist/backend/services/sweep.service.d.ts.map +1 -0
  55. package/dist/backend/services/sweep.service.js +103 -0
  56. package/dist/backend/services/sweep.service.js.map +1 -0
  57. package/dist/backend/services/sweep.worker.d.ts +11 -0
  58. package/dist/backend/services/sweep.worker.d.ts.map +1 -0
  59. package/dist/backend/services/sweep.worker.js +163 -0
  60. package/dist/backend/services/sweep.worker.js.map +1 -0
  61. package/dist/backend/services/sweeper/evm.sweep.service.d.ts +13 -0
  62. package/dist/backend/services/sweeper/evm.sweep.service.d.ts.map +1 -0
  63. package/dist/backend/services/sweeper/evm.sweep.service.js +61 -0
  64. package/dist/backend/services/sweeper/evm.sweep.service.js.map +1 -0
  65. package/dist/backend/services/sweeper/solana.sweep.service.d.ts +13 -0
  66. package/dist/backend/services/sweeper/solana.sweep.service.d.ts.map +1 -0
  67. package/dist/backend/services/sweeper/solana.sweep.service.js +45 -0
  68. package/dist/backend/services/sweeper/solana.sweep.service.js.map +1 -0
  69. package/dist/backend/services/sweeper/tron.sweep.service.d.ts +13 -0
  70. package/dist/backend/services/sweeper/tron.sweep.service.d.ts.map +1 -0
  71. package/dist/backend/services/sweeper/tron.sweep.service.js +45 -0
  72. package/dist/backend/services/sweeper/tron.sweep.service.js.map +1 -0
  73. package/dist/sdk/db/adapter.d.ts +25 -0
  74. package/dist/sdk/db/adapter.d.ts.map +1 -0
  75. package/dist/sdk/db/adapter.js +145 -0
  76. package/dist/sdk/db/adapter.js.map +1 -0
  77. package/dist/sdk/index.d.ts +27 -0
  78. package/dist/sdk/index.d.ts.map +1 -0
  79. package/dist/sdk/index.js +274 -0
  80. package/dist/sdk/index.js.map +1 -0
  81. package/dist/sdk/types.d.ts +66 -0
  82. package/dist/sdk/types.d.ts.map +1 -0
  83. package/dist/sdk/types.js +3 -0
  84. package/dist/sdk/types.js.map +1 -0
  85. package/package.json +55 -0
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getTRXBalance = exports.getTRC20Balance = exports.sweepNativeTRX = exports.sweepTRC20 = exports.getTronWeb = void 0;
7
+ const tronweb_1 = __importDefault(require("tronweb"));
8
+ const db_context_1 = require("../../config/db.context");
9
+ const constants_1 = require("../../config/constants");
10
+ const hotwallet_1 = require("../../helper/hotwallet");
11
+ const bip39_1 = require("bip39");
12
+ const bip32_1 = require("@scure/bip32");
13
+ const deriveTronPrivateKey = (hdIndex) => {
14
+ const mnemonic = process.env.HD_MNEMONIC;
15
+ if (!mnemonic)
16
+ throw new Error("HD_MNEMONIC is not set");
17
+ const seed = (0, bip39_1.mnemonicToSeedSync)(mnemonic);
18
+ const hd = bip32_1.HDKey.fromMasterSeed(seed);
19
+ const path = `m/44'/195'/0'/0/${hdIndex}`; // ← match their path
20
+ const child = hd.derive(path);
21
+ if (!child.privateKey)
22
+ throw new Error("No private key derived");
23
+ const privateKey = Buffer.from(child.privateKey).toString("hex");
24
+ seed.fill(0);
25
+ return privateKey;
26
+ };
27
+ // ─── TronWeb Instances ────────────────────────────────────────────────────────
28
+ const getTronWeb = (chainConfig) => {
29
+ return new tronweb_1.default({
30
+ fullHost: chainConfig.fullNodeUrl,
31
+ headers: { "TRON-PRO-API-KEY": process.env.TRONGRID_API_KEY || "" },
32
+ });
33
+ };
34
+ exports.getTronWeb = getTronWeb;
35
+ const getFeePayerTronWeb = (chainConfig) => {
36
+ const privateKey = process.env.TRON_FEE_PAYER_PRIVATE_KEY;
37
+ if (!privateKey)
38
+ throw new Error("TRON_FEE_PAYER_PRIVATE_KEY not set");
39
+ return new tronweb_1.default({
40
+ fullHost: chainConfig.fullNodeUrl,
41
+ headers: { "TRON-PRO-API-KEY": process.env.TRONGRID_API_KEY || "" },
42
+ privateKey,
43
+ });
44
+ };
45
+ // ─── TRC20 ABI ────────────────────────────────────────────────────────────────
46
+ const TRC20_ABI = [
47
+ {
48
+ name: "balanceOf",
49
+ inputs: [{ type: "address" }],
50
+ outputs: [{ type: "uint256" }],
51
+ stateMutability: "view",
52
+ type: "function",
53
+ },
54
+ {
55
+ name: "transfer",
56
+ inputs: [{ type: "address" }, { type: "uint256" }],
57
+ outputs: [{ type: "bool" }],
58
+ stateMutability: "nonpayable",
59
+ type: "function",
60
+ },
61
+ ];
62
+ // ─── Wallet Lookup ────────────────────────────────────────────────────────────
63
+ const getWalletHdIndex = async (walletAddress) => {
64
+ const adapter = (0, db_context_1.getDBAdapter)();
65
+ const walletRow = adapter
66
+ ? await adapter.getWalletByAddress(walletAddress)
67
+ : (await (0, db_context_1.dbQuery)("SELECT hd_index FROM wallets WHERE address = ? AND is_active = true", [walletAddress]))[0];
68
+ if (!walletRow)
69
+ throw new Error(`Wallet not found: ${walletAddress}`);
70
+ return walletRow.hd_index;
71
+ };
72
+ // ─── Resource Delegation (Mainnet) ────────────────────────────────────────────
73
+ const delegateResources = async (userAddress, chainConfig) => {
74
+ const feePayerTronWeb = getFeePayerTronWeb(chainConfig);
75
+ const feePayerAddress = feePayerTronWeb.address.fromPrivateKey(process.env.TRON_FEE_PAYER_PRIVATE_KEY);
76
+ try {
77
+ const energyTx = await feePayerTronWeb.transactionBuilder.delegateResource(100000000, userAddress, "ENERGY", feePayerAddress, false);
78
+ const signedEnergy = await feePayerTronWeb.trx.sign(energyTx);
79
+ await feePayerTronWeb.trx.sendRawTransaction(signedEnergy);
80
+ console.log(`[${chainConfig.name}] Delegated ENERGY to ${userAddress}`);
81
+ const bandwidthTx = await feePayerTronWeb.transactionBuilder.delegateResource(100000000, userAddress, "BANDWIDTH", feePayerAddress, false);
82
+ const signedBandwidth = await feePayerTronWeb.trx.sign(bandwidthTx);
83
+ await feePayerTronWeb.trx.sendRawTransaction(signedBandwidth);
84
+ console.log(`[${chainConfig.name}] Delegated BANDWIDTH to ${userAddress}`);
85
+ await new Promise((resolve) => setTimeout(resolve, 6000));
86
+ }
87
+ catch (err) {
88
+ console.error(`[${chainConfig.name}] Failed to delegate resources to ${userAddress}:`, err);
89
+ throw err;
90
+ }
91
+ };
92
+ const undelegateResources = async (userAddress, chainConfig) => {
93
+ const feePayerTronWeb = getFeePayerTronWeb(chainConfig);
94
+ const feePayerAddress = feePayerTronWeb.address.fromPrivateKey(process.env.TRON_FEE_PAYER_PRIVATE_KEY);
95
+ try {
96
+ const energyTx = await feePayerTronWeb.transactionBuilder.undelegateResource(100000000, userAddress, "ENERGY", feePayerAddress);
97
+ const signedEnergy = await feePayerTronWeb.trx.sign(energyTx);
98
+ await feePayerTronWeb.trx.sendRawTransaction(signedEnergy);
99
+ const bandwidthTx = await feePayerTronWeb.transactionBuilder.undelegateResource(100000000, userAddress, "BANDWIDTH", feePayerAddress);
100
+ const signedBandwidth = await feePayerTronWeb.trx.sign(bandwidthTx);
101
+ await feePayerTronWeb.trx.sendRawTransaction(signedBandwidth);
102
+ console.log(`[${chainConfig.name}] Undelegated resources from ${userAddress}`);
103
+ }
104
+ catch (err) {
105
+ console.warn(`[${chainConfig.name}] Failed to undelegate from ${userAddress}:`, err);
106
+ }
107
+ };
108
+ // ─── Fee Strategy ─────────────────────────────────────────────────────────────
109
+ const prepareFees = async (userAddress, chainConfig) => {
110
+ if (chainConfig.networkType === "testnet") {
111
+ console.log(`[${chainConfig.name}] Testnet mode — user wallet pays own fees`);
112
+ }
113
+ else {
114
+ await delegateResources(userAddress, chainConfig);
115
+ }
116
+ };
117
+ // ─── TRC-20 Token Sweep ───────────────────────────────────────────────────────
118
+ const sweepTRC20 = async (walletAddress, chainConfig, token) => {
119
+ const tokenAddress = chainConfig.tokens[token];
120
+ if (!tokenAddress) {
121
+ console.log(`[${chainConfig.name}] ${token} not configured, skipping ${walletAddress}`);
122
+ return { txHash: "", amount: "0" };
123
+ }
124
+ try {
125
+ const hd_index = await getWalletHdIndex(walletAddress);
126
+ const userPrivateKey = deriveTronPrivateKey(hd_index);
127
+ const tronWeb = (0, exports.getTronWeb)(chainConfig);
128
+ tronWeb.setAddress(walletAddress);
129
+ const contract = await tronWeb.contract(TRC20_ABI, tokenAddress);
130
+ const balance = await contract.balanceOf(walletAddress).call();
131
+ const balanceBig = BigInt(balance.toString());
132
+ const threshold = BigInt(Math.floor(constants_1.SWEEP_THRESHOLD_USD * 1000000));
133
+ console.log(`[${chainConfig.name}] Wallet ${walletAddress} ${token} balance: ${balanceBig}`);
134
+ if (balanceBig < threshold) {
135
+ console.log(`[${chainConfig.name}] ${token} balance too low for ${walletAddress}, skipping`);
136
+ return { txHash: "", amount: "0" };
137
+ }
138
+ await prepareFees(walletAddress, chainConfig);
139
+ const tx = await tronWeb.transactionBuilder.triggerSmartContract(tokenAddress, "transfer(address,uint256)", { feeLimit: 100000000, callValue: 0, from: walletAddress }, [
140
+ { type: "address", value: (0, hotwallet_1.getTronHotWallet)() },
141
+ { type: "uint256", value: balanceBig.toString() },
142
+ ], walletAddress);
143
+ if (!tx.result?.result) {
144
+ throw new Error(`Failed to build transaction: ${JSON.stringify(tx.result)}`);
145
+ }
146
+ const signedTx = await tronWeb.trx.sign(tx.transaction, userPrivateKey);
147
+ const receipt = await tronWeb.trx.sendRawTransaction(signedTx);
148
+ if (!receipt.result) {
149
+ if (chainConfig.networkType === "mainnet") {
150
+ await undelegateResources(walletAddress, chainConfig);
151
+ }
152
+ throw new Error(`Transaction failed: ${JSON.stringify(receipt)}`);
153
+ }
154
+ const txHash = receipt.txid;
155
+ const amountFormatted = (Number(balanceBig) / 1000000).toFixed(6);
156
+ console.log(`[${chainConfig.name}] Sweep complete: ${amountFormatted} ${token} → ${(0, hotwallet_1.getTronHotWallet)()}`);
157
+ if (chainConfig.networkType === "mainnet") {
158
+ await undelegateResources(walletAddress, chainConfig);
159
+ }
160
+ await (0, db_context_1.dbQuery)(`INSERT INTO sweep_history
161
+ (wallet_address, chain_id, token, amount, tx_hash, status, created_at)
162
+ VALUES (?, ?, ?, ?, ?, 'success', NOW())`, [walletAddress, chainConfig.name, token, amountFormatted, txHash]);
163
+ return { txHash, amount: amountFormatted };
164
+ }
165
+ catch (err) {
166
+ console.error(`[${chainConfig.name}] TRC-20 sweep failed for ${walletAddress}:`, err);
167
+ await (0, db_context_1.dbQuery)(`INSERT INTO sweep_history
168
+ (wallet_address, chain_id, token, amount, tx_hash, status, error, created_at)
169
+ VALUES (?, ?, ?, '0', NULL, 'failed', ?, NOW())`, [
170
+ walletAddress,
171
+ chainConfig.name,
172
+ token,
173
+ err instanceof Error ? err.message : "Unknown error",
174
+ ]);
175
+ throw err;
176
+ }
177
+ };
178
+ exports.sweepTRC20 = sweepTRC20;
179
+ // ─── Native TRX Sweep ─────────────────────────────────────────────────────────
180
+ const sweepNativeTRX = async (walletAddress, chainConfig) => {
181
+ try {
182
+ const hd_index = await getWalletHdIndex(walletAddress);
183
+ const userPrivateKey = deriveTronPrivateKey(hd_index);
184
+ const tronWeb = (0, exports.getTronWeb)(chainConfig);
185
+ const balanceSUN = await tronWeb.trx.getBalance(walletAddress);
186
+ const balanceTRX = balanceSUN / 1000000;
187
+ console.log(`[${chainConfig.name}] Wallet ${walletAddress} TRX balance: ${balanceTRX}`);
188
+ if (balanceTRX < constants_1.TRX_MIN_SWEEP_THRESHOLD) {
189
+ console.log(`[${chainConfig.name}] TRX balance too low for ${walletAddress}, skipping`);
190
+ return { txHash: "", amount: "0" };
191
+ }
192
+ const BANDWIDTH_FEE_SUN = 270000;
193
+ const keepSUN = 2000000;
194
+ const sweepSUN = balanceSUN - keepSUN - BANDWIDTH_FEE_SUN;
195
+ if (sweepSUN <= 0) {
196
+ console.log(`[${chainConfig.name}] Not enough TRX to sweep after fees for ${walletAddress}`);
197
+ return { txHash: "", amount: "0" };
198
+ }
199
+ const tx = await tronWeb.transactionBuilder.sendTrx((0, hotwallet_1.getTronHotWallet)(), sweepSUN, walletAddress);
200
+ const signedTx = await tronWeb.trx.sign(tx, userPrivateKey);
201
+ const receipt = await tronWeb.trx.sendRawTransaction(signedTx);
202
+ if (!receipt.result) {
203
+ throw new Error(`Transaction failed: ${JSON.stringify(receipt)}`);
204
+ }
205
+ const txHash = receipt.txid;
206
+ const amountFormatted = (sweepSUN / 1000000).toFixed(6);
207
+ console.log(`[${chainConfig.name}] TRX Sweep complete: ${amountFormatted} TRX → ${(0, hotwallet_1.getTronHotWallet)()}`);
208
+ await (0, db_context_1.dbQuery)(`INSERT INTO sweep_history
209
+ (wallet_address, chain_id, token, amount, tx_hash, status, created_at)
210
+ VALUES (?, ?, 'TRX', ?, ?, 'success', NOW())`, [walletAddress, chainConfig.name, amountFormatted, txHash]);
211
+ return { txHash, amount: amountFormatted };
212
+ }
213
+ catch (err) {
214
+ console.error(`[${chainConfig.name}] TRX sweep failed for ${walletAddress}:`, err);
215
+ await (0, db_context_1.dbQuery)(`INSERT INTO sweep_history
216
+ (wallet_address, chain_id, token, amount, tx_hash, status, error, created_at)
217
+ VALUES (?, ?, 'TRX', '0', NULL, 'failed', ?, NOW())`, [
218
+ walletAddress,
219
+ chainConfig.name,
220
+ err instanceof Error ? err.message : "Unknown error",
221
+ ]);
222
+ throw err;
223
+ }
224
+ };
225
+ exports.sweepNativeTRX = sweepNativeTRX;
226
+ // ─── Balance Checks ───────────────────────────────────────────────────────────
227
+ const getTRC20Balance = async (walletAddress, chainConfig, token) => {
228
+ const tokenAddress = chainConfig.tokens[token];
229
+ if (!tokenAddress)
230
+ return 0n;
231
+ try {
232
+ const tronWeb = (0, exports.getTronWeb)(chainConfig);
233
+ tronWeb.setAddress(walletAddress);
234
+ const contract = await tronWeb.contract(TRC20_ABI, tokenAddress);
235
+ const balance = await contract.balanceOf(walletAddress).call();
236
+ return BigInt(balance.toString());
237
+ }
238
+ catch (err) {
239
+ console.error(`[${chainConfig.name}] getTRC20Balance error for ${walletAddress} ${token}:`, err);
240
+ return 0n;
241
+ }
242
+ };
243
+ exports.getTRC20Balance = getTRC20Balance;
244
+ const getTRXBalance = async (walletAddress, chainConfig) => {
245
+ try {
246
+ const tronWeb = (0, exports.getTronWeb)(chainConfig);
247
+ const balanceSUN = await tronWeb.trx.getBalance(walletAddress);
248
+ return balanceSUN / 1000000;
249
+ }
250
+ catch {
251
+ return 0;
252
+ }
253
+ };
254
+ exports.getTRXBalance = getTRXBalance;
255
+ //# sourceMappingURL=tron.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tron.service.js","sourceRoot":"","sources":["../../../../../src/backend/services/chains/tron.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { EVMChainConfig } from "../config/chains";
2
+ export declare const signUserOperation: (userOp: any, chainConfig?: EVMChainConfig) => Promise<string>;
3
+ //# sourceMappingURL=paymaster.service.d.ts.map
@@ -0,0 +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,CA0EhB,CAAC"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.signUserOperation = void 0;
7
+ const ethers_1 = require("ethers");
8
+ const chains_1 = require("../config/chains");
9
+ const index_1 = __importDefault(require("../config/index"));
10
+ const contract_1 = require("../contract/contract");
11
+ const signUserOperation = async (userOp, chainConfig = chains_1.CHAIN_CONFIGS.sepolia) => {
12
+ const validAfter = Math.floor(Date.now() / 1000);
13
+ const validUntil = validAfter + index_1.default.signatureExpirySeconds;
14
+ const paymasterContract = (0, contract_1.getPaymasterContract)(chainConfig);
15
+ const provider = (0, contract_1.getProvider)(chainConfig);
16
+ const connectedSigner = contract_1.signer.connect(provider);
17
+ const initCode = userOp.factory
18
+ ? ethers_1.ethers.concat([userOp.factory, userOp.factoryData || "0x"])
19
+ : "0x";
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;
28
+ const paymasterGasLimitsPacked = ethers_1.ethers.zeroPadValue(ethers_1.ethers.toBeHex((paymasterVerificationGasLimit << 128n) | paymasterPostOpGasLimit), 32);
29
+ const paymasterAndDataForHash = ethers_1.ethers.concat([
30
+ chainConfig.paymasterAddress,
31
+ paymasterGasLimitsPacked,
32
+ ethers_1.ethers.AbiCoder.defaultAbiCoder().encode(["uint48", "uint48"], [validUntil, validAfter]),
33
+ "0x" + "00".repeat(65),
34
+ ]);
35
+ const hash = await paymasterContract.getHash({
36
+ sender: userOp.sender,
37
+ nonce: userOp.nonce,
38
+ initCode,
39
+ callData: userOp.callData,
40
+ accountGasLimits,
41
+ preVerificationGas: userOp.preVerificationGas || 0,
42
+ gasFees,
43
+ paymasterAndData: paymasterAndDataForHash,
44
+ signature: userOp.signature || "0x",
45
+ }, validUntil, validAfter);
46
+ console.log(`[${chainConfig.name}] Hash from contract getHash: ${hash}`);
47
+ const signature = await connectedSigner.signMessage(ethers_1.ethers.getBytes(hash));
48
+ const paymasterData = ethers_1.ethers.concat([
49
+ ethers_1.ethers.AbiCoder.defaultAbiCoder().encode(["uint48", "uint48"], [validUntil, validAfter]),
50
+ signature,
51
+ ]);
52
+ return paymasterData;
53
+ };
54
+ exports.signUserOperation = signUserOperation;
55
+ //# sourceMappingURL=paymaster.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paymaster.service.js","sourceRoot":"","sources":["../../../../src/backend/services/paymaster.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { ChainConfig } from "../config/chains";
2
+ import { TokenKey } from "../config/constants";
3
+ export declare const getAllWallets: (chainType: string) => Promise<string[]>;
4
+ export declare const getTokensAboveThreshold: (walletAddress: string, chainConfig: ChainConfig) => Promise<TokenKey[]>;
5
+ export declare const isNativeAboveThreshold: (walletAddress: string, chainConfig: ChainConfig) => Promise<boolean>;
6
+ export declare const triggerTokenSweep: (walletAddress: string, chainConfig: ChainConfig, token: TokenKey) => Promise<{
7
+ txHash: string;
8
+ amount: string;
9
+ }>;
10
+ export declare const triggerNativeSweep: (walletAddress: string, chainConfig: ChainConfig) => Promise<{
11
+ txHash: string;
12
+ amount: string;
13
+ }>;
14
+ //# sourceMappingURL=sweep.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sweep.service.d.ts","sourceRoot":"","sources":["../../../../src/backend/services/sweep.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAOZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,QAAQ,EAIT,MAAM,qBAAqB,CAAC;AAuB7B,eAAO,MAAM,aAAa,GAAU,WAAW,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAcvE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,eAAe,MAAM,EACrB,aAAa,WAAW,KACvB,OAAO,CAAC,QAAQ,EAAE,CAyBpB,CAAC;AAGF,eAAO,MAAM,sBAAsB,GACjC,eAAe,MAAM,EACrB,aAAa,WAAW,KACvB,OAAO,CAAC,OAAO,CAYjB,CAAC;AAGF,eAAO,MAAM,iBAAiB,GAC5B,eAAe,MAAM,EACrB,aAAa,WAAW,EACxB,OAAO,QAAQ,KACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAS5C,CAAC;AAGF,eAAO,MAAM,kBAAkB,GAC7B,eAAe,MAAM,EACrB,aAAa,WAAW,KACvB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAS5C,CAAC"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.triggerNativeSweep = exports.triggerTokenSweep = exports.isNativeAboveThreshold = exports.getTokensAboveThreshold = exports.getAllWallets = void 0;
4
+ const chains_1 = require("../config/chains");
5
+ const constants_1 = require("../config/constants");
6
+ const evm_service_1 = require("./chains/evm.service");
7
+ const solana_service_1 = require("./chains/solana.service");
8
+ const tron_service_1 = require("./chains/tron.service");
9
+ const db_context_1 = require("../config/db.context");
10
+ const db_context_2 = require("../config/db.context");
11
+ // ─── Get All Wallets ──────────────────────────────────────────────────────────
12
+ const getAllWallets = async (chainType) => {
13
+ const adapter = (0, db_context_2.getDBAdapter)();
14
+ if (adapter) {
15
+ // use adapter — respects custom column names
16
+ const rows = await adapter.getWalletsByChainType(chainType);
17
+ return rows.map((r) => r.address);
18
+ }
19
+ // standalone fallback
20
+ const rows = await (0, db_context_1.dbQuery)("SELECT address FROM wallets WHERE chain = ? AND is_active = true", [chainType]);
21
+ return rows.map((r) => r.address);
22
+ };
23
+ exports.getAllWallets = getAllWallets;
24
+ // ─── Token Threshold Check ────────────────────────────────────────────────────
25
+ const getTokensAboveThreshold = async (walletAddress, chainConfig) => {
26
+ const tokensToSweep = [];
27
+ const threshold = BigInt(Math.floor(constants_1.SWEEP_THRESHOLD_USD * 1000000));
28
+ if ((0, chains_1.isEVMConfig)(chainConfig)) {
29
+ for (const token of ["USDC", "USDT"]) {
30
+ if (!chainConfig.tokens[token])
31
+ continue;
32
+ const balance = await (0, evm_service_1.getERC20Balance)(walletAddress, chainConfig, token);
33
+ if (balance >= threshold)
34
+ tokensToSweep.push(token);
35
+ }
36
+ }
37
+ else if ((0, chains_1.isSolanaConfig)(chainConfig)) {
38
+ for (const token of ["USDC", "USDT"]) {
39
+ if (!chainConfig.tokens[token])
40
+ continue;
41
+ const balance = await (0, solana_service_1.getSPLBalance)(walletAddress, chainConfig, token);
42
+ if (balance >= threshold)
43
+ tokensToSweep.push(token);
44
+ }
45
+ }
46
+ else if ((0, chains_1.isTronConfig)(chainConfig)) {
47
+ for (const token of ["USDC", "USDT"]) {
48
+ if (!chainConfig.tokens[token])
49
+ continue;
50
+ const balance = await (0, tron_service_1.getTRC20Balance)(walletAddress, chainConfig, token);
51
+ if (balance >= threshold)
52
+ tokensToSweep.push(token);
53
+ }
54
+ }
55
+ return tokensToSweep;
56
+ };
57
+ exports.getTokensAboveThreshold = getTokensAboveThreshold;
58
+ // ─── Native Threshold Check ───────────────────────────────────────────────────
59
+ const isNativeAboveThreshold = async (walletAddress, chainConfig) => {
60
+ if ((0, chains_1.isEVMConfig)(chainConfig)) {
61
+ const balance = await (0, evm_service_1.getNativeETHBalance)(walletAddress, chainConfig);
62
+ return balance >= constants_1.SWEEP_THRESHOLD_USD;
63
+ }
64
+ else if ((0, chains_1.isSolanaConfig)(chainConfig)) {
65
+ const balance = await (0, solana_service_1.getNativeSOLBalance)(walletAddress, chainConfig);
66
+ return balance >= constants_1.SOL_MIN_SWEEP_THRESHOLD;
67
+ }
68
+ else if ((0, chains_1.isTronConfig)(chainConfig)) {
69
+ const balance = await (0, tron_service_1.getTRXBalance)(walletAddress, chainConfig);
70
+ return balance >= constants_1.TRX_MIN_SWEEP_THRESHOLD;
71
+ }
72
+ return false;
73
+ };
74
+ exports.isNativeAboveThreshold = isNativeAboveThreshold;
75
+ // ─── Token Sweep Router ───────────────────────────────────────────────────────
76
+ const triggerTokenSweep = async (walletAddress, chainConfig, token) => {
77
+ if ((0, chains_1.isEVMConfig)(chainConfig)) {
78
+ return (0, evm_service_1.sweepERC20)(walletAddress, chainConfig, token);
79
+ }
80
+ else if ((0, chains_1.isSolanaConfig)(chainConfig)) {
81
+ return (0, solana_service_1.sweepSPLToken)(walletAddress, chainConfig, token);
82
+ }
83
+ else if ((0, chains_1.isTronConfig)(chainConfig)) {
84
+ return (0, tron_service_1.sweepTRC20)(walletAddress, chainConfig, token);
85
+ }
86
+ throw new Error(`Unsupported chain: ${chainConfig.chainKey}`);
87
+ };
88
+ exports.triggerTokenSweep = triggerTokenSweep;
89
+ // ─── Native Sweep Router ──────────────────────────────────────────────────────
90
+ const triggerNativeSweep = async (walletAddress, chainConfig) => {
91
+ if ((0, chains_1.isEVMConfig)(chainConfig)) {
92
+ return (0, evm_service_1.sweepNativeETH)(walletAddress, chainConfig);
93
+ }
94
+ else if ((0, chains_1.isSolanaConfig)(chainConfig)) {
95
+ return (0, solana_service_1.sweepNativeSOL)(walletAddress, chainConfig);
96
+ }
97
+ else if ((0, chains_1.isTronConfig)(chainConfig)) {
98
+ return (0, tron_service_1.sweepNativeTRX)(walletAddress, chainConfig);
99
+ }
100
+ throw new Error(`Unsupported chain: ${chainConfig.chainKey}`);
101
+ };
102
+ exports.triggerNativeSweep = triggerNativeSweep;
103
+ //# sourceMappingURL=sweep.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sweep.service.js","sourceRoot":"","sources":["../../../../src/backend/services/sweep.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { ChainConfig } from "../config/chains";
2
+ import { SweepCompleteEvent, SweepFailedEvent } from "../../sdk/types";
3
+ export interface SweepCallbacks {
4
+ onSweepComplete?: (event: SweepCompleteEvent) => Promise<void>;
5
+ onSweepFailed?: (event: SweepFailedEvent) => Promise<void>;
6
+ }
7
+ export declare const startSweepWorker: (chainConfig: ChainConfig, callbacks?: SweepCallbacks) => (() => void) | undefined;
8
+ export declare const stopSweepWorker: () => void;
9
+ export declare const stopAllSweepWorkers: () => void;
10
+ export declare const runSweepCycle: (chainConfig: ChainConfig, callbacks?: SweepCallbacks) => Promise<void>;
11
+ //# sourceMappingURL=sweep.worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sweep.worker.d.ts","sourceRoot":"","sources":["../../../../src/backend/services/sweep.worker.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGvE,MAAM,WAAW,cAAc;IAC7B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAID,eAAO,MAAM,gBAAgB,GAC3B,aAAa,WAAW,EACxB,YAAY,cAAc,6BA2B3B,CAAC;AAEF,eAAO,MAAM,eAAe,YAM3B,CAAC;AAEF,eAAO,MAAM,mBAAmB,YAAkB,CAAC;AAEnD,eAAO,MAAM,aAAa,GACxB,aAAa,WAAW,EACxB,YAAY,cAAc,kBAmE3B,CAAC"}