LCOV - code coverage report
Current view: top level - crypto - network_type.dart (source / functions) Coverage Total Hit
Test: lcov.info Lines: 66.1 % 59 39
Test Date: 2025-01-30 01:10:00 Functions: - 0 0

            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              : }
        

Generated by: LCOV version 2.0-1