LCOV - code coverage report
Current view: top level - crypto - network_type.dart (source / functions) Coverage Total Hit
Test: lcov.info Lines: 64.9 % 57 37
Test Date: 2025-06-07 01:20:49 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           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              : }
        

Generated by: LCOV version 2.0-1