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