github.com/status-im/status-go@v1.1.0/api/default_networks.go (about) 1 package api 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/ethereum/go-ethereum/common" 8 "github.com/status-im/status-go/params" 9 "github.com/status-im/status-go/protocol/requests" 10 ) 11 12 const ( 13 mainnetChainID uint64 = 1 14 goerliChainID uint64 = 5 15 sepoliaChainID uint64 = 11155111 16 optimismChainID uint64 = 10 17 optimismGoerliChainID uint64 = 420 18 optimismSepoliaChainID uint64 = 11155420 19 arbitrumChainID uint64 = 42161 20 arbitrumGoerliChainID uint64 = 421613 21 arbitrumSepoliaChainID uint64 = 421614 22 sntSymbol = "SNT" 23 sttSymbol = "STT" 24 ) 25 26 var ganacheTokenAddress = common.HexToAddress("0x8571Ddc46b10d31EF963aF49b6C7799Ea7eff818") 27 28 func mainnet(stageName string) params.Network { 29 return params.Network{ 30 ChainID: mainnetChainID, 31 ChainName: "Mainnet", 32 DefaultRPCURL: fmt.Sprintf("https://%s.api.status.im/grove/ethereum/mainnet/", stageName), 33 DefaultFallbackURL: fmt.Sprintf("https://%s.api.status.im/infura/ethereum/mainnet/", stageName), 34 RPCURL: "https://eth-archival.rpc.grove.city/v1/", 35 FallbackURL: "https://mainnet.infura.io/v3/", 36 BlockExplorerURL: "https://etherscan.io/", 37 IconURL: "network/Network=Ethereum", 38 ChainColor: "#627EEA", 39 ShortName: "eth", 40 NativeCurrencyName: "Ether", 41 NativeCurrencySymbol: "ETH", 42 NativeCurrencyDecimals: 18, 43 IsTest: false, 44 Layer: 1, 45 Enabled: true, 46 RelatedChainID: goerliChainID, 47 } 48 } 49 50 func goerli(stageName string) params.Network { 51 return params.Network{ 52 ChainID: goerliChainID, 53 ChainName: "Mainnet", 54 RPCURL: "https://goerli.infura.io/v3/", 55 FallbackURL: "", 56 BlockExplorerURL: "https://goerli.etherscan.io/", 57 IconURL: "network/Network=Ethereum", 58 ChainColor: "#627EEA", 59 ShortName: "goEth", 60 NativeCurrencyName: "Ether", 61 NativeCurrencySymbol: "ETH", 62 NativeCurrencyDecimals: 18, 63 IsTest: true, 64 Layer: 1, 65 Enabled: true, 66 RelatedChainID: mainnetChainID, 67 } 68 69 } 70 func sepolia(stageName string) params.Network { 71 return params.Network{ 72 ChainID: sepoliaChainID, 73 ChainName: "Mainnet", 74 DefaultRPCURL: fmt.Sprintf("https://%s.api.status.im/grove/ethereum/sepolia/", stageName), 75 DefaultFallbackURL: fmt.Sprintf("https://%s.api.status.im/infura/ethereum/sepolia/", stageName), 76 RPCURL: "https://sepolia-archival.rpc.grove.city/v1/", 77 FallbackURL: "https://sepolia.infura.io/v3/", 78 BlockExplorerURL: "https://sepolia.etherscan.io/", 79 IconURL: "network/Network=Ethereum", 80 ChainColor: "#627EEA", 81 ShortName: "eth", 82 NativeCurrencyName: "Ether", 83 NativeCurrencySymbol: "ETH", 84 NativeCurrencyDecimals: 18, 85 IsTest: true, 86 Layer: 1, 87 Enabled: true, 88 RelatedChainID: mainnetChainID, 89 } 90 } 91 92 func optimism(stageName string) params.Network { 93 return params.Network{ 94 ChainID: optimismChainID, 95 ChainName: "Optimism", 96 DefaultRPCURL: fmt.Sprintf("https://%s.api.status.im/grove/optimism/mainnet/", stageName), 97 DefaultFallbackURL: fmt.Sprintf("https://%s.api.status.im/infura/optimism/mainnet/", stageName), 98 RPCURL: "https://optimism-archival.rpc.grove.city/v1/", 99 FallbackURL: "https://optimism-mainnet.infura.io/v3/", 100 BlockExplorerURL: "https://optimistic.etherscan.io", 101 IconURL: "network/Network=Optimism", 102 ChainColor: "#E90101", 103 ShortName: "oeth", 104 NativeCurrencyName: "Ether", 105 NativeCurrencySymbol: "ETH", 106 NativeCurrencyDecimals: 18, 107 IsTest: false, 108 Layer: 2, 109 Enabled: true, 110 RelatedChainID: optimismGoerliChainID, 111 } 112 } 113 114 func optimismGoerli(stageName string) params.Network { 115 return params.Network{ 116 ChainID: optimismGoerliChainID, 117 ChainName: "Optimism", 118 RPCURL: "https://optimism-goerli.infura.io/v3/", 119 FallbackURL: "", 120 BlockExplorerURL: "https://goerli-optimism.etherscan.io/", 121 IconURL: "network/Network=Optimism", 122 ChainColor: "#E90101", 123 ShortName: "goOpt", 124 NativeCurrencyName: "Ether", 125 NativeCurrencySymbol: "ETH", 126 NativeCurrencyDecimals: 18, 127 IsTest: true, 128 Layer: 2, 129 Enabled: false, 130 RelatedChainID: optimismChainID, 131 } 132 } 133 134 func optimismSepolia(stageName string) params.Network { 135 return params.Network{ 136 ChainID: optimismSepoliaChainID, 137 ChainName: "Optimism", 138 DefaultRPCURL: fmt.Sprintf("https://%s.api.status.im/grove/optimism/sepolia/", stageName), 139 DefaultFallbackURL: fmt.Sprintf("https://%s.api.status.im/infura/optimism/sepolia/", stageName), 140 RPCURL: "https://optimism-sepolia-archival.rpc.grove.city/v1/", 141 FallbackURL: "https://optimism-sepolia.infura.io/v3/", 142 BlockExplorerURL: "https://sepolia-optimism.etherscan.io/", 143 IconURL: "network/Network=Optimism", 144 ChainColor: "#E90101", 145 ShortName: "oeth", 146 NativeCurrencyName: "Ether", 147 NativeCurrencySymbol: "ETH", 148 NativeCurrencyDecimals: 18, 149 IsTest: true, 150 Layer: 2, 151 Enabled: false, 152 RelatedChainID: optimismChainID, 153 } 154 } 155 156 func arbitrum(stageName string) params.Network { 157 return params.Network{ 158 ChainID: arbitrumChainID, 159 ChainName: "Arbitrum", 160 DefaultRPCURL: fmt.Sprintf("https://%s.api.status.im/grove/arbitrum/mainnet/", stageName), 161 DefaultFallbackURL: fmt.Sprintf("https://%s.api.status.im/infura/arbitrum/mainnet/", stageName), 162 RPCURL: "https://arbitrum-one.rpc.grove.city/v1/", 163 FallbackURL: "https://arbitrum-mainnet.infura.io/v3/", 164 BlockExplorerURL: "https://arbiscan.io/", 165 IconURL: "network/Network=Arbitrum", 166 ChainColor: "#51D0F0", 167 ShortName: "arb1", 168 NativeCurrencyName: "Ether", 169 NativeCurrencySymbol: "ETH", 170 NativeCurrencyDecimals: 18, 171 IsTest: false, 172 Layer: 2, 173 Enabled: true, 174 RelatedChainID: arbitrumGoerliChainID, 175 } 176 } 177 178 func arbitrumGoerli(stageName string) params.Network { 179 return params.Network{ 180 ChainID: arbitrumGoerliChainID, 181 ChainName: "Arbitrum", 182 RPCURL: "https://arbitrum-goerli.infura.io/v3/", 183 FallbackURL: "", 184 BlockExplorerURL: "https://goerli.arbiscan.io/", 185 IconURL: "network/Network=Arbitrum", 186 ChainColor: "#51D0F0", 187 ShortName: "goArb", 188 NativeCurrencyName: "Ether", 189 NativeCurrencySymbol: "ETH", 190 NativeCurrencyDecimals: 18, 191 IsTest: true, 192 Layer: 2, 193 Enabled: false, 194 RelatedChainID: arbitrumChainID, 195 } 196 } 197 198 func arbitrumSepolia(stageName string) params.Network { 199 return params.Network{ 200 ChainID: arbitrumSepoliaChainID, 201 ChainName: "Arbitrum", 202 DefaultRPCURL: fmt.Sprintf("https://%s.api.status.im/grove/arbitrum/sepolia/", stageName), 203 DefaultFallbackURL: fmt.Sprintf("https://%s.api.status.im/infura/arbitrum/sepolia/", stageName), 204 RPCURL: "https://arbitrum-sepolia-archival.rpc.grove.city/v1/", 205 FallbackURL: "https://arbitrum-sepolia.infura.io/v3/", 206 BlockExplorerURL: "https://sepolia-explorer.arbitrum.io/", 207 IconURL: "network/Network=Arbitrum", 208 ChainColor: "#51D0F0", 209 ShortName: "arb1", 210 NativeCurrencyName: "Ether", 211 NativeCurrencySymbol: "ETH", 212 NativeCurrencyDecimals: 18, 213 IsTest: true, 214 Layer: 2, 215 Enabled: false, 216 RelatedChainID: arbitrumChainID, 217 } 218 } 219 220 func defaultNetworks(stageName string) []params.Network { 221 return []params.Network{ 222 mainnet(stageName), 223 goerli(stageName), 224 sepolia(stageName), 225 optimism(stageName), 226 optimismGoerli(stageName), 227 optimismSepolia(stageName), 228 arbitrum(stageName), 229 arbitrumGoerli(stageName), 230 arbitrumSepolia(stageName), 231 } 232 } 233 234 var mainnetGanacheTokenOverrides = params.TokenOverride{ 235 Symbol: sntSymbol, 236 Address: ganacheTokenAddress, 237 } 238 239 var goerliGanacheTokenOverrides = params.TokenOverride{ 240 Symbol: sttSymbol, 241 Address: ganacheTokenAddress, 242 } 243 244 func setRPCs(networks []params.Network, request *requests.WalletSecretsConfig) []params.Network { 245 246 var networksWithRPC []params.Network 247 248 for _, n := range networks { 249 250 if request.InfuraToken != "" { 251 if strings.Contains(n.RPCURL, "infura") { 252 n.RPCURL += request.InfuraToken 253 } 254 if strings.Contains(n.FallbackURL, "infura") { 255 n.FallbackURL += request.InfuraToken 256 } 257 } 258 259 if request.PoktToken != "" { 260 if strings.Contains(n.RPCURL, "grove") { 261 n.RPCURL += request.PoktToken 262 } 263 if strings.Contains(n.FallbackURL, "grove") { 264 n.FallbackURL += request.PoktToken 265 } 266 267 } 268 269 if request.GanacheURL != "" { 270 n.RPCURL = request.GanacheURL 271 n.FallbackURL = request.GanacheURL 272 if n.ChainID == mainnetChainID { 273 n.TokenOverrides = []params.TokenOverride{ 274 mainnetGanacheTokenOverrides, 275 } 276 } else if n.ChainID == goerliChainID { 277 n.TokenOverrides = []params.TokenOverride{ 278 goerliGanacheTokenOverrides, 279 } 280 } 281 } 282 283 networksWithRPC = append(networksWithRPC, n) 284 } 285 286 return networksWithRPC 287 } 288 289 func BuildDefaultNetworks(walletSecretsConfig *requests.WalletSecretsConfig) []params.Network { 290 return setRPCs(defaultNetworks(walletSecretsConfig.StatusProxyStageName), walletSecretsConfig) 291 }