|
2 | 2 |
|
3 | 3 | use std::collections::HashMap; |
4 | 4 | use std::path::{Path, PathBuf}; |
| 5 | +use std::sync::LazyLock; |
5 | 6 |
|
6 | 7 | use serde::{Deserialize, Serialize}; |
7 | 8 |
|
@@ -36,60 +37,63 @@ pub struct Config { |
36 | 37 | } |
37 | 38 |
|
38 | 39 | impl Config { |
39 | | - /// Built-in default RPC endpoints for well-known chains. |
| 40 | + /// Built-in default RPC endpoints for well-known chains (lazily initialized). |
40 | 41 | #[must_use] |
41 | | - pub fn default_rpc() -> HashMap<String, String> { |
42 | | - HashMap::from([ |
43 | | - ("eip155:1".into(), "https://eth.llamarpc.com".into()), |
44 | | - ("eip155:137".into(), "https://polygon-rpc.com".into()), |
45 | | - ("eip155:42161".into(), "https://arb1.arbitrum.io/rpc".into()), |
46 | | - ("eip155:10".into(), "https://mainnet.optimism.io".into()), |
47 | | - ("eip155:8453".into(), "https://mainnet.base.org".into()), |
48 | | - ( |
49 | | - "eip155:56".into(), |
50 | | - "https://bsc-dataseed.binance.org".into(), |
51 | | - ), |
52 | | - ("eip155:9745".into(), "https://rpc.plasma.to".into()), |
53 | | - ( |
54 | | - "eip155:43114".into(), |
55 | | - "https://api.avax.network/ext/bc/C/rpc".into(), |
56 | | - ), |
57 | | - ( |
58 | | - "eip155:42793".into(), |
59 | | - "https://node.mainnet.etherlink.com".into(), |
60 | | - ), |
61 | | - ( |
62 | | - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp".into(), |
63 | | - "https://api.mainnet-beta.solana.com".into(), |
64 | | - ), |
65 | | - ( |
66 | | - "bip122:000000000019d6689c085ae165831e93".into(), |
67 | | - "https://mempool.space/api".into(), |
68 | | - ), |
69 | | - ( |
70 | | - "cosmos:cosmoshub-4".into(), |
71 | | - "https://cosmos-rest.publicnode.com".into(), |
72 | | - ), |
73 | | - ("tron:mainnet".into(), "https://api.trongrid.io".into()), |
74 | | - ("ton:mainnet".into(), "https://toncenter.com/api/v2".into()), |
75 | | - ( |
76 | | - "fil:mainnet".into(), |
77 | | - "https://api.node.glif.io/rpc/v1".into(), |
78 | | - ), |
79 | | - ( |
80 | | - "sui:mainnet".into(), |
81 | | - "https://fullnode.mainnet.sui.io:443".into(), |
82 | | - ), |
83 | | - ("xrpl:mainnet".into(), "https://s1.ripple.com:51234".into()), |
84 | | - ( |
85 | | - "xrpl:testnet".into(), |
86 | | - "https://s.altnet.rippletest.net:51234".into(), |
87 | | - ), |
88 | | - ( |
89 | | - "xrpl:devnet".into(), |
90 | | - "https://s.devnet.rippletest.net:51234".into(), |
91 | | - ), |
92 | | - ]) |
| 42 | + pub fn default_rpc() -> &'static HashMap<String, String> { |
| 43 | + static RPC: LazyLock<HashMap<String, String>> = LazyLock::new(|| { |
| 44 | + HashMap::from([ |
| 45 | + ("eip155:1".into(), "https://eth.llamarpc.com".into()), |
| 46 | + ("eip155:137".into(), "https://polygon-rpc.com".into()), |
| 47 | + ("eip155:42161".into(), "https://arb1.arbitrum.io/rpc".into()), |
| 48 | + ("eip155:10".into(), "https://mainnet.optimism.io".into()), |
| 49 | + ("eip155:8453".into(), "https://mainnet.base.org".into()), |
| 50 | + ( |
| 51 | + "eip155:56".into(), |
| 52 | + "https://bsc-dataseed.binance.org".into(), |
| 53 | + ), |
| 54 | + ("eip155:9745".into(), "https://rpc.plasma.to".into()), |
| 55 | + ( |
| 56 | + "eip155:43114".into(), |
| 57 | + "https://api.avax.network/ext/bc/C/rpc".into(), |
| 58 | + ), |
| 59 | + ( |
| 60 | + "eip155:42793".into(), |
| 61 | + "https://node.mainnet.etherlink.com".into(), |
| 62 | + ), |
| 63 | + ( |
| 64 | + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp".into(), |
| 65 | + "https://api.mainnet-beta.solana.com".into(), |
| 66 | + ), |
| 67 | + ( |
| 68 | + "bip122:000000000019d6689c085ae165831e93".into(), |
| 69 | + "https://mempool.space/api".into(), |
| 70 | + ), |
| 71 | + ( |
| 72 | + "cosmos:cosmoshub-4".into(), |
| 73 | + "https://cosmos-rest.publicnode.com".into(), |
| 74 | + ), |
| 75 | + ("tron:mainnet".into(), "https://api.trongrid.io".into()), |
| 76 | + ("ton:mainnet".into(), "https://toncenter.com/api/v2".into()), |
| 77 | + ( |
| 78 | + "fil:mainnet".into(), |
| 79 | + "https://api.node.glif.io/rpc/v1".into(), |
| 80 | + ), |
| 81 | + ( |
| 82 | + "sui:mainnet".into(), |
| 83 | + "https://fullnode.mainnet.sui.io:443".into(), |
| 84 | + ), |
| 85 | + ("xrpl:mainnet".into(), "https://s1.ripple.com:51234".into()), |
| 86 | + ( |
| 87 | + "xrpl:testnet".into(), |
| 88 | + "https://s.altnet.rippletest.net:51234".into(), |
| 89 | + ), |
| 90 | + ( |
| 91 | + "xrpl:devnet".into(), |
| 92 | + "https://s.devnet.rippletest.net:51234".into(), |
| 93 | + ), |
| 94 | + ]) |
| 95 | + }); |
| 96 | + &RPC |
93 | 97 | } |
94 | 98 |
|
95 | 99 | /// Look up an RPC URL by CAIP-2 chain ID. |
@@ -123,7 +127,7 @@ impl Default for Config { |
123 | 127 | fn default() -> Self { |
124 | 128 | Self { |
125 | 129 | vault_path: default_vault_path(), |
126 | | - rpc: Self::default_rpc(), |
| 130 | + rpc: Self::default_rpc().clone(), |
127 | 131 | plugins: HashMap::new(), |
128 | 132 | backup: None, |
129 | 133 | } |
|
0 commit comments