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-04-01 01:23:07 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           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              : }
        

Generated by: LCOV version 2.0-1