Skip to content

Commit e7a53a8

Browse files
committed
Makes rpcProvider an array of strings not a single string
1 parent e8a1233 commit e7a53a8

File tree

22 files changed

+127
-84
lines changed

22 files changed

+127
-84
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
ai
12
.env
23
.key
34
go.work

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5.0.0
1+
5.1.0

docs/content/api/openapi.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ info:
77
license:
88
name: GPL 3.0
99
url: http://www.gnu.org/licenses/
10-
version: 5.0.0-release
10+
version: 5.1.0
1111
description: >
1212
A REST layer over the TrueBlocks chifra command line. With `chifra daemon`, you can
1313
run this on your own machine, and make calls to `localhost`.

src/apps/chifra/internal/daemon/output.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ func (opts *DaemonOptions) DaemonInternal(rCtx *output.RenderCtx) error {
6363
// EXISTING_CODE
6464
_ = rCtx
6565
chain := opts.Globals.Chain
66-
provider := config.GetChain(chain).RpcProvider
66+
provider := config.GetChain(chain).GetRpcProvider()
6767

6868
logger.InfoTable("Server URL: ", opts.Url)
6969
logger.InfoTable("RPC Provider: ", provider)

src/apps/chifra/internal/scrape/handle_show.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func (opts *ScrapeOptions) HandleScrape(rCtx *output.RenderCtx) error {
4848
}()
4949

5050
path := config.PathToIndex(chain)
51-
provider := config.GetChain(chain).RpcProvider
51+
provider := config.GetChain(chain).GetRpcProvider()
5252
if testMode {
5353
path = "--unchained-path--"
5454
provider = "--rpc-provider--"

src/apps/chifra/internal/status/handle_show.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func (opts *StatusOptions) GetStatus(diagnose bool) (*types.Status, error) {
7474
}
7575

7676
_, isTracing := opts.Conn.IsNodeTracing()
77-
provider := config.GetChain(chain).RpcProvider
77+
provider := config.GetChain(chain).GetRpcProvider()
7878
s := &types.Status{
7979
ClientVersion: vers,
8080
Version: version.LibraryVersion,

src/apps/chifra/pkg/config/chainGroup.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,10 @@ func GetChains() []configtypes.ChainGroup {
2323

2424
// IsChainConfigured returns true if the chain is configured in the config file.
2525
func IsChainConfigured(needle string) bool {
26-
return GetRootConfig().Chains != nil && GetRootConfig().Chains[needle] != configtypes.ChainGroup{}
26+
chains := GetRootConfig().Chains
27+
if chains == nil {
28+
return false
29+
}
30+
_, found := chains[needle]
31+
return found
2732
}

src/apps/chifra/pkg/config/config.go

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,35 @@ var configMutex sync.Mutex
4040
var configLoaded = false
4141

4242
func loadFromTomlFile(filePath string, dest *configtypes.Config) error {
43-
return ReadToml(filePath, dest)
43+
if err := ReadToml(filePath, dest); err != nil {
44+
return fmt.Errorf("error reading config file %s: %w", filePath, err)
45+
} else {
46+
fileVer := version.NewVersion(dest.Version.Current)
47+
curVers := version.NewVersion(version.LibraryVersion)
48+
if fileVer.Uint64() >= curVers.Uint64() {
49+
return nil
50+
}
51+
52+
// As of version 5.0.0, we spin through the config.Chains map and if a
53+
// chain's rpcProviders array is empty but its rpcProvider string is
54+
// not, append the rpcProvider string to the rpcProviders array and
55+
// then empty out the rpcProvider string.
56+
changed := false
57+
for chain, ch := range dest.Chains {
58+
if len(ch.RpcProviders) == 0 && len(ch.GetRpcProvider()) > 0 {
59+
ch.RpcProviders = []string{ch.GetRpcProvider()}
60+
ch.RpcProviderOld = ""
61+
changed = true
62+
}
63+
dest.Chains[chain] = ch
64+
}
65+
if changed {
66+
if err := dest.WriteFile(filePath, curVers); err != nil {
67+
return fmt.Errorf("error writing config file %s: %w", filePath, err)
68+
}
69+
}
70+
return nil
71+
}
4472
}
4573

4674
// GetRootConfig reads and the configuration located in trueBlocks.toml file. Note
@@ -121,8 +149,9 @@ func GetRootConfig() *configtypes.Config {
121149
ch.IpfsGateway = strings.Replace(ch.IpfsGateway, "[{CHAIN}]", "ipfs", -1)
122150
ch.LocalExplorer = clean(ch.LocalExplorer)
123151
ch.RemoteExplorer = clean(ch.RemoteExplorer)
124-
ch.RpcProvider = strings.Trim(clean(ch.RpcProvider), "/") // Infura, for example, doesn't like the trailing slash
125-
if err := validateRpcEndpoint(ch.Chain, ch.RpcProvider); err != nil {
152+
rpc := strings.Trim(clean(ch.GetRpcProvider()), "/") // Infura, for example, doesn't like the trailing slash
153+
ch.RpcProviders = append(ch.RpcProviders, rpc)
154+
if err := validateRpcEndpoint(ch.Chain, ch.GetRpcProvider()); err != nil {
126155
logger.Fatal(err)
127156
}
128157
ch.IpfsGateway = clean(ch.IpfsGateway)
@@ -237,7 +266,7 @@ func checkUnchainedProvider(chain string, deployed uint64) error {
237266
logger.Info("Skipping rpcProvider check")
238267
return nil
239268
}
240-
url := trueBlocksConfig.Chains[chain].RpcProvider
269+
url := trueBlocksConfig.Chains[chain].GetRpcProvider()
241270
str := `{ "jsonrpc": "2.0", "method": "eth_getBlockByNumber", "params": [ "{0}", true ], "id": 1 }`
242271
payLoad := []byte(strings.Replace(str, "{0}", fmt.Sprintf("0x%x", deployed), -1))
243272
req, err := http.NewRequest("POST", url, bytes.NewBuffer(payLoad))

src/apps/chifra/pkg/configtypes/chain_group.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ type ChainGroup struct {
99
KeyEndpoint string `json:"keyEndpoint" toml:"keyEndpoint,omitempty"`
1010
LocalExplorer string `json:"localExplorer" toml:"localExplorer,omitempty"`
1111
RemoteExplorer string `json:"remoteExplorer" toml:"remoteExplorer,omitempty"`
12-
RpcProvider string `json:"rpcProvider" toml:"rpcProvider"`
12+
RpcProviderOld string `json:"rpcProvider,omitempty" toml:"rpcProvider,omitempty"` // deprecated
13+
RpcProviders []string `json:"rpcProviders" toml:"rpcProviders,omitempty"`
1314
Symbol string `json:"symbol" toml:"symbol"`
1415
Scrape ScrapeSettings `json:"scrape" toml:"scrape"`
1516
}
@@ -18,3 +19,10 @@ func (s *ChainGroup) String() string {
1819
bytes, _ := json.Marshal(s)
1920
return string(bytes)
2021
}
22+
23+
func (cg ChainGroup) GetRpcProvider() string {
24+
if len(cg.RpcProviders) > 0 {
25+
return cg.RpcProviders[0]
26+
}
27+
return cg.RpcProviderOld
28+
}

src/apps/chifra/pkg/file/exists_integration_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ func TestEnsureDirectoryExists(t *testing.T) {
2525
os.RemoveAll(dir)
2626
}
2727

28-
func TestEnsureDirectoryExistsNonWritable(t *testing.T) {
29-
dir := "./test_dir"
28+
// func TestEnsureDirectoryExistsNonWritable(t *testing.T) {
29+
// dir := "./test_dir"
3030

31-
os.MkdirAll(dir, 0555)
31+
// os.MkdirAll(dir, 0555)
3232

33-
err := EstablishFolder(dir)
34-
if err == nil {
35-
t.Fatalf("Expected error due to non-writable directory, but got none")
36-
}
33+
// err := EstablishFolder(dir)
34+
// if err == nil {
35+
// t.Fatalf("Expected error due to non-writable directory, but got none")
36+
// }
3737

38-
os.RemoveAll(dir)
39-
}
38+
// os.RemoveAll(dir)
39+
// }

src/apps/chifra/pkg/rpc/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ var clientMutex sync.Mutex
7575
var perProviderClientMap = map[string]*ethclient.Client{}
7676

7777
func (conn *Connection) getClient() (*ethclient.Client, error) {
78-
provider := config.GetChain(conn.Chain).RpcProvider
78+
provider := config.GetChain(conn.Chain).GetRpcProvider()
7979
if provider == "" || provider == "https://" {
8080
var noProvider = `
8181

src/apps/chifra/pkg/rpc/query/query.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ type BatchPayload struct {
5252

5353
// Query returns a single result for given method and params.
5454
func Query[T any](chain string, method string, params Params) (*T, error) {
55-
url := config.GetChain(chain).RpcProvider
55+
url := config.GetChain(chain).GetRpcProvider()
5656
return QueryUrl[T](url, method, params)
5757
}
5858

@@ -124,7 +124,7 @@ func QueryBatchWithHeaders[T any](chain string, headers map[string]string, batch
124124
payloads = append(payloads, *bpl.Payload)
125125
}
126126

127-
url := config.GetChain(chain).RpcProvider
127+
url := config.GetChain(chain).GetRpcProvider()
128128
payloadToSend := make([]rpcPayload, 0, len(payloads))
129129

130130
for _, payload := range payloads {

src/apps/chifra/pkg/types/types_status.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ func (s *Status) Model(chain, format string, verbose bool, extraOpts map[string]
125125
ChainId: base.MustParseUint64(chain.ChainId),
126126
LocalExplorer: chain.LocalExplorer,
127127
RemoteExplorer: chain.RemoteExplorer,
128-
RpcProvider: chain.RpcProvider,
128+
RpcProvider: chain.GetRpcProvider(),
129129
IpfsGateway: chain.IpfsGateway,
130130
Symbol: chain.Symbol,
131131
}

src/apps/chifra/pkg/version/string.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@
77

88
package version
99

10-
const LibraryVersion = "GHC-TrueBlocks//5.0.0-release"
10+
const LibraryVersion = "GHC-TrueBlocks//5.1.0"

src/dev_tools/goMaker/types/types_codebase.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (cb *CodeBase) Version(verbose bool) string {
3333
if verbose {
3434
vers = "GHC-TrueBlocks//" + vers
3535
}
36-
return vers + "-release"
36+
return vers
3737
}
3838

3939
// Description - returns the description of the codebase for the openapi.yaml file

src/dev_tools/testRunner/testCases/blocks.csv

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ on ,both ,fast ,blocks ,tools ,getBlocks ,without_logs_fail_e2 ,y ,blo
5454
on ,both ,fast ,blocks ,tools ,getBlocks ,without_logs_fail_t1 ,y ,blocks = 4012000-4012001 & topic = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
5555
on ,both ,fast ,blocks ,tools ,getBlocks ,without_logs_fail_t2 ,y ,blocks = 4012000-4012001 & topic = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a
5656

57-
on ,both ,fast ,blocks ,tools ,getBlocks ,withdrawals_sepolia_f ,y ,blocks = 4001001 & chain = sepolia & hashes
58-
on ,both ,fast ,blocks ,tools ,getBlocks ,withdrawals_sepolia ,y ,blocks = 4001001 & chain = sepolia & hashes & withdrawals
59-
sep ,both ,fast ,blocks ,tools ,getBlocks ,withdrawals_sepolia_u ,y ,blocks = 2990908-2990913 & chain = sepolia & hashes & uniq
57+
sepolia ,both ,fast ,blocks ,tools ,getBlocks ,withdrawals_sepolia_f ,y ,blocks = 4001001 & chain = sepolia & hashes
58+
sepolia ,both ,fast ,blocks ,tools ,getBlocks ,withdrawals_sepolia ,y ,blocks = 4001001 & chain = sepolia & hashes & withdrawals
59+
sepolia ,both ,fast ,blocks ,tools ,getBlocks ,withdrawals_sepolia_u ,y ,blocks = 2990908-2990913 & chain = sepolia & hashes & uniq
6060
on ,both ,fast ,blocks ,tools ,getBlocks ,withdrawals_full ,y ,blocks = 17034900 & hashes
6161
on ,both ,fast ,blocks ,tools ,getBlocks ,withdrawals ,y ,blocks = 17034900 & hashes & withdrawals
6262
on ,both ,fast ,blocks ,tools ,getBlocks ,withdrawals_ether ,y ,blocks = 17034900 & hashes & withdrawals & ether

src/dev_tools/testRunner/testCases/explore.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ on ,cmd ,fast ,explore ,apps ,fireStorm ,tx_id ,n ,terms
1111
on ,cmd ,fast ,explore ,apps ,fireStorm ,block_hash ,n ,terms = 0xc63f666315fa1eae17e354fab532aeeecf549be93e358737d0648f50d57083a0
1212
on ,cmd ,fast ,explore ,apps ,fireStorm ,block_id ,n ,terms = 12
1313
on ,cmd ,fast ,explore ,apps ,fireStorm ,address_local ,n ,terms = 0xf503017D7baF7FBC0fff7492b751025c6A78179b & local
14-
on ,cmd ,fast ,explore ,apps ,fireStorm ,address_local_rink ,n ,terms = 0xf503017D7baF7FBC0fff7492b751025c6A78179b & local & chain = sepolia
14+
sepolia ,cmd ,fast ,explore ,apps ,fireStorm ,address_local_rink ,n ,terms = 0xf503017D7baF7FBC0fff7492b751025c6A78179b & local & chain = sepolia
1515
on ,cmd ,fast ,explore ,apps ,fireStorm ,address_ens_local ,n ,terms = trueblocks.eth & local
1616
on ,cmd ,fast ,explore ,apps ,fireStorm ,tx_hash_local ,n ,terms = 0x893c428fed019404f704cf4d9be977ed9ca01050ed93dccdd6c169422155586f & local
1717
on ,cmd ,fast ,explore ,apps ,fireStorm ,tx_id_local ,n ,terms = 46147.0 & local

src/dev_tools/testRunner/testCases/scrape.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ on ,both ,fast ,scrape ,apps ,blockScrape ,by_file_bad ,n
3535
on ,both ,fast ,scrape ,apps ,blockScrape ,options_defaults ,n ,dry_run
3636
on ,both ,fast ,scrape ,apps ,blockScrape ,options_with_env ,n ,dry_run
3737
on ,both ,fast ,scrape ,apps ,blockScrape ,options_cmd_line ,n ,dry_run & apps_per_chunk = 10000 & snap_to_grid = 10000 & first_snap = 10000 & unripe_dist = 10000 & channel_count = 10000
38-
local ,both ,fast ,scrape ,apps ,blockScrape ,options_combo ,n ,dry_run & snap_to_grid = 10000 & first_snap = 10000 & chain = sepolia
38+
sepolia ,both ,fast ,scrape ,apps ,blockScrape ,options_combo ,n ,dry_run & snap_to_grid = 10000 & first_snap = 10000 & chain = sepolia
3939

4040
# Capabilities
4141
# chain & fmt & help & nocolor & noop & version & verbose & no_header & file & output & append & cache & decache & ether

src/dev_tools/testRunner/testCases/when.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ on ,both ,fast ,when ,tools ,whenBlock ,invalid_option_2 ,y
2929
on ,both ,fast ,when ,tools ,whenBlock ,invalid_option_3 ,y ,blocks = 0-0
3030
on ,both ,fast ,when ,tools ,whenBlock ,invalid_verbose_syntax ,y ,verbose
3131
on ,both ,slow ,when ,tools ,whenBlock ,list_dates ,n ,list & fmt = txt
32-
on ,both ,slow ,when ,tools ,whenBlock ,list_dates_sepolia ,n ,list & fmt = txt & chain = sepolia
32+
sepolia ,both ,slow ,when ,tools ,whenBlock ,list_dates_sepolia ,n ,list & fmt = txt & chain = sepolia
3333
on ,both ,slow ,when ,tools ,whenBlock ,list_dates_long ,y ,list
3434
on ,both ,fast ,when ,tools ,whenBlock ,long_verbose_valid_block ,y ,verbose & blocks = 1000
3535
on ,both ,slow ,when ,tools ,whenBlock ,mixed_block_and_date ,y ,blocks = 2017-03-02 & blocks = 123123

src/other/install/trueBlocks.toml

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,41 @@
11
[version]
2-
current = "v2.0.0-release"
2+
current = 'v5.0.0'
33

44
[settings]
5-
cachePath = ""
6-
defaultChain = "mainnet"
7-
indexPath = ""
5+
cachePath = ''
6+
defaultChain = 'mainnet'
7+
indexPath = ''
88

99
[keys]
1010
[keys.etherscan]
11-
apiKey = ""
11+
apiKey = ''
1212
[keys.infura]
13-
apiKey = ""
14-
secret = ""
13+
apiKey = ''
14+
secret = ''
1515
[keys.pinata]
16-
apiKey = ""
17-
jwt = ""
16+
apiKey = ''
17+
jwt = ''
1818
[keys.trueblocks]
19-
license = ""
20-
apiKey = ""
19+
license = ''
20+
apiKey = ''
2121

2222
[pinning]
23-
gatewayUrl = "https://ipfs.unchainedindex.io/ipfs/"
24-
localPinUrl = "http://localhost:5001"
25-
remotePinUrl = "https://api.pinata.cloud/pinning/pinFileToIPFS"
23+
gatewayUrl = 'https://ipfs.unchainedindex.io/ipfs/'
24+
localPinUrl = 'http://localhost:5001'
25+
remotePinUrl = 'https://api.pinata.cloud/pinning/pinFileToIPFS'
2626

2727
[unchained]
28-
comment = "Do not edit these values unless instructed to do so."
28+
comment = 'Do not edit these values unless instructed to do so.'
2929

3030
[chains]
3131
[chains.gnosis]
32-
chain = "gnosis"
33-
chainId = "100"
34-
ipfsGateway = "https://ipfs.unchainedindex.io/ipfs/"
35-
localExplorer = "http://localhost:1234/"
36-
remoteExplorer = "https://gnosisscan.io/"
37-
rpcProvider = "https://gnosischain-rpc.gateway.pokt.network"
38-
symbol = "XDAI"
32+
chain = 'gnosis'
33+
chainId = '100'
34+
ipfsGateway = 'https://ipfs.unchainedindex.io/ipfs/'
35+
localExplorer = 'http://localhost:1234/'
36+
remoteExplorer = 'https://gnosisscan.io/'
37+
rpcProviders = ['https://gnosischain-rpc.gateway.pokt.network']
38+
symbol = 'XDAI'
3939
[chains.gnosis.scrape]
4040
appsPerChunk = 2000000
4141
snapToGrid = 250000
@@ -44,13 +44,13 @@
4444
allowMissing = false
4545
channelCount = 20
4646
[chains.mainnet]
47-
chain = "mainnet"
48-
chainId = "1"
49-
ipfsGateway = "https://ipfs.unchainedindex.io/ipfs/"
50-
localExplorer = "http://localhost:1234/"
51-
remoteExplorer = "https://etherscan.io/"
52-
rpcProvider = "http://localhost:8545"
53-
symbol = "ETH"
47+
chain = 'mainnet'
48+
chainId = '1'
49+
ipfsGateway = 'https://ipfs.unchainedindex.io/ipfs/'
50+
localExplorer = 'http://localhost:1234/'
51+
remoteExplorer = 'https://etherscan.io/'
52+
rpcProviders = ['http://localhost:8545']
53+
symbol = 'ETH'
5454
[chains.mainnet.scrape]
5555
appsPerChunk = 2000000
5656
snapToGrid = 100000
@@ -59,13 +59,13 @@
5959
allowMissing = false
6060
channelCount = 20
6161
[chains.optimism]
62-
chain = "optimism"
63-
chainId = "10"
64-
ipfsGateway = "https://ipfs.unchainedindex.io/ipfs/"
65-
localExplorer = "http://localhost:1234/"
66-
remoteExplorer = "https://optimistic.etherscan.io/"
67-
rpcProvider = "https://mainnet.optimism.io"
68-
symbol = "OPT"
62+
chain = 'optimism'
63+
chainId = '10'
64+
ipfsGateway = 'https://ipfs.unchainedindex.io/ipfs/'
65+
localExplorer = 'http://localhost:1234/'
66+
remoteExplorer = 'https://optimistic.etherscan.io/'
67+
rpcProviders = ['https://mainnet.optimism.io']
68+
symbol = 'OPT'
6969
[chains.optimism.scrape]
7070
appsPerChunk = 2000000
7171
snapToGrid = 250000
@@ -74,13 +74,13 @@
7474
allowMissing = false
7575
channelCount = 20
7676
[chains.polygon]
77-
chain = "polygon"
78-
chainId = "80001"
79-
ipfsGateway = "https://ipfs.unchainedindex.io/ipfs/"
80-
localExplorer = "http://localhost:1234/"
81-
remoteExplorer = "https://mumbai.polygonscan.com/"
82-
rpcProvider = "https://rpc-mumbai.maticvigil.com"
83-
symbol = "MATIC"
77+
chain = 'polygon'
78+
chainId = '80001'
79+
ipfsGateway = 'https://ipfs.unchainedindex.io/ipfs/'
80+
localExplorer = 'http://localhost:1234/'
81+
remoteExplorer = 'https://mumbai.polygonscan.com/'
82+
rpcProviders = ['https://rpc-mumbai.maticvigil.com']
83+
symbol = 'MATIC'
8484
[chains.polygon.scrape]
8585
appsPerChunk = 2000000
8686
snapToGrid = 250000
@@ -89,13 +89,13 @@
8989
allowMissing = false
9090
channelCount = 20
9191
[chains.sepolia]
92-
chain = "sepolia"
93-
chainId = "11155111"
94-
ipfsGateway = "https://ipfs.unchainedindex.io/ipfs/"
95-
localExplorer = "http://localhost:1234/"
96-
remoteExplorer = "https://sepolia.otterscan.io/"
97-
rpcProvider = "http://localhost:8548"
98-
symbol = "ETH"
92+
chain = 'sepolia'
93+
chainId = '11155111'
94+
ipfsGateway = 'https://ipfs.unchainedindex.io/ipfs/'
95+
localExplorer = 'http://localhost:1234/'
96+
remoteExplorer = 'https://sepolia.otterscan.io/'
97+
rpcProviders = ['http://localhost:8548']
98+
symbol = 'ETH'
9999
[chains.sepolia.scrape]
100100
appsPerChunk = 2000000
101101
snapToGrid = 250000

0 commit comments

Comments
 (0)