Line data Source code
1 : // ignore_for_file: constant_identifier_names, camel_case_types
2 :
3 : import 'package:bip32/bip32.dart' as bip32;
4 : import 'package:walletkit_dart/walletkit_dart.dart';
5 :
6 : sealed class NetworkType {
7 : final String messagePrefix;
8 : final CoinEntity coin;
9 :
10 : /// Block time in seconds
11 : final int blockTime;
12 :
13 37 : const NetworkType({
14 : required this.messagePrefix,
15 : required this.coin,
16 : required this.blockTime,
17 : });
18 : }
19 :
20 : sealed class EVMNetworkType extends NetworkType {
21 : final int chainId;
22 : final bool useEIP1559;
23 :
24 37 : const EVMNetworkType({
25 : required super.messagePrefix,
26 : required super.coin,
27 : required super.blockTime,
28 : required this.chainId,
29 : this.useEIP1559 = true,
30 : });
31 : }
32 :
33 : sealed class UTXONetworkType extends NetworkType {
34 : /// Bech32 address prefix
35 : final String bech32;
36 :
37 : final NetworkBIP networkBIP;
38 :
39 : /// BIP32 pubkey hash prefix
40 : final int pubKeyHashPrefix;
41 :
42 : /// BIP32 script hash prefix
43 : final int scriptHashPrefix;
44 :
45 : final int coinType;
46 :
47 : final int txVersion;
48 :
49 : final Iterable<(String, int)> endpoints;
50 :
51 : final Map<AddressType, String> addressPrefixes;
52 :
53 : final SighashInfo sighash;
54 :
55 : final ({int legacy, int segwit}) dustTreshhold;
56 :
57 37 : const UTXONetworkType({
58 : required super.messagePrefix,
59 : required super.coin,
60 : required super.blockTime,
61 : required this.networkBIP,
62 : required this.pubKeyHashPrefix,
63 : required this.scriptHashPrefix,
64 : required this.coinType,
65 : required this.bech32,
66 : required this.txVersion,
67 : required this.endpoints,
68 : required this.sighash,
69 : required this.addressPrefixes,
70 : required this.dustTreshhold,
71 : });
72 :
73 0 : @override
74 : String toString() {
75 0 : return "UTXONetworkType: ${coin.symbol}";
76 : }
77 : }
78 :
79 : class NetworkBIP {
80 : final int wif;
81 : final int bip32XpubPrefix;
82 : final int bip32XprivPrefix;
83 : // final int bip44XpubPrefix;
84 : // final int bip44XprivPrefix;
85 : final int bip49XpubPrefix;
86 : final int bip49XprivPrefix;
87 : final int bip84XpubPrefix;
88 : final int bip84XprivPrefix;
89 :
90 : static const String NS_PURPOSE = "m/0'";
91 : static const String BIP44_PURPOSE = "m/44'";
92 : static const String BIP49_PURPOSE = "m/49'";
93 : static const String BIP84_PURPOSE = "m/84'";
94 :
95 37 : const NetworkBIP({
96 : required this.bip32XpubPrefix,
97 : required this.bip32XprivPrefix,
98 : // required this.bip44XpubPrefix,
99 : // required this.bip44XprivPrefix,
100 : required this.bip49XpubPrefix,
101 : required this.bip49XprivPrefix,
102 : required this.bip84XpubPrefix,
103 : required this.bip84XprivPrefix,
104 : required this.wif,
105 : });
106 :
107 10 : bip32.NetworkType getForWalletType(HDWalletPurpose purpose) =>
108 : switch (purpose) {
109 10 : HDWalletPurpose.NO_STRUCTURE ||
110 7 : HDWalletPurpose.BIP44 =>
111 10 : bip32.NetworkType(
112 10 : wif: wif,
113 10 : bip32: bip32.Bip32Type(
114 10 : private: bip32XprivPrefix,
115 10 : public: bip32XpubPrefix,
116 : ),
117 : ),
118 6 : HDWalletPurpose.BIP84 => bip32.NetworkType(
119 3 : wif: wif,
120 3 : bip32: bip32.Bip32Type(
121 3 : private: bip84XprivPrefix,
122 3 : public: bip84XpubPrefix,
123 : ),
124 : ),
125 2 : HDWalletPurpose.BIP49 => bip32.NetworkType(
126 1 : wif: wif,
127 1 : bip32: bip32.Bip32Type(
128 1 : private: bip49XprivPrefix,
129 1 : public: bip49XpubPrefix,
130 : ),
131 : ),
132 : };
133 : }
134 :
135 : class SighashInfo {
136 : final int all;
137 : final int none;
138 : final int single;
139 : final int allAnyoneCanPay;
140 : final int noneAnyoneCanPay;
141 : final int singleAnyoneCanPay;
142 :
143 37 : const SighashInfo({
144 : required this.all,
145 : required this.none,
146 : required this.single,
147 : required this.allAnyoneCanPay,
148 : required this.noneAnyoneCanPay,
149 : required this.singleAnyoneCanPay,
150 : });
151 : }
152 :
153 : ///
154 : /// UTXO Networks
155 : ///
156 : const UTXO_Network_List = [
157 : BitcoinNetwork,
158 : LitecoinNetwork,
159 : BitcoincashNetwork,
160 : ZeniqNetwork,
161 : EurocoinNetwork,
162 : ];
163 :
164 : const BTC_DUSTTRESHOLD = (
165 : legacy: 546,
166 : segwit: 294,
167 : );
168 :
169 : const NO_DUSTTRESHOLD = (
170 : legacy: 0,
171 : segwit: 0,
172 : );
173 :
174 : const BitcoinNetwork = BITCOIN_NETWORK();
175 :
176 : class BITCOIN_NETWORK extends UTXONetworkType {
177 37 : const BITCOIN_NETWORK()
178 0 : : super(
179 : messagePrefix: '\x18Bitcoin Signed Message:\n',
180 : bech32: 'bc',
181 : networkBIP: BITCOIN_NETWORK_BIP,
182 : pubKeyHashPrefix: 0x00,
183 : scriptHashPrefix: 0x05,
184 : coinType: 0,
185 : txVersion: 1,
186 : sighash: BITCOIN_SIGHASH_INFO,
187 : endpoints: const {
188 : ("94.130.136.185", 50001),
189 : ("bitcoin.lu.ke", 50001),
190 : ("188.165.206.215", 50001),
191 : ("de.poiuty.com", 50001),
192 : ("node1.btccuracao.com", 50001),
193 : ("71.73.6.164", 50001),
194 : ("elx.bitske.com", 50001),
195 : ("electrum.bitaroo.net", 50001),
196 : ("104.248.139.211", 50001),
197 : ("alviss.coinjoined.com", 50001),
198 : ("api.ordimint.com", 50001),
199 : ("167.172.42.31", 50001),
200 : ("electrum.brainshome.de", 50001),
201 : ("electrum0.snel.it", 50001),
202 : ("e.keff.org", 50001),
203 : ("electrumx.info", 50001),
204 : ("142.93.6.38", 50001),
205 : ("ru.poiuty.com", 50001),
206 : ("guichet.centure.cc", 50001),
207 : },
208 : coin: btcCoin,
209 : addressPrefixes: const {
210 : AddressType.legacy: "1",
211 : AddressType.compatibility: "3",
212 : AddressType.segwit: "bc1",
213 : },
214 : dustTreshhold: BTC_DUSTTRESHOLD,
215 : blockTime: 600, // 10 minutes
216 : );
217 : }
218 :
219 : const LitecoinNetwork = LITECOIN_NETWORK();
220 :
221 : class LITECOIN_NETWORK extends UTXONetworkType {
222 37 : const LITECOIN_NETWORK()
223 0 : : super(
224 : messagePrefix: '\x19Litecoin Signed Message:\n',
225 : networkBIP: LITECOIN_NETWORK_BIP_WK_COMPATIBILITY,
226 : pubKeyHashPrefix: 0x30,
227 : scriptHashPrefix: 0x32,
228 : coinType: 2,
229 : bech32: 'ltc',
230 : txVersion: 1,
231 : sighash: BITCOIN_SIGHASH_INFO,
232 : endpoints: const {
233 : // ("ltc.rentonisk.com", 50001),
234 : ("backup.electrum-ltc.org", 50001),
235 : ("electrum-ltc.bysh.me", 50001),
236 : ("electrum-ltc.qortal.online", 50001),
237 : ("electrum.ltc.xurious.com", 50001),
238 : ("electrum.qortal.link", 50001),
239 : ("46.101.3.154", 50001)
240 : },
241 : coin: ltcCoin,
242 : addressPrefixes: const {
243 : AddressType.legacy: "L",
244 : AddressType.compatibility: "M",
245 : AddressType.segwit: "ltc1",
246 : },
247 : dustTreshhold: BTC_DUSTTRESHOLD,
248 : blockTime: 150, // 2.5 minutes
249 : );
250 : }
251 :
252 : const BitcoincashNetwork = BITCOINCASH_NETWORK();
253 :
254 : class BITCOINCASH_NETWORK extends UTXONetworkType {
255 37 : const BITCOINCASH_NETWORK()
256 0 : : super(
257 : messagePrefix: '\x18Bitcoin Signed Message:\n',
258 : networkBIP: BITCOIN_NETWORK_BIP,
259 : pubKeyHashPrefix: 0x00,
260 : scriptHashPrefix: 0x05,
261 : coinType: 145,
262 : bech32: 'bitcoincash',
263 : txVersion: 1,
264 : sighash: BCH_SIGHASH_INFO,
265 : endpoints: const {
266 : ("100.11.85.230", 50001),
267 : ("80.209.87.103", 50001),
268 : ("135.148.236.246", 50001),
269 : ("electroncash.dk", 50001),
270 : ("cashnode.bch.ninja", 50001),
271 : ("fulcrum.apecs.dev", 50001),
272 : ("niblerino.com", 50001),
273 : ("bch0.kister.net", 50001),
274 : ("blackie.c3-soft.com", 50001),
275 : ("fulcrum.jettscythe.xyz", 50001),
276 : ("bch.loping.net", 50001),
277 : ("electrum.imaginary.cash", 50001),
278 : ("bch.imaginary.cash", 50001),
279 : ("electroncash.de", 50001),
280 : ("fulcrum.criptolayer.net", 50001)
281 : },
282 : coin: bchCoin,
283 : addressPrefixes: const {
284 : AddressType.legacy: "1",
285 : AddressType.compatibility: "3",
286 : AddressType.cashaddr: "bitcoincash",
287 : },
288 : dustTreshhold: BTC_DUSTTRESHOLD,
289 : blockTime: 600, // 10 minutes
290 : );
291 : }
292 :
293 : const ZeniqNetwork = ZENIQ_NETWORK();
294 :
295 : class ZENIQ_NETWORK extends UTXONetworkType {
296 37 : const ZENIQ_NETWORK()
297 0 : : super(
298 : messagePrefix: '\x18Bitcoin Signed Message:\n',
299 : networkBIP: BITCOIN_NETWORK_BIP,
300 : pubKeyHashPrefix: 0x6e,
301 : scriptHashPrefix: 0x6F,
302 : coinType: 0,
303 : bech32: 'znq',
304 : txVersion: 2,
305 : sighash: BCH_SIGHASH_INFO,
306 : endpoints: const [
307 : ("node1.zeniq.network", 50001),
308 : ("node2.zeniq.network", 50001),
309 : ("node3.zeniq.network", 50001),
310 : ("node4.zeniq.network", 50001),
311 : ("node5.zeniq.network", 50001),
312 : ("node6.zeniq.network", 50001),
313 : ("node7.zeniq.network", 50001),
314 : ("node8.zeniq.network", 50001),
315 : ("node9.zeniq.network", 50001),
316 : ("node10.zeniq.network", 50001),
317 : ("node11.zeniq.network", 50001),
318 : ("node12.zeniq.network", 50001),
319 : ("node13.zeniq.network", 50001),
320 : ("node14.zeniq.network", 50001),
321 : ("node15.zeniq.network", 50001),
322 : ("node16.zeniq.network", 50001),
323 : ("node17.zeniq.network", 50001),
324 : ("node18.zeniq.network", 50001),
325 : ("node19.zeniq.network", 50001),
326 : ("node20.zeniq.network", 50001),
327 : ],
328 : coin: zeniqCoin,
329 : addressPrefixes: const {
330 : AddressType.legacy: "m",
331 : },
332 : dustTreshhold: NO_DUSTTRESHOLD,
333 : blockTime: 600, // 10 minutes
334 : );
335 : }
336 :
337 : const EurocoinNetwork = EUROCOIN_NETWORK();
338 :
339 : class EUROCOIN_NETWORK extends UTXONetworkType {
340 37 : const EUROCOIN_NETWORK()
341 0 : : super(
342 : pubKeyHashPrefix: 87, // Only Used Value
343 : bech32: "",
344 : scriptHashPrefix: 88,
345 0 : coinType: -1,
346 : coin: ec8Coin,
347 : endpoints: const {
348 : ("195.201.227.129", 50001),
349 : ("95.216.218.225", 50001),
350 : },
351 : messagePrefix: "\x18Eurocoin Signed Message:\n",
352 : networkBIP: BITCOIN_NETWORK_BIP,
353 : sighash: BITCOIN_SIGHASH_INFO,
354 : txVersion: 2,
355 : addressPrefixes: const {
356 : AddressType.legacy: "c",
357 : },
358 : dustTreshhold: NO_DUSTTRESHOLD,
359 : blockTime: 600, // 10 minutes
360 : );
361 : }
362 :
363 : ///
364 : /// EVM Networks
365 : ///
366 : const EthereumNetwork = ETHEREUM_NETWORK();
367 :
368 : class ETHEREUM_NETWORK extends EVMNetworkType {
369 37 : const ETHEREUM_NETWORK()
370 0 : : super(
371 : chainId: 1,
372 : coin: ethNative,
373 : messagePrefix: "\x19Ethereum Signed Message:\n",
374 : blockTime: 12,
375 : );
376 : }
377 :
378 : const ZeniqSmartNetwork = ZENIQ_SMART_NETWORK();
379 :
380 : class ZENIQ_SMART_NETWORK extends EVMNetworkType {
381 37 : const ZENIQ_SMART_NETWORK()
382 0 : : super(
383 : chainId: 383414847825,
384 : coin: zeniqSmart,
385 : messagePrefix: "\x19Zeniq Signed Message:\n",
386 : blockTime: 3,
387 : useEIP1559: false,
388 : );
389 : }
390 :
391 : const BNBNetwork = BNB_NETWORK();
392 :
393 : class BNB_NETWORK extends EVMNetworkType {
394 37 : const BNB_NETWORK()
395 0 : : super(
396 : chainId: 56,
397 : coin: binanceSmart,
398 : messagePrefix: "\x19Binance Chain Signed Message:\n",
399 : blockTime: 3,
400 : useEIP1559: true,
401 : );
402 : }
403 :
404 : const PolygonNetwork = POLYGON_NETWORK();
405 :
406 : class POLYGON_NETWORK extends EVMNetworkType {
407 37 : const POLYGON_NETWORK()
408 0 : : super(
409 : chainId: 137,
410 : coin: polygon,
411 : messagePrefix: "\x19Polygon Signed Message:\n",
412 : blockTime: 2,
413 : );
414 : }
415 :
416 : ///
417 : /// TRON Networks
418 : ///
419 :
420 : const TRON_Network = TRON_NETWORK();
421 :
422 : class TRON_NETWORK extends EVMNetworkType {
423 37 : const TRON_NETWORK()
424 0 : : super(
425 0 : chainId: -1,
426 : coin: tron,
427 : messagePrefix: "\x19Tron Signed Message:\n",
428 : blockTime: 3,
429 : );
430 : }
431 :
432 : // const TronNileTestNet = TRON_NILE_TEST_NETWORK();
433 :
434 : // class TRON_NILE_TEST_NETWORK extends TRON_NETWORK {
435 : // const TRON_NILE_TEST_NETWORK()
436 : // : super(
437 : // chainId: 1,
438 : // rpcUrl: "https://api.nileex.io",
439 : // coin: tron,
440 : // messagePrefix: "\x19Tron Signed Message:\n",
441 : // blockTime: 3,
442 : // );
443 : // }
444 :
445 : const ArbitrumNetwork = ARBITRUM_NETWORK();
446 :
447 : class ARBITRUM_NETWORK extends EVMNetworkType {
448 37 : const ARBITRUM_NETWORK()
449 0 : : super(
450 : chainId: 42161,
451 : coin: arbitrum,
452 : messagePrefix: "\x19Arbitrum Signed Message:\n",
453 : blockTime: 2,
454 : );
455 : }
456 :
457 : const BaseNetwork = BASE_NETWORK();
458 :
459 : class BASE_NETWORK extends EVMNetworkType {
460 37 : const BASE_NETWORK()
461 0 : : super(
462 : chainId: 8453,
463 : coin: ethBase,
464 : messagePrefix: "\x19Base Chain Signed Message:\n",
465 : blockTime: 2,
466 : );
467 : }
468 :
469 : const MoonbeamNetwork = MOONBEAM_NETWORK();
470 :
471 : class MOONBEAM_NETWORK extends EVMNetworkType {
472 37 : const MOONBEAM_NETWORK()
473 0 : : super(
474 : chainId: 1284,
475 : coin: moonbeam,
476 : messagePrefix: "\x19Moonbeam Signed Message:\n",
477 : blockTime: 2,
478 : );
479 : }
480 :
481 : const AvalancheNetwork = AVALANCHE_NETWORK();
482 :
483 : class AVALANCHE_NETWORK extends EVMNetworkType {
484 37 : const AVALANCHE_NETWORK()
485 0 : : super(
486 : chainId: 43114,
487 : coin: avalanche,
488 : messagePrefix: "\x19Avalanche Signed Message:\n",
489 : blockTime: 2,
490 : );
491 : }
492 :
493 : const OptimismNetwork = OPTIMISM_NETWORK();
494 :
495 : class OPTIMISM_NETWORK extends EVMNetworkType {
496 37 : const OPTIMISM_NETWORK()
497 0 : : super(
498 : chainId: 10,
499 : coin: optimism,
500 : messagePrefix: "\x19Optimism Signed Message:\n",
501 : blockTime: 2,
502 : );
503 : }
504 :
505 : const ZKSyncNetwork = ZKSYNC_NETWORK();
506 :
507 : class ZKSYNC_NETWORK extends EVMNetworkType {
508 37 : const ZKSYNC_NETWORK()
509 0 : : super(
510 : chainId: 324,
511 : coin: ethzkSync,
512 : messagePrefix: "\x19ZKSync Signed Message:\n",
513 : blockTime: 2,
514 : );
515 : }
|