From 123a9b559353f8c28fb351d262a42d75758caa04 Mon Sep 17 00:00:00 2001 From: Maciej Kulawik <10907694+magicxyyz@users.noreply.github.com> Date: Tue, 21 Nov 2023 14:22:22 +0000 Subject: [PATCH 01/19] ethdb/pebble: don't double-close iterator inside pebbleIterator (#28566) Adds 'released' flag to pebbleIterator to avoid double closing cockroachdb/pebble.Iterator as it is an invalid operation. Fixes #28565 --- ethdb/pebble/pebble.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index 50612cee9a..2c749d529a 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -650,9 +650,12 @@ func (b *batch) Replay(w ethdb.KeyValueWriter) error { // pebbleIterator is a wrapper of underlying iterator in storage engine. // The purpose of this structure is to implement the missing APIs. +// +// The pebble iterator is not thread-safe. type pebbleIterator struct { - iter *pebble.Iterator - moved bool + iter *pebble.Iterator + moved bool + released bool } // NewIterator creates a binary-alphabetical iterator over a subset @@ -664,8 +667,7 @@ func (d *Database) NewIterator(prefix []byte, start []byte) ethdb.Iterator { UpperBound: upperBound(prefix), }) iter.First() - - return &pebbleIterator{iter: iter, moved: true} + return &pebbleIterator{iter: iter, moved: true, released: false} } // Next moves the iterator to the next key/value pair. It returns whether the @@ -701,4 +703,9 @@ func (iter *pebbleIterator) Value() []byte { // Release releases associated resources. Release should always succeed and can // be called multiple times without causing error. -func (iter *pebbleIterator) Release() { iter.iter.Close() } +func (iter *pebbleIterator) Release() { + if !iter.released { + iter.iter.Close() + iter.released = true + } +} From 500b03111776e855e458c60828de4f7f90073dd4 Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Wed, 6 Dec 2023 11:41:04 +0100 Subject: [PATCH 02/19] ethdb/pebble: remove a dependency (#28627) The dependency was not really used anyway, so we can get rid of it. Co-authored-by: Felix Lange --- ethdb/pebble/pebble.go | 3 +-- go.mod | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index 2c749d529a..8df3e52be0 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -25,7 +25,6 @@ import ( "sync/atomic" "time" - "github.com/cockroachdb/errors" "github.com/cockroachdb/pebble" "github.com/cockroachdb/pebble/bloom" @@ -136,7 +135,7 @@ func (l panicLogger) Errorf(format string, args ...interface{}) { } func (l panicLogger) Fatalf(format string, args ...interface{}) { - panic(errors.Errorf("fatal: "+format, args...)) + panic(fmt.Errorf("fatal: "+format, args...)) } // New returns a wrapped pebble DB object. The namespace is the prefix that the diff --git a/go.mod b/go.mod index 2a5c721e53..58bb3d9e1f 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,6 @@ require ( github.com/btcsuite/btcd/btcec/v2 v2.3.2 github.com/cespare/cp v1.1.1 github.com/cloudflare/cloudflare-go v0.89.0 - github.com/cockroachdb/errors v1.11.1 github.com/cockroachdb/pebble v1.1.0 github.com/consensys/gnark-crypto v0.12.1 github.com/cosmos/cosmos-sdk v0.50.4 @@ -126,6 +125,7 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.5 // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/consensys/bavard v0.1.13 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/crate-crypto/go-ipa v0.0.0-20230905211650-63ccabc1a949 // indirect @@ -194,7 +194,7 @@ require ( github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect github.com/cbergoon/merkletree v0.2.0 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect - github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect + github.com/cockroachdb/errors v1.11.1 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/ledger-cosmos-go v0.13.0 // indirect github.com/etcd-io/bbolt v1.3.3 // indirect From 286697246192689adaaa127358ab9a4e9bb6897c Mon Sep 17 00:00:00 2001 From: Devon Bear Date: Tue, 5 Mar 2024 09:15:02 -0500 Subject: [PATCH 03/19] go.mod: bump pebble db to official release (#29038) bump pebble --- ethdb/pebble/pebble.go | 5 +---- go.mod | 8 ++++---- go.sum | 3 ++- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index 8df3e52be0..522299c980 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -627,10 +627,7 @@ func (b *batch) Replay(w ethdb.KeyValueWriter) error { for { kind, k, v, ok, err := reader.Next() - if err != nil { - return err - } - if !ok { + if !ok || err != nil { break } // The (k,v) slices might be overwritten if the batch is reset/reused, diff --git a/go.mod b/go.mod index 58bb3d9e1f..3f7497fdf9 100644 --- a/go.mod +++ b/go.mod @@ -123,6 +123,7 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.7.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cockroachdb/errors v1.11.1 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect @@ -133,10 +134,10 @@ require ( github.com/dlclark/regexp2 v1.7.0 // indirect github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 // indirect github.com/getsentry/sentry-go v0.18.0 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-querystring v1.1.0 // indirect github.com/google/pprof v0.0.0-20230207041349-798e818bf904 // indirect github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect @@ -194,7 +195,6 @@ require ( github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce // indirect github.com/cbergoon/merkletree v0.2.0 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect - github.com/cockroachdb/errors v1.11.1 // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/ledger-cosmos-go v0.13.0 // indirect github.com/etcd-io/bbolt v1.3.3 // indirect @@ -208,7 +208,7 @@ require ( github.com/goccy/go-json v0.10.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/gomodule/redigo v2.0.0+incompatible // indirect - github.com/google/go-querystring v1.1.0 // indirect + github.com/google/go-cmp v0.5.9 // indirect github.com/google/s2a-go v0.1.4 // indirect github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/gorilla/mux v1.8.0 // indirect diff --git a/go.sum b/go.sum index 324d6a83b5..3e7e59986e 100644 --- a/go.sum +++ b/go.sum @@ -1214,8 +1214,9 @@ github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= From 8be2283e7a25a360d33c277a7deddf56adfd8aea Mon Sep 17 00:00:00 2001 From: Jerry Date: Thu, 21 Mar 2024 23:31:10 -0700 Subject: [PATCH 04/19] Properly close deps channel (#1197) In case where commitTransactions is interrupted, it will exit without properly closing chDeps, leaving the dependency calculation goroutine hanging. This commit fixes this issue. --- miner/worker.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/miner/worker.go b/miner/worker.go index ae96bc721e..5b3c754f49 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -921,6 +921,7 @@ func (w *worker) commitTransactions(env *environment, txs *transactionsByPriceAn chDeps := make(chan blockstm.TxDep) var depsWg sync.WaitGroup + var once sync.Once EnableMVHashMap := w.chainConfig.IsCancun(env.header.Number) @@ -930,6 +931,11 @@ func (w *worker) commitTransactions(env *environment, txs *transactionsByPriceAn chDeps = make(chan blockstm.TxDep) + // Make sure we safely close the channel in case of interrupt + defer once.Do(func() { + close(chDeps) + }) + depsWg.Add(1) go func(chDeps chan blockstm.TxDep) { @@ -1109,7 +1115,9 @@ mainloop: // nolint:nestif if EnableMVHashMap && w.IsRunning() { - close(chDeps) + once.Do(func() { + close(chDeps) + }) depsWg.Wait() var blockExtraData types.BlockExtraData From df47eb9243fbf072f75424ee046e5646fc73b8a3 Mon Sep 17 00:00:00 2001 From: Marcello Ardizzone Date: Tue, 26 Mar 2024 07:15:58 +0100 Subject: [PATCH 05/19] add: milestones audit (#1200) --- audit/audit-feature-milestones.pdf | Bin 0 -> 199403 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 audit/audit-feature-milestones.pdf diff --git a/audit/audit-feature-milestones.pdf b/audit/audit-feature-milestones.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7c53ea88f8935f96a7f23a0a3947a34006fafda8 GIT binary patch literal 199403 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
|8d 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
Ouk-Uk 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 literal 0 HcmV?d00001 From f36a199c2a531224564918a6466bdeac6e999149 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Sat, 13 Jan 2024 11:15:33 +0530 Subject: [PATCH 06/19] chg: make HF consistent --- params/config.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/params/config.go b/params/config.go index f6b663a653..7161c68c8d 100644 --- a/params/config.go +++ b/params/config.go @@ -960,9 +960,9 @@ func (c *ChainConfig) CheckConfigForkOrder() error { {name: "arrowGlacierBlock", block: c.ArrowGlacierBlock, optional: true}, {name: "grayGlacierBlock", block: c.GrayGlacierBlock, optional: true}, {name: "mergeNetsplitBlock", block: c.MergeNetsplitBlock, optional: true}, - {name: "ShanghaiBlock", block: c.ShanghaiBlock}, - {name: "CancunBlock", block: c.CancunBlock, optional: true}, - {name: "pragueTime", block: c.PragueBlock, optional: true}, + {name: "shanghaiBlock", block: c.ShanghaiBlock}, + {name: "cancunBlock", block: c.CancunBlock, optional: true}, + {name: "pragueBlock", block: c.PragueBlock, optional: true}, } { if lastFork.name != "" { switch { From 0980a5b3e592de130ea2541ee9394229630c16c4 Mon Sep 17 00:00:00 2001 From: Arpit Temani Date: Thu, 30 Nov 2023 15:35:46 +0530 Subject: [PATCH 07/19] allow unprotected txns --- core/txpool/legacypool/legacypool.go | 16 +++++++++++-- core/txpool/validation.go | 4 +++- core/types/transaction_signing.go | 35 ++++++++++++++++++++++++++++ eth/backend.go | 2 -- 4 files changed, 52 insertions(+), 5 deletions(-) diff --git a/core/txpool/legacypool/legacypool.go b/core/txpool/legacypool/legacypool.go index bf179fe996..6a3005e5a1 100644 --- a/core/txpool/legacypool/legacypool.go +++ b/core/txpool/legacypool/legacypool.go @@ -155,7 +155,8 @@ var DefaultConfig = Config{ AccountQueue: 64, GlobalQueue: 1024, - Lifetime: 3 * time.Hour, + Lifetime: 3 * time.Hour, + AllowUnprotectedTxs: false, } // sanitize checks the provided user configurations and changes anything that's @@ -601,7 +602,8 @@ func (pool *LegacyPool) local() map[common.Address]types.Transactions { // and does not require the pool mutex to be held. func (pool *LegacyPool) validateTxBasics(tx *types.Transaction, local bool) error { opts := &txpool.ValidationOptions{ - Config: pool.chainconfig, + Config: pool.chainconfig, + AllowUnprotectedTxs: pool.config.AllowUnprotectedTxs, Accept: 0 | 1< Date: Thu, 28 Mar 2024 15:19:36 +0530 Subject: [PATCH 08/19] add: commits back from reverted 'consistent' PR --- core/txpool/validation.go | 2 +- eth/backend.go | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/txpool/validation.go b/core/txpool/validation.go index aa718ca7f9..faace9cf8a 100644 --- a/core/txpool/validation.go +++ b/core/txpool/validation.go @@ -93,7 +93,7 @@ func ValidateTransaction(tx *types.Transaction, head *types.Header, signer types return core.ErrTipAboveFeeCap } // Make sure the transaction is signed properly - if _, err := types.Sender(signer, tx); err != nil || !opts.AllowUnprotectedTxs { + if _, err := types.Sender(signer, tx); err != nil && !opts.AllowUnprotectedTxs { return ErrInvalidSender } // Ensure the transaction has more gas than the bare minimum needed to cover diff --git a/eth/backend.go b/eth/backend.go index 4787b56ed8..484d45206a 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -174,6 +174,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { eth.APIBackend = &EthAPIBackend{stack.Config().ExtRPCEnabled(), stack.Config().AllowUnprotectedTxs, eth, nil} if eth.APIBackend.allowUnprotectedTxs { + log.Info("------Unprotected transactions allowed-------") config.TxPool.AllowUnprotectedTxs = true } From 120cbc7c012f4d324d956c1ccdf29a5bc9a07c73 Mon Sep 17 00:00:00 2001 From: Pratik Patil Date: Fri, 15 Dec 2023 12:49:11 +0530 Subject: [PATCH 09/19] test all default flags added via config file (#1105) --- internal/cli/server/config_legacy_test.go | 19 +++ internal/cli/server/testdata/default.toml | 193 ++++++++++++++++++++++ 2 files changed, 212 insertions(+) create mode 100644 internal/cli/server/testdata/default.toml diff --git a/internal/cli/server/config_legacy_test.go b/internal/cli/server/config_legacy_test.go index aa6cffc470..e9957c3353 100644 --- a/internal/cli/server/config_legacy_test.go +++ b/internal/cli/server/config_legacy_test.go @@ -42,3 +42,22 @@ func TestConfigLegacy(t *testing.T) { readFile("./testdata/test.toml") }) } + +func TestDefaultConfigLegacy(t *testing.T) { + readFile := func(path string) { + expectedConfig, err := readLegacyConfig(path) + assert.NoError(t, err) + + testConfig := DefaultConfig() + + testConfig.Identity = "Polygon-Devs" + testConfig.DataDir = "/var/lib/bor" + + assert.Equal(t, expectedConfig, testConfig) + } + + // read file in hcl format + t.Run("toml", func(t *testing.T) { + readFile("./testdata/default.toml") + }) +} diff --git a/internal/cli/server/testdata/default.toml b/internal/cli/server/testdata/default.toml new file mode 100644 index 0000000000..3a6c2f0cb5 --- /dev/null +++ b/internal/cli/server/testdata/default.toml @@ -0,0 +1,193 @@ +chain = "mainnet" +identity = "Polygon-Devs" +verbosity = 3 +log-level = "" +vmdebug = false +datadir = "/var/lib/bor" +ancient = "" +"db.engine" = "leveldb" +keystore = "" +"rpc.batchlimit" = 100 +"rpc.returndatalimit" = 100000 +syncmode = "full" +gcmode = "full" +snapshot = true +"bor.logs" = false +ethstats = "" +devfakeauthor = false + +["eth.requiredblocks"] + +[log] + vmodule = "" + json = false + backtrace = "" + debug = false + +[p2p] + maxpeers = 50 + maxpendpeers = 50 + bind = "0.0.0.0" + port = 30303 + nodiscover = false + nat = "any" + netrestrict = "" + nodekey = "" + nodekeyhex = "" + txarrivalwait = "500ms" + [p2p.discovery] + v4disc = true + v5disc = false + bootnodes = [] + bootnodesv4 = [] + bootnodesv5 = [] + static-nodes = [] + trusted-nodes = [] + dns = [] + +[heimdall] + url = "http://localhost:1317" + "bor.without" = false + grpc-address = "" + "bor.runheimdall" = false + "bor.runheimdallargs" = "" + "bor.useheimdallapp" = false + +[txpool] + locals = [] + nolocals = false + journal = "transactions.rlp" + rejournal = "1h0m0s" + pricelimit = 1 + pricebump = 10 + accountslots = 16 + globalslots = 32768 + accountqueue = 16 + globalqueue = 32768 + lifetime = "3h0m0s" + +[miner] + mine = false + etherbase = "" + extradata = "" + gaslimit = 30000000 + gasprice = "1000000000" + recommit = "2m5s" + commitinterrupt = true + +[jsonrpc] + ipcdisable = false + ipcpath = "" + gascap = 50000000 + evmtimeout = "5s" + txfeecap = 1.0 + allow-unprotected-txs = false + enabledeprecatedpersonal = false + [jsonrpc.http] + enabled = false + port = 8545 + prefix = "" + host = "localhost" + api = ["eth", "net", "web3", "txpool", "bor"] + vhosts = ["localhost"] + corsdomain = ["localhost"] + ep-size = 40 + ep-requesttimeout = "0s" + [jsonrpc.ws] + enabled = false + port = 8546 + prefix = "" + host = "localhost" + api = ["net", "web3"] + origins = ["localhost"] + ep-size = 40 + ep-requesttimeout = "0s" + [jsonrpc.graphql] + enabled = false + port = 0 + prefix = "" + host = "" + vhosts = ["localhost"] + corsdomain = ["localhost"] + ep-size = 0 + ep-requesttimeout = "" + [jsonrpc.auth] + jwtsecret = "" + addr = "localhost" + port = 8551 + vhosts = ["localhost"] + [jsonrpc.timeouts] + read = "10s" + write = "30s" + idle = "2m0s" + +[gpo] + blocks = 20 + percentile = 60 + maxheaderhistory = 1024 + maxblockhistory = 1024 + maxprice = "500000000000" + ignoreprice = "2" + +[telemetry] + metrics = false + expensive = false + prometheus-addr = "127.0.0.1:7071" + opencollector-endpoint = "" + [telemetry.influx] + influxdb = false + endpoint = "" + database = "" + username = "" + password = "" + influxdbv2 = false + token = "" + bucket = "" + organization = "" + [telemetry.influx.tags] + +[cache] + cache = 1024 + gc = 25 + snapshot = 10 + database = 50 + trie = 15 + noprefetch = false + preimages = false + txlookuplimit = 2350000 + triesinmemory = 128 + blocklogs = 32 + timeout = "1h0m0s" + fdlimit = 0 + +[leveldb] + compactiontablesize = 2 + compactiontablesizemultiplier = 1.0 + compactiontotalsize = 10 + compactiontotalsizemultiplier = 10.0 + +[accounts] + unlock = [] + password = "" + allow-insecure-unlock = false + lightkdf = false + disable-bor-wallet = true + +[grpc] + addr = ":3131" + +[developer] + dev = false + period = 0 + gaslimit = 11500000 + +[parallelevm] + enable = true + procs = 8 + +[pprof] + pprof = false + port = 6060 + addr = "127.0.0.1" + memprofilerate = 524288 + blockprofilerate = 0 From f506350ddb98e9568f7856a68b1e2a2100ea4cdf Mon Sep 17 00:00:00 2001 From: Anshal Shukla <53994948+anshalshukla@users.noreply.github.com> Date: Fri, 1 Dec 2023 11:39:58 +0530 Subject: [PATCH 10/19] consensus/bor: handle blockalloc balance changes (#1074) * fix: set balance in blockalloc * chg: don't update balance if not zero * fix: lint * fix logic, add test cases --- consensus/bor/bor.go | 4 ++++ consensus/bor/bor_test.go | 31 ++++++++++++++++++++++++------- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/consensus/bor/bor.go b/consensus/bor/bor.go index 40999f73c4..0314cef8af 100644 --- a/consensus/bor/bor.go +++ b/consensus/bor/bor.go @@ -883,6 +883,10 @@ func (c *Bor) changeContractCodeIfNeeded(headerNumber uint64, state *state.State for addr, account := range allocs { log.Info("change contract code", "address", addr) state.SetCode(addr, account.Code) + + if state.GetBalance(addr).Cmp(big.NewInt(0)) == 0 { + state.SetBalance(addr, account.Balance) + } } } } diff --git a/consensus/bor/bor_test.go b/consensus/bor/bor_test.go index 020289c4dc..9713ce7516 100644 --- a/consensus/bor/bor_test.go +++ b/consensus/bor/bor_test.go @@ -41,6 +41,12 @@ func TestGenesisContractChange(t *testing.T) { "balance": "0x1000", }, }, + "6": map[string]interface{}{ + addr0.Hex(): map[string]interface{}{ + "code": hexutil.Bytes{0x1, 0x4}, + "balance": "0x2000", + }, + }, }, }, } @@ -87,24 +93,35 @@ func TestGenesisContractChange(t *testing.T) { root := genesis.Root() - // code does not change + // code does not change, balance remains 0 root, statedb = addBlock(root, 1) require.Equal(t, statedb.GetCode(addr0), []byte{0x1, 0x1}) + require.Equal(t, statedb.GetBalance(addr0), big.NewInt(0)) - // code changes 1st time + // code changes 1st time, balance remains 0 root, statedb = addBlock(root, 2) require.Equal(t, statedb.GetCode(addr0), []byte{0x1, 0x2}) + require.Equal(t, statedb.GetBalance(addr0), big.NewInt(0)) - // code same as 1st change + // code same as 1st change, balance remains 0 root, statedb = addBlock(root, 3) require.Equal(t, statedb.GetCode(addr0), []byte{0x1, 0x2}) + require.Equal(t, statedb.GetBalance(addr0), big.NewInt(0)) - // code changes 2nd time - _, statedb = addBlock(root, 4) + // code changes 2nd time, balance updates to 4096 + root, statedb = addBlock(root, 4) require.Equal(t, statedb.GetCode(addr0), []byte{0x1, 0x3}) + require.Equal(t, statedb.GetBalance(addr0), big.NewInt(4096)) - // make sure balance change DOES NOT take effect - require.Equal(t, statedb.GetBalance(addr0), big.NewInt(0)) + // code same as 2nd change, balance remains 4096 + root, statedb = addBlock(root, 5) + require.Equal(t, statedb.GetCode(addr0), []byte{0x1, 0x3}) + require.Equal(t, statedb.GetBalance(addr0), big.NewInt(4096)) + + // code changes 3rd time, balance remains 4096 + _, statedb = addBlock(root, 6) + require.Equal(t, statedb.GetCode(addr0), []byte{0x1, 0x4}) + require.Equal(t, statedb.GetBalance(addr0), big.NewInt(4096)) } func TestEncodeSigHeaderJaipur(t *testing.T) { From 3e113ed7dfbb2cbc562006bb5950983f4762a618 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Thu, 28 Mar 2024 17:51:13 +0530 Subject: [PATCH 11/19] fix: failure in milestones vote on hash --- eth/bor_api_backend.go | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/eth/bor_api_backend.go b/eth/bor_api_backend.go index dbc6844d8a..9f909caa8e 100644 --- a/eth/bor_api_backend.go +++ b/eth/bor_api_backend.go @@ -83,21 +83,6 @@ func (b *EthAPIBackend) GetVoteOnHash(ctx context.Context, starBlockNr uint64, e return false, fmt.Errorf("Hash mismatch: localChainHash %s, milestoneHash %s", localEndBlockHash, hash) } - ethHandler := (*ethHandler)(b.eth.handler) - - bor, ok := ethHandler.chain.Engine().(*bor.Bor) - - if !ok { - return false, fmt.Errorf("Bor not available") - } - - err = bor.HeimdallClient.FetchMilestoneID(ctx, milestoneId) - - if err != nil { - downloader.UnlockMutex(false, "", endBlockNr, common.Hash{}) - return false, fmt.Errorf("Milestone ID doesn't exist in Heimdall") - } - downloader.UnlockMutex(true, milestoneId, endBlockNr, localEndBlock.Hash()) return true, nil From ee7299bb2412a7b9d6262c05626ab7739a800255 Mon Sep 17 00:00:00 2001 From: Pratik Patil Date: Mon, 8 Apr 2024 10:47:47 +0530 Subject: [PATCH 12/19] eth, miner: fix enforcing the minimum miner tip (#28933) (#1209) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * eth, miner: fix enforcing the minimum miner tip * ethclient/simulated: fix failing test due the min tip change * accounts/abi/bind: fix simulater gas tip issue Co-authored-by: Péter Szilágyi --- accounts/abi/bind/util_test.go | 3 ++- eth/api_miner.go | 1 + miner/miner.go | 5 +++++ miner/ordering.go | 6 +++--- miner/ordering_test.go | 4 ++-- miner/test_backend.go | 5 +++-- miner/worker.go | 28 +++++++++++++++++++++++----- 7 files changed, 39 insertions(+), 13 deletions(-) diff --git a/accounts/abi/bind/util_test.go b/accounts/abi/bind/util_test.go index a35e56a6a8..f58eb9ae84 100644 --- a/accounts/abi/bind/util_test.go +++ b/accounts/abi/bind/util_test.go @@ -29,6 +29,7 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" ) var testKey, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") @@ -64,7 +65,7 @@ func TestWaitDeployed(t *testing.T) { // Create the transaction head, _ := backend.HeaderByNumber(context.Background(), nil) // Should be child's, good enough - gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(1)) + gasPrice := new(big.Int).Add(head.BaseFee, big.NewInt(params.GWei)) tx := types.NewContractCreation(0, big.NewInt(0), test.gas, gasPrice, common.FromHex(test.code)) tx, _ = types.SignTx(tx, types.HomesteadSigner{}, testKey) diff --git a/eth/api_miner.go b/eth/api_miner.go index 477531d494..2fe296548a 100644 --- a/eth/api_miner.go +++ b/eth/api_miner.go @@ -64,6 +64,7 @@ func (api *MinerAPI) SetGasPrice(gasPrice hexutil.Big) bool { api.e.lock.Unlock() api.e.txPool.SetGasTip((*big.Int)(&gasPrice)) + api.e.Miner().SetGasTip((*big.Int)(&gasPrice)) return true } diff --git a/miner/miner.go b/miner/miner.go index cfc85ebfcb..03fa21edbf 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -219,6 +219,11 @@ func (miner *Miner) SetExtra(extra []byte) error { return nil } +func (miner *Miner) SetGasTip(tip *big.Int) error { + miner.worker.setGasTip(tip) + return nil +} + // SetRecommitInterval sets the interval for sealing work resubmitting. func (miner *Miner) SetRecommitInterval(interval time.Duration) { miner.worker.setRecommitInterval(interval) diff --git a/miner/ordering.go b/miner/ordering.go index 9777633510..828d53d241 100644 --- a/miner/ordering.go +++ b/miner/ordering.go @@ -119,11 +119,11 @@ func newTransactionsByPriceAndNonce(signer types.Signer, txs map[common.Address] } // Peek returns the next transaction by price. -func (t *transactionsByPriceAndNonce) Peek() *txpool.LazyTransaction { +func (t *transactionsByPriceAndNonce) Peek() (*txpool.LazyTransaction, *big.Int) { if len(t.heads) == 0 { - return nil + return nil, nil } - return t.heads[0].tx + return t.heads[0].tx, t.heads[0].fees } // Shift replaces the current best head with the next one from the same account. diff --git a/miner/ordering_test.go b/miner/ordering_test.go index 59d478274d..c2f08328db 100644 --- a/miner/ordering_test.go +++ b/miner/ordering_test.go @@ -102,7 +102,7 @@ func testTransactionPriceNonceSort(t *testing.T, baseFee *big.Int) { txset := newTransactionsByPriceAndNonce(signer, groups, baseFee) txs := types.Transactions{} - for tx := txset.Peek(); tx != nil; tx = txset.Peek() { + for tx, _ := txset.Peek(); tx != nil; tx, _ = txset.Peek() { txs = append(txs, tx.Tx) txset.Shift() } @@ -167,7 +167,7 @@ func TestTransactionTimeSort(t *testing.T) { txset := newTransactionsByPriceAndNonce(signer, groups, nil) txs := types.Transactions{} - for tx := txset.Peek(); tx != nil; tx = txset.Peek() { + for tx, _ := txset.Peek(); tx != nil; tx, _ = txset.Peek() { txs = append(txs, tx.Tx) txset.Shift() } diff --git a/miner/test_backend.go b/miner/test_backend.go index b2fa96b059..03447f446f 100644 --- a/miner/test_backend.go +++ b/miner/test_backend.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "math/big" "os" "sync" "sync/atomic" @@ -175,7 +176,7 @@ func (w *worker) mainLoopWithDelay(ctx context.Context, delay uint, opcodeDelay } txset := newTransactionsByPriceAndNonce(w.current.signer, txs, w.current.header.BaseFee) tcount := w.current.tcount - w.commitTransactions(w.current, txset, nil, context.Background()) + w.commitTransactions(w.current, txset, nil, new(big.Int), context.Background()) // Only update the snapshot if any new transactons were added // to the pending block @@ -587,7 +588,7 @@ mainloop: break } // Retrieve the next transaction and abort if all done. - ltx := txs.Peek() + ltx, _ := txs.Peek() if ltx == nil { breakCause = "all transactions has been included" break diff --git a/miner/worker.go b/miner/worker.go index 5b3c754f49..b134f83069 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -237,6 +237,7 @@ type worker struct { mu sync.RWMutex // The lock used to protect the coinbase and extra fields coinbase common.Address extra []byte + tip *big.Int // Minimum tip needed for non-local transaction to include them pendingMu sync.RWMutex pendingTasks map[common.Hash]*task @@ -295,6 +296,7 @@ func newWorker(config *Config, chainConfig *params.ChainConfig, engine consensus isLocalBlock: isLocalBlock, coinbase: config.Etherbase, extra: config.ExtraData, + tip: config.GasPrice, pendingTasks: make(map[common.Hash]*task), txsCh: make(chan core.NewTxsEvent, txChanSize), chainHeadCh: make(chan core.ChainHeadEvent, chainHeadChanSize), @@ -395,6 +397,13 @@ func (w *worker) setExtra(extra []byte) { w.extra = extra } +// setGasTip sets the minimum miner tip needed to include a non-local transaction. +func (w *worker) setGasTip(tip *big.Int) { + w.mu.Lock() + defer w.mu.Unlock() + w.tip = tip +} + // setRecommitInterval updates the interval for miner sealing work recommitting. func (w *worker) setRecommitInterval(interval time.Duration) { select { @@ -648,7 +657,7 @@ func (w *worker) mainLoop(ctx context.Context) { } txset := newTransactionsByPriceAndNonce(w.current.signer, txs, w.current.header.BaseFee) tcount := w.current.tcount - w.commitTransactions(w.current, txset, nil, context.Background()) + w.commitTransactions(w.current, txset, nil, new(big.Int), context.Background()) // Only update the snapshot if any new transactons were added // to the pending block @@ -908,7 +917,7 @@ func (w *worker) commitTransaction(env *environment, tx *types.Transaction, inte return receipt.Logs, nil } -func (w *worker) commitTransactions(env *environment, txs *transactionsByPriceAndNonce, interrupt *atomic.Int32, interruptCtx context.Context) error { +func (w *worker) commitTransactions(env *environment, txs *transactionsByPriceAndNonce, interrupt *atomic.Int32, minTip *big.Int, interruptCtx context.Context) error { gasLimit := env.header.GasLimit if env.gasPool == nil { env.gasPool = new(core.GasPool).AddGas(gasLimit) @@ -996,7 +1005,7 @@ mainloop: break } // Retrieve the next transaction and abort if all done. - ltx := txs.Peek() + ltx, tip := txs.Peek() if ltx == nil { breakCause = "all transactions has been included" break @@ -1012,6 +1021,11 @@ mainloop: txs.Pop() continue } + // If we don't receive enough tip for the next transaction, skip the account + if tip.Cmp(minTip) < 0 { + log.Trace("Not enough tip for transaction", "hash", ltx.Hash, "tip", tip, "needed", minTip) + break // If the next-best is too low, surely no better will be available + } // Transaction seems to fit, pull it up from the pool tx := ltx.Resolve() if tx == nil { @@ -1469,6 +1483,10 @@ func (w *worker) fillTransactions(ctx context.Context, interrupt *atomic.Int32, err error ) + w.mu.RLock() + tip := w.tip + w.mu.RUnlock() + if len(localTxs) > 0 { var txs *transactionsByPriceAndNonce @@ -1487,7 +1505,7 @@ func (w *worker) fillTransactions(ctx context.Context, interrupt *atomic.Int32, }) tracing.Exec(ctx, "", "worker.LocalCommitTransactions", func(ctx context.Context, span trace.Span) { - err = w.commitTransactions(env, txs, interrupt, interruptCtx) + err = w.commitTransactions(env, txs, interrupt, new(big.Int), interruptCtx) }) if err != nil { @@ -1515,7 +1533,7 @@ func (w *worker) fillTransactions(ctx context.Context, interrupt *atomic.Int32, }) tracing.Exec(ctx, "", "worker.RemoteCommitTransactions", func(ctx context.Context, span trace.Span) { - err = w.commitTransactions(env, txs, interrupt, interruptCtx) + err = w.commitTransactions(env, txs, interrupt, tip, interruptCtx) }) if err != nil { From a31a41d47a3787d647e1b71014db457330e29b2f Mon Sep 17 00:00:00 2001 From: dongjinlong <164888560+worrycare@users.noreply.github.com> Date: Wed, 10 Apr 2024 17:19:50 +0800 Subject: [PATCH 13/19] chore: fix some comments (#1203) Signed-off-by: dongjinlong --- consensus/bor/valset/validator_set.go | 2 +- core/blockstm/mvhashmap_test.go | 2 +- eth/handler_eth_test.go | 2 +- internal/cli/dumpconfig.go | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/consensus/bor/valset/validator_set.go b/consensus/bor/valset/validator_set.go index da187ddf9d..b301470e56 100644 --- a/consensus/bor/valset/validator_set.go +++ b/consensus/bor/valset/validator_set.go @@ -435,7 +435,7 @@ func verifyUpdates(updates []*Validator, vals *ValidatorSet) (updatedTotalVoting _, val := vals.GetByAddress(address) if val == nil { - // New validator, add its voting power the the total. + // New validator, add its voting power the total. updatedTotalVotingPower += valUpdate.VotingPower numNewValidators++ } else { diff --git a/core/blockstm/mvhashmap_test.go b/core/blockstm/mvhashmap_test.go index 7ed728426c..c099165f1a 100644 --- a/core/blockstm/mvhashmap_test.go +++ b/core/blockstm/mvhashmap_test.go @@ -158,7 +158,7 @@ func TestMVHashMapBasics(t *testing.T) { mvh.Write(ap1, Version{10, 1}, valueFor(10, 1)) res = mvh.Read(ap1, 9) - require.Equal(t, -1, res.depIdx, "reads that should go the the DB return dependency -1") + require.Equal(t, -1, res.depIdx, "reads that should go the DB return dependency -1") res = mvh.Read(ap1, 10) require.Equal(t, -1, res.depIdx, "Read returns entries from smaller txns, not txn 10") diff --git a/eth/handler_eth_test.go b/eth/handler_eth_test.go index 6e36cb2a56..c44b4c9a33 100644 --- a/eth/handler_eth_test.go +++ b/eth/handler_eth_test.go @@ -488,7 +488,7 @@ func testBroadcastBlock(t *testing.T, peers, bcasts int) { ) for i, sink := range sinks { - sink := sink // Closure for gorotuine below + sink := sink // Closure for goroutine below sourcePipe, sinkPipe := p2p.MsgPipe() defer sourcePipe.Close() diff --git a/internal/cli/dumpconfig.go b/internal/cli/dumpconfig.go index f01adef628..13ef57c087 100644 --- a/internal/cli/dumpconfig.go +++ b/internal/cli/dumpconfig.go @@ -28,7 +28,7 @@ func (p *DumpconfigCommand) MarkDown() string { func (c *DumpconfigCommand) Help() string { return `Usage: bor dumpconfig - This command will will export the user provided flags into a configuration file` + This command will export the user provided flags into a configuration file` } // Synopsis implements the cli.Command interface From ffe810e55a9ba066863e7d953c863d6c12ebd76f Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Fri, 12 Apr 2024 18:52:17 +0530 Subject: [PATCH 14/19] Update lintci and fix lints (#1217) --- .golangci.yml | 6 +++--- Makefile | 2 +- core/txpool/legacypool/legacypool_test.go | 7 ++++--- rlp/unsafe.go | 8 +------- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index 72955396a8..924e084431 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -6,8 +6,6 @@ run: # default is true. Enables skipping of directories: # vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ skip-dirs-use-default: true - skip-files: - - core/genesis_alloc.go linters: disable-all: true @@ -44,6 +42,8 @@ linters-settings: min-occurrences: 6 # minimum number of occurrences issues: + exclude-files: + - core/genesis_alloc.go exclude-rules: - path: crypto/bn256/cloudflare/optate.go linters: @@ -64,4 +64,4 @@ issues: - 'SA1029: should not use built-in type string as key for value' - 'SA1019: "io/ioutil" has been deprecated since Go 1.19: As of Go 1.16, the same functionality is now provided by package [io] or package [os], and those implementations should be preferred in new code. See the specific function documentation for details' - 'SA1019: grpc.WithInsecure is deprecated: use WithTransportCredentials and insecure.NewCredentials() instead. Will be supported throughout 1.x' - - "SA1019: rand.Read has been deprecated since Go 1.20 because it shouldn't be used: For almost all use cases, crypto/rand.Read is more appropriate" + - "SA1019: rand.Read has been deprecated since Go 1.20 because it shouldn't be used: For almost all use cases, crypto/rand.Read is more appropriate" \ No newline at end of file diff --git a/Makefile b/Makefile index cdd0822c15..f074cddc32 100644 --- a/Makefile +++ b/Makefile @@ -80,7 +80,7 @@ lint: lintci-deps: rm -f ./build/bin/golangci-lint - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b ./build/bin v1.53.3 + curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b ./build/bin v1.57.2 goimports: goimports -local "$(PACKAGE)" -w . diff --git a/core/txpool/legacypool/legacypool_test.go b/core/txpool/legacypool/legacypool_test.go index ea191b42ca..1c2f706cab 100644 --- a/core/txpool/legacypool/legacypool_test.go +++ b/core/txpool/legacypool/legacypool_test.go @@ -18,6 +18,7 @@ package legacypool import ( "crypto/ecdsa" + crand "crypto/rand" "errors" "fmt" "io" @@ -30,7 +31,7 @@ import ( "time" "github.com/holiman/uint256" - "github.com/maticnetwork/crand" + crand2 "github.com/maticnetwork/crand" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" @@ -115,7 +116,7 @@ func pricedTransaction(nonce uint64, gaslimit uint64, gasprice *big.Int, key *ec func pricedDataTransaction(nonce uint64, gaslimit uint64, gasprice *big.Int, key *ecdsa.PrivateKey, bytes uint64) *types.Transaction { data := make([]byte, bytes) - rand.Read(data) + crand.Read(data) tx, _ := types.SignTx(types.NewTransaction(nonce, common.Address{}, big.NewInt(0), gaslimit, gasprice, data), types.HomesteadSigner{}, key) @@ -3801,7 +3802,7 @@ func BenchmarkBigs(b *testing.B) { var over bool for i := 0; i < len(ints); i++ { - ints[i] = crand.BigInt(max) + ints[i] = crand2.BigInt(max) intUs[i], over = uint256.FromBig(ints[i]) if over { diff --git a/rlp/unsafe.go b/rlp/unsafe.go index d5b0d29a09..10868caaf2 100644 --- a/rlp/unsafe.go +++ b/rlp/unsafe.go @@ -26,11 +26,5 @@ import ( // byteArrayBytes returns a slice of the byte array v. func byteArrayBytes(v reflect.Value, length int) []byte { - var s []byte - hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) - hdr.Data = v.UnsafeAddr() - hdr.Cap = length - hdr.Len = length - - return s + return unsafe.Slice((*byte)(unsafe.Pointer(v.UnsafeAddr())), length) } From f6969dbc46da0baf42ce169c47c362d24e7cbcc9 Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Mon, 15 Apr 2024 10:38:09 +0530 Subject: [PATCH 15/19] eth: close engine before handler for graceful shutdown (#1189) --- eth/backend.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/eth/backend.go b/eth/backend.go index 3d18c71ac3..a7776df447 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -822,6 +822,12 @@ func (s *Ethereum) Stop() error { // Stop all the peer-related stuff first. s.ethDialCandidates.Close() s.snapDialCandidates.Close() + + // Close the engine before handler else it may cause a deadlock where + // the heimdall is unresponsive and the syncing loop keeps waiting + // for a response and is unable to proceed to exit `Finalize` during + // block processing. + s.engine.Close() s.handler.Stop() // Then stop everything else. @@ -834,7 +840,6 @@ func (s *Ethereum) Stop() error { s.txPool.Close() s.miner.Close() s.blockchain.Stop() - s.engine.Close() // Clean shutdown marker as the last thing before closing db s.shutdownTracker.Stop() From a0c7d0c177b421cdd14e052f720ab46c08ca3f42 Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Mon, 15 Apr 2024 17:17:18 +0530 Subject: [PATCH 16/19] eth/downloader: bypass peer validation if remote peer is far away (#1219) * eth/downloader: bypass peer validation if remote peer is far away * eth/downloader: parameterise threshold, fix condition * eth: add tests for bypassing validation * eth/downloader: declare max validation threshold instead of using direct value * address comments * simplify --- eth/downloader/downloader.go | 57 ++++++++++++++++++++----------- eth/downloader/downloader_test.go | 34 ++++++++++++++++-- 2 files changed, 68 insertions(+), 23 deletions(-) diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index 22af24789a..a342927f7a 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -57,6 +57,8 @@ var ( fsHeaderSafetyNet = 2048 // Number of headers to discard in case a chain violation is detected fsHeaderContCheck = 3 * time.Second // Time interval to check for header continuations during state download fsMinFullBlocks = 64 // Number of blocks to retrieve fully even in snap sync + + maxValidationThreshold = uint64(1024) // Number of block difference from remote peer to start validation ) var ( @@ -147,7 +149,9 @@ type Downloader struct { quitCh chan struct{} // Quit channel to signal termination quitLock sync.Mutex // Lock to prevent double closes + // Validation ethereum.ChainValidator + maxValidationThreshold uint64 // Number of block difference from remote peer to start validation // Testing hooks syncInitHook func(uint64, uint64) // Method to call upon initiating a new sync run @@ -228,19 +232,20 @@ func New(stateDb ethdb.Database, mux *event.TypeMux, chain BlockChain, lightchai } dl := &Downloader{ - stateDB: stateDb, - mux: mux, - queue: newQueue(blockCacheMaxItems, blockCacheInitialItems), - peers: newPeerSet(), - blockchain: chain, - lightchain: lightchain, - dropPeer: dropPeer, - headerProcCh: make(chan *headerTask, 1), - quitCh: make(chan struct{}), - SnapSyncer: snap.NewSyncer(stateDb, chain.TrieDB().Scheme()), - stateSyncStart: make(chan *stateSync), - syncStartBlock: chain.CurrentSnapBlock().Number.Uint64(), - ChainValidator: whitelistService, + stateDB: stateDb, + mux: mux, + queue: newQueue(blockCacheMaxItems, blockCacheInitialItems), + peers: newPeerSet(), + blockchain: chain, + lightchain: lightchain, + dropPeer: dropPeer, + headerProcCh: make(chan *headerTask, 1), + quitCh: make(chan struct{}), + SnapSyncer: snap.NewSyncer(stateDb, chain.TrieDB().Scheme()), + stateSyncStart: make(chan *stateSync), + syncStartBlock: chain.CurrentSnapBlock().Number.Uint64(), + ChainValidator: whitelistService, + maxValidationThreshold: maxValidationThreshold, } // Create the post-merge skeleton syncer and start the process dl.skeleton = newSkeleton(stateDb, dl.peers, dropPeer, newBeaconBackfiller(dl, success)) @@ -893,13 +898,6 @@ func (d *Downloader) getFetchHeadersByNumber(p *peerConnection) func(number uint // In the rare scenario when we ended up on a long reorganisation (i.e. none of // the head links match), we do a binary search to find the common ancestor. func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) (uint64, error) { - // Check the validity of peer from which the chain is to be downloaded - if d.ChainValidator != nil { - if _, err := d.IsValidPeer(d.getFetchHeadersByNumber(p)); err != nil { - return 0, err - } - } - // Figure out the valid ancestor range to prevent rewrite attacks var ( floor = int64(-1) @@ -917,6 +915,25 @@ func (d *Downloader) findAncestor(p *peerConnection, remoteHeader *types.Header) localHeight = d.lightchain.CurrentHeader().Number.Uint64() } + // Check the validity of peer from which the chain is to be downloaded + if d.ChainValidator != nil { + _, err := d.IsValidPeer(d.getFetchHeadersByNumber(p)) + if errors.Is(err, whitelist.ErrMismatch) { + return 0, err + } + + if errors.Is(err, whitelist.ErrNoRemote) { + // Don't validate the peer against whitelisted milestones until the different of + // our local height and remote peer's height is less than `maxValidationThreshold` + if localHeight >= remoteHeight-d.maxValidationThreshold { + log.Info("Remote peer didn't respond", "id", p.id, "local", localHeight, "remote", remoteHeight, "err", err) + return 0, err + } + + log.Info("Remote peer didn't respond but is far ahead, skipping validation", "id", p.id, "local", localHeight, "remote", remoteHeight, "err", err) + } + } + p.log.Debug("Looking for common ancestor", "local", localHeight, "remote", remoteHeight) // Recap floor value for binary search diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index b248c860ec..e1ecd011e3 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -1649,14 +1649,42 @@ func TestFakedSyncProgress67NoRemoteCheckpoint(t *testing.T) { chainA := testChainForkLightA.blocks tester.newPeer("light", protocol, chainA[1:]) + // Set the max validation threshold equal to chain length to enforce validation + tester.downloader.maxValidationThreshold = uint64(len(chainA) - 1) + // Synchronise with the peer and make sure all blocks were retrieved // Should fail in first attempt - if err := tester.sync("light", nil, mode); err != nil { - assert.Equal(t, whitelist.ErrNoRemote, err, "failed synchronisation") - } + err := tester.sync("light", nil, mode) + assert.Equal(t, whitelist.ErrNoRemote, err, "failed synchronisation") // Try syncing again, should succeed if err := tester.sync("light", nil, mode); err != nil { t.Fatal("succeeded attacker synchronisation") } } + +// TestFakedSyncProgress67BypassWhitelistValidation tests if peer validation +// via whitelist is bypassed when remote peer is far away or not +func TestFakedSyncProgress67BypassWhitelistValidation(t *testing.T) { + protocol := uint(eth.ETH67) + mode := FullSync + + tester := newTester(t) + validate := func(count int) (bool, error) { + return false, whitelist.ErrNoRemote + } + + tester.downloader.ChainValidator = newWhitelistFake(validate) + + defer tester.terminate() + + // 1223 length chain + chainA := testChainBase.blocks + tester.newPeer("light", protocol, chainA[1:]) + + // Although the validate function above returns an error (which says that + // remote peer doesn't have that block), sync will go through as the chain + // import length is 1223 which is more than the default threshold of 1024 + err := tester.sync("light", nil, mode) + assert.NoError(t, err, "failed synchronisation") +} From 2f61049a9bad29951fd6aadba5e1b63ebb5d3ba0 Mon Sep 17 00:00:00 2001 From: Snoppy Date: Thu, 18 Apr 2024 13:05:50 +0800 Subject: [PATCH 17/19] chore: fix typos (#1215) --- internal/jsre/deps/web3.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/jsre/deps/web3.js b/internal/jsre/deps/web3.js index 70bd4b1508..8ca32889c5 100644 --- a/internal/jsre/deps/web3.js +++ b/internal/jsre/deps/web3.js @@ -1405,7 +1405,7 @@ var SolidityType = function (config) { * @return {Bool} true if type match this SolidityType, otherwise false */ SolidityType.prototype.isType = function (name) { - throw "this method should be overrwritten for type " + name; + throw "this method should be overwritten for type " + name; }; /** From c4671e47b052ce07012c1118580970f372f3e78e Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Fri, 19 Apr 2024 13:23:39 +0530 Subject: [PATCH 18/19] release: 1.3.1-beta-1 version --- ...eth_getTransactionReceipt-state-sync-tx.json | 17 +++++++++++++++++ packaging/templates/package_scripts/control | 2 +- .../templates/package_scripts/control.arm64 | 2 +- .../package_scripts/control.profile.amd64 | 2 +- .../package_scripts/control.profile.arm64 | 2 +- .../templates/package_scripts/control.validator | 2 +- .../package_scripts/control.validator.arm64 | 2 +- params/version.go | 8 ++++---- 8 files changed, 27 insertions(+), 10 deletions(-) create mode 100644 internal/ethapi/testdata/eth_getTransactionReceipt-state-sync-tx.json diff --git a/internal/ethapi/testdata/eth_getTransactionReceipt-state-sync-tx.json b/internal/ethapi/testdata/eth_getTransactionReceipt-state-sync-tx.json new file mode 100644 index 0000000000..2fb229ce2f --- /dev/null +++ b/internal/ethapi/testdata/eth_getTransactionReceipt-state-sync-tx.json @@ -0,0 +1,17 @@ +{ + "blockHash": "0x4d780246cde52e535f40603d47af8fa1aea807dd3065e1acd97127bea0922b3e", + "blockNumber": "0x6", + "contractAddress": null, + "cumulativeGasUsed": "0xe01c", + "effectiveGasPrice": "0x1ecb3fb4", + "from": "0x703c4b2bd70c169f5717101caee543299fc946c7", + "gasUsed": "0xe01c", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "status": "0x1", + "to": null, + "transactionHash": "0xb5a1148819cfdfff9bfe70035524fec940eb735d89b76960b97751d01ae2a9f2", + "transactionIndex": "0x0", + "type": "0x1" + } + \ No newline at end of file diff --git a/packaging/templates/package_scripts/control b/packaging/templates/package_scripts/control index 2af0cb0885..328b755aa8 100644 --- a/packaging/templates/package_scripts/control +++ b/packaging/templates/package_scripts/control @@ -1,5 +1,5 @@ Source: bor -Version: 1.3.0 +Version: 1.3.1-beta-1 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.arm64 b/packaging/templates/package_scripts/control.arm64 index c9d426f7a8..95a7e88e30 100644 --- a/packaging/templates/package_scripts/control.arm64 +++ b/packaging/templates/package_scripts/control.arm64 @@ -1,5 +1,5 @@ Source: bor -Version: 1.3.0 +Version: 1.3.1-beta-1 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.profile.amd64 b/packaging/templates/package_scripts/control.profile.amd64 index 86a8d48a51..c56d98b26d 100644 --- a/packaging/templates/package_scripts/control.profile.amd64 +++ b/packaging/templates/package_scripts/control.profile.amd64 @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.3.0 +Version: 1.3.1-beta-1 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.profile.arm64 b/packaging/templates/package_scripts/control.profile.arm64 index 0f7f1afe35..56a813805c 100644 --- a/packaging/templates/package_scripts/control.profile.arm64 +++ b/packaging/templates/package_scripts/control.profile.arm64 @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.3.0 +Version: 1.3.1-beta-1 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.validator b/packaging/templates/package_scripts/control.validator index b4fe3780f9..ff39b60819 100644 --- a/packaging/templates/package_scripts/control.validator +++ b/packaging/templates/package_scripts/control.validator @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.3.0 +Version: 1.3.1-beta-1 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.validator.arm64 b/packaging/templates/package_scripts/control.validator.arm64 index afc30eb34a..38c101aaa8 100644 --- a/packaging/templates/package_scripts/control.validator.arm64 +++ b/packaging/templates/package_scripts/control.validator.arm64 @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.3.0 +Version: 1.3.1-beta-1 Section: develop Priority: standard Maintainer: Polygon diff --git a/params/version.go b/params/version.go index ea681616c6..9e414399fb 100644 --- a/params/version.go +++ b/params/version.go @@ -21,10 +21,10 @@ import ( ) const ( - VersionMajor = 1 // Major version component of the current release - VersionMinor = 3 // Minor version component of the current release - VersionPatch = 0 // Patch version component of the current release - VersionMeta = "" // Version metadata to append to the version string + VersionMajor = 1 // Major version component of the current release + VersionMinor = 3 // Minor version component of the current release + VersionPatch = 1 // Patch version component of the current release + VersionMeta = "beta-1" // Version metadata to append to the version string ) var GitCommit string From c56d933cbafd1b0676ecdde29f1a3d73b1ec7e01 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Mon, 29 Apr 2024 10:19:46 +0530 Subject: [PATCH 19/19] release: v1.3.1 stable version --- packaging/templates/package_scripts/control | 2 +- packaging/templates/package_scripts/control.arm64 | 2 +- packaging/templates/package_scripts/control.profile.amd64 | 2 +- packaging/templates/package_scripts/control.profile.arm64 | 2 +- packaging/templates/package_scripts/control.validator | 2 +- .../templates/package_scripts/control.validator.arm64 | 2 +- params/version.go | 8 ++++---- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packaging/templates/package_scripts/control b/packaging/templates/package_scripts/control index 328b755aa8..b50b81e83e 100644 --- a/packaging/templates/package_scripts/control +++ b/packaging/templates/package_scripts/control @@ -1,5 +1,5 @@ Source: bor -Version: 1.3.1-beta-1 +Version: 1.3.1 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.arm64 b/packaging/templates/package_scripts/control.arm64 index 95a7e88e30..80831a8ef4 100644 --- a/packaging/templates/package_scripts/control.arm64 +++ b/packaging/templates/package_scripts/control.arm64 @@ -1,5 +1,5 @@ Source: bor -Version: 1.3.1-beta-1 +Version: 1.3.1 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.profile.amd64 b/packaging/templates/package_scripts/control.profile.amd64 index c56d98b26d..907a1e20a9 100644 --- a/packaging/templates/package_scripts/control.profile.amd64 +++ b/packaging/templates/package_scripts/control.profile.amd64 @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.3.1-beta-1 +Version: 1.3.1 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.profile.arm64 b/packaging/templates/package_scripts/control.profile.arm64 index 56a813805c..c456806bfa 100644 --- a/packaging/templates/package_scripts/control.profile.arm64 +++ b/packaging/templates/package_scripts/control.profile.arm64 @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.3.1-beta-1 +Version: 1.3.1 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.validator b/packaging/templates/package_scripts/control.validator index ff39b60819..2a878e149d 100644 --- a/packaging/templates/package_scripts/control.validator +++ b/packaging/templates/package_scripts/control.validator @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.3.1-beta-1 +Version: 1.3.1 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.validator.arm64 b/packaging/templates/package_scripts/control.validator.arm64 index 38c101aaa8..3e6877ed32 100644 --- a/packaging/templates/package_scripts/control.validator.arm64 +++ b/packaging/templates/package_scripts/control.validator.arm64 @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.3.1-beta-1 +Version: 1.3.1 Section: develop Priority: standard Maintainer: Polygon diff --git a/params/version.go b/params/version.go index 9e414399fb..f7658b9e69 100644 --- a/params/version.go +++ b/params/version.go @@ -21,10 +21,10 @@ import ( ) const ( - VersionMajor = 1 // Major version component of the current release - VersionMinor = 3 // Minor version component of the current release - VersionPatch = 1 // Patch version component of the current release - VersionMeta = "beta-1" // Version metadata to append to the version string + VersionMajor = 1 // Major version component of the current release + VersionMinor = 3 // Minor version component of the current release + VersionPatch = 1 // Patch version component of the current release + VersionMeta = "" // Version metadata to append to the version string ) var GitCommit string