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 38 : 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 38 : 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 38 : 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 38 : 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 38 : 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 38 : 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 : ("bitcoin.lu.ke", 50001),
189 : ("node1.btccuracao.com", 50001),
190 : ("elx.bitske.com", 50001),
191 : ("electrum.bitaroo.net", 50001),
192 : ("104.248.139.211", 50001),
193 : ("alviss.coinjoined.com", 50001),
194 : ("api.ordimint.com", 50001),
195 : ("167.172.42.31", 50001),
196 : ("electrum.brainshome.de", 50001),
197 : ("electrum0.snel.it", 50001),
198 : ("electrumx.info", 50001),
199 : ("142.93.6.38", 50001),
200 : ("guichet.centure.cc", 50001),
201 : },
202 : coin: btcCoin,
203 : addressPrefixes: const {
204 : AddressType.legacy: "1",
205 : AddressType.compatibility: "3",
206 : AddressType.segwit: "bc1",
207 : },
208 : dustTreshhold: BTC_DUSTTRESHOLD,
209 : blockTime: 600, // 10 minutes
210 : );
211 : }
212 :
213 : const LitecoinNetwork = LITECOIN_NETWORK();
214 :
215 : class LITECOIN_NETWORK extends UTXONetworkType {
216 38 : const LITECOIN_NETWORK()
217 0 : : super(
218 : messagePrefix: '\x19Litecoin Signed Message:\n',
219 : networkBIP: LITECOIN_NETWORK_BIP_WK_COMPATIBILITY,
220 : pubKeyHashPrefix: 0x30,
221 : scriptHashPrefix: 0x32,
222 : coinType: 2,
223 : bech32: 'ltc',
224 : txVersion: 1,
225 : sighash: BITCOIN_SIGHASH_INFO,
226 : endpoints: const {
227 : // ("ltc.rentonisk.com", 50001),
228 : ("backup.electrum-ltc.org", 50001),
229 : ("electrum-ltc.bysh.me", 50001),
230 : ("electrum-ltc.qortal.online", 50001),
231 : ("electrum.ltc.xurious.com", 50001),
232 : ("electrum.qortal.link", 50001),
233 : ("46.101.3.154", 50001)
234 : },
235 : coin: ltcCoin,
236 : addressPrefixes: const {
237 : AddressType.legacy: "L",
238 : AddressType.compatibility: "M",
239 : AddressType.segwit: "ltc1",
240 : },
241 : dustTreshhold: BTC_DUSTTRESHOLD,
242 : blockTime: 150, // 2.5 minutes
243 : );
244 : }
245 :
246 : const BitcoincashNetwork = BITCOINCASH_NETWORK();
247 :
248 : class BITCOINCASH_NETWORK extends UTXONetworkType {
249 38 : const BITCOINCASH_NETWORK()
250 0 : : super(
251 : messagePrefix: '\x18Bitcoin Signed Message:\n',
252 : networkBIP: BITCOIN_NETWORK_BIP,
253 : pubKeyHashPrefix: 0x00,
254 : scriptHashPrefix: 0x05,
255 : coinType: 145,
256 : bech32: 'bitcoincash',
257 : txVersion: 1,
258 : sighash: BCH_SIGHASH_INFO,
259 : endpoints: const {
260 : ("100.11.85.230", 50001),
261 : ("80.209.87.103", 50001),
262 : ("135.148.236.246", 50001),
263 : ("electroncash.dk", 50001),
264 : ("cashnode.bch.ninja", 50001),
265 : ("fulcrum.apecs.dev", 50001),
266 : ("niblerino.com", 50001),
267 : ("bch0.kister.net", 50001),
268 : ("blackie.c3-soft.com", 50001),
269 : ("fulcrum.jettscythe.xyz", 50001),
270 : ("bch.loping.net", 50001),
271 : ("electrum.imaginary.cash", 50001),
272 : ("bch.imaginary.cash", 50001),
273 : ("electroncash.de", 50001),
274 : ("fulcrum.criptolayer.net", 50001)
275 : },
276 : coin: bchCoin,
277 : addressPrefixes: const {
278 : AddressType.legacy: "1",
279 : AddressType.compatibility: "3",
280 : AddressType.cashaddr: "bitcoincash",
281 : },
282 : dustTreshhold: BTC_DUSTTRESHOLD,
283 : blockTime: 600, // 10 minutes
284 : );
285 : }
286 :
287 : const ZeniqNetwork = ZENIQ_NETWORK();
288 :
289 : class ZENIQ_NETWORK extends UTXONetworkType {
290 38 : const ZENIQ_NETWORK()
291 0 : : super(
292 : messagePrefix: '\x18Bitcoin Signed Message:\n',
293 : networkBIP: BITCOIN_NETWORK_BIP,
294 : pubKeyHashPrefix: 0x6e,
295 : scriptHashPrefix: 0x6F,
296 : coinType: 0,
297 : bech32: 'znq',
298 : txVersion: 2,
299 : sighash: BCH_SIGHASH_INFO,
300 : endpoints: const [
301 : ("node1.zeniq.network", 50001),
302 : ("node2.zeniq.network", 50001),
303 : ("node3.zeniq.network", 50001),
304 : ("node4.zeniq.network", 50001),
305 : ("node5.zeniq.network", 50001),
306 : ("node6.zeniq.network", 50001),
307 : ("node7.zeniq.network", 50001),
308 : ("node8.zeniq.network", 50001),
309 : ("node9.zeniq.network", 50001),
310 : ("node10.zeniq.network", 50001),
311 : ("node11.zeniq.network", 50001),
312 : ("node12.zeniq.network", 50001),
313 : ("node13.zeniq.network", 50001),
314 : ("node14.zeniq.network", 50001),
315 : ("node15.zeniq.network", 50001),
316 : ("node16.zeniq.network", 50001),
317 : ("node17.zeniq.network", 50001),
318 : ("node18.zeniq.network", 50001),
319 : ("node19.zeniq.network", 50001),
320 : ("node20.zeniq.network", 50001),
321 : ],
322 : coin: zeniqCoin,
323 : addressPrefixes: const {
324 : AddressType.legacy: "m",
325 : },
326 : dustTreshhold: NO_DUSTTRESHOLD,
327 : blockTime: 600, // 10 minutes
328 : );
329 : }
330 :
331 : const EurocoinNetwork = EUROCOIN_NETWORK();
332 :
333 : class EUROCOIN_NETWORK extends UTXONetworkType {
334 38 : const EUROCOIN_NETWORK()
335 0 : : super(
336 : pubKeyHashPrefix: 87, // Only Used Value
337 : bech32: "",
338 : scriptHashPrefix: 88,
339 0 : coinType: -1,
340 : coin: ec8Coin,
341 : endpoints: const {
342 : ("195.201.227.129", 50001),
343 : ("95.216.218.225", 50001),
344 : },
345 : messagePrefix: "\x18Eurocoin Signed Message:\n",
346 : networkBIP: BITCOIN_NETWORK_BIP,
347 : sighash: BITCOIN_SIGHASH_INFO,
348 : txVersion: 2,
349 : addressPrefixes: const {
350 : AddressType.legacy: "c",
351 : },
352 : dustTreshhold: NO_DUSTTRESHOLD,
353 : blockTime: 600, // 10 minutes
354 : );
355 : }
356 :
357 : ///
358 : /// EVM Networks
359 : ///
360 : const EthereumNetwork = ETHEREUM_NETWORK();
361 :
362 : class ETHEREUM_NETWORK extends EVMNetworkType {
363 38 : const ETHEREUM_NETWORK()
364 0 : : super(
365 : chainId: 1,
366 : coin: ethNative,
367 : messagePrefix: "\x19Ethereum Signed Message:\n",
368 : blockTime: 12,
369 : );
370 : }
371 :
372 : const ZeniqSmartNetwork = ZENIQ_SMART_NETWORK();
373 :
374 : class ZENIQ_SMART_NETWORK extends EVMNetworkType {
375 38 : const ZENIQ_SMART_NETWORK()
376 0 : : super(
377 : chainId: 383414847825,
378 : coin: zeniqSmart,
379 : messagePrefix: "\x19Zeniq Signed Message:\n",
380 : blockTime: 3,
381 : useEIP1559: false,
382 : );
383 : }
384 :
385 : const BNBNetwork = BNB_NETWORK();
386 :
387 : class BNB_NETWORK extends EVMNetworkType {
388 38 : const BNB_NETWORK()
389 0 : : super(
390 : chainId: 56,
391 : coin: binanceSmart,
392 : messagePrefix: "\x19Binance Chain Signed Message:\n",
393 : blockTime: 3,
394 : useEIP1559: true,
395 : );
396 : }
397 :
398 : const PolygonNetwork = POLYGON_NETWORK();
399 :
400 : class POLYGON_NETWORK extends EVMNetworkType {
401 38 : const POLYGON_NETWORK()
402 0 : : super(
403 : chainId: 137,
404 : coin: polygon,
405 : messagePrefix: "\x19Polygon Signed Message:\n",
406 : blockTime: 2,
407 : );
408 : }
409 :
410 : ///
411 : /// TRON Networks
412 : ///
413 :
414 : const TRON_Network = TRON_NETWORK();
415 :
416 : class TRON_NETWORK extends EVMNetworkType {
417 38 : const TRON_NETWORK()
418 0 : : super(
419 0 : chainId: -1,
420 : coin: tron,
421 : messagePrefix: "\x19Tron Signed Message:\n",
422 : blockTime: 3,
423 : );
424 : }
425 :
426 : // const TronNileTestNet = TRON_NILE_TEST_NETWORK();
427 :
428 : // class TRON_NILE_TEST_NETWORK extends TRON_NETWORK {
429 : // const TRON_NILE_TEST_NETWORK()
430 : // : super(
431 : // chainId: 1,
432 : // rpcUrl: "https://api.nileex.io",
433 : // coin: tron,
434 : // messagePrefix: "\x19Tron Signed Message:\n",
435 : // blockTime: 3,
436 : // );
437 : // }
438 :
439 : const ArbitrumNetwork = ARBITRUM_NETWORK();
440 :
441 : class ARBITRUM_NETWORK extends EVMNetworkType {
442 38 : const ARBITRUM_NETWORK()
443 0 : : super(
444 : chainId: 42161,
445 : coin: arbitrum,
446 : messagePrefix: "\x19Arbitrum Signed Message:\n",
447 : blockTime: 2,
448 : );
449 : }
450 :
451 : const BaseNetwork = BASE_NETWORK();
452 :
453 : class BASE_NETWORK extends EVMNetworkType {
454 38 : const BASE_NETWORK()
455 0 : : super(
456 : chainId: 8453,
457 : coin: ethBase,
458 : messagePrefix: "\x19Base Chain Signed Message:\n",
459 : blockTime: 2,
460 : );
461 : }
462 :
463 : const MoonbeamNetwork = MOONBEAM_NETWORK();
464 :
465 : class MOONBEAM_NETWORK extends EVMNetworkType {
466 38 : const MOONBEAM_NETWORK()
467 0 : : super(
468 : chainId: 1284,
469 : coin: moonbeam,
470 : messagePrefix: "\x19Moonbeam Signed Message:\n",
471 : blockTime: 2,
472 : );
473 : }
474 :
475 : const AvalancheNetwork = AVALANCHE_NETWORK();
476 :
477 : class AVALANCHE_NETWORK extends EVMNetworkType {
478 38 : const AVALANCHE_NETWORK()
479 0 : : super(
480 : chainId: 43114,
481 : coin: avalanche,
482 : messagePrefix: "\x19Avalanche Signed Message:\n",
483 : blockTime: 2,
484 : );
485 : }
486 :
487 : const OptimismNetwork = OPTIMISM_NETWORK();
488 :
489 : class OPTIMISM_NETWORK extends EVMNetworkType {
490 38 : const OPTIMISM_NETWORK()
491 0 : : super(
492 : chainId: 10,
493 : coin: optimism,
494 : messagePrefix: "\x19Optimism Signed Message:\n",
495 : blockTime: 2,
496 : );
497 : }
498 :
499 : const ZKSyncNetwork = ZKSYNC_NETWORK();
500 :
501 : class ZKSYNC_NETWORK extends EVMNetworkType {
502 38 : const ZKSYNC_NETWORK()
503 0 : : super(
504 : chainId: 324,
505 : coin: ethzkSync,
506 : messagePrefix: "\x19ZKSync Signed Message:\n",
507 : blockTime: 2,
508 : );
509 : }
|