@wopr-network/crypto-plugins 1.0.1

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 (211) hide show
  1. package/.github/workflows/ci.yml +33 -0
  2. package/.github/workflows/publish.yml +12 -0
  3. package/biome.json +23 -0
  4. package/dist/__tests__/bitcoin-encoder.test.d.ts +2 -0
  5. package/dist/__tests__/bitcoin-encoder.test.d.ts.map +1 -0
  6. package/dist/__tests__/bitcoin-encoder.test.js +97 -0
  7. package/dist/__tests__/bitcoin-encoder.test.js.map +1 -0
  8. package/dist/__tests__/dogecoin-encoder.test.d.ts +2 -0
  9. package/dist/__tests__/dogecoin-encoder.test.d.ts.map +1 -0
  10. package/dist/__tests__/dogecoin-encoder.test.js +57 -0
  11. package/dist/__tests__/dogecoin-encoder.test.js.map +1 -0
  12. package/dist/__tests__/litecoin-encoder.test.d.ts +2 -0
  13. package/dist/__tests__/litecoin-encoder.test.d.ts.map +1 -0
  14. package/dist/__tests__/litecoin-encoder.test.js +44 -0
  15. package/dist/__tests__/litecoin-encoder.test.js.map +1 -0
  16. package/dist/__tests__/registry.test.d.ts +2 -0
  17. package/dist/__tests__/registry.test.d.ts.map +1 -0
  18. package/dist/__tests__/registry.test.js +75 -0
  19. package/dist/__tests__/registry.test.js.map +1 -0
  20. package/dist/__tests__/rpc.test.d.ts +2 -0
  21. package/dist/__tests__/rpc.test.d.ts.map +1 -0
  22. package/dist/__tests__/rpc.test.js +31 -0
  23. package/dist/__tests__/rpc.test.js.map +1 -0
  24. package/dist/__tests__/solana-encoder.test.d.ts +2 -0
  25. package/dist/__tests__/solana-encoder.test.d.ts.map +1 -0
  26. package/dist/__tests__/solana-encoder.test.js +85 -0
  27. package/dist/__tests__/solana-encoder.test.js.map +1 -0
  28. package/dist/__tests__/solana-watcher.test.d.ts +2 -0
  29. package/dist/__tests__/solana-watcher.test.d.ts.map +1 -0
  30. package/dist/__tests__/solana-watcher.test.js +281 -0
  31. package/dist/__tests__/solana-watcher.test.js.map +1 -0
  32. package/dist/__tests__/sweep-key-parity.test.d.ts +2 -0
  33. package/dist/__tests__/sweep-key-parity.test.d.ts.map +1 -0
  34. package/dist/__tests__/sweep-key-parity.test.js +236 -0
  35. package/dist/__tests__/sweep-key-parity.test.js.map +1 -0
  36. package/dist/__tests__/tron-encoder.test.d.ts +2 -0
  37. package/dist/__tests__/tron-encoder.test.d.ts.map +1 -0
  38. package/dist/__tests__/tron-encoder.test.js +93 -0
  39. package/dist/__tests__/tron-encoder.test.js.map +1 -0
  40. package/dist/__tests__/utxo-watcher.test.d.ts +2 -0
  41. package/dist/__tests__/utxo-watcher.test.d.ts.map +1 -0
  42. package/dist/__tests__/utxo-watcher.test.js +218 -0
  43. package/dist/__tests__/utxo-watcher.test.js.map +1 -0
  44. package/dist/bitcoin/encoder.d.ts +15 -0
  45. package/dist/bitcoin/encoder.d.ts.map +1 -0
  46. package/dist/bitcoin/encoder.js +286 -0
  47. package/dist/bitcoin/encoder.js.map +1 -0
  48. package/dist/bitcoin/index.d.ts +4 -0
  49. package/dist/bitcoin/index.d.ts.map +1 -0
  50. package/dist/bitcoin/index.js +20 -0
  51. package/dist/bitcoin/index.js.map +1 -0
  52. package/dist/dogecoin/encoder.d.ts +19 -0
  53. package/dist/dogecoin/encoder.d.ts.map +1 -0
  54. package/dist/dogecoin/encoder.js +145 -0
  55. package/dist/dogecoin/encoder.js.map +1 -0
  56. package/dist/dogecoin/index.d.ts +4 -0
  57. package/dist/dogecoin/index.d.ts.map +1 -0
  58. package/dist/dogecoin/index.js +20 -0
  59. package/dist/dogecoin/index.js.map +1 -0
  60. package/dist/evm/encoder.d.ts +7 -0
  61. package/dist/evm/encoder.d.ts.map +1 -0
  62. package/dist/evm/encoder.js +43 -0
  63. package/dist/evm/encoder.js.map +1 -0
  64. package/dist/evm/eth-watcher.d.ts +38 -0
  65. package/dist/evm/eth-watcher.d.ts.map +1 -0
  66. package/dist/evm/eth-watcher.js +138 -0
  67. package/dist/evm/eth-watcher.js.map +1 -0
  68. package/dist/evm/index.d.ts +16 -0
  69. package/dist/evm/index.d.ts.map +1 -0
  70. package/dist/evm/index.js +34 -0
  71. package/dist/evm/index.js.map +1 -0
  72. package/dist/evm/types.d.ts +43 -0
  73. package/dist/evm/types.d.ts.map +1 -0
  74. package/dist/evm/types.js +101 -0
  75. package/dist/evm/types.js.map +1 -0
  76. package/dist/evm/watcher.d.ts +42 -0
  77. package/dist/evm/watcher.d.ts.map +1 -0
  78. package/dist/evm/watcher.js +162 -0
  79. package/dist/evm/watcher.js.map +1 -0
  80. package/dist/index.d.ts +7 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js +7 -0
  83. package/dist/index.js.map +1 -0
  84. package/dist/litecoin/encoder.d.ts +8 -0
  85. package/dist/litecoin/encoder.d.ts.map +1 -0
  86. package/dist/litecoin/encoder.js +16 -0
  87. package/dist/litecoin/encoder.js.map +1 -0
  88. package/dist/litecoin/index.d.ts +4 -0
  89. package/dist/litecoin/index.d.ts.map +1 -0
  90. package/dist/litecoin/index.js +20 -0
  91. package/dist/litecoin/index.js.map +1 -0
  92. package/dist/shared/test-helpers/index.d.ts +9 -0
  93. package/dist/shared/test-helpers/index.d.ts.map +1 -0
  94. package/dist/shared/test-helpers/index.js +30 -0
  95. package/dist/shared/test-helpers/index.js.map +1 -0
  96. package/dist/shared/utxo/index.d.ts +5 -0
  97. package/dist/shared/utxo/index.d.ts.map +1 -0
  98. package/dist/shared/utxo/index.js +3 -0
  99. package/dist/shared/utxo/index.js.map +1 -0
  100. package/dist/shared/utxo/rpc.d.ts +24 -0
  101. package/dist/shared/utxo/rpc.d.ts.map +1 -0
  102. package/dist/shared/utxo/rpc.js +75 -0
  103. package/dist/shared/utxo/rpc.js.map +1 -0
  104. package/dist/shared/utxo/types.d.ts +40 -0
  105. package/dist/shared/utxo/types.d.ts.map +1 -0
  106. package/dist/shared/utxo/types.js +2 -0
  107. package/dist/shared/utxo/types.js.map +1 -0
  108. package/dist/shared/utxo/watcher.d.ts +55 -0
  109. package/dist/shared/utxo/watcher.d.ts.map +1 -0
  110. package/dist/shared/utxo/watcher.js +150 -0
  111. package/dist/shared/utxo/watcher.js.map +1 -0
  112. package/dist/solana/encoder.d.ts +13 -0
  113. package/dist/solana/encoder.d.ts.map +1 -0
  114. package/dist/solana/encoder.js +62 -0
  115. package/dist/solana/encoder.js.map +1 -0
  116. package/dist/solana/index.d.ts +17 -0
  117. package/dist/solana/index.d.ts.map +1 -0
  118. package/dist/solana/index.js +32 -0
  119. package/dist/solana/index.js.map +1 -0
  120. package/dist/solana/sweeper.d.ts +47 -0
  121. package/dist/solana/sweeper.d.ts.map +1 -0
  122. package/dist/solana/sweeper.js +151 -0
  123. package/dist/solana/sweeper.js.map +1 -0
  124. package/dist/solana/types.d.ts +49 -0
  125. package/dist/solana/types.d.ts.map +1 -0
  126. package/dist/solana/types.js +2 -0
  127. package/dist/solana/types.js.map +1 -0
  128. package/dist/solana/watcher.d.ts +59 -0
  129. package/dist/solana/watcher.d.ts.map +1 -0
  130. package/dist/solana/watcher.js +251 -0
  131. package/dist/solana/watcher.js.map +1 -0
  132. package/dist/sweep/evm-sweeper.d.ts +31 -0
  133. package/dist/sweep/evm-sweeper.d.ts.map +1 -0
  134. package/dist/sweep/evm-sweeper.js +229 -0
  135. package/dist/sweep/evm-sweeper.js.map +1 -0
  136. package/dist/sweep/index.d.ts +22 -0
  137. package/dist/sweep/index.d.ts.map +1 -0
  138. package/dist/sweep/index.js +290 -0
  139. package/dist/sweep/index.js.map +1 -0
  140. package/dist/sweep/tron-sweeper.d.ts +40 -0
  141. package/dist/sweep/tron-sweeper.d.ts.map +1 -0
  142. package/dist/sweep/tron-sweeper.js +363 -0
  143. package/dist/sweep/tron-sweeper.js.map +1 -0
  144. package/dist/sweep/utxo-sweeper.d.ts +14 -0
  145. package/dist/sweep/utxo-sweeper.d.ts.map +1 -0
  146. package/dist/sweep/utxo-sweeper.js +13 -0
  147. package/dist/sweep/utxo-sweeper.js.map +1 -0
  148. package/dist/tron/address-convert.d.ts +15 -0
  149. package/dist/tron/address-convert.d.ts.map +1 -0
  150. package/dist/tron/address-convert.js +95 -0
  151. package/dist/tron/address-convert.js.map +1 -0
  152. package/dist/tron/encoder.d.ts +20 -0
  153. package/dist/tron/encoder.d.ts.map +1 -0
  154. package/dist/tron/encoder.js +67 -0
  155. package/dist/tron/encoder.js.map +1 -0
  156. package/dist/tron/index.d.ts +6 -0
  157. package/dist/tron/index.d.ts.map +1 -0
  158. package/dist/tron/index.js +20 -0
  159. package/dist/tron/index.js.map +1 -0
  160. package/dist/tron/sha256.d.ts +6 -0
  161. package/dist/tron/sha256.d.ts.map +1 -0
  162. package/dist/tron/sha256.js +90 -0
  163. package/dist/tron/sha256.js.map +1 -0
  164. package/dist/tron/watcher.d.ts +42 -0
  165. package/dist/tron/watcher.d.ts.map +1 -0
  166. package/dist/tron/watcher.js +168 -0
  167. package/dist/tron/watcher.js.map +1 -0
  168. package/package.json +47 -0
  169. package/src/__tests__/bitcoin-encoder.test.ts +115 -0
  170. package/src/__tests__/dogecoin-encoder.test.ts +66 -0
  171. package/src/__tests__/litecoin-encoder.test.ts +51 -0
  172. package/src/__tests__/registry.test.ts +91 -0
  173. package/src/__tests__/rpc.test.ts +36 -0
  174. package/src/__tests__/solana-encoder.test.ts +103 -0
  175. package/src/__tests__/solana-watcher.test.ts +316 -0
  176. package/src/__tests__/sweep-key-parity.test.ts +302 -0
  177. package/src/__tests__/tron-encoder.test.ts +108 -0
  178. package/src/__tests__/utxo-watcher.test.ts +252 -0
  179. package/src/bitcoin/encoder.ts +320 -0
  180. package/src/bitcoin/index.ts +23 -0
  181. package/src/dogecoin/encoder.ts +161 -0
  182. package/src/dogecoin/index.ts +23 -0
  183. package/src/evm/encoder.ts +49 -0
  184. package/src/evm/eth-watcher.ts +168 -0
  185. package/src/evm/index.ts +46 -0
  186. package/src/evm/types.ts +146 -0
  187. package/src/evm/watcher.ts +189 -0
  188. package/src/index.ts +21 -0
  189. package/src/litecoin/encoder.ts +18 -0
  190. package/src/litecoin/index.ts +23 -0
  191. package/src/shared/test-helpers/index.ts +36 -0
  192. package/src/shared/utxo/index.ts +12 -0
  193. package/src/shared/utxo/rpc.ts +80 -0
  194. package/src/shared/utxo/types.ts +43 -0
  195. package/src/shared/utxo/watcher.ts +195 -0
  196. package/src/solana/encoder.ts +72 -0
  197. package/src/solana/index.ts +36 -0
  198. package/src/solana/sweeper.ts +196 -0
  199. package/src/solana/types.ts +52 -0
  200. package/src/solana/watcher.ts +282 -0
  201. package/src/sweep/evm-sweeper.ts +296 -0
  202. package/src/sweep/index.ts +353 -0
  203. package/src/sweep/tron-sweeper.ts +467 -0
  204. package/src/sweep/utxo-sweeper.ts +23 -0
  205. package/src/tron/address-convert.ts +91 -0
  206. package/src/tron/encoder.ts +74 -0
  207. package/src/tron/index.ts +23 -0
  208. package/src/tron/sha256.ts +100 -0
  209. package/src/tron/watcher.ts +208 -0
  210. package/tsconfig.json +17 -0
  211. package/vitest.config.ts +8 -0
@@ -0,0 +1,290 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Unified crypto sweep CLI -- consolidates deposits from all chains to treasury.
4
+ *
5
+ * Reads mnemonic from stdin, fetches chain config from chain server,
6
+ * dispatches to per-chain sweep strategies.
7
+ *
8
+ * Usage:
9
+ * openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -d -pass pass:<passphrase> \
10
+ * -in "/mnt/g/My Drive/paperclip-wallet.enc" \
11
+ * | CRYPTO_SERVICE_URL=http://167.71.118.221:3100 \
12
+ * CRYPTO_SERVICE_KEY=sk-chain-2026 \
13
+ * crypto-sweep
14
+ *
15
+ * Env vars:
16
+ * CRYPTO_SERVICE_URL -- Chain server URL (required)
17
+ * CRYPTO_SERVICE_KEY -- Chain server auth key (optional)
18
+ * SWEEP_DRY_RUN -- set to "false" to actually broadcast (default: true)
19
+ * MAX_ADDRESSES -- how many deposit addresses to scan (default: 200)
20
+ */
21
+ import { secp256k1 } from "@noble/curves/secp256k1.js";
22
+ import { keccak_256 } from "@noble/hashes/sha3.js";
23
+ import { HDKey } from "@scure/bip32";
24
+ import * as bip39 from "@scure/bip39";
25
+ import { wordlist } from "@scure/bip39/wordlists/english.js";
26
+ import { privateKeyToAccount } from "viem/accounts";
27
+ import { sha256 } from "../tron/sha256.js";
28
+ import { EvmSweeper } from "./evm-sweeper.js";
29
+ import { TronSweeper } from "./tron-sweeper.js";
30
+ import { UtxoSweeper } from "./utxo-sweeper.js";
31
+ // --- Config ---
32
+ const CRYPTO_SERVICE_URL = process.env.CRYPTO_SERVICE_URL;
33
+ const CRYPTO_SERVICE_KEY = process.env.CRYPTO_SERVICE_KEY;
34
+ const DRY_RUN = process.env.SWEEP_DRY_RUN !== "false";
35
+ const MAX_INDEX = Number(process.env.MAX_ADDRESSES ?? "200");
36
+ // Coin type to BIP-44 path and chain family
37
+ const COIN_TYPE_FAMILIES = {
38
+ 0: "utxo", // BTC
39
+ 2: "utxo", // LTC
40
+ 3: "utxo", // DOGE
41
+ 60: "evm", // ETH / EVM chains
42
+ 195: "tron", // TRX
43
+ 501: "solana", // SOL
44
+ };
45
+ // --- Address derivation ---
46
+ // Base58 for Tron addresses
47
+ const BASE58_ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
48
+ function base58encode(data) {
49
+ let num = 0n;
50
+ for (const byte of data)
51
+ num = num * 256n + BigInt(byte);
52
+ let encoded = "";
53
+ while (num > 0n) {
54
+ encoded = BASE58_ALPHABET[Number(num % 58n)] + encoded;
55
+ num = num / 58n;
56
+ }
57
+ for (const byte of data) {
58
+ if (byte !== 0)
59
+ break;
60
+ encoded = `1${encoded}`;
61
+ }
62
+ return encoded;
63
+ }
64
+ // secp256k1.ProjectivePoint for point decompression
65
+ const ProjectivePoint = secp256k1.ProjectivePoint;
66
+ function toHex(data) {
67
+ return Array.from(data, (b) => b.toString(16).padStart(2, "0")).join("");
68
+ }
69
+ function pubkeyToTronAddress(pubkey) {
70
+ const uncompressed = ProjectivePoint.fromHex(toHex(pubkey)).toRawBytes(false);
71
+ const hash = keccak_256(uncompressed.slice(1));
72
+ const addressBytes = hash.slice(-20);
73
+ const payload = new Uint8Array(21);
74
+ payload[0] = 0x41;
75
+ payload.set(addressBytes, 1);
76
+ const checksum = sha256(sha256(payload));
77
+ const full = new Uint8Array(25);
78
+ full.set(payload);
79
+ full.set(checksum.slice(0, 4), 21);
80
+ return base58encode(full);
81
+ }
82
+ function deriveKeyPairs(master, coinType, family, maxIndex, chainIndex) {
83
+ const account = master.derive(`m/44'/${coinType}'/0'`);
84
+ const chain = account.deriveChild(chainIndex);
85
+ const keys = [];
86
+ for (let i = 0; i < maxIndex; i++) {
87
+ const child = chain.deriveChild(i);
88
+ if (!child.privateKey || !child.publicKey)
89
+ continue;
90
+ let address;
91
+ if (family === "evm") {
92
+ const privHex = `0x${toHex(child.privateKey)}`;
93
+ address = privateKeyToAccount(privHex).address;
94
+ }
95
+ else if (family === "tron") {
96
+ address = pubkeyToTronAddress(child.publicKey);
97
+ }
98
+ else {
99
+ // UTXO / other -- use hex pubkey as placeholder address
100
+ address = toHex(child.publicKey);
101
+ }
102
+ keys.push({
103
+ privateKey: child.privateKey,
104
+ publicKey: child.publicKey,
105
+ address,
106
+ index: i,
107
+ });
108
+ }
109
+ return keys;
110
+ }
111
+ function deriveTreasuryAddress(master, coinType, family) {
112
+ // Treasury = internal chain (1), index 0
113
+ const account = master.derive(`m/44'/${coinType}'/0'`);
114
+ const chain = account.deriveChild(1);
115
+ const child = chain.deriveChild(0);
116
+ if (!child.privateKey || !child.publicKey)
117
+ throw new Error(`Cannot derive treasury key for coin_type ${coinType}`);
118
+ let address;
119
+ if (family === "evm") {
120
+ const privHex = `0x${toHex(child.privateKey)}`;
121
+ address = privateKeyToAccount(privHex).address;
122
+ }
123
+ else if (family === "tron") {
124
+ address = pubkeyToTronAddress(child.publicKey);
125
+ }
126
+ else {
127
+ address = toHex(child.publicKey);
128
+ }
129
+ return {
130
+ privateKey: child.privateKey,
131
+ publicKey: child.publicKey,
132
+ address,
133
+ index: 0,
134
+ };
135
+ }
136
+ // --- Main ---
137
+ async function main() {
138
+ // Validate required env
139
+ if (!CRYPTO_SERVICE_URL) {
140
+ console.error("CRYPTO_SERVICE_URL is required");
141
+ process.exit(1);
142
+ }
143
+ // Read mnemonic from stdin
144
+ const chunks = [];
145
+ for await (const chunk of process.stdin) {
146
+ chunks.push(chunk);
147
+ }
148
+ const mnemonic = Buffer.concat(chunks).toString("utf-8").trim();
149
+ if (!bip39.validateMnemonic(mnemonic, wordlist)) {
150
+ console.error("Invalid mnemonic");
151
+ process.exit(1);
152
+ }
153
+ // Fetch enabled payment methods from chain server
154
+ console.log(`Fetching chains from ${CRYPTO_SERVICE_URL}/chains...`);
155
+ const headers = {
156
+ "Content-Type": "application/json",
157
+ };
158
+ if (CRYPTO_SERVICE_KEY)
159
+ headers.Authorization = `Bearer ${CRYPTO_SERVICE_KEY}`;
160
+ const res = await fetch(`${CRYPTO_SERVICE_URL}/chains`, { headers });
161
+ if (!res.ok)
162
+ throw new Error(`Chain server returned ${res.status}`);
163
+ const methods = await res.json();
164
+ console.log(`Found ${methods.length} payment methods\n`);
165
+ // Group by coin_type
166
+ const byCoinType = new Map();
167
+ for (const m of methods) {
168
+ const coinType = m.coin_type;
169
+ if (coinType === undefined || coinType === null) {
170
+ console.log(` Skipping ${m.token}/${m.chain} -- no coin_type`);
171
+ continue;
172
+ }
173
+ const group = byCoinType.get(coinType) ?? [];
174
+ group.push(m);
175
+ byCoinType.set(coinType, group);
176
+ }
177
+ // Derive master HD key
178
+ const seed = bip39.mnemonicToSeedSync(mnemonic);
179
+ const master = HDKey.fromMasterSeed(seed);
180
+ console.log(`Dry run: ${DRY_RUN}`);
181
+ console.log(`Max addresses: ${MAX_INDEX}\n`);
182
+ const allResults = [];
183
+ // Process each coin type group
184
+ for (const [coinType, group] of byCoinType) {
185
+ const family = COIN_TYPE_FAMILIES[coinType];
186
+ if (!family) {
187
+ console.log(`Skipping coin_type ${coinType} -- unsupported family`);
188
+ continue;
189
+ }
190
+ const chainNames = [...new Set(group.map((m) => m.chain))].join(", ");
191
+ console.log(`\n${"=".repeat(60)}\nCoin type ${coinType} (${family}) -- chains: ${chainNames}\n${"=".repeat(60)}`);
192
+ // Derive deposit keys at chain=0 (external)
193
+ const depositKeys = deriveKeyPairs(master, coinType, family, MAX_INDEX, 0);
194
+ const treasury = deriveTreasuryAddress(master, coinType, family);
195
+ console.log(`Treasury: ${treasury.address}`);
196
+ console.log(`Scanning ${MAX_INDEX} deposit addresses...\n`);
197
+ // Include treasury key in the key set so sweepers can use it for gas funding
198
+ const allKeys = [...depositKeys, treasury];
199
+ if (family === "utxo") {
200
+ const sweeper = new UtxoSweeper(chainNames);
201
+ try {
202
+ await sweeper.sweep(allKeys, treasury.address, DRY_RUN);
203
+ }
204
+ catch (err) {
205
+ console.log(` ${err.message}`);
206
+ }
207
+ continue;
208
+ }
209
+ if (family === "evm") {
210
+ // Group EVM methods by chain (each chain has its own RPC)
211
+ const byChain = new Map();
212
+ for (const m of group) {
213
+ const chain = byChain.get(m.chain) ?? [];
214
+ chain.push(m);
215
+ byChain.set(m.chain, chain);
216
+ }
217
+ for (const [chainName, chainMethods] of byChain) {
218
+ const rpcUrl = chainMethods[0]?.rpc_url;
219
+ if (!rpcUrl) {
220
+ console.log(` Skipping ${chainName} -- no rpc_url in chain config`);
221
+ continue;
222
+ }
223
+ const tokens = chainMethods
224
+ .filter((m) => m.contractAddress)
225
+ .map((m) => ({
226
+ name: m.token,
227
+ address: m.contractAddress,
228
+ decimals: m.decimals,
229
+ }));
230
+ console.log(`\n--- ${chainName} (${tokens.length} ERC-20 tokens) ---`);
231
+ const sweeper = new EvmSweeper({
232
+ rpcUrl,
233
+ chainName,
234
+ tokens,
235
+ });
236
+ const results = await sweeper.sweep(allKeys, treasury.address, DRY_RUN);
237
+ allResults.push(...results);
238
+ }
239
+ continue;
240
+ }
241
+ if (family === "tron") {
242
+ const rpcUrl = group[0]?.rpc_url;
243
+ if (!rpcUrl) {
244
+ console.log(" Skipping tron -- no rpc_url in chain config");
245
+ continue;
246
+ }
247
+ const tokens = group
248
+ .filter((m) => m.contractAddress != null)
249
+ .map((m) => ({
250
+ name: m.token,
251
+ contractAddress: m.contractAddress,
252
+ decimals: m.decimals,
253
+ }));
254
+ console.log(`\n--- Tron (${tokens.length} TRC-20 tokens) ---`);
255
+ const sweeper = new TronSweeper({
256
+ rpcUrl,
257
+ apiKey: group[0]?.rpc_headers?.["TRON-PRO-API-KEY"],
258
+ tokens,
259
+ });
260
+ const results = await sweeper.sweep(allKeys, treasury.address, DRY_RUN);
261
+ allResults.push(...results);
262
+ continue;
263
+ }
264
+ console.log(` Skipping ${family} -- no sweeper implemented`);
265
+ }
266
+ // Summary
267
+ console.log(`\n${"=".repeat(60)}`);
268
+ console.log("SWEEP SUMMARY");
269
+ console.log(`${"=".repeat(60)}`);
270
+ if (allResults.length === 0) {
271
+ if (DRY_RUN) {
272
+ console.log("Dry run complete. Set SWEEP_DRY_RUN=false to broadcast.");
273
+ }
274
+ else {
275
+ console.log("No funds swept.");
276
+ }
277
+ }
278
+ else {
279
+ for (const r of allResults) {
280
+ console.log(` [${r.index}] ${r.address}: ${r.amount} ${r.token} -> ${r.txHash}`);
281
+ }
282
+ console.log(`\nTotal: ${allResults.length} transactions`);
283
+ }
284
+ console.log("\nDone.");
285
+ }
286
+ main().catch((err) => {
287
+ console.error(err);
288
+ process.exit(1);
289
+ });
290
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sweep/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Tron sweep strategy -- consolidates TRX + TRC-20s from deposit addresses to treasury.
3
+ *
4
+ * Uses Tron HTTP API (not EVM JSON-RPC).
5
+ *
6
+ * 3-phase sweep:
7
+ * 1. Sweep TRX first -- deposit addresses self-fund bandwidth, treasury receives TRX
8
+ * 2. Fund energy -- treasury sends TRX to TRC-20 deposit addresses
9
+ * 3. Sweep TRC-20s -- deposit addresses send all tokens to treasury
10
+ */
11
+ import type { DepositInfo, ISweepStrategy, KeyPair, SweepResult } from "@wopr-network/platform-core/crypto-plugin";
12
+ export interface TronToken {
13
+ name: string;
14
+ contractAddress: string;
15
+ decimals: number;
16
+ }
17
+ export interface TronSweeperOpts {
18
+ rpcUrl: string;
19
+ apiKey?: string;
20
+ tokens: TronToken[];
21
+ }
22
+ export declare class TronSweeper implements ISweepStrategy {
23
+ private readonly rpcUrl;
24
+ private readonly apiKey?;
25
+ private readonly tokens;
26
+ private readonly tokenHexMap;
27
+ constructor(opts: TronSweeperOpts);
28
+ private headers;
29
+ private post;
30
+ private getTrxBalance;
31
+ private getTrc20Balance;
32
+ private createTrxTransfer;
33
+ private createTrc20Transfer;
34
+ private signTransaction;
35
+ private broadcastTransaction;
36
+ private keyToTronHex;
37
+ scan(keys: KeyPair[], _treasury: string): Promise<DepositInfo[]>;
38
+ sweep(keys: KeyPair[], treasury: string, dryRun: boolean): Promise<SweepResult[]>;
39
+ }
40
+ //# sourceMappingURL=tron-sweeper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tron-sweeper.d.ts","sourceRoot":"","sources":["../../src/sweep/tron-sweeper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,2CAA2C,CAAC;AAmBnH,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,SAAS,EAAE,CAAC;CACpB;AAuFD,qBAAa,WAAY,YAAW,cAAc;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;gBAEtC,IAAI,EAAE,eAAe;IAOjC,OAAO,CAAC,OAAO;YAQD,IAAI;YAUJ,aAAa;YAQb,eAAe;YAgBf,iBAAiB;YAejB,mBAAmB;IAqCjC,OAAO,CAAC,eAAe;YAsBT,oBAAoB;IAUlC,OAAO,CAAC,YAAY;IAId,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA2ChE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;CAmJvF"}