github.com/smartcontractkit/chainlink-testing-framework/libs@v0.0.0-20240227141906-ec710b4eb1a3/networks/known_networks_test.go (about) 1 package networks 2 3 import ( 4 "encoding/base64" 5 "fmt" 6 "os" 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 11 "github.com/smartcontractkit/chainlink-testing-framework/libs/blockchain" 12 "github.com/smartcontractkit/chainlink-testing-framework/libs/config" 13 "github.com/smartcontractkit/chainlink-testing-framework/libs/logging" 14 ) 15 16 func TestMain(m *testing.M) { 17 logging.Init() 18 os.Exit(m.Run()) 19 } 20 21 func TestMustGetSelectedNetworkConfig_MissingSelectedNetwork(t *testing.T) { 22 require.Panics(t, func() { 23 MustGetSelectedNetworkConfig(&config.NetworkConfig{}) 24 }) 25 } 26 27 func TestMustGetSelectedNetworkConfig_Missing_RpcHttpUrls(t *testing.T) { 28 networkName := "arbitrum_goerli" 29 testTOML := ` 30 selected_networks = ["arbitrum_goerli"] 31 32 [RpcWsUrls] 33 arbitrum_goerli = ["wss://devnet-1.mt/ABC/rpc/"] 34 35 [WalletKeys] 36 arbitrum_goerli = ["1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"] 37 ` 38 39 l := logging.GetTestLogger(t) 40 networkCfg := config.NetworkConfig{} 41 err := config.BytesToAnyTomlStruct(l, "test", "", &networkCfg, []byte(testTOML)) 42 43 require.NoError(t, err, "error reading network config") 44 45 require.PanicsWithError(t, fmt.Sprintf("no rpc http urls found in config for '%s' network", networkName), func() { 46 MustGetSelectedNetworkConfig(&networkCfg) 47 }) 48 } 49 50 func TestMustGetSelectedNetworkConfig_Missing_RpcWsUrls(t *testing.T) { 51 networkName := "arbitrum_goerli" 52 testTOML := ` 53 selected_networks = ["arbitrum_goerli"] 54 55 [RpcHttpUrls] 56 arbitrum_goerli = ["https://devnet-1.mt/ABC/rpc/"] 57 58 [WalletKeys] 59 arbitrum_goerli = ["1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"] 60 ` 61 62 l := logging.GetTestLogger(t) 63 networkCfg := config.NetworkConfig{} 64 err := config.BytesToAnyTomlStruct(l, "test", "", &networkCfg, []byte(testTOML)) 65 require.NoError(t, err, "error reading network config") 66 67 require.PanicsWithError(t, fmt.Sprintf("no rpc ws urls found in config for '%s' network", networkName), func() { 68 MustGetSelectedNetworkConfig(&networkCfg) 69 }) 70 } 71 72 func TestMustGetSelectedNetworkConfig_Missing_WalletKeys(t *testing.T) { 73 networkName := "arbitrum_goerli" 74 testTOML := ` 75 selected_networks = ["arbitrum_goerli"] 76 77 [RpcHttpUrls] 78 arbitrum_goerli = ["https://devnet-1.mt/ABC/rpc/"] 79 80 [RpcWsUrls] 81 arbitrum_goerli = ["wss://devnet-1.mt/ABC/rpc/"] 82 ` 83 84 l := logging.GetTestLogger(t) 85 networkCfg := config.NetworkConfig{} 86 err := config.BytesToAnyTomlStruct(l, "test", "", &networkCfg, []byte(testTOML)) 87 require.NoError(t, err, "error reading network config") 88 89 require.PanicsWithError(t, fmt.Sprintf("no wallet keys found in config for '%s' network", networkName), func() { 90 MustGetSelectedNetworkConfig(&networkCfg) 91 }) 92 } 93 94 func TestMustGetSelectedNetworkConfig_DefaultUrlsFromEnv(t *testing.T) { 95 networkConfigTOML := ` 96 [RpcHttpUrls] 97 arbitrum_goerli = ["https://devnet-1.mt/ABC/rpc/"] 98 99 [RpcWsUrls] 100 arbitrum_goerli = ["wss://devnet-1.mt/ABC/rpc/"] 101 ` 102 encoded := base64.StdEncoding.EncodeToString([]byte(networkConfigTOML)) 103 err := os.Setenv("BASE64_NETWORK_CONFIG", encoded) 104 require.NoError(t, err, "error setting env var") 105 106 testTOML := ` 107 selected_networks = ["arbitrum_goerli"] 108 109 [WalletKeys] 110 arbitrum_goerli = ["1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"] 111 ` 112 113 l := logging.GetTestLogger(t) 114 networkCfg := config.NetworkConfig{} 115 err = config.BytesToAnyTomlStruct(l, "test", "", &networkCfg, []byte(testTOML)) 116 require.NoError(t, err, "error reading network config") 117 118 networkCfg.UpperCaseNetworkNames() 119 120 err = networkCfg.Default() 121 require.NoError(t, err, "error reading default network config") 122 123 err = networkCfg.Validate() 124 require.NoError(t, err, "error validating network config") 125 126 networks := MustGetSelectedNetworkConfig(&networkCfg) 127 require.Len(t, networks, 1, "should have 1 network") 128 require.Equal(t, "Arbitrum Goerli", networks[0].Name, "first network should be arbitrum") 129 require.Equal(t, []string{"wss://devnet-1.mt/ABC/rpc/"}, networks[0].URLs, "should have default ws url for arbitrum") 130 require.Equal(t, []string{"https://devnet-1.mt/ABC/rpc/"}, networks[0].HTTPURLs, "should have default http url for arbitrum") 131 require.Equal(t, []string{"1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"}, networks[0].PrivateKeys, "should have correct wallet key for arbitrum") 132 } 133 134 func TestMustGetSelectedNetworkConfig_MultipleNetworks(t *testing.T) { 135 testTOML := ` 136 selected_networks = ["arbitrum_goerli", "optimism_goerli"] 137 138 [RpcHttpUrls] 139 arbitrum_goerli = ["https://devnet-1.mt/ABC/rpc/"] 140 optimism_goerli = ["https://devnet-1.mt/ABC/rpc/"] 141 142 [RpcWsUrls] 143 arbitrum_goerli = ["wss://devnet-1.mt/ABC/rpc/"] 144 optimism_goerli = ["wss://devnet-1.mt/ABC/rpc/"] 145 146 [WalletKeys] 147 arbitrum_goerli = ["1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"] 148 optimism_goerli = ["1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"] 149 ` 150 151 l := logging.GetTestLogger(t) 152 networkCfg := config.NetworkConfig{} 153 err := config.BytesToAnyTomlStruct(l, "test", "", &networkCfg, []byte(testTOML)) 154 require.NoError(t, err, "error reading network config") 155 156 networks := MustGetSelectedNetworkConfig(&networkCfg) 157 require.Len(t, networks, 2) 158 require.Equal(t, "Arbitrum Goerli", networks[0].Name) 159 require.Equal(t, "Optimism Goerli", networks[1].Name) 160 } 161 162 func TestMustGetSelectedNetworkConfig_DefaultUrlsFromSecret_OverrideOne(t *testing.T) { 163 networkConfigTOML := ` 164 [RpcHttpUrls] 165 arbitrum_goerli = ["https://devnet-1.mt/ABC/rpc/"] 166 optimism_goerli = ["https://devnet-1.mt/ABC/rpc/"] 167 168 [RpcWsUrls] 169 arbitrum_goerli = ["wss://devnet-1.mt/ABC/rpc/"] 170 optimism_goerli = ["wss://devnet-1.mt/ABC/rpc/"] 171 ` 172 encoded := base64.StdEncoding.EncodeToString([]byte(networkConfigTOML)) 173 err := os.Setenv("BASE64_NETWORK_CONFIG", encoded) 174 require.NoError(t, err, "error setting env var") 175 176 testTOML := ` 177 selected_networks = ["arbitrum_goerli", "optimism_goerli"] 178 179 [RpcHttpUrls] 180 arbitrum_goerli = ["https://devnet-2.mt/ABC/rpc/"] 181 182 [WalletKeys] 183 arbitrum_goerli = ["1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"] 184 optimism_goerli = ["1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"] 185 ` 186 187 l := logging.GetTestLogger(t) 188 networkCfg := config.NetworkConfig{} 189 err = config.BytesToAnyTomlStruct(l, "test", "", &networkCfg, []byte(testTOML)) 190 require.NoError(t, err, "error reading network config") 191 192 networkCfg.UpperCaseNetworkNames() 193 err = networkCfg.Default() 194 require.NoError(t, err, "error reading default network config") 195 196 networks := MustGetSelectedNetworkConfig(&networkCfg) 197 require.Len(t, networks, 2, "should have 2 networks") 198 require.Equal(t, "Arbitrum Goerli", networks[0].Name, "first network should be arbitrum") 199 require.Equal(t, []string{"wss://devnet-1.mt/ABC/rpc/"}, networks[0].URLs, "should have default ws url for arbitrum") 200 require.Equal(t, []string{"https://devnet-2.mt/ABC/rpc/"}, networks[0].HTTPURLs, "should have overridden http url for arbitrum") 201 require.Equal(t, []string{"1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"}, networks[0].PrivateKeys, "should have correct wallet key for arbitrum") 202 203 require.Equal(t, "Optimism Goerli", networks[1].Name, "first network should be optimism") 204 require.Equal(t, []string{"wss://devnet-1.mt/ABC/rpc/"}, networks[1].URLs, "should have default ws url for optimism") 205 require.Equal(t, []string{"https://devnet-1.mt/ABC/rpc/"}, networks[1].HTTPURLs, "should have default http url for optimism") 206 require.Equal(t, []string{"1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"}, networks[1].PrivateKeys, "should have correct wallet key for optimism") 207 } 208 209 func TestNewEVMNetwork(t *testing.T) { 210 // Set up a mock mapping and revert it after test 211 originalMappedNetworks := MappedNetworks 212 MappedNetworks = map[string]blockchain.EVMNetwork{ 213 "VALID_KEY": { 214 HTTPURLs: []string{"default_http"}, 215 URLs: []string{"default_ws"}, 216 }, 217 } 218 defer func() { 219 MappedNetworks = originalMappedNetworks 220 }() 221 222 t.Run("valid networkKey", func(t *testing.T) { 223 network := MappedNetworks["VALID_KEY"] 224 err := NewEVMNetwork(&network, nil, nil, nil) 225 require.NoError(t, err) 226 require.Equal(t, MappedNetworks["VALID_KEY"].HTTPURLs, network.HTTPURLs) 227 require.Equal(t, MappedNetworks["VALID_KEY"].URLs, network.URLs) 228 }) 229 230 t.Run("overwriting default values", func(t *testing.T) { 231 walletKeys := []string{"1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"} 232 httpUrls := []string{"http://newurl.com"} 233 wsUrls := []string{"ws://newwsurl.com"} 234 network := MappedNetworks["VALID_KEY"] 235 err := NewEVMNetwork(&network, walletKeys, httpUrls, wsUrls) 236 require.NoError(t, err) 237 require.Equal(t, httpUrls, network.HTTPURLs) 238 require.Equal(t, wsUrls, network.URLs) 239 require.Equal(t, walletKeys, network.PrivateKeys) 240 }) 241 } 242 243 func TestVariousNetworkConfig(t *testing.T) { 244 newNetwork := blockchain.EVMNetwork{ 245 Name: "new_test_network", 246 ChainID: 100009, 247 Simulated: true, 248 ChainlinkTransactionLimit: 5000, 249 MinimumConfirmations: 1, 250 GasEstimationBuffer: 10000, 251 ClientImplementation: blockchain.EthereumClientImplementation, 252 HTTPURLs: []string{ 253 "http://localhost:8545", 254 }, 255 URLs: []string{ 256 "ws://localhost:8546", 257 }, 258 SupportsEIP1559: true, 259 DefaultGasLimit: 6000000, 260 PrivateKeys: []string{ 261 "ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", 262 }, 263 } 264 forkedNetwork := newNetwork 265 forkedNetwork.HTTPURLs = nil 266 forkedNetwork.URLs = nil 267 forkedNetwork.PrivateKeys = nil 268 t.Cleanup(func() { 269 ArbitrumGoerli.URLs = []string{} 270 ArbitrumGoerli.HTTPURLs = []string{} 271 ArbitrumGoerli.PrivateKeys = []string{} 272 OptimismGoerli.URLs = []string{} 273 OptimismGoerli.HTTPURLs = []string{} 274 OptimismGoerli.PrivateKeys = []string{} 275 }) 276 ArbitrumGoerli.URLs = []string{"wss://devnet-1.mt/ABC/rpc/"} 277 ArbitrumGoerli.HTTPURLs = []string{"https://devnet-1.mt/ABC/rpc/"} 278 ArbitrumGoerli.PrivateKeys = []string{"1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"} 279 OptimismGoerli.URLs = []string{"wss://devnet-1.mt/ABC/rpc/"} 280 OptimismGoerli.HTTPURLs = []string{"https://devnet-1.mt/ABC/rpc/"} 281 OptimismGoerli.PrivateKeys = []string{"1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"} 282 283 testcases := []struct { 284 name string 285 networkConfigTOML string 286 overrideTOML string 287 isNetworkConfigError bool 288 isEVMNetworkError bool 289 expNetworks []blockchain.EVMNetwork 290 }{ 291 { 292 name: "case insensitive network key to EVMNetworks", 293 networkConfigTOML: ` 294 selected_networks = ["NEW_NETWORK"] 295 296 [EVMNetworks.new_Network] 297 evm_name = "new_test_network" 298 evm_chain_id = 100009 299 evm_urls = ["ws://localhost:8546"] 300 evm_http_urls = ["http://localhost:8545"] 301 client_implementation = "Ethereum" 302 evm_keys = ["ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"] 303 evm_simulated = true 304 evm_chainlink_transaction_limit = 5000 305 evm_minimum_confirmations = 1 306 evm_gas_estimation_buffer = 10000 307 evm_supports_eip1559 = true 308 evm_default_gas_limit = 6000000 309 `, 310 expNetworks: []blockchain.EVMNetwork{newNetwork}, 311 }, 312 { 313 name: "case insensitive network key fo fork config", 314 networkConfigTOML: ` 315 selected_networks = ["KROMA_SEPOLIA"] 316 317 [ForkConfigs.kroma_SEPOLIA] 318 url = "ws://localhost:8546" 319 block_number = 100 320 `, 321 expNetworks: []blockchain.EVMNetwork{KromaSepolia}, 322 }, 323 { 324 name: "override with new ForkConfigs and new EVMNetworks", 325 networkConfigTOML: ` 326 selected_networks = ["KROMA_SEPOLIA","NEW_NETWORK"] 327 328 [ForkConfigs.KROMA_SEPOLIA] 329 url = "ws://localhost:8546" 330 block_number = 100 331 `, 332 overrideTOML: ` 333 [EVMNetworks.new_network] 334 evm_name = "new_test_network" 335 evm_chain_id = 100009 336 evm_simulated = true 337 client_implementation = "Ethereum" 338 evm_chainlink_transaction_limit = 5000 339 evm_minimum_confirmations = 1 340 evm_gas_estimation_buffer = 10000 341 evm_supports_eip1559 = true 342 evm_default_gas_limit = 6000000 343 344 [ForkConfigs.new_network] 345 url = "ws://localhost:8546" 346 block_number = 100 347 `, 348 expNetworks: []blockchain.EVMNetwork{KromaSepolia, forkedNetwork}, 349 }, 350 { 351 name: "forked network for existing network", 352 networkConfigTOML: ` 353 selected_networks = ["KROMA_SEPOLIA"] 354 355 [ForkConfigs.KROMA_SEPOLIA] 356 url = "ws://localhost:8546" 357 block_number = 100 358 `, 359 expNetworks: []blockchain.EVMNetwork{KromaSepolia}, 360 }, 361 362 { 363 name: "forked network for new network", 364 networkConfigTOML: ` 365 selected_networks = ["new_network"] 366 367 [EVMNetworks.new_network] 368 evm_name = "new_test_network" 369 evm_chain_id = 100009 370 evm_simulated = true 371 client_implementation = "Ethereum" 372 evm_chainlink_transaction_limit = 5000 373 evm_minimum_confirmations = 1 374 evm_gas_estimation_buffer = 10000 375 evm_supports_eip1559 = true 376 evm_default_gas_limit = 6000000 377 378 [ForkConfigs.new_network] 379 url = "ws://localhost:8546" 380 block_number = 100 381 `, 382 expNetworks: []blockchain.EVMNetwork{forkedNetwork}, 383 }, 384 { 385 name: "existing network and new network together in one config", 386 networkConfigTOML: ` 387 selected_networks = ["new_network","arbitrum_goerli", "optimism_goerli"] 388 389 [EVMNetworks.new_network] 390 evm_name = "new_test_network" 391 evm_chain_id = 100009 392 evm_urls = ["ws://localhost:8546"] 393 evm_http_urls = ["http://localhost:8545"] 394 client_implementation = "Ethereum" 395 evm_keys = ["ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"] 396 evm_simulated = true 397 evm_chainlink_transaction_limit = 5000 398 evm_minimum_confirmations = 1 399 evm_gas_estimation_buffer = 10000 400 evm_supports_eip1559 = true 401 evm_default_gas_limit = 6000000 402 403 [RpcHttpUrls] 404 arbitrum_goerli = ["https://devnet-1.mt/ABC/rpc/"] 405 optimism_goerli = ["https://devnet-1.mt/ABC/rpc/"] 406 407 [RpcWsUrls] 408 arbitrum_goerli = ["wss://devnet-1.mt/ABC/rpc/"] 409 optimism_goerli = ["wss://devnet-1.mt/ABC/rpc/"] 410 411 [WalletKeys] 412 arbitrum_goerli = ["1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"] 413 optimism_goerli = ["1810868fc221b9f50b5b3e0186d8a5f343f892e51ce12a9e818f936ec0b651ed"] 414 `, 415 expNetworks: []blockchain.EVMNetwork{ 416 newNetwork, ArbitrumGoerli, OptimismGoerli, 417 }, 418 }, 419 { 420 name: "new network with empty chain id", 421 networkConfigTOML: ` 422 selected_networks = ["new_network"] 423 424 [EVMNetworks.new_network] 425 evm_name = "new_test_network" 426 evm_urls = ["ws://localhost:8546"] 427 evm_http_urls = ["http://localhost:8545"] 428 evm_keys = ["ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"] 429 evm_simulated = true 430 evm_chainlink_transaction_limit = 5000 431 client_implementation = "Ethereum" 432 evm_minimum_confirmations = 1 433 evm_gas_estimation_buffer = 10000 434 evm_supports_eip1559 = true 435 evm_default_gas_limit = 6000000 436 `, 437 isNetworkConfigError: true, 438 }, 439 { 440 name: "new network with empty client implementation", 441 networkConfigTOML: ` 442 selected_networks = ["new_network"] 443 444 [EVMNetworks.new_network] 445 evm_name = "new_test_network" 446 evm_chain_id = 100009 447 evm_urls = ["ws://localhost:8546"] 448 evm_http_urls = ["http://localhost:8545"] 449 evm_keys = ["ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"] 450 evm_simulated = true 451 evm_chainlink_transaction_limit = 5000 452 evm_minimum_confirmations = 1 453 evm_gas_estimation_buffer = 10000 454 evm_supports_eip1559 = true 455 evm_default_gas_limit = 6000000 456 `, 457 isNetworkConfigError: true, 458 }, 459 { 460 name: "new network without rpc urls", 461 networkConfigTOML: ` 462 selected_networks = ["new_network"] 463 464 [EVMNetworks.new_network] 465 evm_name = "new_test_network" 466 evm_chain_id = 100009 467 evm_keys = ["ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"] 468 evm_simulated = true 469 evm_chainlink_transaction_limit = 5000 470 evm_minimum_confirmations = 1 471 evm_gas_estimation_buffer = 10000 472 client_implementation = "Ethereum" 473 evm_supports_eip1559 = true 474 evm_default_gas_limit = 6000000 475 `, 476 isNetworkConfigError: true, 477 }, 478 { 479 name: "new network with rpc urls and wallet keys both in EVMNetworks and Rpc<Http/Ws>Urls and WalletKeys", 480 networkConfigTOML: ` 481 selected_networks = ["new_network"] 482 483 [EVMNetworks.new_network] 484 evm_name = "new_test_network" 485 evm_chain_id = 100009 486 evm_urls = ["ws://localhost:8546"] 487 evm_http_urls = ["http://localhost:8545"] 488 evm_keys = ["ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"] 489 evm_simulated = true 490 evm_chainlink_transaction_limit = 5000 491 evm_minimum_confirmations = 1 492 evm_gas_estimation_buffer = 10000 493 client_implementation = "Ethereum" 494 evm_supports_eip1559 = true 495 evm_default_gas_limit = 6000000 496 497 [RpcHttpUrls] 498 new_network = ["http://localhost:iamnotvalid"] 499 [RpcWsUrls] 500 new_network = ["ws://localhost:iamnotvalid"] 501 [WalletKeys] 502 new_network = ["something random"] 503 `, 504 expNetworks: []blockchain.EVMNetwork{newNetwork}, 505 }, 506 { 507 name: "new network with rpc urls and wallet keys in EVMNetworks", 508 networkConfigTOML: ` 509 selected_networks = ["new_network"] 510 511 [EVMNetworks.new_network] 512 evm_name = "new_test_network" 513 evm_chain_id = 100009 514 evm_urls = ["ws://localhost:8546"] 515 evm_http_urls = ["http://localhost:8545"] 516 evm_keys = ["ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"] 517 evm_simulated = true 518 evm_chainlink_transaction_limit = 5000 519 evm_minimum_confirmations = 1 520 evm_gas_estimation_buffer = 10000 521 client_implementation = "Ethereum" 522 evm_supports_eip1559 = true 523 evm_default_gas_limit = 6000000 524 `, 525 expNetworks: []blockchain.EVMNetwork{newNetwork}, 526 }, 527 { 528 name: "new network with rpc urls in EVMNetworks and wallet keys in WalletKeys NetworkConfig", 529 networkConfigTOML: ` 530 selected_networks = ["new_network"] 531 532 [EVMNetworks.new_network] 533 evm_name = "new_test_network" 534 evm_chain_id = 100009 535 evm_urls = ["ws://localhost:8546"] 536 evm_http_urls = ["http://localhost:8545"] 537 evm_simulated = true 538 evm_chainlink_transaction_limit = 5000 539 evm_minimum_confirmations = 1 540 evm_gas_estimation_buffer = 10000 541 client_implementation = "Ethereum" 542 evm_supports_eip1559 = true 543 evm_default_gas_limit = 6000000 544 545 [WalletKeys] 546 new_network = ["ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"] 547 `, 548 expNetworks: []blockchain.EVMNetwork{newNetwork}, 549 }, 550 { 551 name: "new network with rpc urls and wallet keys in NetworkConfig", 552 networkConfigTOML: ` 553 selected_networks = ["new_network"] 554 555 [EVMNetworks.new_network] 556 evm_name = "new_test_network" 557 evm_chain_id = 100009 558 evm_simulated = true 559 evm_chainlink_transaction_limit = 5000 560 evm_minimum_confirmations = 1 561 evm_gas_estimation_buffer = 10000 562 client_implementation = "Ethereum" 563 evm_supports_eip1559 = true 564 evm_default_gas_limit = 6000000 565 566 [RpcHttpUrls] 567 new_network = ["http://localhost:8545"] 568 [RpcWsUrls] 569 new_network = ["ws://localhost:8546"] 570 [WalletKeys] 571 new_network = ["ac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"] 572 `, 573 expNetworks: []blockchain.EVMNetwork{newNetwork}, 574 }, 575 } 576 for _, tc := range testcases { 577 tc := tc 578 t.Run(tc.name, func(t *testing.T) { 579 encoded := base64.StdEncoding.EncodeToString([]byte(tc.networkConfigTOML)) 580 err := os.Setenv("BASE64_NETWORK_CONFIG", encoded) 581 require.NoError(t, err, "error setting env var") 582 583 networkCfg := &config.NetworkConfig{} 584 if tc.overrideTOML != "" { 585 l := logging.GetTestLogger(t) 586 err = config.BytesToAnyTomlStruct(l, "test", "", &networkCfg, []byte(tc.overrideTOML)) 587 require.NoError(t, err, "error reading network config") 588 } 589 networkCfg.UpperCaseNetworkNames() 590 err = networkCfg.Default() 591 require.NoError(t, err, "error setting default network config") 592 err = networkCfg.Validate() 593 if tc.isNetworkConfigError { 594 require.Error(t, err, "expected network config error") 595 return 596 } 597 require.NoError(t, err, "error validating network config") 598 actualNets, err := SetNetworks(*networkCfg) 599 if tc.isEVMNetworkError { 600 t.Log(err) 601 require.Error(t, err, "expected evmNetwork set up error") 602 return 603 } 604 require.NoError(t, err, "unexpected error") 605 require.Equal(t, tc.expNetworks, actualNets, "unexpected networks") 606 }) 607 } 608 }