@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 @@
1
+ {"version":3,"file":"evm.service.d.ts","sourceRoot":"","sources":["../../../../../src/backend/services/chains/evm.service.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,cAAc,EAAiB,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,QAAQ,EAA2B,MAAM,wBAAwB,CAAC;AAmC3E,eAAO,MAAM,eAAe,GAAI,aAAa,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;irBAmVknB,CAAC;;;;;;;;;;;;;;;;;;;;yBAA+qR,CAAC;mCAA6lC,CAAC;;;;;;;;;;;;;;;;;yeAAumoB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA9Uni9B,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,iBAAiB,MAAM,EACvB,cAAa,cAAwD;;;;;;;;;;;wTAnB/C,CAAA;sBACd,CAAT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAwDiC,CAAC;mBACzB,CAAD;;2BAMiB,CAAC;WAAe,CAAC;;iCAQvB,CAAC;;;;;;;;;;eAsDC,CAAC;;;mBAOjB,CAAA;;;;;;;;yBA1CL,CAAC;AAGF,eAAO,MAAM,UAAU,GACrB,eAAe,MAAM,EACrB,aAAa,cAAc,EAC3B,OAAO,QAAQ,KACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA2G5C,CAAC;AAGF,eAAO,MAAM,cAAc,GACzB,eAAe,MAAM,EACrB,aAAa,cAAc,KAC1B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA+F5C,CAAC;AAGF,eAAO,MAAM,eAAe,GAC1B,eAAe,MAAM,EACrB,aAAa,cAAc,EAC3B,OAAO,QAAQ,KACd,OAAO,CAAC,MAAM,CAoBhB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,eAAe,MAAM,EACrB,aAAa,cAAc,KAC1B,OAAO,CAAC,MAAM,CAUhB,CAAC"}
@@ -0,0 +1,263 @@
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.getNativeETHBalance = exports.getERC20Balance = exports.sweepNativeETH = exports.sweepERC20 = exports.getSmartAccountClient = exports.getPublicClient = void 0;
7
+ const viem_1 = require("viem");
8
+ const accounts_1 = require("viem/accounts");
9
+ const ethers_1 = require("ethers");
10
+ const permissionless_1 = require("permissionless");
11
+ const accounts_2 = require("permissionless/accounts");
12
+ const pimlico_1 = require("permissionless/clients/pimlico");
13
+ const account_abstraction_1 = require("viem/account-abstraction");
14
+ const chains_1 = require("../../config/chains");
15
+ const constants_1 = require("../../config/constants");
16
+ const db_context_1 = require("../../config/db.context");
17
+ const paymaster_service_1 = require("../paymaster.service");
18
+ const ERC20Abi_json_1 = __importDefault(require("../../contract/abi/ERC20Abi.json"));
19
+ const hotwallet_1 = require("../../helper/hotwallet");
20
+ const getMasterWallet = () => {
21
+ const mnemonic = process.env.HD_MNEMONIC;
22
+ if (!mnemonic) {
23
+ throw new Error("HD_MNEMONIC is not set");
24
+ }
25
+ return ethers_1.HDNodeWallet.fromMnemonic(ethers_1.Mnemonic.fromPhrase(mnemonic));
26
+ };
27
+ const derivePrivateKey = (hdIndex) => {
28
+ return getMasterWallet().deriveChild(hdIndex).privateKey;
29
+ };
30
+ // ─── Wallet Lookup ────────────────────────────────────────────────────────────
31
+ const getWalletHdIndex = async (walletAddress) => {
32
+ const adapter = (0, db_context_1.getDBAdapter)();
33
+ const walletRow = adapter
34
+ ? await adapter.getWalletByAddress(walletAddress)
35
+ : (await (0, db_context_1.dbQuery)("SELECT hd_index FROM wallets WHERE address = ? AND is_active = true", [walletAddress]))[0];
36
+ if (!walletRow)
37
+ throw new Error(`Wallet not found: ${walletAddress}`);
38
+ return walletRow.hd_index;
39
+ };
40
+ const getPublicClient = (chainConfig) => {
41
+ return (0, viem_1.createPublicClient)({
42
+ chain: chainConfig.viemChain,
43
+ transport: (0, viem_1.http)(chainConfig.rpcUrl),
44
+ });
45
+ };
46
+ exports.getPublicClient = getPublicClient;
47
+ const getSmartAccountClient = async (ownerPrivateKey, chainConfig = chains_1.CHAIN_CONFIGS.sepolia) => {
48
+ const publicClient = (0, exports.getPublicClient)(chainConfig);
49
+ const owner = (0, accounts_1.privateKeyToAccount)(ownerPrivateKey);
50
+ const smartAccount = await (0, accounts_2.toSimpleSmartAccount)({
51
+ client: publicClient,
52
+ owner,
53
+ entryPoint: {
54
+ address: account_abstraction_1.entryPoint07Address,
55
+ version: "0.7",
56
+ },
57
+ });
58
+ const pimlicoClient = (0, pimlico_1.createPimlicoClient)({
59
+ transport: (0, viem_1.http)(chainConfig.bundlerRpc),
60
+ entryPoint: {
61
+ address: account_abstraction_1.entryPoint07Address,
62
+ version: "0.7",
63
+ },
64
+ });
65
+ const smartAccountClient = (0, permissionless_1.createSmartAccountClient)({
66
+ account: smartAccount,
67
+ chain: chainConfig.viemChain,
68
+ bundlerTransport: (0, viem_1.http)(chainConfig.bundlerRpc),
69
+ paymaster: {
70
+ async getPaymasterStubData(userOperation) {
71
+ const serializedUserOp = JSON.parse(JSON.stringify(userOperation, (_, value) => typeof value === "bigint" ? value.toString() : value));
72
+ const paymasterData = await (0, paymaster_service_1.signUserOperation)(serializedUserOp, chainConfig);
73
+ return {
74
+ paymaster: chainConfig.paymasterAddress,
75
+ paymasterData: paymasterData,
76
+ paymasterVerificationGasLimit: 200000n,
77
+ paymasterPostOpGasLimit: 100000n,
78
+ isFinal: true,
79
+ };
80
+ },
81
+ async getPaymasterData(userOperation) {
82
+ const serializedUserOp = JSON.parse(JSON.stringify(userOperation, (_, value) => typeof value === "bigint" ? value.toString() : value));
83
+ const paymasterData = await (0, paymaster_service_1.signUserOperation)(serializedUserOp, chainConfig);
84
+ return {
85
+ paymaster: chainConfig.paymasterAddress,
86
+ paymasterData: paymasterData,
87
+ paymasterVerificationGasLimit: 200000n,
88
+ paymasterPostOpGasLimit: 100000n,
89
+ };
90
+ },
91
+ },
92
+ userOperation: {
93
+ estimateFeesPerGas: async () => {
94
+ const fees = await pimlicoClient.getUserOperationGasPrice();
95
+ return fees.fast;
96
+ },
97
+ },
98
+ });
99
+ return smartAccountClient;
100
+ };
101
+ exports.getSmartAccountClient = getSmartAccountClient;
102
+ // ─── ERC-20 Token Sweep ───────────────────────────────────────────────────────
103
+ const sweepERC20 = async (walletAddress, chainConfig, token) => {
104
+ const tokenAddress = chainConfig.tokens[token];
105
+ if (!tokenAddress || tokenAddress.includes("DUMMY")) {
106
+ console.log(`[${chainConfig.name}] ${token} not configured, skipping ${walletAddress}`);
107
+ return { txHash: "", amount: "0" };
108
+ }
109
+ try {
110
+ const hd_index = await getWalletHdIndex(walletAddress);
111
+ const privateKey = derivePrivateKey(hd_index);
112
+ const publicClient = (0, exports.getPublicClient)(chainConfig);
113
+ const balance = await publicClient.readContract({
114
+ address: tokenAddress,
115
+ abi: ERC20Abi_json_1.default,
116
+ functionName: "balanceOf",
117
+ args: [walletAddress],
118
+ });
119
+ console.log(`[${chainConfig.name}] Wallet ${walletAddress} ${token} balance: ${balance}`);
120
+ if (balance === 0n) {
121
+ console.log(`[${chainConfig.name}] Wallet ${walletAddress} has zero ${token}, skipping`);
122
+ return { txHash: "", amount: "0" };
123
+ }
124
+ const smartAccountClient = await (0, exports.getSmartAccountClient)(privateKey, chainConfig);
125
+ const callData = (0, viem_1.encodeFunctionData)({
126
+ abi: ERC20Abi_json_1.default,
127
+ functionName: "transfer",
128
+ args: [(0, hotwallet_1.getEVMHotWallet)(), balance], // ← hot wallet goes here
129
+ });
130
+ const userOpHash = await smartAccountClient.sendUserOperation({
131
+ calls: [
132
+ { to: tokenAddress, value: 0n, data: callData }, // ← token contract goes here
133
+ ],
134
+ });
135
+ console.log(`[${chainConfig.name}] UserOperation submitted: ${userOpHash}`);
136
+ const receipt = (await Promise.race([
137
+ smartAccountClient.waitForUserOperationReceipt({ hash: userOpHash }),
138
+ new Promise((_, reject) => setTimeout(() => reject(new Error("UserOp receipt timeout after 60s")), 60000)),
139
+ ]));
140
+ const txHash = receipt.receipt.transactionHash;
141
+ const amountFormatted = (Number(balance) / 1000000).toFixed(6);
142
+ console.log(`[${chainConfig.name}] Sweep complete: ${amountFormatted} ${token} → ${(0, hotwallet_1.getEVMHotWallet)()}`);
143
+ console.log(`[${chainConfig.name}] Tx hash: ${txHash}`);
144
+ await (0, db_context_1.dbQuery)(`INSERT INTO sweep_history
145
+ (wallet_address, chain_id, token, amount, tx_hash, status, created_at)
146
+ VALUES (?, ?, ?, ?, ?, 'success', NOW())`, [walletAddress, chainConfig.chainId, token, amountFormatted, txHash]);
147
+ return { txHash, amount: amountFormatted };
148
+ }
149
+ catch (err) {
150
+ const isSenderAlreadyConstructed = err?.shortMessage?.includes("Smart Account has already been deployed") ||
151
+ err?.cause?.shortMessage?.includes("Smart Account has already been deployed") ||
152
+ err?.details?.includes("AA10") ||
153
+ err?.cause?.details?.includes("AA10");
154
+ if (isSenderAlreadyConstructed) {
155
+ console.log(`[${chainConfig.name}] Wallet ${walletAddress} already deployed (AA10) — skipping`);
156
+ return { txHash: "", amount: "0" };
157
+ }
158
+ await (0, db_context_1.dbQuery)(`INSERT INTO sweep_history
159
+ (wallet_address, chain_id, token, amount, tx_hash, status, error, created_at)
160
+ VALUES (?, ?, ?, '0', NULL, 'failed', ?, NOW())`, [
161
+ walletAddress,
162
+ chainConfig.chainId,
163
+ token,
164
+ err instanceof Error ? err.message : "Unknown error",
165
+ ]);
166
+ throw err;
167
+ }
168
+ };
169
+ exports.sweepERC20 = sweepERC20;
170
+ // ─── Native ETH Sweep ─────────────────────────────────────────────────────────
171
+ const sweepNativeETH = async (walletAddress, chainConfig) => {
172
+ try {
173
+ const hd_index = await getWalletHdIndex(walletAddress);
174
+ const privateKey = derivePrivateKey(hd_index);
175
+ const publicClient = (0, exports.getPublicClient)(chainConfig);
176
+ const balance = await publicClient.getBalance({
177
+ address: walletAddress,
178
+ });
179
+ console.log(`[${chainConfig.name}] Wallet ${walletAddress} ETH balance: ${balance} wei`);
180
+ const MIN_ETH_THRESHOLD = (0, viem_1.parseEther)(constants_1.ETH_MIN_SWEEP_THRESHOLD);
181
+ if (balance < MIN_ETH_THRESHOLD) {
182
+ console.log(`[${chainConfig.name}] Wallet ${walletAddress} ETH balance too low, skipping`);
183
+ return { txHash: "", amount: "0" };
184
+ }
185
+ const smartAccountClient = await (0, exports.getSmartAccountClient)(privateKey, chainConfig);
186
+ const userOpHash = await smartAccountClient.sendUserOperation({
187
+ calls: [
188
+ {
189
+ to: (0, hotwallet_1.getEVMHotWallet)(),
190
+ value: balance,
191
+ data: "0x",
192
+ },
193
+ ],
194
+ });
195
+ console.log(`[${chainConfig.name}] ETH UserOperation submitted: ${userOpHash}`);
196
+ const receipt = (await Promise.race([
197
+ smartAccountClient.waitForUserOperationReceipt({ hash: userOpHash }),
198
+ new Promise((_, reject) => setTimeout(() => reject(new Error("UserOp receipt timeout after 60s")), 60000)),
199
+ ]));
200
+ const txHash = receipt.receipt.transactionHash;
201
+ const amountFormatted = (0, viem_1.formatEther)(balance);
202
+ console.log(`[${chainConfig.name}] ETH Sweep complete: ${amountFormatted} ETH → ${(0, hotwallet_1.getEVMHotWallet)()}`);
203
+ console.log(`[${chainConfig.name}] Tx hash: ${txHash}`);
204
+ await (0, db_context_1.dbQuery)(`INSERT INTO sweep_history
205
+ (wallet_address, chain_id, token, amount, tx_hash, status, created_at)
206
+ VALUES (?, ?, 'ETH', ?, ?, 'success', NOW())`, [walletAddress, chainConfig.chainId, amountFormatted, txHash]);
207
+ return { txHash, amount: amountFormatted };
208
+ }
209
+ catch (err) {
210
+ const isSenderAlreadyConstructed = err?.shortMessage?.includes("Smart Account has already been deployed") ||
211
+ err?.cause?.shortMessage?.includes("Smart Account has already been deployed") ||
212
+ err?.details?.includes("AA10") ||
213
+ err?.cause?.details?.includes("AA10");
214
+ if (isSenderAlreadyConstructed) {
215
+ console.log(`[${chainConfig.name}] Wallet ${walletAddress} already deployed (AA10) — skipping`);
216
+ return { txHash: "", amount: "0" };
217
+ }
218
+ await (0, db_context_1.dbQuery)(`INSERT INTO sweep_history
219
+ (wallet_address, chain_id, token, amount, tx_hash, status, error, created_at)
220
+ VALUES (?, ?, 'ETH', '0', NULL, 'failed', ?, NOW())`, [
221
+ walletAddress,
222
+ chainConfig.chainId,
223
+ err instanceof Error ? err.message : "Unknown error",
224
+ ]);
225
+ throw err;
226
+ }
227
+ };
228
+ exports.sweepNativeETH = sweepNativeETH;
229
+ // ─── Balance Checks ───────────────────────────────────────────────────────────
230
+ const getERC20Balance = async (walletAddress, chainConfig, token) => {
231
+ const tokenAddress = chainConfig.tokens[token];
232
+ if (!tokenAddress || tokenAddress.includes("DUMMY"))
233
+ return 0n;
234
+ try {
235
+ const publicClient = (0, exports.getPublicClient)(chainConfig);
236
+ const balance = await publicClient.readContract({
237
+ address: tokenAddress,
238
+ abi: ERC20Abi_json_1.default,
239
+ functionName: "balanceOf",
240
+ args: [walletAddress],
241
+ });
242
+ return balance;
243
+ }
244
+ catch (err) {
245
+ console.error(`[${chainConfig.name}] getERC20Balance error for ${walletAddress} ${token}:`, err);
246
+ return 0n;
247
+ }
248
+ };
249
+ exports.getERC20Balance = getERC20Balance;
250
+ const getNativeETHBalance = async (walletAddress, chainConfig) => {
251
+ try {
252
+ const publicClient = (0, exports.getPublicClient)(chainConfig);
253
+ const balance = await publicClient.getBalance({
254
+ address: walletAddress,
255
+ });
256
+ return Number((0, viem_1.formatEther)(balance));
257
+ }
258
+ catch {
259
+ return 0;
260
+ }
261
+ };
262
+ exports.getNativeETHBalance = getNativeETHBalance;
263
+ //# sourceMappingURL=evm.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm.service.js","sourceRoot":"","sources":["../../../../../src/backend/services/chains/evm.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { Connection } from "@solana/web3.js";
2
+ import { TokenKey } from "../../config/constants";
3
+ import { SolanaChainConfig } from "../../config/chains";
4
+ export declare const getSolanaConnection: (chainConfig: SolanaChainConfig) => Connection;
5
+ export declare const sweepSPLToken: (walletAddress: string, chainConfig: SolanaChainConfig, token: TokenKey) => Promise<{
6
+ txHash: string;
7
+ amount: string;
8
+ }>;
9
+ export declare const sweepNativeSOL: (walletAddress: string, chainConfig: SolanaChainConfig) => Promise<{
10
+ txHash: string;
11
+ amount: string;
12
+ }>;
13
+ export declare const getSPLBalance: (walletAddress: string, chainConfig: SolanaChainConfig, token: TokenKey) => Promise<bigint>;
14
+ export declare const getNativeSOLBalance: (walletAddress: string, chainConfig: SolanaChainConfig) => Promise<number>;
15
+ //# sourceMappingURL=solana.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.service.d.ts","sourceRoot":"","sources":["../../../../../src/backend/services/chains/solana.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAOX,MAAM,iBAAiB,CAAC;AAWzB,OAAO,EACL,QAAQ,EAGT,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AA6CxD,eAAO,MAAM,mBAAmB,GAC9B,aAAa,iBAAiB,KAC7B,UAEF,CAAC;AAGF,eAAO,MAAM,aAAa,GACxB,eAAe,MAAM,EACrB,aAAa,iBAAiB,EAC9B,OAAO,QAAQ,KACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAyH5C,CAAC;AAGF,eAAO,MAAM,cAAc,GACzB,eAAe,MAAM,EACrB,aAAa,iBAAiB,KAC7B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA0F5C,CAAC;AAGF,eAAO,MAAM,aAAa,GACxB,eAAe,MAAM,EACrB,aAAa,iBAAiB,EAC9B,OAAO,QAAQ,KACd,OAAO,CAAC,MAAM,CAiBhB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,eAAe,MAAM,EACrB,aAAa,iBAAiB,KAC7B,OAAO,CAAC,MAAM,CAQhB,CAAC"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getNativeSOLBalance = exports.getSPLBalance = exports.sweepNativeSOL = exports.sweepSPLToken = exports.getSolanaConnection = void 0;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ const spl_token_1 = require("@solana/spl-token");
6
+ const ed25519_hd_key_1 = require("ed25519-hd-key");
7
+ const db_context_1 = require("../../config/db.context");
8
+ const constants_1 = require("../../config/constants");
9
+ const hotwallet_1 = require("../../helper/hotwallet");
10
+ const bip39_1 = require("bip39");
11
+ let feePayerKeypair = null;
12
+ const getFeePayerKeypair = () => {
13
+ if (!feePayerKeypair) {
14
+ const privateKeyBase58 = process.env.SOLANA_FEE_PAYER_PRIVATE_KEY;
15
+ if (!privateKeyBase58) {
16
+ throw new Error("SOLANA_FEE_PAYER_PRIVATE_KEY not set in .env");
17
+ }
18
+ const bs58 = require("bs58");
19
+ feePayerKeypair = web3_js_1.Keypair.fromSecretKey(bs58.decode(privateKeyBase58));
20
+ }
21
+ return feePayerKeypair;
22
+ };
23
+ const deriveSolanaKeypair = (hdIndex) => {
24
+ const mnemonic = process.env.HD_MNEMONIC;
25
+ const root = "m/44'/501'/0'";
26
+ const seed = (0, bip39_1.mnemonicToSeedSync)(mnemonic);
27
+ const path = `${root}/${hdIndex}'`; // becomes m/44'/501'/0'/0' m/44'/501'/0'/1' etc
28
+ const { key } = (0, ed25519_hd_key_1.derivePath)(path, seed.toString("hex"));
29
+ seed.fill(0);
30
+ return web3_js_1.Keypair.fromSeed(key);
31
+ };
32
+ // ─── Wallet Lookup ────────────────────────────────────────────────────────────
33
+ const getWalletHdIndex = async (walletAddress) => {
34
+ const adapter = (0, db_context_1.getDBAdapter)();
35
+ const walletRow = adapter
36
+ ? await adapter.getWalletByAddress(walletAddress)
37
+ : (await (0, db_context_1.dbQuery)("SELECT hd_index FROM wallets WHERE address = ? AND is_active = true", [walletAddress]))[0];
38
+ if (!walletRow)
39
+ throw new Error(`Wallet not found: ${walletAddress}`);
40
+ return walletRow.hd_index;
41
+ };
42
+ // ─── Connection ───────────────────────────────────────────────────────────────
43
+ const getSolanaConnection = (chainConfig) => {
44
+ return new web3_js_1.Connection(chainConfig.rpcUrl, "confirmed");
45
+ };
46
+ exports.getSolanaConnection = getSolanaConnection;
47
+ // ─── SPL Token Sweep ──────────────────────────────────────────────────────────
48
+ const sweepSPLToken = async (walletAddress, chainConfig, token) => {
49
+ const tokenMint = chainConfig.tokens[token];
50
+ if (!tokenMint) {
51
+ console.log(`[${chainConfig.name}] ${token} not configured, skipping ${walletAddress}`);
52
+ return { txHash: "", amount: "0" };
53
+ }
54
+ try {
55
+ const hd_index = await getWalletHdIndex(walletAddress);
56
+ const userKeypair = deriveSolanaKeypair(hd_index);
57
+ const feePayer = getFeePayerKeypair();
58
+ const connection = (0, exports.getSolanaConnection)(chainConfig);
59
+ const mintPublicKey = new web3_js_1.PublicKey(tokenMint);
60
+ const walletPublicKey = new web3_js_1.PublicKey(walletAddress);
61
+ const hotWalletPublicKey = new web3_js_1.PublicKey((0, hotwallet_1.getSolanaHotWallet)());
62
+ const userTokenAccount = await (0, spl_token_1.getAssociatedTokenAddress)(mintPublicKey, walletPublicKey);
63
+ let tokenAccountInfo;
64
+ try {
65
+ tokenAccountInfo = await (0, spl_token_1.getAccount)(connection, userTokenAccount);
66
+ }
67
+ catch {
68
+ console.log(`[${chainConfig.name}] No ${token} token account for ${walletAddress}, skipping`);
69
+ return { txHash: "", amount: "0" };
70
+ }
71
+ const balance = tokenAccountInfo.amount;
72
+ const threshold = BigInt(Math.floor(constants_1.SWEEP_THRESHOLD_USD * 1000000));
73
+ if (balance < threshold) {
74
+ console.log(`[${chainConfig.name}] ${token} balance too low for ${walletAddress}, skipping`);
75
+ return { txHash: "", amount: "0" };
76
+ }
77
+ console.log(`[${chainConfig.name}] Wallet ${walletAddress} ${token} balance: ${balance}`);
78
+ const hotWalletTokenAccount = await (0, spl_token_1.getAssociatedTokenAddress)(mintPublicKey, hotWalletPublicKey);
79
+ const transaction = new web3_js_1.Transaction();
80
+ transaction.feePayer = feePayer.publicKey;
81
+ try {
82
+ await (0, spl_token_1.getAccount)(connection, hotWalletTokenAccount);
83
+ }
84
+ catch {
85
+ transaction.add((0, spl_token_1.createAssociatedTokenAccountInstruction)(feePayer.publicKey, hotWalletTokenAccount, hotWalletPublicKey, mintPublicKey));
86
+ }
87
+ transaction.add((0, spl_token_1.createTransferInstruction)(userTokenAccount, hotWalletTokenAccount, walletPublicKey, balance, [], spl_token_1.TOKEN_PROGRAM_ID));
88
+ const txHash = await (0, web3_js_1.sendAndConfirmTransaction)(connection, transaction, [feePayer, userKeypair], { commitment: "confirmed" });
89
+ const amountFormatted = (Number(balance) / 1000000).toFixed(6);
90
+ console.log(`[${chainConfig.name}] Sweep complete: ${amountFormatted} ${token} → ${(0, hotwallet_1.getSolanaHotWallet)()}`);
91
+ console.log(`[${chainConfig.name}] Tx hash: ${txHash}`);
92
+ await (0, db_context_1.dbQuery)(`INSERT INTO sweep_history
93
+ (wallet_address, chain_id, token, amount, tx_hash, status, created_at)
94
+ VALUES (?, ?, ?, ?, ?, 'success', NOW())`, [walletAddress, chainConfig.cluster, token, amountFormatted, txHash]);
95
+ return { txHash, amount: amountFormatted };
96
+ }
97
+ catch (err) {
98
+ console.error(`[${chainConfig.name}] SPL sweep failed for ${walletAddress}:`, err);
99
+ await (0, db_context_1.dbQuery)(`INSERT INTO sweep_history
100
+ (wallet_address, chain_id, token, amount, tx_hash, status, error, created_at)
101
+ VALUES (?, ?, ?, '0', NULL, 'failed', ?, NOW())`, [
102
+ walletAddress,
103
+ chainConfig.cluster,
104
+ token,
105
+ err instanceof Error ? err.message : "Unknown error",
106
+ ]);
107
+ throw err;
108
+ }
109
+ };
110
+ exports.sweepSPLToken = sweepSPLToken;
111
+ // ─── Native SOL Sweep ─────────────────────────────────────────────────────────
112
+ const sweepNativeSOL = async (walletAddress, chainConfig) => {
113
+ try {
114
+ const hd_index = await getWalletHdIndex(walletAddress);
115
+ const userKeypair = deriveSolanaKeypair(hd_index);
116
+ const feePayer = getFeePayerKeypair();
117
+ const connection = (0, exports.getSolanaConnection)(chainConfig);
118
+ const walletPublicKey = new web3_js_1.PublicKey(walletAddress);
119
+ const hotWalletPublicKey = new web3_js_1.PublicKey((0, hotwallet_1.getSolanaHotWallet)());
120
+ const balanceLamports = await connection.getBalance(walletPublicKey);
121
+ const balanceSOL = balanceLamports / web3_js_1.LAMPORTS_PER_SOL;
122
+ console.log(`[${chainConfig.name}] Wallet ${walletAddress} SOL balance: ${balanceSOL}`);
123
+ if (balanceSOL < constants_1.SOL_MIN_SWEEP_THRESHOLD) {
124
+ console.log(`[${chainConfig.name}] SOL balance too low for ${walletAddress}, skipping`);
125
+ return { txHash: "", amount: "0" };
126
+ }
127
+ const rentExemptMinimum = await connection.getMinimumBalanceForRentExemption(0);
128
+ const sweepAmount = balanceLamports - rentExemptMinimum;
129
+ if (sweepAmount <= 0) {
130
+ console.log(`[${chainConfig.name}] SOL balance insufficient after rent reserve for ${walletAddress}, skipping`);
131
+ return { txHash: "", amount: "0" };
132
+ }
133
+ console.log(`[${chainConfig.name}] Sweeping ${sweepAmount / web3_js_1.LAMPORTS_PER_SOL} SOL (keeping ${rentExemptMinimum} lamports for rent)`);
134
+ const transaction = new web3_js_1.Transaction();
135
+ transaction.feePayer = feePayer.publicKey;
136
+ transaction.add(web3_js_1.SystemProgram.transfer({
137
+ fromPubkey: walletPublicKey,
138
+ toPubkey: hotWalletPublicKey,
139
+ lamports: sweepAmount,
140
+ }));
141
+ const txHash = await (0, web3_js_1.sendAndConfirmTransaction)(connection, transaction, [feePayer, userKeypair], { commitment: "confirmed" });
142
+ const amountFormatted = (sweepAmount / web3_js_1.LAMPORTS_PER_SOL).toFixed(9);
143
+ console.log(`[${chainConfig.name}] SOL Sweep complete: ${amountFormatted} SOL → ${(0, hotwallet_1.getSolanaHotWallet)()}`);
144
+ console.log(`[${chainConfig.name}] Tx hash: ${txHash}`);
145
+ await (0, db_context_1.dbQuery)(`INSERT INTO sweep_history
146
+ (wallet_address, chain_id, token, amount, tx_hash, status, created_at)
147
+ VALUES (?, ?, 'SOL', ?, ?, 'success', NOW())`, [walletAddress, chainConfig.cluster, amountFormatted, txHash]);
148
+ return { txHash, amount: amountFormatted };
149
+ }
150
+ catch (err) {
151
+ console.error(`[${chainConfig.name}] SOL sweep failed for ${walletAddress}:`, err);
152
+ await (0, db_context_1.dbQuery)(`INSERT INTO sweep_history
153
+ (wallet_address, chain_id, token, amount, tx_hash, status, error, created_at)
154
+ VALUES (?, ?, 'SOL', '0', NULL, 'failed', ?, NOW())`, [
155
+ walletAddress,
156
+ chainConfig.cluster,
157
+ err instanceof Error ? err.message : "Unknown error",
158
+ ]);
159
+ throw err;
160
+ }
161
+ };
162
+ exports.sweepNativeSOL = sweepNativeSOL;
163
+ // ─── Balance Checks ───────────────────────────────────────────────────────────
164
+ const getSPLBalance = async (walletAddress, chainConfig, token) => {
165
+ const tokenMint = chainConfig.tokens[token];
166
+ if (!tokenMint)
167
+ return 0n;
168
+ try {
169
+ const connection = (0, exports.getSolanaConnection)(chainConfig);
170
+ const walletPublicKey = new web3_js_1.PublicKey(walletAddress);
171
+ const mintPublicKey = new web3_js_1.PublicKey(tokenMint);
172
+ const tokenAccount = await (0, spl_token_1.getAssociatedTokenAddress)(mintPublicKey, walletPublicKey);
173
+ const accountInfo = await (0, spl_token_1.getAccount)(connection, tokenAccount);
174
+ return accountInfo.amount;
175
+ }
176
+ catch {
177
+ return 0n;
178
+ }
179
+ };
180
+ exports.getSPLBalance = getSPLBalance;
181
+ const getNativeSOLBalance = async (walletAddress, chainConfig) => {
182
+ try {
183
+ const connection = (0, exports.getSolanaConnection)(chainConfig);
184
+ const lamports = await connection.getBalance(new web3_js_1.PublicKey(walletAddress));
185
+ return lamports / web3_js_1.LAMPORTS_PER_SOL;
186
+ }
187
+ catch {
188
+ return 0;
189
+ }
190
+ };
191
+ exports.getNativeSOLBalance = getNativeSOLBalance;
192
+ //# sourceMappingURL=solana.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.service.js","sourceRoot":"","sources":["../../../../../src/backend/services/chains/solana.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { TokenKey } from "../../config/constants";
2
+ import { TronChainConfig } from "../../config/chains";
3
+ export declare const getTronWeb: (chainConfig: TronChainConfig) => any;
4
+ export declare const sweepTRC20: (walletAddress: string, chainConfig: TronChainConfig, token: TokenKey) => Promise<{
5
+ txHash: string;
6
+ amount: string;
7
+ }>;
8
+ export declare const sweepNativeTRX: (walletAddress: string, chainConfig: TronChainConfig) => Promise<{
9
+ txHash: string;
10
+ amount: string;
11
+ }>;
12
+ export declare const getTRC20Balance: (walletAddress: string, chainConfig: TronChainConfig, token: TokenKey) => Promise<bigint>;
13
+ export declare const getTRXBalance: (walletAddress: string, chainConfig: TronChainConfig) => Promise<number>;
14
+ //# sourceMappingURL=tron.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tron.service.d.ts","sourceRoot":"","sources":["../../../../../src/backend/services/chains/tron.service.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,QAAQ,EAGT,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAsBtD,eAAO,MAAM,UAAU,GAAI,aAAa,eAAe,KAAG,GAKzD,CAAC;AAmJF,eAAO,MAAM,UAAU,GACrB,eAAe,MAAM,EACrB,aAAa,eAAe,EAC5B,OAAO,QAAQ,KACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmG5C,CAAC;AAGF,eAAO,MAAM,cAAc,GACzB,eAAe,MAAM,EACrB,aAAa,eAAe,KAC3B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA6E5C,CAAC;AAGF,eAAO,MAAM,eAAe,GAC1B,eAAe,MAAM,EACrB,aAAa,eAAe,EAC5B,OAAO,QAAQ,KACd,OAAO,CAAC,MAAM,CAiBhB,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,eAAe,MAAM,EACrB,aAAa,eAAe,KAC3B,OAAO,CAAC,MAAM,CAQhB,CAAC"}