Skip to content

Commit ded7767

Browse files
manav2401djpolygonrekibnikufesinpratikspatil024temaniarpit27
authored
Merge qa to develop (ethereum#814)
* Adding in Mumbai/Mainnet precursor deb packaging for tests to use during upgrade(iterations to come) * Added changes per discussion in PR, more changes may be necessary * Adding prerelease true * Disabling goreleaser * Removing README swap file * change bor_dir and add bor user for v0.3.0 release * rollback bor user and use root * metrics: handle equal to separated config flag (ethereum#596) * metrics: handle based config path * internal/cli/server: add more context to logs * use space separated flag and value in bor.service * fixed static-nodes related buf (os independent) (ethereum#598) * fixed static-nodes related buf (os independent) * taking static-nodes as input if default not present * Update default flags (ethereum#600) * internal/cli/server: use geth's default for txpool.pricelimit and add comments * builder/files: update config.toml for mainnet * packaging/templates: update defaults for mainnet and mumbai * internal/cli/server: skip overriding cache * packaging/templates: update cache value for mainnet * packaging/templates: update gcmode for archive mumbai node * metrics: handle nil telemetry config (ethereum#601) * resolve merge conflicts * update go version in release.yml * update goversion in makefile * update Docker login for goreleaser-cross v1.19 * Cleanup for the packager to use git tag in the package profile naming. Added conditional check for directory structure, this is in prep for v0.3.1, as this will create a failure on upgrade path in package due to file exist * added a toml configuration file with comments describing each flag (ethereum#607) * added a toml configuration file with comments describing each flag * internal/cli/server: update flag description * docs/cli: update example config and description of flags * docs: update new-cli docs Co-authored-by: Manav Darji <[email protected]> * Adding of 0.3.0 package changes, control file updates, postinst changes, and packager update * added ancient datadir flag and toml field, need to decide on default value and update the conversion script * updated toml files with ancient field * Add support for new flags in new config.toml, which were present in old config.toml (ethereum#612) * added HTTPTimeouts, and TrieTimeout flag in new tol, from old toml * added RAW fields for these time.Duration flags * updated the conversion script to support these extra 4 flags * removed hcl and json config tests as we are only supporting toml config files * updated toml files with cache.timeout field * updated toml files with jsonrpc.timeouts field * tests/bor: expect a call for latest checkpoint * tests/bor: expect a call for latest checkpoint * packaging/templates: update cache values for archive nodes Co-authored-by: Manav Darji <[email protected]> * remove unwanted code * Fix docker publish authentication issue In gorelease-cross 1.19+, dockerhub authentication will require docker logion action followed by mounting docker config file. See https://github.com/goreleaser/goreleaser-cross#github-actions. * Revert "update Docker login for goreleaser-cross v1.19" This reverts commit 4d19cf5. * Bump version to stable * Revert "Merge pull request ethereum#435 from maticnetwork/POS-553" This reverts commit 657d262, reversing changes made to 88dbfa1. * revert change for release for go1.19 * Add default values to CLI helper and docs This commit adds default values to CLI helper and docs. When the default value of a string flag, slice string flag, or map string flag is empty, its helper message won't show any default value. * Add a summary of new CLI in docs * Updating packager as binutils changed version so that apt-get installs current versions * Add state pruning to new CLI * Minor wording fix in prune state description * Bumping control file versions * Mainnet Delhi fork * Set version to stable * change delhi hardfork block number * handle future chain import and skip peer drop (ethereum#650) * handle future chain import and skip peer drop * add block import metric * params: bump version to v0.3.3-stable * Bump bor version in control files for v0.3.3 mainnet release * Added checks to RPC requests and introduced new flags to customise the parameters (ethereum#657) * added a check to reject rpc requests with batch size > the one set using a newly added flag (rpcbatchlimit) * added a check to reject rpc requests whose result size > the one set using a newly added flag (rpcreturndatalimit) * updated the config files and docs * chg : trieTimeout from 60 to 10 mins (ethereum#692) * chg : trieTimeout from 60 to 10 mins * chg : cache.timout to 10m from 1h in configs * internal/cli/server : fix : added triesInMemory in config (ethereum#691) * changed version from 0.3.0 to 0.3.4-beta (ethereum#693) * fix nil state-sync issue, increase grpc limit (ethereum#695) * Increase grpc message size limit in pprof * consensus/bor/bor.go : stateSyncs init fixed [Fix ethereum#686] * eth/filters: handle nil state-sync before notify * eth/filters: update check Co-authored-by: Jerry <[email protected]> Co-authored-by: Daniil <[email protected]> * core, tests/bor: add more tests for state-sync validation (ethereum#710) * core: add get state sync function for tests * tests/bor: add validation for state sync events post consensus * Arpit/temp bor sync (ethereum#701) * Increase grpc message size limit in pprof * ReadBorReceipts improvements * use internal function * fix tests * fetch geth upstread for ReadBorReceiptRLP * Only query bor receipt when the query index is equal to # tx in block body This change reduces the frequency of calling ReadBorReceipt and ReadBorTransaction, which are CPU and db intensive. * Revert "fetch geth upstread for ReadBorReceiptRLP" This reverts commit 2e838a6b1313d26674f3a8df4b044e35dcbf35a0. * Restore ReadBorReceiptRLP * fix bor receipts * remove unused * fix lints --------- Co-authored-by: Jerry <[email protected]> Co-authored-by: Manav Darji <[email protected]> Co-authored-by: Evgeny Danienko <[email protected]> * Revert "chg : trieTimeout from 60 to 10 mins (ethereum#692)" (ethereum#720) This reverts commit 241843c. * Arpit/add execution pool 2 (ethereum#719) * initial * linters * linters * remove timeout * update pool * change pool size function * check nil * check nil * fix tests * Use execution pool from server in all handlers * simplify things * test fix * add support for cli, config * add to cli and config * merge base branch * debug statements * fix bug * atomic pointer timeout * add apis * update workerpool * fix issues * change params * fix issues * fix ipc issue * remove execution pool from IPC * revert * fix tests * mutex * refactor flag and value names * ordering fix * refactor flag and value names * update default ep size to 40 * fix bor start issues * revert file changes * debug statements * fix bug * update workerpool * atomic pointer timeout * add apis * Merge branch 'add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * fix issues * change params * fix issues * fix ipc issue * remove execution pool from IPC * revert * merge base branch * Merge branch 'add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * mutex * fix tests * Merge branch 'arpit/add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * Change default size of execution pool to 40 * refactor flag and value names * fix merge conflicts * ordering fix * refactor flag and value names * update default ep size to 40 * fix bor start issues * revert file changes * fix linters * fix go.mod * change sec to ms * change default value for ep timeout * fix node api calls * comment setter for ep timeout --------- Co-authored-by: Evgeny Danienko <[email protected]> Co-authored-by: Jerry <[email protected]> Co-authored-by: Manav Darji <[email protected]> * version change (ethereum#721) * Event based pprof (ethereum#732) * feature * Save pprof to /tmp --------- Co-authored-by: Jerry <[email protected]> * Cherry-pick changes from develop (ethereum#738) * Check if block is nil to prevent panic (ethereum#736) * miner: use env for tracing instead of block object (ethereum#728) --------- Co-authored-by: Dmitry <[email protected]> * add max code init size check in txpool (ethereum#739) * Revert "Event based pprof" and update version (ethereum#742) * Revert "Event based pprof (ethereum#732)" This reverts commit 22fa403. * params: update version to 0.3.4-beta3 * packaging/templates: update bor version * internal/ethapi :: Fix : newRPCTransactionFromBlockIndex * Merge master to qa (ethereum#813) * Merge qa to master (ethereum#750) * Added checks to RPC requests and introduced new flags to customise the parameters (ethereum#657) * added a check to reject rpc requests with batch size > the one set using a newly added flag (rpcbatchlimit) * added a check to reject rpc requests whose result size > the one set using a newly added flag (rpcreturndatalimit) * updated the config files and docs * chg : trieTimeout from 60 to 10 mins (ethereum#692) * chg : trieTimeout from 60 to 10 mins * chg : cache.timout to 10m from 1h in configs * internal/cli/server : fix : added triesInMemory in config (ethereum#691) * changed version from 0.3.0 to 0.3.4-beta (ethereum#693) * fix nil state-sync issue, increase grpc limit (ethereum#695) * Increase grpc message size limit in pprof * consensus/bor/bor.go : stateSyncs init fixed [Fix ethereum#686] * eth/filters: handle nil state-sync before notify * eth/filters: update check Co-authored-by: Jerry <[email protected]> Co-authored-by: Daniil <[email protected]> * core, tests/bor: add more tests for state-sync validation (ethereum#710) * core: add get state sync function for tests * tests/bor: add validation for state sync events post consensus * Arpit/temp bor sync (ethereum#701) * Increase grpc message size limit in pprof * ReadBorReceipts improvements * use internal function * fix tests * fetch geth upstread for ReadBorReceiptRLP * Only query bor receipt when the query index is equal to # tx in block body This change reduces the frequency of calling ReadBorReceipt and ReadBorTransaction, which are CPU and db intensive. * Revert "fetch geth upstread for ReadBorReceiptRLP" This reverts commit 2e838a6b1313d26674f3a8df4b044e35dcbf35a0. * Restore ReadBorReceiptRLP * fix bor receipts * remove unused * fix lints --------- Co-authored-by: Jerry <[email protected]> Co-authored-by: Manav Darji <[email protected]> Co-authored-by: Evgeny Danienko <[email protected]> * Revert "chg : trieTimeout from 60 to 10 mins (ethereum#692)" (ethereum#720) This reverts commit 241843c. * Arpit/add execution pool 2 (ethereum#719) * initial * linters * linters * remove timeout * update pool * change pool size function * check nil * check nil * fix tests * Use execution pool from server in all handlers * simplify things * test fix * add support for cli, config * add to cli and config * merge base branch * debug statements * fix bug * atomic pointer timeout * add apis * update workerpool * fix issues * change params * fix issues * fix ipc issue * remove execution pool from IPC * revert * fix tests * mutex * refactor flag and value names * ordering fix * refactor flag and value names * update default ep size to 40 * fix bor start issues * revert file changes * debug statements * fix bug * update workerpool * atomic pointer timeout * add apis * Merge branch 'add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * fix issues * change params * fix issues * fix ipc issue * remove execution pool from IPC * revert * merge base branch * Merge branch 'add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * mutex * fix tests * Merge branch 'arpit/add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * Change default size of execution pool to 40 * refactor flag and value names * fix merge conflicts * ordering fix * refactor flag and value names * update default ep size to 40 * fix bor start issues * revert file changes * fix linters * fix go.mod * change sec to ms * change default value for ep timeout * fix node api calls * comment setter for ep timeout --------- Co-authored-by: Evgeny Danienko <[email protected]> Co-authored-by: Jerry <[email protected]> Co-authored-by: Manav Darji <[email protected]> * version change (ethereum#721) * Event based pprof (ethereum#732) * feature * Save pprof to /tmp --------- Co-authored-by: Jerry <[email protected]> * Cherry-pick changes from develop (ethereum#738) * Check if block is nil to prevent panic (ethereum#736) * miner: use env for tracing instead of block object (ethereum#728) --------- Co-authored-by: Dmitry <[email protected]> * add max code init size check in txpool (ethereum#739) * Revert "Event based pprof" and update version (ethereum#742) * Revert "Event based pprof (ethereum#732)" This reverts commit 22fa403. * params: update version to 0.3.4-beta3 * packaging/templates: update bor version * params, packaging/templates: update bor version --------- Co-authored-by: SHIVAM SHARMA <[email protected]> Co-authored-by: Pratik Patil <[email protected]> Co-authored-by: Jerry <[email protected]> Co-authored-by: Daniil <[email protected]> Co-authored-by: Arpit Temani <[email protected]> Co-authored-by: Evgeny Danienko <[email protected]> Co-authored-by: Dmitry <[email protected]> * core, miner: add sub-spans for tracing (ethereum#753) * core, miner: add sub-spans for tracing * fix linters * core: add logs for debugging * core: add more logs to print tdd while reorg * fix linters * core: minor fix * core: remove debug logs * core: use different span for write block and set head * core: use internal context for sending traces (ethereum#755) * core: add : impossible reorg block dump (ethereum#754) * add : impossible reorg block dump * chg : 3 seperate files for impossoble reorg dump * add : use exportBlocks method and RLP blocks before writing * chg : small changes * bump : go version from 1.19 to 1.20.1 (ethereum#761) * Revert "bump : go version from 1.19 to 1.20.1 (ethereum#761)" This reverts commit 4561012. * core/vm: use optimized bigint (ethereum#26021) * Add holiman/big * Fix linter * Bump version to v0.3.5 * fix lints from develop (few lints decided to appear from code that was untouched, weird) * upgrade crypto lib version (ethereum#770) * bump dep : github.com/Masterminds/goutils to v1.1.1 (ethereum#769) * mardizzone/pos-1313: bump crypto dependency (ethereum#772) * dev: chg: bumd net dependency * dev: chg: bump crypto dependency * dev: chg: bump crypto dependency * bump dep : golang.org/x/net to v0.8.0 (ethereum#771) * Verify validator set against local contract on receiving an end-of-sprint block (ethereum#768) * Verify validator set against local contract on receiving an end-of-sprint block * Fix tests * Respect error returned by ParseValidators * Keep going back until a parent block presents * core/txpool: implement DoS defenses from geth (ethereum#778) * Hotfixes and deps bump (ethereum#776) * dev: chg: bump deps * internal/cli/server, rpc: lower down http readtimeout to 10s * dev: chg: get p2p adapter * dev: chg: lower down jsonrpc readtimeout to 10s * cherry-pick txpool optimisation changes * add check for empty lists in txpool (ethereum#704) * add check * linters * core, miner: add empty instrumentation name for tracing --------- Co-authored-by: Raneet Debnath <[email protected]> Co-authored-by: SHIVAM SHARMA <[email protected]> Co-authored-by: Evgeny Danilenko <[email protected]> Co-authored-by: Manav Darji <[email protected]> * packaging,params: bump to v0.3.6 (ethereum#782) * v0.3.6 fix (ethereum#787) * Fix get validator set in header verifier * chg : commit tx logs from info to debug (ethereum#673) * chg : commit tx logs from info to debug * fix : minor changes * chg : miner : commitTransactions-stats moved from info to debug * lint : fix linters * refactor logging * miner : chg : UnauthorizedSignerError to debug * lint : fix lint * fix : log.Logger interface compatibility --------- Co-authored-by: Evgeny Danienko <[email protected]> * Remove unnecessary sorting of valset from header in verification * dev: chg: version bump --------- Co-authored-by: SHIVAM SHARMA <[email protected]> Co-authored-by: Evgeny Danienko <[email protected]> Co-authored-by: marcello33 <[email protected]> * core: improve locks in txpool (ethereum#807) * added a write lock to the txs.filter method and a read lock to the txs.reheap method - both of which are called by Filter during reorg adjustments to txpool * txpool reorg locks * more locks * locks * linters * params, packaging: update version for v0.3.8-beta release * core: add logs in reheap --------- Co-authored-by: Alex <[email protected]> Co-authored-by: Evgeny Danienko <[email protected]> * Merge qa to master (ethereum#808) * Added checks to RPC requests and introduced new flags to customise the parameters (ethereum#657) * added a check to reject rpc requests with batch size > the one set using a newly added flag (rpcbatchlimit) * added a check to reject rpc requests whose result size > the one set using a newly added flag (rpcreturndatalimit) * updated the config files and docs * chg : trieTimeout from 60 to 10 mins (ethereum#692) * chg : trieTimeout from 60 to 10 mins * chg : cache.timout to 10m from 1h in configs * internal/cli/server : fix : added triesInMemory in config (ethereum#691) * changed version from 0.3.0 to 0.3.4-beta (ethereum#693) * fix nil state-sync issue, increase grpc limit (ethereum#695) * Increase grpc message size limit in pprof * consensus/bor/bor.go : stateSyncs init fixed [Fix ethereum#686] * eth/filters: handle nil state-sync before notify * eth/filters: update check Co-authored-by: Jerry <[email protected]> Co-authored-by: Daniil <[email protected]> * core, tests/bor: add more tests for state-sync validation (ethereum#710) * core: add get state sync function for tests * tests/bor: add validation for state sync events post consensus * Arpit/temp bor sync (ethereum#701) * Increase grpc message size limit in pprof * ReadBorReceipts improvements * use internal function * fix tests * fetch geth upstread for ReadBorReceiptRLP * Only query bor receipt when the query index is equal to # tx in block body This change reduces the frequency of calling ReadBorReceipt and ReadBorTransaction, which are CPU and db intensive. * Revert "fetch geth upstread for ReadBorReceiptRLP" This reverts commit 2e838a6b1313d26674f3a8df4b044e35dcbf35a0. * Restore ReadBorReceiptRLP * fix bor receipts * remove unused * fix lints --------- Co-authored-by: Jerry <[email protected]> Co-authored-by: Manav Darji <[email protected]> Co-authored-by: Evgeny Danienko <[email protected]> * Revert "chg : trieTimeout from 60 to 10 mins (ethereum#692)" (ethereum#720) This reverts commit 241843c. * Arpit/add execution pool 2 (ethereum#719) * initial * linters * linters * remove timeout * update pool * change pool size function * check nil * check nil * fix tests * Use execution pool from server in all handlers * simplify things * test fix * add support for cli, config * add to cli and config * merge base branch * debug statements * fix bug * atomic pointer timeout * add apis * update workerpool * fix issues * change params * fix issues * fix ipc issue * remove execution pool from IPC * revert * fix tests * mutex * refactor flag and value names * ordering fix * refactor flag and value names * update default ep size to 40 * fix bor start issues * revert file changes * debug statements * fix bug * update workerpool * atomic pointer timeout * add apis * Merge branch 'add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * fix issues * change params * fix issues * fix ipc issue * remove execution pool from IPC * revert * merge base branch * Merge branch 'add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * mutex * fix tests * Merge branch 'arpit/add-execution-pool' of github.com:maticnetwork/bor into arpit/add-execution-pool * Change default size of execution pool to 40 * refactor flag and value names * fix merge conflicts * ordering fix * refactor flag and value names * update default ep size to 40 * fix bor start issues * revert file changes * fix linters * fix go.mod * change sec to ms * change default value for ep timeout * fix node api calls * comment setter for ep timeout --------- Co-authored-by: Evgeny Danienko <[email protected]> Co-authored-by: Jerry <[email protected]> Co-authored-by: Manav Darji <[email protected]> * version change (ethereum#721) * Event based pprof (ethereum#732) * feature * Save pprof to /tmp --------- Co-authored-by: Jerry <[email protected]> * Cherry-pick changes from develop (ethereum#738) * Check if block is nil to prevent panic (ethereum#736) * miner: use env for tracing instead of block object (ethereum#728) --------- Co-authored-by: Dmitry <[email protected]> * add max code init size check in txpool (ethereum#739) * Revert "Event based pprof" and update version (ethereum#742) * Revert "Event based pprof (ethereum#732)" This reverts commit 22fa403. * params: update version to 0.3.4-beta3 * packaging/templates: update bor version * internal/ethapi :: Fix : newRPCTransactionFromBlockIndex * fix: remove assignment for bor receipt --------- Co-authored-by: SHIVAM SHARMA <[email protected]> Co-authored-by: Pratik Patil <[email protected]> Co-authored-by: Jerry <[email protected]> Co-authored-by: Daniil <[email protected]> Co-authored-by: Arpit Temani <[email protected]> Co-authored-by: Evgeny Danienko <[email protected]> Co-authored-by: Dmitry <[email protected]> * Setting up bor to use hosted 18.04 runner as ubuntu provided 18.04 runner is end of life --------- Co-authored-by: SHIVAM SHARMA <[email protected]> Co-authored-by: Pratik Patil <[email protected]> Co-authored-by: Jerry <[email protected]> Co-authored-by: Daniil <[email protected]> Co-authored-by: Arpit Temani <[email protected]> Co-authored-by: Evgeny Danienko <[email protected]> Co-authored-by: Dmitry <[email protected]> Co-authored-by: Martin Holst Swende <[email protected]> Co-authored-by: marcello33 <[email protected]> Co-authored-by: Raneet Debnath <[email protected]> Co-authored-by: Raneet Debnath <[email protected]> Co-authored-by: Alex <[email protected]> Co-authored-by: Daniel Jones <[email protected]> * core: remove duplicate tests * miner: use get validators by hash in tests --------- Co-authored-by: Daniel Jones <[email protected]> Co-authored-by: Will Button <[email protected]> Co-authored-by: Will Button <[email protected]> Co-authored-by: Daniel Jones <[email protected]> Co-authored-by: Pratik Patil <[email protected]> Co-authored-by: Arpit Temani <[email protected]> Co-authored-by: Jerry <[email protected]> Co-authored-by: SHIVAM SHARMA <[email protected]> Co-authored-by: Daniil <[email protected]> Co-authored-by: Evgeny Danienko <[email protected]> Co-authored-by: Dmitry <[email protected]> Co-authored-by: Martin Holst Swende <[email protected]> Co-authored-by: marcello33 <[email protected]> Co-authored-by: Raneet Debnath <[email protected]> Co-authored-by: Raneet Debnath <[email protected]> Co-authored-by: Alex <[email protected]>
1 parent 7abbf23 commit ded7767

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+1388
-296
lines changed

builder/files/config.toml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ chain = "mainnet"
99
datadir = "/var/lib/bor/data"
1010
# ancient = ""
1111
# keystore = "/var/lib/bor/keystore"
12+
# "rpc.batchlimit" = 100
13+
# "rpc.returndatalimit" = 100000
1214
syncmode = "full"
1315
# gcmode = "full"
1416
# snapshot = true
@@ -86,13 +88,17 @@ syncmode = "full"
8688
# api = ["eth", "net", "web3", "txpool", "bor"]
8789
# vhosts = ["*"]
8890
# corsdomain = ["*"]
91+
# ep-size = 40
92+
# ep-requesttimeout = "0s"
8993
# [jsonrpc.ws]
9094
# enabled = false
9195
# port = 8546
9296
# prefix = ""
9397
# host = "localhost"
9498
# api = ["web3", "net"]
9599
# origins = ["*"]
100+
# ep-size = 40
101+
# ep-requesttimeout = "0s"
96102
# [jsonrpc.graphql]
97103
# enabled = false
98104
# port = 0
@@ -106,7 +112,7 @@ syncmode = "full"
106112
# port = 8551
107113
# vhosts = ["localhost"]
108114
# [jsonrpc.timeouts]
109-
# read = "30s"
115+
# read = "10s"
110116
# write = "30s"
111117
# idle = "2m0s"
112118

cmd/clef/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ func signer(c *cli.Context) error {
656656
vhosts := utils.SplitAndTrim(c.GlobalString(utils.HTTPVirtualHostsFlag.Name))
657657
cors := utils.SplitAndTrim(c.GlobalString(utils.HTTPCORSDomainFlag.Name))
658658

659-
srv := rpc.NewServer()
659+
srv := rpc.NewServer(0, 0)
660660
err := node.RegisterApis(rpcAPI, []string{"account"}, srv, false)
661661
if err != nil {
662662
utils.Fatalf("Could not register API: %w", err)

consensus/bor/bor.go

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,14 @@ func (c *Bor) VerifyHeader(chain consensus.ChainHeaderReader, header *types.Head
301301
return c.verifyHeader(chain, header, nil)
302302
}
303303

304+
func (c *Bor) GetSpanner() Spanner {
305+
return c.spanner
306+
}
307+
308+
func (c *Bor) SetSpanner(spanner Spanner) {
309+
c.spanner = spanner
310+
}
311+
304312
// VerifyHeaders is similar to VerifyHeader, but verifies a batch of headers. The
305313
// method returns a quit channel to abort the operations and a results channel to
306314
// retrieve the async verifications (the order is that of the input slice).
@@ -457,6 +465,33 @@ func (c *Bor) verifyCascadingFields(chain consensus.ChainHeaderReader, header *t
457465
return err
458466
}
459467

468+
// Verify the validator list match the local contract
469+
if IsSprintStart(number+1, c.config.CalculateSprint(number)) {
470+
newValidators, err := c.spanner.GetCurrentValidatorsByBlockNrOrHash(context.Background(), rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber), number+1)
471+
472+
if err != nil {
473+
return err
474+
}
475+
476+
sort.Sort(valset.ValidatorsByAddress(newValidators))
477+
478+
headerVals, err := valset.ParseValidators(header.Extra[extraVanity : len(header.Extra)-extraSeal])
479+
480+
if err != nil {
481+
return err
482+
}
483+
484+
if len(newValidators) != len(headerVals) {
485+
return errInvalidSpanValidators
486+
}
487+
488+
for i, val := range newValidators {
489+
if !bytes.Equal(val.HeaderBytes(), headerVals[i].HeaderBytes()) {
490+
return errInvalidSpanValidators
491+
}
492+
}
493+
}
494+
460495
// verify the validator list in the last sprint block
461496
if IsSprintStart(number, c.config.CalculateSprint(number)) {
462497
parentValidatorBytes := parent.Extra[extraVanity : len(parent.Extra)-extraSeal]
@@ -534,7 +569,7 @@ func (c *Bor) snapshot(chain consensus.ChainHeaderReader, number uint64, hash co
534569
hash := checkpoint.Hash()
535570

536571
// get validators and current span
537-
validators, err := c.spanner.GetCurrentValidators(context.Background(), hash, number+1)
572+
validators, err := c.spanner.GetCurrentValidatorsByHash(context.Background(), hash, number+1)
538573
if err != nil {
539574
return nil, err
540575
}
@@ -704,7 +739,7 @@ func (c *Bor) Prepare(chain consensus.ChainHeaderReader, header *types.Header) e
704739

705740
// get validator set if number
706741
if IsSprintStart(number+1, c.config.CalculateSprint(number)) {
707-
newValidators, err := c.spanner.GetCurrentValidators(context.Background(), header.ParentHash, number+1)
742+
newValidators, err := c.spanner.GetCurrentValidatorsByHash(context.Background(), header.ParentHash, number+1)
708743
if err != nil {
709744
return errUnknownValidators
710745
}
@@ -1177,7 +1212,7 @@ func (c *Bor) CommitStates(
11771212
processStart := time.Now()
11781213
totalGas := 0 /// limit on gas for state sync per block
11791214
chainID := c.chainConfig.ChainID.String()
1180-
stateSyncs := make([]*types.StateSyncData, len(eventRecords))
1215+
stateSyncs := make([]*types.StateSyncData, 0, len(eventRecords))
11811216

11821217
var gasUsed uint64
11831218

@@ -1234,7 +1269,7 @@ func (c *Bor) SetHeimdallClient(h IHeimdallClient) {
12341269
}
12351270

12361271
func (c *Bor) GetCurrentValidators(ctx context.Context, headerHash common.Hash, blockNumber uint64) ([]*valset.Validator, error) {
1237-
return c.spanner.GetCurrentValidators(ctx, headerHash, blockNumber)
1272+
return c.spanner.GetCurrentValidatorsByHash(ctx, headerHash, blockNumber)
12381273
}
12391274

12401275
//

consensus/bor/heimdall/span/spanner.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ func (c *ChainSpanner) GetCurrentSpan(ctx context.Context, headerHash common.Has
8989
}
9090

9191
// GetCurrentValidators get current validators
92-
func (c *ChainSpanner) GetCurrentValidators(ctx context.Context, headerHash common.Hash, blockNumber uint64) ([]*valset.Validator, error) {
92+
func (c *ChainSpanner) GetCurrentValidatorsByBlockNrOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash, blockNumber uint64) ([]*valset.Validator, error) {
9393
ctx, cancel := context.WithCancel(ctx)
9494
defer cancel()
9595

@@ -107,16 +107,13 @@ func (c *ChainSpanner) GetCurrentValidators(ctx context.Context, headerHash comm
107107
toAddress := c.validatorContractAddress
108108
gas := (hexutil.Uint64)(uint64(math.MaxUint64 / 2))
109109

110-
// block
111-
blockNr := rpc.BlockNumberOrHashWithHash(headerHash, false)
112-
113110
result, err := c.ethAPI.Call(ctx, ethapi.TransactionArgs{
114111
Gas: &gas,
115112
To: &toAddress,
116113
Data: &msgData,
117-
}, blockNr, nil)
114+
}, blockNrOrHash, nil)
118115
if err != nil {
119-
panic(err)
116+
return nil, err
120117
}
121118

122119
var (
@@ -144,6 +141,12 @@ func (c *ChainSpanner) GetCurrentValidators(ctx context.Context, headerHash comm
144141
return valz, nil
145142
}
146143

144+
func (c *ChainSpanner) GetCurrentValidatorsByHash(ctx context.Context, headerHash common.Hash, blockNumber uint64) ([]*valset.Validator, error) {
145+
blockNr := rpc.BlockNumberOrHashWithHash(headerHash, false)
146+
147+
return c.GetCurrentValidatorsByBlockNrOrHash(ctx, blockNr, blockNumber)
148+
}
149+
147150
const method = "commitSpan"
148151

149152
func (c *ChainSpanner) CommitSpan(ctx context.Context, heimdallSpan HeimdallSpan, state *state.StateDB, header *types.Header, chainContext core.ChainContext) error {

consensus/bor/span.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ import (
99
"github.com/ethereum/go-ethereum/core"
1010
"github.com/ethereum/go-ethereum/core/state"
1111
"github.com/ethereum/go-ethereum/core/types"
12+
"github.com/ethereum/go-ethereum/rpc"
1213
)
1314

1415
//go:generate mockgen -destination=./span_mock.go -package=bor . Spanner
1516
type Spanner interface {
1617
GetCurrentSpan(ctx context.Context, headerHash common.Hash) (*span.Span, error)
17-
GetCurrentValidators(ctx context.Context, headerHash common.Hash, blockNumber uint64) ([]*valset.Validator, error)
18+
GetCurrentValidatorsByHash(ctx context.Context, headerHash common.Hash, blockNumber uint64) ([]*valset.Validator, error)
19+
GetCurrentValidatorsByBlockNrOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash, blockNumber uint64) ([]*valset.Validator, error)
1820
CommitSpan(ctx context.Context, heimdallSpan span.HeimdallSpan, state *state.StateDB, header *types.Header, chainContext core.ChainContext) error
1921
}

consensus/bor/span_mock.go

Lines changed: 31 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)