From 9f9e1be47e49a2854343927a3b5ec45d01394e12 Mon Sep 17 00:00:00 2001 From: lightclient <14004106+lightclient@users.noreply.github.com> Date: Wed, 16 Aug 2023 15:22:15 -0600 Subject: [PATCH 01/14] core/types: fix unmarshalling of BlobTx values (#27939) FromBig returns true *when overflow occurs* --- core/types/transaction_marshalling.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/types/transaction_marshalling.go b/core/types/transaction_marshalling.go index 1378cb4014..e5d71a85d6 100644 --- a/core/types/transaction_marshalling.go +++ b/core/types/transaction_marshalling.go @@ -373,20 +373,20 @@ func (tx *Transaction) UnmarshalJSON(input []byte) error { itx.BlobHashes = dec.BlobVersionedHashes // signature R - var ok bool + var overflow bool if dec.R == nil { return errors.New("missing required field 'r' in transaction") } - itx.R, ok = uint256.FromBig((*big.Int)(dec.R)) - if !ok { + itx.R, overflow = uint256.FromBig((*big.Int)(dec.R)) + if overflow { return errors.New("'r' value overflows uint256") } // signature S if dec.S == nil { return errors.New("missing required field 's' in transaction") } - itx.S, ok = uint256.FromBig((*big.Int)(dec.S)) - if !ok { + itx.S, overflow = uint256.FromBig((*big.Int)(dec.S)) + if overflow { return errors.New("'s' value overflows uint256") } // signature V @@ -394,8 +394,8 @@ func (tx *Transaction) UnmarshalJSON(input []byte) error { if err != nil { return err } - itx.V, ok = uint256.FromBig(vbig) - if !ok { + itx.V, overflow = uint256.FromBig(vbig) + if overflow { return errors.New("'v' value overflows uint256") } if itx.V.Sign() != 0 || itx.R.Sign() != 0 || itx.S.Sign() != 0 { From 2dd99739b55d611decebd6316b27194b64121554 Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Wed, 14 Feb 2024 13:15:05 +0530 Subject: [PATCH 02/14] bump version to v1.2.6-beta --- 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 +- packaging/templates/package_scripts/control.validator.arm64 | 2 +- params/version.go | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packaging/templates/package_scripts/control b/packaging/templates/package_scripts/control index 0dfbbab07f..2c226f14f6 100644 --- a/packaging/templates/package_scripts/control +++ b/packaging/templates/package_scripts/control @@ -1,5 +1,5 @@ Source: bor -Version: 1.2.5-beta +Version: 1.2.6-beta Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.arm64 b/packaging/templates/package_scripts/control.arm64 index e7114840d5..ebbac43cb0 100644 --- a/packaging/templates/package_scripts/control.arm64 +++ b/packaging/templates/package_scripts/control.arm64 @@ -1,5 +1,5 @@ Source: bor -Version: 1.2.5-beta +Version: 1.2.6-beta 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 5264be314c..e6eb93591b 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.2.5-beta +Version: 1.2.6-beta 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 76f68f8708..0c91282243 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.2.5-beta +Version: 1.2.6-beta Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.validator b/packaging/templates/package_scripts/control.validator index b1816d185f..178e56d491 100644 --- a/packaging/templates/package_scripts/control.validator +++ b/packaging/templates/package_scripts/control.validator @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.2.5-beta +Version: 1.2.6-beta 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 b8e1430029..031421d15b 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.2.5-beta +Version: 1.2.6-beta Section: develop Priority: standard Maintainer: Polygon diff --git a/params/version.go b/params/version.go index c08eb9c4b6..0f8ea8e9f5 100644 --- a/params/version.go +++ b/params/version.go @@ -23,7 +23,7 @@ import ( const ( VersionMajor = 1 // Major version component of the current release VersionMinor = 2 // Minor version component of the current release - VersionPatch = 5 // Patch version component of the current release + VersionPatch = 6 // Patch version component of the current release VersionMeta = "beta" // Version metadata to append to the version string ) From 812ccb09237707534b01b9745c90b6e42992fbc8 Mon Sep 17 00:00:00 2001 From: marcello33 Date: Tue, 5 Mar 2024 10:33:56 +0100 Subject: [PATCH 03/14] fix: root folder for docker integration tests (#1173) (#1175) --- integration-tests/bor_health.sh | 4 ++-- integration-tests/smoke_test.sh | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/integration-tests/bor_health.sh b/integration-tests/bor_health.sh index 63aba9aab1..0791d415fd 100644 --- a/integration-tests/bor_health.sh +++ b/integration-tests/bor_health.sh @@ -3,8 +3,8 @@ set -e while true do - peers=$(docker exec bor0 bash -c "bor attach /root/var/lib/bor/data/bor.ipc -exec 'admin.peers'") - block=$(docker exec bor0 bash -c "bor attach /root/var/lib/bor/data/bor.ipc -exec 'eth.blockNumber'") + peers=$(docker exec bor0 bash -c "bor attach /var/lib/bor/data/bor.ipc -exec 'admin.peers'") + block=$(docker exec bor0 bash -c "bor attach /var/lib/bor/data/bor.ipc -exec 'eth.blockNumber'") if [[ -n "$peers" ]] && [[ -n "$block" ]]; then break diff --git a/integration-tests/smoke_test.sh b/integration-tests/smoke_test.sh index 9275093b16..4541ec5d4d 100644 --- a/integration-tests/smoke_test.sh +++ b/integration-tests/smoke_test.sh @@ -1,7 +1,7 @@ #!/bin/bash set -e -balanceInit=$(docker exec bor0 bash -c "bor attach /root/var/lib/bor/data/bor.ipc -exec 'Math.round(web3.fromWei(eth.getBalance(eth.accounts[0])))'") +balanceInit=$(docker exec bor0 bash -c "bor attach /var/lib/bor/data/bor.ipc -exec 'Math.round(web3.fromWei(eth.getBalance(eth.accounts[0])))'") stateSyncFound="false" checkpointFound="false" @@ -10,8 +10,8 @@ start_time=$SECONDS while true do - - balance=$(docker exec bor0 bash -c "bor attach /root/var/lib/bor/data/bor.ipc -exec 'Math.round(web3.fromWei(eth.getBalance(eth.accounts[0])))'") + + balance=$(docker exec bor0 bash -c "bor attach /var/lib/bor/data/bor.ipc -exec 'Math.round(web3.fromWei(eth.getBalance(eth.accounts[0])))'") if ! [[ "$balance" =~ ^[0-9]+$ ]]; then echo "Something is wrong! Can't find the balance of first account in bor network." @@ -19,10 +19,10 @@ do fi if (( $balance > $balanceInit )); then - if [ $stateSyncFound != "true" ]; then + if [ $stateSyncFound != "true" ]; then stateSyncTime=$(( SECONDS - start_time )) - stateSyncFound="true" - fi + stateSyncFound="true" + fi fi checkpointID=$(curl -sL http://localhost:1317/checkpoints/latest | jq .result.id) @@ -31,12 +31,12 @@ do if [ $checkpointFound != "true" ]; then checkpointTime=$(( SECONDS - start_time )) checkpointFound="true" - fi + fi fi if [ $stateSyncFound == "true" ] && [ $checkpointFound == "true" ]; then break - fi + fi done echo "Both state sync and checkpoint went through. All tests have passed!" From de45e3f54e72d390b044d859834e7fcfb81ee71f Mon Sep 17 00:00:00 2001 From: Pratik Patil Date: Tue, 5 Mar 2024 21:40:41 +0530 Subject: [PATCH 04/14] added lock to originStorage, pendingStorage and dirtyStorage in GetCommittedState function to fix 'concurrent map writes' (#1176) --- core/state/state_object.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/state/state_object.go b/core/state/state_object.go index 97d9cd4ebb..872b175d77 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -21,6 +21,7 @@ import ( "fmt" "io" "math/big" + "sync" "time" "github.com/ethereum/go-ethereum/common" @@ -73,6 +74,7 @@ type stateObject struct { trie Trie // storage trie, which becomes non-nil on first access code Code // contract bytecode, which gets set when code is loaded + storageMutex sync.Mutex originStorage Storage // Storage cache of original entries to dedup rewrites pendingStorage Storage // Storage entries that need to be flushed to disk, at the end of an entire block dirtyStorage Storage // Storage entries that have been modified in the current transaction execution, reset for every transaction @@ -175,6 +177,8 @@ func (s *stateObject) GetState(key common.Hash) common.Hash { // GetCommittedState retrieves a value from the committed account storage trie. func (s *stateObject) GetCommittedState(key common.Hash) common.Hash { + s.storageMutex.Lock() + defer s.storageMutex.Unlock() // If we have a pending write or clean cached, return that if value, pending := s.pendingStorage[key]; pending { return value @@ -183,6 +187,7 @@ func (s *stateObject) GetCommittedState(key common.Hash) common.Hash { if value, cached := s.originStorage[key]; cached { return value } + // If the object was destructed in *this* block (and potentially resurrected), // the storage has been cleared out, and we should *not* consult the previous // database about any storage values. The only possible alternatives are: From cb23b9baa3cfa7d3c293103a46326a74551f5bad Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Tue, 5 Mar 2024 22:30:51 +0530 Subject: [PATCH 05/14] eth, core: track block propagation (#1078) * eth, core: track block announcement and import timings * eth: track total delay * eth: add more context and prefix in logs * eth/fetcher: fix invalid tracking of received at time * put logs behind log.enable-block-tracking flag * fix lint * improve logging * add comments * add comments --- builder/files/config.toml | 1 + core/types/block.go | 1 + docs/cli/example_config.toml | 9 +- docs/cli/server.md | 2 + eth/backend.go | 25 ++-- eth/ethconfig/config.go | 3 + eth/fetcher/block_fetcher.go | 110 ++++++++++++------ eth/fetcher/block_fetcher_test.go | 2 +- eth/handler.go | 61 +++++----- eth/protocols/eth/handlers.go | 2 + internal/cli/server/config.go | 14 ++- internal/cli/server/flags.go | 7 ++ .../templates/mainnet-v1/archive/config.toml | 1 + .../mainnet-v1/sentry/sentry/bor/config.toml | 1 + .../sentry/validator/bor/config.toml | 1 + .../mainnet-v1/without-sentry/bor/config.toml | 1 + .../templates/testnet-v4/archive/config.toml | 1 + .../testnet-v4/sentry/sentry/bor/config.toml | 1 + .../sentry/validator/bor/config.toml | 1 + .../testnet-v4/without-sentry/bor/config.toml | 1 + 20 files changed, 160 insertions(+), 85 deletions(-) diff --git a/builder/files/config.toml b/builder/files/config.toml index 824efeeced..9a858b61c5 100644 --- a/builder/files/config.toml +++ b/builder/files/config.toml @@ -25,6 +25,7 @@ syncmode = "full" # json = false # backtrace = "" # debug = true + # enable-block-tracking = false [p2p] # maxpeers = 1 diff --git a/core/types/block.go b/core/types/block.go index 1cebb65b24..71278c7197 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -263,6 +263,7 @@ type Block struct { // inter-peer block relay. ReceivedAt time.Time ReceivedFrom interface{} + AnnouncedAt *time.Time } // "external" block encoding. used for eth protocol, etc. diff --git a/docs/cli/example_config.toml b/docs/cli/example_config.toml index 55d0be7ea4..71e890aa5e 100644 --- a/docs/cli/example_config.toml +++ b/docs/cli/example_config.toml @@ -24,10 +24,11 @@ devfakeauthor = false # Run miner without validator set authorization "32000000" = "0x875500011e5eecc0c554f95d07b31cf59df4ca2505f4dbbfffa7d4e4da917c68" [log] - vmodule = "" # Per-module verbosity: comma-separated list of = (e.g. eth/*=5,p2p=4) - json = false # Format logs with JSON - backtrace = "" # Request a stack trace at a specific logging statement (e.g. "block.go:271") - debug = true # Prepends log messages with call-site location (file and line number) - {requires some effort} + vmodule = "" # Per-module verbosity: comma-separated list of = (e.g. eth/*=5,p2p=4) + json = false # Format logs with JSON + backtrace = "" # Request a stack trace at a specific logging statement (e.g. "block.go:271") + debug = true # Prepends log messages with call-site location (file and line number) + enable-block-tracking = false # Enables additional logging of information collected while tracking block lifecycle [p2p] maxpeers = 50 # Maximum number of network peers (network disabled if set to 0) diff --git a/docs/cli/server.md b/docs/cli/server.md index 6c6a1de4d9..984345b3b7 100644 --- a/docs/cli/server.md +++ b/docs/cli/server.md @@ -204,6 +204,8 @@ The ```bor server``` command runs the Bor client. - ```log.debug```: Prepends log messages with call-site location (file and line number) (default: false) +- ```log.enable-block-tracking```: Enables additional logging of information collected while tracking block lifecycle (default: false) + - ```log.json```: Format logs with JSON (default: false) - ```vmodule```: Per-module verbosity: comma-separated list of = (e.g. eth/*=5,p2p=4) diff --git a/eth/backend.go b/eth/backend.go index 12af9046cc..8003902868 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -272,18 +272,19 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { // Permit the downloader to use the trie cache allowance during fast sync cacheLimit := cacheConfig.TrieCleanLimit + cacheConfig.TrieDirtyLimit + cacheConfig.SnapshotLimit if eth.handler, err = newHandler(&handlerConfig{ - Database: chainDb, - Chain: eth.blockchain, - TxPool: eth.txPool, - Merger: eth.merger, - Network: config.NetworkId, - Sync: config.SyncMode, - BloomCache: uint64(cacheLimit), - EventMux: eth.eventMux, - RequiredBlocks: config.RequiredBlocks, - EthAPI: blockChainAPI, - checker: checker, - txArrivalWait: eth.p2pServer.TxArrivalWait, + Database: chainDb, + Chain: eth.blockchain, + TxPool: eth.txPool, + Merger: eth.merger, + Network: config.NetworkId, + Sync: config.SyncMode, + BloomCache: uint64(cacheLimit), + EventMux: eth.eventMux, + RequiredBlocks: config.RequiredBlocks, + EthAPI: blockChainAPI, + checker: checker, + txArrivalWait: eth.p2pServer.TxArrivalWait, + enableBlockTracking: eth.config.EnableBlockTracking, }); err != nil { return nil, err } diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go index 87b5683974..defbcbcbb2 100644 --- a/eth/ethconfig/config.go +++ b/eth/ethconfig/config.go @@ -204,6 +204,9 @@ type Config struct { // OverrideVerkle (TODO: remove after the fork) OverrideVerkle *big.Int `toml:",omitempty"` + + // EnableBlockTracking allows logging of information collected while tracking block lifecycle + EnableBlockTracking bool } // CreateConsensusEngine creates a consensus engine for the given chain configuration. diff --git a/eth/fetcher/block_fetcher.go b/eth/fetcher/block_fetcher.go index 589fc10fd9..55567b169a 100644 --- a/eth/fetcher/block_fetcher.go +++ b/eth/fetcher/block_fetcher.go @@ -114,18 +114,20 @@ type blockAnnounce struct { // headerFilterTask represents a batch of headers needing fetcher filtering. type headerFilterTask struct { - peer string // The source peer of block headers - headers []*types.Header // Collection of headers to filter - time time.Time // Arrival time of the headers + peer string // The source peer of block headers + headers []*types.Header // Collection of headers to filter + time time.Time // Arrival time of the headers + announcedTime time.Time // Announcement time of the availability of the block } // bodyFilterTask represents a batch of block bodies (transactions and uncles) // needing fetcher filtering. type bodyFilterTask struct { - peer string // The source peer of block bodies - transactions [][]*types.Transaction // Collection of transactions per block bodies - uncles [][]*types.Header // Collection of uncles per block bodies - time time.Time // Arrival time of the blocks' contents + peer string // The source peer of block bodies + transactions [][]*types.Transaction // Collection of transactions per block bodies + uncles [][]*types.Header // Collection of uncles per block bodies + time time.Time // Arrival time of the blocks' contents + announcedTime time.Time // Announcement time of the availability of the block } // blockOrHeaderInject represents a schedules import operation. @@ -197,34 +199,38 @@ type BlockFetcher struct { fetchingHook func([]common.Hash) // Method to call upon starting a block (eth/61) or header (eth/62) fetch completingHook func([]common.Hash) // Method to call upon starting a block body fetch (eth/62) importedHook func(*types.Header, *types.Block) // Method to call upon successful header or block import (both eth/61 and eth/62) + + // Logging + enableBlockTracking bool // Whether to log information collected while tracking block lifecycle } // NewBlockFetcher creates a block fetcher to retrieve blocks based on hash announcements. -func NewBlockFetcher(light bool, getHeader HeaderRetrievalFn, getBlock blockRetrievalFn, verifyHeader headerVerifierFn, broadcastBlock blockBroadcasterFn, chainHeight chainHeightFn, insertHeaders headersInsertFn, insertChain chainInsertFn, dropPeer peerDropFn) *BlockFetcher { +func NewBlockFetcher(light bool, getHeader HeaderRetrievalFn, getBlock blockRetrievalFn, verifyHeader headerVerifierFn, broadcastBlock blockBroadcasterFn, chainHeight chainHeightFn, insertHeaders headersInsertFn, insertChain chainInsertFn, dropPeer peerDropFn, enableBlockTracking bool) *BlockFetcher { return &BlockFetcher{ - light: light, - notify: make(chan *blockAnnounce), - inject: make(chan *blockOrHeaderInject), - headerFilter: make(chan chan *headerFilterTask), - bodyFilter: make(chan chan *bodyFilterTask), - done: make(chan common.Hash), - quit: make(chan struct{}), - announces: make(map[string]int), - announced: make(map[common.Hash][]*blockAnnounce), - fetching: make(map[common.Hash]*blockAnnounce), - fetched: make(map[common.Hash][]*blockAnnounce), - completing: make(map[common.Hash]*blockAnnounce), - queue: prque.New[int64, *blockOrHeaderInject](nil), - queues: make(map[string]int), - queued: make(map[common.Hash]*blockOrHeaderInject), - getHeader: getHeader, - getBlock: getBlock, - verifyHeader: verifyHeader, - broadcastBlock: broadcastBlock, - chainHeight: chainHeight, - insertHeaders: insertHeaders, - insertChain: insertChain, - dropPeer: dropPeer, + light: light, + notify: make(chan *blockAnnounce), + inject: make(chan *blockOrHeaderInject), + headerFilter: make(chan chan *headerFilterTask), + bodyFilter: make(chan chan *bodyFilterTask), + done: make(chan common.Hash), + quit: make(chan struct{}), + announces: make(map[string]int), + announced: make(map[common.Hash][]*blockAnnounce), + fetching: make(map[common.Hash]*blockAnnounce), + fetched: make(map[common.Hash][]*blockAnnounce), + completing: make(map[common.Hash]*blockAnnounce), + queue: prque.New[int64, *blockOrHeaderInject](nil), + queues: make(map[string]int), + queued: make(map[common.Hash]*blockOrHeaderInject), + getHeader: getHeader, + getBlock: getBlock, + verifyHeader: verifyHeader, + broadcastBlock: broadcastBlock, + chainHeight: chainHeight, + insertHeaders: insertHeaders, + insertChain: insertChain, + dropPeer: dropPeer, + enableBlockTracking: enableBlockTracking, } } @@ -276,7 +282,7 @@ func (f *BlockFetcher) Enqueue(peer string, block *types.Block) error { // FilterHeaders extracts all the headers that were explicitly requested by the fetcher, // returning those that should be handled differently. -func (f *BlockFetcher) FilterHeaders(peer string, headers []*types.Header, time time.Time) []*types.Header { +func (f *BlockFetcher) FilterHeaders(peer string, headers []*types.Header, time time.Time, announcedAt time.Time) []*types.Header { log.Trace("Filtering headers", "peer", peer, "headers", len(headers)) // Send the filter channel to the fetcher @@ -289,7 +295,7 @@ func (f *BlockFetcher) FilterHeaders(peer string, headers []*types.Header, time } // Request the filtering of the header list select { - case filter <- &headerFilterTask{peer: peer, headers: headers, time: time}: + case filter <- &headerFilterTask{peer: peer, headers: headers, time: time, announcedTime: announcedAt}: case <-f.quit: return nil } @@ -304,7 +310,7 @@ func (f *BlockFetcher) FilterHeaders(peer string, headers []*types.Header, time // FilterBodies extracts all the block bodies that were explicitly requested by // the fetcher, returning those that should be handled differently. -func (f *BlockFetcher) FilterBodies(peer string, transactions [][]*types.Transaction, uncles [][]*types.Header, time time.Time) ([][]*types.Transaction, [][]*types.Header) { +func (f *BlockFetcher) FilterBodies(peer string, transactions [][]*types.Transaction, uncles [][]*types.Header, time time.Time, announcedAt time.Time) ([][]*types.Transaction, [][]*types.Header) { log.Trace("Filtering bodies", "peer", peer, "txs", len(transactions), "uncles", len(uncles)) // Send the filter channel to the fetcher @@ -317,7 +323,7 @@ func (f *BlockFetcher) FilterBodies(peer string, transactions [][]*types.Transac } // Request the filtering of the body list select { - case filter <- &bodyFilterTask{peer: peer, transactions: transactions, uncles: uncles, time: time}: + case filter <- &bodyFilterTask{peer: peer, transactions: transactions, uncles: uncles, time: time, announcedTime: announcedAt}: case <-f.quit: return nil, nil } @@ -480,7 +486,7 @@ func (f *BlockFetcher) loop() { log.Trace("Fetching scheduled headers", "peer", peer, "list", hashes) // Create a closure of the fetch and schedule in on a new thread - fetchHeader, hashes := f.fetching[hashes[0]].fetchHeader, hashes + fetchHeader, hashes, announcedAt := f.fetching[hashes[0]].fetchHeader, hashes, f.fetching[hashes[0]].time go func(peer string) { if f.fetchingHook != nil { f.fetchingHook(hashes) @@ -504,7 +510,7 @@ func (f *BlockFetcher) loop() { select { case res := <-resCh: res.Done <- nil - f.FilterHeaders(peer, *res.Res.(*eth.BlockHeadersPacket), time.Now().Add(res.Time)) + f.FilterHeaders(peer, *res.Res.(*eth.BlockHeadersPacket), time.Now(), announcedAt) case <-timeout.C: // The peer didn't respond in time. The request @@ -547,6 +553,7 @@ func (f *BlockFetcher) loop() { fetchBodies := f.completing[hashes[0]].fetchBodies bodyFetchMeter.Mark(int64(len(hashes))) + announcedAt := f.completing[hashes[0]].time go func(peer string, hashes []common.Hash) { resCh := make(chan *eth.Response) @@ -565,7 +572,7 @@ func (f *BlockFetcher) loop() { res.Done <- nil // Ignoring withdrawals here, since the block fetcher is not used post-merge. txs, uncles, _ := res.Res.(*eth.BlockBodiesPacket).Unpack() - f.FilterBodies(peer, txs, uncles, time.Now()) + f.FilterBodies(peer, txs, uncles, time.Now(), announcedAt) case <-timeout.C: // The peer didn't respond in time. The request @@ -631,6 +638,7 @@ func (f *BlockFetcher) loop() { block := types.NewBlockWithHeader(header) block.ReceivedAt = task.time + block.AnnouncedAt = &task.announcedTime complete = append(complete, block) f.completing[hash] = announce @@ -725,6 +733,7 @@ func (f *BlockFetcher) loop() { if f.getBlock(hash) == nil { block := types.NewBlockWithHeader(announce.header).WithBody(task.transactions[i], task.uncles[i]) block.ReceivedAt = task.time + block.AnnouncedAt = &task.announcedTime blocks = append(blocks, block) } else { f.forgetHash(hash) @@ -923,6 +932,31 @@ func (f *BlockFetcher) importBlocks(peer string, block *types.Block) { log.Debug("Propagated block import failed", "peer", peer, "number", block.Number(), "hash", hash, "err", err) return } + + if f.enableBlockTracking { + // Log the insertion event + var ( + msg string + delayInMs uint64 + prettyDelay common.PrettyDuration + ) + + if block.AnnouncedAt != nil { + msg = "[block tracker] Inserted new block with announcement" + delayInMs = uint64(time.Since(*block.AnnouncedAt).Milliseconds()) + prettyDelay = common.PrettyDuration(time.Since(*block.AnnouncedAt)) + } else { + msg = "[block tracker] Inserted new block without announcement" + delayInMs = uint64(time.Since(block.ReceivedAt).Milliseconds()) + prettyDelay = common.PrettyDuration(time.Since(block.ReceivedAt)) + } + + totalDelayInMs := uint64(time.Now().UnixMilli()) - block.Time()*1000 + totalDelay := common.PrettyDuration(time.Millisecond * time.Duration(totalDelayInMs)) + + log.Info(msg, "number", block.Number().Uint64(), "hash", hash, "delay", prettyDelay, "delayInMs", delayInMs, "totalDelay", totalDelay, "totalDelayInMs", totalDelayInMs) + } + // If import succeeded, broadcast the block blockAnnounceOutTimer.UpdateSince(block.ReceivedAt) diff --git a/eth/fetcher/block_fetcher_test.go b/eth/fetcher/block_fetcher_test.go index 0f62b391b6..4a13cd22d3 100644 --- a/eth/fetcher/block_fetcher_test.go +++ b/eth/fetcher/block_fetcher_test.go @@ -104,7 +104,7 @@ func newTester(light bool) *fetcherTester { blocks: map[common.Hash]*types.Block{genesis.Hash(): genesis}, drops: make(map[string]bool), } - tester.fetcher = NewBlockFetcher(light, tester.getHeader, tester.getBlock, tester.verifyHeader, tester.broadcastBlock, tester.chainHeight, tester.insertHeaders, tester.insertChain, tester.dropPeer) + tester.fetcher = NewBlockFetcher(light, tester.getHeader, tester.getBlock, tester.verifyHeader, tester.broadcastBlock, tester.chainHeight, tester.insertHeaders, tester.insertChain, tester.dropPeer, false) tester.fetcher.Start() return tester diff --git a/eth/handler.go b/eth/handler.go index 58e5b00db0..e5a66972b8 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -85,18 +85,19 @@ type txPool interface { // handlerConfig is the collection of initialization parameters to create a full // node network handler. type handlerConfig struct { - Database ethdb.Database // Database for direct sync insertions - Chain *core.BlockChain // Blockchain to serve data from - TxPool txPool // Transaction pool to propagate from - Merger *consensus.Merger // The manager for eth1/2 transition - Network uint64 // Network identifier to adfvertise - Sync downloader.SyncMode // Whether to snap or full sync - BloomCache uint64 // Megabytes to alloc for snap sync bloom - EventMux *event.TypeMux // Legacy event mux, deprecate for `feed` - txArrivalWait time.Duration // Maximum duration to wait for an announced tx before requesting it - checker ethereum.ChainValidator - RequiredBlocks map[uint64]common.Hash // Hard coded map of required block hashes for sync challenges - EthAPI *ethapi.BlockChainAPI // EthAPI to interact + Database ethdb.Database // Database for direct sync insertions + Chain *core.BlockChain // Blockchain to serve data from + TxPool txPool // Transaction pool to propagate from + Merger *consensus.Merger // The manager for eth1/2 transition + Network uint64 // Network identifier to adfvertise + Sync downloader.SyncMode // Whether to snap or full sync + BloomCache uint64 // Megabytes to alloc for snap sync bloom + EventMux *event.TypeMux // Legacy event mux, deprecate for `feed` + txArrivalWait time.Duration // Maximum duration to wait for an announced tx before requesting it + checker ethereum.ChainValidator + RequiredBlocks map[uint64]common.Hash // Hard coded map of required block hashes for sync challenges + EthAPI *ethapi.BlockChainAPI // EthAPI to interact + enableBlockTracking bool // Whether to log information collected while tracking block lifecycle } type handler struct { @@ -126,6 +127,8 @@ type handler struct { requiredBlocks map[uint64]common.Hash + enableBlockTracking bool + // channels for fetcher, syncer, txsyncLoop quitSync chan struct{} @@ -144,19 +147,20 @@ func newHandler(config *handlerConfig) (*handler, error) { } h := &handler{ - networkID: config.Network, - forkFilter: forkid.NewFilter(config.Chain), - eventMux: config.EventMux, - database: config.Database, - txpool: config.TxPool, - chain: config.Chain, - peers: newPeerSet(), - merger: config.Merger, - ethAPI: config.EthAPI, - requiredBlocks: config.RequiredBlocks, - quitSync: make(chan struct{}), - handlerDoneCh: make(chan struct{}), - handlerStartCh: make(chan struct{}), + networkID: config.Network, + forkFilter: forkid.NewFilter(config.Chain), + eventMux: config.EventMux, + database: config.Database, + txpool: config.TxPool, + chain: config.Chain, + peers: newPeerSet(), + merger: config.Merger, + ethAPI: config.EthAPI, + requiredBlocks: config.RequiredBlocks, + enableBlockTracking: config.enableBlockTracking, + quitSync: make(chan struct{}), + handlerDoneCh: make(chan struct{}), + handlerStartCh: make(chan struct{}), } if config.Sync == downloader.FullSync { // The database seems empty as the current block is the genesis. Yet the snap @@ -295,7 +299,7 @@ func newHandler(config *handlerConfig) (*handler, error) { return n, err } - h.blockFetcher = fetcher.NewBlockFetcher(false, nil, h.chain.GetBlockByHash, validator, h.BroadcastBlock, heighter, nil, inserter, h.removePeer) + h.blockFetcher = fetcher.NewBlockFetcher(false, nil, h.chain.GetBlockByHash, validator, h.BroadcastBlock, heighter, nil, inserter, h.removePeer, h.enableBlockTracking) fetchTx := func(peer string, hashes []common.Hash) error { p := h.peers.peer(peer) @@ -688,6 +692,11 @@ func (h *handler) minedBroadcastLoop() { for obj := range h.minedBlockSub.Chan() { if ev, ok := obj.Data.(core.NewMinedBlockEvent); ok { + if h.enableBlockTracking { + delayInMs := uint64(time.Now().UnixMilli()) - ev.Block.Time()*1000 + delay := common.PrettyDuration(time.Millisecond * time.Duration(delayInMs)) + log.Info("[block tracker] Broadcasting mined block", "number", ev.Block.NumberU64(), "hash", ev.Block.Hash(), "blockTime", ev.Block.Time(), "now", time.Now().Unix(), "delay", delay, "delayInMs", delayInMs) + } h.BroadcastBlock(ev.Block, true) // First propagate block to peers h.BroadcastBlock(ev.Block, false) // Only then announce to the rest } diff --git a/eth/protocols/eth/handlers.go b/eth/protocols/eth/handlers.go index c8696071ab..b18c2dbe77 100644 --- a/eth/protocols/eth/handlers.go +++ b/eth/protocols/eth/handlers.go @@ -382,8 +382,10 @@ func handleNewBlock(backend Backend, msg Decoder, peer *Peer) error { return nil // TODO(karalabe): return error eventually, but wait a few releases } + msgTime := msg.Time() ann.Block.ReceivedAt = msg.Time() ann.Block.ReceivedFrom = peer + ann.Block.AnnouncedAt = &msgTime // Mark the peer as owning the block peer.markBlock(ann.Block.Hash()) diff --git a/internal/cli/server/config.go b/internal/cli/server/config.go index fd32a945af..6c78e65356 100644 --- a/internal/cli/server/config.go +++ b/internal/cli/server/config.go @@ -154,6 +154,9 @@ type LoggingConfig struct { // Prepends log messages with call-site location (file and line number) Debug bool `hcl:"debug,optional" toml:"debug,optional"` + // EnableBlockTracking allows logging of information collected while tracking block lifecycle + EnableBlockTracking bool `hcl:"enable-block-tracking,optional" toml:"enable-block-tracking,optional"` + // TODO - implement this // // Write execution trace to the given file // Trace string `hcl:"trace,optional" toml:"trace,optional"` @@ -606,10 +609,11 @@ func DefaultConfig() *Config { DBEngine: "leveldb", KeyStoreDir: "", Logging: &LoggingConfig{ - Vmodule: "", - Json: false, - Backtrace: "", - Debug: false, + Vmodule: "", + Json: false, + Backtrace: "", + Debug: false, + EnableBlockTracking: false, }, RPCBatchLimit: 100, RPCReturnDataLimit: 100000, @@ -1186,6 +1190,8 @@ func (c *Config) buildEth(stack *node.Node, accountManager *accounts.Manager) (* n.DatabaseFreezer = c.Ancient } + n.EnableBlockTracking = c.Logging.EnableBlockTracking + return &n, nil } diff --git a/internal/cli/server/flags.go b/internal/cli/server/flags.go index a49503b36c..426c2c25b2 100644 --- a/internal/cli/server/flags.go +++ b/internal/cli/server/flags.go @@ -146,6 +146,13 @@ func (c *Command) Flags(config *Config) *flagset.Flagset { Default: c.cliConfig.Logging.Debug, Group: "Logging", }) + f.BoolFlag(&flagset.BoolFlag{ + Name: "log.enable-block-tracking", + Usage: "Enables additional logging of information collected while tracking block lifecycle", + Value: &c.cliConfig.Logging.EnableBlockTracking, + Default: c.cliConfig.Logging.EnableBlockTracking, + Group: "Logging", + }) // heimdall f.StringFlag(&flagset.StringFlag{ diff --git a/packaging/templates/mainnet-v1/archive/config.toml b/packaging/templates/mainnet-v1/archive/config.toml index 9c4be3a3ca..dce75da426 100644 --- a/packaging/templates/mainnet-v1/archive/config.toml +++ b/packaging/templates/mainnet-v1/archive/config.toml @@ -21,6 +21,7 @@ gcmode = "archive" # json = false # backtrace = "" # debug = true + # enable-block-tracking = false [p2p] maxpeers = 50 diff --git a/packaging/templates/mainnet-v1/sentry/sentry/bor/config.toml b/packaging/templates/mainnet-v1/sentry/sentry/bor/config.toml index cbe34de1f8..5dec42f6b6 100644 --- a/packaging/templates/mainnet-v1/sentry/sentry/bor/config.toml +++ b/packaging/templates/mainnet-v1/sentry/sentry/bor/config.toml @@ -21,6 +21,7 @@ syncmode = "full" # json = false # backtrace = "" # debug = true + # enable-block-tracking = false [p2p] maxpeers = 50 diff --git a/packaging/templates/mainnet-v1/sentry/validator/bor/config.toml b/packaging/templates/mainnet-v1/sentry/validator/bor/config.toml index 710599ceda..0171acfc42 100644 --- a/packaging/templates/mainnet-v1/sentry/validator/bor/config.toml +++ b/packaging/templates/mainnet-v1/sentry/validator/bor/config.toml @@ -23,6 +23,7 @@ syncmode = "full" # json = false # backtrace = "" # debug = true + # enable-block-tracking = false [p2p] maxpeers = 20 diff --git a/packaging/templates/mainnet-v1/without-sentry/bor/config.toml b/packaging/templates/mainnet-v1/without-sentry/bor/config.toml index 09d40ededc..c7a7a3ddb6 100644 --- a/packaging/templates/mainnet-v1/without-sentry/bor/config.toml +++ b/packaging/templates/mainnet-v1/without-sentry/bor/config.toml @@ -23,6 +23,7 @@ syncmode = "full" # json = false # backtrace = "" # debug = true + # enable-block-tracking = false [p2p] maxpeers = 50 diff --git a/packaging/templates/testnet-v4/archive/config.toml b/packaging/templates/testnet-v4/archive/config.toml index 9de6b3afa8..cee19b700c 100644 --- a/packaging/templates/testnet-v4/archive/config.toml +++ b/packaging/templates/testnet-v4/archive/config.toml @@ -21,6 +21,7 @@ gcmode = "archive" # json = false # backtrace = "" # debug = true + # enable-block-tracking = false [p2p] maxpeers = 50 diff --git a/packaging/templates/testnet-v4/sentry/sentry/bor/config.toml b/packaging/templates/testnet-v4/sentry/sentry/bor/config.toml index 0942fcf6ca..6be74e4103 100644 --- a/packaging/templates/testnet-v4/sentry/sentry/bor/config.toml +++ b/packaging/templates/testnet-v4/sentry/sentry/bor/config.toml @@ -21,6 +21,7 @@ syncmode = "full" # json = false # backtrace = "" # debug = true + # enable-block-tracking = false [p2p] maxpeers = 50 diff --git a/packaging/templates/testnet-v4/sentry/validator/bor/config.toml b/packaging/templates/testnet-v4/sentry/validator/bor/config.toml index 235a3749fe..7a483d3a1b 100644 --- a/packaging/templates/testnet-v4/sentry/validator/bor/config.toml +++ b/packaging/templates/testnet-v4/sentry/validator/bor/config.toml @@ -23,6 +23,7 @@ syncmode = "full" # json = false # backtrace = "" # debug = true + # enable-block-tracking = false [p2p] maxpeers = 1 diff --git a/packaging/templates/testnet-v4/without-sentry/bor/config.toml b/packaging/templates/testnet-v4/without-sentry/bor/config.toml index ae2f94093f..82c7c3a5e0 100644 --- a/packaging/templates/testnet-v4/without-sentry/bor/config.toml +++ b/packaging/templates/testnet-v4/without-sentry/bor/config.toml @@ -23,6 +23,7 @@ syncmode = "full" # json = false # backtrace = "" # debug = true + # enable-block-tracking = false [p2p] maxpeers = 50 From 199eca46ebd932f196cdcb42885207eb0cc22622 Mon Sep 17 00:00:00 2001 From: Jerry Date: Tue, 27 Feb 2024 22:32:03 -0800 Subject: [PATCH 06/14] [Bug fix] Re-prioritize commit interrupts (#1170) This change will check commit interrupt signal coming from other channels, e.g. newHead, reSubmit, before checking transaction level interrupt. This is to fix a corner case where an interrupt signal coming from another channel getting intercepted by transaction level interrupt, which resulted in an uncleaned state (potentially deadlock). --- miner/worker.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/miner/worker.go b/miner/worker.go index 0e1dd83691..b3815ac2eb 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -955,6 +955,14 @@ func (w *worker) commitTransactions(env *environment, txs *transactionsByPriceAn mainloop: for { + // Check interruption signal and abort building if it's fired. + if interrupt != nil { + if signal := interrupt.Load(); signal != commitInterruptNone { + breakCause = "interrupt" + return signalToErr(signal) + } + } + if interruptCtx != nil { if EnableMVHashMap && w.IsRunning() { env.state.AddEmptyMVHashMap() @@ -970,13 +978,6 @@ mainloop: } } - // Check interruption signal and abort building if it's fired. - if interrupt != nil { - if signal := interrupt.Load(); signal != commitInterruptNone { - breakCause = "interrupt" - return signalToErr(signal) - } - } // If we don't have enough gas for any further transactions then we're done. if env.gasPool.Gas() < params.TxGas { breakCause = "Not enough gas for further transactions" From 53ba03b2c29948b72997261452da6ac662af376e Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Wed, 6 Mar 2024 00:14:14 +0530 Subject: [PATCH 07/14] Finalize mainnet cancun/napoli HF block number (#1178) --- builder/files/genesis-mainnet-v1.json | 3 ++- internal/cli/server/chains/mainnet.go | 1 + params/config.go | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/builder/files/genesis-mainnet-v1.json b/builder/files/genesis-mainnet-v1.json index 11d64cabab..d73b708c30 100644 --- a/builder/files/genesis-mainnet-v1.json +++ b/builder/files/genesis-mainnet-v1.json @@ -13,7 +13,8 @@ "muirGlacierBlock": 3395000, "berlinBlock": 14750000, "londonBlock": 23850000, - "shanghaiBlock":50523000, + "shanghaiBlock": 50523000, + "cancunBlock": 54876000, "bor": { "jaipurBlock": 23850000, "delhiBlock": 38189056, diff --git a/internal/cli/server/chains/mainnet.go b/internal/cli/server/chains/mainnet.go index 5548f8edba..f6c06b8807 100644 --- a/internal/cli/server/chains/mainnet.go +++ b/internal/cli/server/chains/mainnet.go @@ -28,6 +28,7 @@ var mainnetBor = &Chain{ BerlinBlock: big.NewInt(14750000), LondonBlock: big.NewInt(23850000), ShanghaiBlock: big.NewInt(50523000), + CancunBlock: big.NewInt(54876000), Bor: ¶ms.BorConfig{ JaipurBlock: big.NewInt(23850000), DelhiBlock: big.NewInt(38189056), diff --git a/params/config.go b/params/config.go index a82800206b..cbaa497351 100644 --- a/params/config.go +++ b/params/config.go @@ -262,6 +262,7 @@ var ( BerlinBlock: big.NewInt(14750000), LondonBlock: big.NewInt(23850000), ShanghaiBlock: big.NewInt(50523000), + CancunBlock: big.NewInt(54876000), Bor: &BorConfig{ JaipurBlock: big.NewInt(23850000), DelhiBlock: big.NewInt(38189056), From 564981bbe224c16967ac1e1f97610af949267dd2 Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Wed, 6 Mar 2024 00:15:39 +0530 Subject: [PATCH 08/14] bump version to v1.2.7 --- 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 2c226f14f6..1bb3cef2a5 100644 --- a/packaging/templates/package_scripts/control +++ b/packaging/templates/package_scripts/control @@ -1,5 +1,5 @@ Source: bor -Version: 1.2.6-beta +Version: 1.2.7 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.arm64 b/packaging/templates/package_scripts/control.arm64 index ebbac43cb0..c48e926d64 100644 --- a/packaging/templates/package_scripts/control.arm64 +++ b/packaging/templates/package_scripts/control.arm64 @@ -1,5 +1,5 @@ Source: bor -Version: 1.2.6-beta +Version: 1.2.7 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 e6eb93591b..d5c6b32f91 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.2.6-beta +Version: 1.2.7 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 0c91282243..a9f42df349 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.2.6-beta +Version: 1.2.7 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.validator b/packaging/templates/package_scripts/control.validator index 178e56d491..7313f51441 100644 --- a/packaging/templates/package_scripts/control.validator +++ b/packaging/templates/package_scripts/control.validator @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.2.6-beta +Version: 1.2.7 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 031421d15b..bb5db4b427 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.2.6-beta +Version: 1.2.7 Section: develop Priority: standard Maintainer: Polygon diff --git a/params/version.go b/params/version.go index 0f8ea8e9f5..23f4e5f5ad 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 = 2 // Minor version component of the current release - VersionPatch = 6 // Patch version component of the current release - VersionMeta = "beta" // Version metadata to append to the version string + VersionMajor = 1 // Major version component of the current release + VersionMinor = 2 // Minor version component of the current release + VersionPatch = 7 // Patch version component of the current release + VersionMeta = "" // Version metadata to append to the version string ) var GitCommit string From 9e9bf39207a2c555200c2ea439f1d5fd47fae2e8 Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Tue, 12 Mar 2024 16:49:04 +0530 Subject: [PATCH 09/14] eth/tracers: use correct state-sync tx hash in tracing --- eth/tracers/api.go | 67 +++++++++++++++++++++++++----------------- eth/tracers/api_bor.go | 18 +++++++----- 2 files changed, 51 insertions(+), 34 deletions(-) diff --git a/eth/tracers/api.go b/eth/tracers/api.go index 84dd9a8cf8..6cc68adbba 100644 --- a/eth/tracers/api.go +++ b/eth/tracers/api.go @@ -170,11 +170,13 @@ func (api *API) blockByNumberAndHash(ctx context.Context, number rpc.BlockNumber return api.blockByHash(ctx, hash) } -// returns block transactions along with state-sync transaction if present -func (api *API) getAllBlockTransactions(ctx context.Context, block *types.Block) (types.Transactions, bool) { +// getAllBlockTransactions returns all blocks transactions including state-sync transaction if present +// along with a flag and it's hash (which is calculated differently than regular transactions) +func (api *API) getAllBlockTransactions(ctx context.Context, block *types.Block) (types.Transactions, bool, common.Hash) { txs := block.Transactions() stateSyncPresent := false + stateSyncHash := common.Hash{} borReceipt := rawdb.ReadBorReceipt(api.backend.ChainDb(), block.Hash(), block.NumberU64(), api.backend.ChainConfig()) if borReceipt != nil { @@ -183,10 +185,11 @@ func (api *API) getAllBlockTransactions(ctx context.Context, block *types.Block) borTx, _, _, _, _ := api.backend.GetBorBlockTransactionWithBlockHash(ctx, txHash, block.Hash()) txs = append(txs, borTx) stateSyncPresent = true + stateSyncHash = txHash } } - return txs, stateSyncPresent + return txs, stateSyncPresent, stateSyncHash } // TraceConfig holds extra parameters to trace functions. @@ -338,19 +341,23 @@ func (api *API) traceChain(start, end *types.Block, config *TraceConfig, closed blockCtx = core.NewEVMBlockContext(task.block.Header(), api.chainContext(ctx), nil) ) // Trace all the transactions contained within - txs, stateSyncPresent := api.getAllBlockTransactions(ctx, task.block) + txs, stateSyncPresent, stateSyncHash := api.getAllBlockTransactions(ctx, task.block) if !*config.BorTraceEnabled && stateSyncPresent { txs = txs[:len(txs)-1] stateSyncPresent = false } - for i, tx := range task.block.Transactions() { + for i, tx := range txs { msg, _ := core.TransactionToMessage(tx, signer, task.block.BaseFee()) + txHash := tx.Hash() + if stateSyncPresent && i == len(txs)-1 { + txHash = stateSyncHash + } txctx := &Context{ BlockHash: task.block.Hash(), BlockNumber: task.block.Number(), TxIndex: i, - TxHash: tx.Hash(), + TxHash: txHash, } var res interface{} @@ -365,14 +372,14 @@ func (api *API) traceChain(start, end *types.Block, config *TraceConfig, closed res, err = api.traceTx(ctx, msg, txctx, blockCtx, task.statedb, config) if err != nil { - task.results[i] = &txTraceResult{TxHash: tx.Hash(), Error: err.Error()} - log.Warn("Tracing failed", "hash", tx.Hash(), "block", task.block.NumberU64(), "err", err) + task.results[i] = &txTraceResult{TxHash: txHash, Error: err.Error()} + log.Warn("Tracing failed", "hash", txHash, "block", task.block.NumberU64(), "err", err) break } // Only delete empty objects if EIP158/161 (a.k.a Spurious Dragon) is in effect task.statedb.Finalise(api.backend.ChainConfig().IsEIP158(task.block.Number())) - task.results[i] = &txTraceResult{TxHash: tx.Hash(), Result: res} + task.results[i] = &txTraceResult{TxHash: txHash, Result: res} } // Tracing state is used up, queue it for de-referencing. Note the // state is the parent state of trace block, use block.number-1 as @@ -667,7 +674,7 @@ func (api *API) IntermediateRoots(ctx context.Context, hash common.Hash, config deleteEmptyObjects = chainConfig.IsEIP158(block.Number()) ) - txs, stateSyncPresent := api.getAllBlockTransactions(ctx, block) + txs, stateSyncPresent, stateSyncHash := api.getAllBlockTransactions(ctx, block) for i, tx := range txs { if err := ctx.Err(); err != nil { return nil, err @@ -679,14 +686,13 @@ func (api *API) IntermediateRoots(ctx context.Context, hash common.Hash, config vmenv = vm.NewEVM(vmctx, txContext, statedb, chainConfig, vm.Config{}) ) - statedb.SetTxContext(tx.Hash(), i) //nolint: nestif if stateSyncPresent && i == len(txs)-1 { if *config.BorTraceEnabled { callmsg := prepareCallMessage(*msg) - + statedb.SetTxContext(stateSyncHash, i) if _, err := statefull.ApplyMessage(ctx, callmsg, statedb, block.Header(), api.backend.ChainConfig(), api.chainContext(ctx)); err != nil { - log.Warn("Tracing intermediate roots did not complete", "txindex", i, "txhash", tx.Hash(), "err", err) + log.Warn("Tracing intermediate roots did not complete", "txindex", i, "txhash", stateSyncHash, "err", err) // We intentionally don't return the error here: if we do, then the RPC server will not // return the roots. Most likely, the caller already knows that a certain transaction fails to // be included, but still want the intermediate roots that led to that point. @@ -699,6 +705,7 @@ func (api *API) IntermediateRoots(ctx context.Context, hash common.Hash, config break } } else { + statedb.SetTxContext(tx.Hash(), i) // nolint : contextcheck if _, err := core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(msg.GasLimit), context.Background()); err != nil { log.Warn("Tracing intermediate roots did not complete", "txindex", i, "txhash", tx.Hash(), "err", err) @@ -788,12 +795,12 @@ func (api *API) traceBlock(ctx context.Context, block *types.Block, config *Trac // Execute all the transaction contained within the block concurrently var ( - txs, stateSyncPresent = api.getAllBlockTransactions(ctx, block) - blockHash = block.Hash() - blockCtx = core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil) - signer = types.MakeSigner(api.backend.ChainConfig(), block.Number(), block.Time()) - results = make([]*txTraceResult, len(txs)) - pend sync.WaitGroup + txs, stateSyncPresent, stateSyncHash = api.getAllBlockTransactions(ctx, block) + blockHash = block.Hash() + blockCtx = core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil) + signer = types.MakeSigner(api.backend.ChainConfig(), block.Number(), block.Time()) + results = make([]*txTraceResult, len(txs)) + pend sync.WaitGroup ) threads := runtime.NumCPU() @@ -811,11 +818,15 @@ func (api *API) traceBlock(ctx context.Context, block *types.Block, config *Trac // Fetch and execute the next transaction trace tasks for task := range jobs { msg, _ := core.TransactionToMessage(txs[task.index], signer, block.BaseFee()) + txHash := txs[task.index].Hash() + if stateSyncPresent && task.index == len(txs)-1 { + txHash = stateSyncHash + } txctx := &Context{ BlockHash: blockHash, BlockNumber: block.Number(), TxIndex: task.index, - TxHash: txs[task.index].Hash(), + TxHash: txHash, } var res interface{} @@ -834,10 +845,10 @@ func (api *API) traceBlock(ctx context.Context, block *types.Block, config *Trac } if err != nil { - results[task.index] = &txTraceResult{TxHash: txs[task.index].Hash(), Error: err.Error()} + results[task.index] = &txTraceResult{TxHash: txHash, Error: err.Error()} continue } - results[task.index] = &txTraceResult{TxHash: txs[task.index].Hash(), Result: res} + results[task.index] = &txTraceResult{TxHash: txHash, Result: res} } }() } @@ -1049,7 +1060,7 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block chainConfig, canon = overrideConfig(chainConfig, config.Overrides) } - txs, stateSyncPresent := api.getAllBlockTransactions(ctx, block) + txs, stateSyncPresent, stateSyncHash := api.getAllBlockTransactions(ctx, block) if !*config.BorTraceEnabled && stateSyncPresent { txs = txs[:len(txs)-1] stateSyncPresent = false @@ -1066,7 +1077,7 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block err error ) // If the transaction needs tracing, swap out the configs - if tx.Hash() == txHash || txHash == (common.Hash{}) { + if tx.Hash() == txHash || txHash == (common.Hash{}) || txHash == stateSyncHash { // Generate a unique temporary file to dump it into prefix := fmt.Sprintf("block_%#x-%d-%#x-", block.Hash().Bytes()[:4], i, tx.Hash().Bytes()[:4]) if !canon { @@ -1089,11 +1100,12 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block } // Execute the transaction and flush any traces to disk vmenv := vm.NewEVM(vmctx, txContext, statedb, chainConfig, vmConf) - statedb.SetTxContext(tx.Hash(), i) + //nolint: nestif if stateSyncPresent && i == len(txs)-1 { if *config.BorTraceEnabled { callmsg := prepareCallMessage(*msg) + statedb.SetTxContext(stateSyncHash, i) _, err = statefull.ApplyBorMessage(vmenv, callmsg) if writer != nil { @@ -1101,6 +1113,7 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block } } } else { + statedb.SetTxContext(tx.Hash(), i) // nolint : contextcheck _, err = core.ApplyMessage(vmenv, msg, new(core.GasPool).AddGas(msg.GasLimit), context.Background()) @@ -1133,9 +1146,9 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block // containsTx reports whether the transaction with a certain hash // is contained within the specified block. func (api *API) containsTx(ctx context.Context, block *types.Block, hash common.Hash) bool { - txs, _ := api.getAllBlockTransactions(ctx, block) + txs, _, stateSyncHash := api.getAllBlockTransactions(ctx, block) for _, tx := range txs { - if tx.Hash() == hash { + if tx.Hash() == hash || stateSyncHash == hash { return true } } diff --git a/eth/tracers/api_bor.go b/eth/tracers/api_bor.go index 565148c384..59250c1e68 100644 --- a/eth/tracers/api_bor.go +++ b/eth/tracers/api_bor.go @@ -68,16 +68,20 @@ func (api *API) traceBorBlock(ctx context.Context, block *types.Block, config *T // Execute all the transaction contained within the block concurrently var ( - signer = types.MakeSigner(api.backend.ChainConfig(), block.Number(), block.Time()) - txs, stateSyncPresent = api.getAllBlockTransactions(ctx, block) - deleteEmptyObjects = api.backend.ChainConfig().IsEIP158(block.Number()) + signer = types.MakeSigner(api.backend.ChainConfig(), block.Number(), block.Time()) + txs, stateSyncPresent, stateSyncHash = api.getAllBlockTransactions(ctx, block) + deleteEmptyObjects = api.backend.ChainConfig().IsEIP158(block.Number()) ) blockCtx := core.NewEVMBlockContext(block.Header(), api.chainContext(ctx), nil) - traceTxn := func(indx int, tx *types.Transaction, borTx bool) *TxTraceResult { + traceTxn := func(indx int, tx *types.Transaction, borTx bool, stateSyncHash common.Hash) *TxTraceResult { message, _ := core.TransactionToMessage(tx, signer, block.BaseFee()) txContext := core.NewEVMTxContext(message) + txHash := tx.Hash() + if borTx { + txHash = stateSyncHash + } tracer := logger.NewStructLogger(config.Config) @@ -86,7 +90,7 @@ func (api *API) traceBorBlock(ctx context.Context, block *types.Block, config *T // Call Prepare to clear out the statedb access list // Not sure if we need to do this - statedb.SetTxContext(tx.Hash(), indx) + statedb.SetTxContext(txHash, indx) var execRes *core.ExecutionResult @@ -124,9 +128,9 @@ func (api *API) traceBorBlock(ctx context.Context, block *types.Block, config *T for indx, tx := range txs { if stateSyncPresent && indx == len(txs)-1 { - res.Transactions = append(res.Transactions, traceTxn(indx, tx, true)) + res.Transactions = append(res.Transactions, traceTxn(indx, tx, true, stateSyncHash)) } else { - res.Transactions = append(res.Transactions, traceTxn(indx, tx, false)) + res.Transactions = append(res.Transactions, traceTxn(indx, tx, false, stateSyncHash)) } } From 7a13965d457a66e98bf9e5738113a6053cef9ec2 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Tue, 12 Mar 2024 17:13:41 +0530 Subject: [PATCH 10/14] bump: version 1.2.8-beta --- 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 1bb3cef2a5..b80737e5ec 100644 --- a/packaging/templates/package_scripts/control +++ b/packaging/templates/package_scripts/control @@ -1,5 +1,5 @@ Source: bor -Version: 1.2.7 +Version: 1.2.8-beta Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.arm64 b/packaging/templates/package_scripts/control.arm64 index c48e926d64..c2f1a97067 100644 --- a/packaging/templates/package_scripts/control.arm64 +++ b/packaging/templates/package_scripts/control.arm64 @@ -1,5 +1,5 @@ Source: bor -Version: 1.2.7 +Version: 1.2.8-beta 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 d5c6b32f91..ebe0684bdd 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.2.7 +Version: 1.2.8-beta 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 a9f42df349..f42d13d313 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.2.7 +Version: 1.2.8-beta Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.validator b/packaging/templates/package_scripts/control.validator index 7313f51441..d2702032cf 100644 --- a/packaging/templates/package_scripts/control.validator +++ b/packaging/templates/package_scripts/control.validator @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.2.7 +Version: 1.2.8-beta 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 bb5db4b427..38636e48b4 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.2.7 +Version: 1.2.8-beta Section: develop Priority: standard Maintainer: Polygon diff --git a/params/version.go b/params/version.go index 23f4e5f5ad..b91d4c99e8 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 = 2 // Minor version component of the current release - VersionPatch = 7 // 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 = 2 // Minor version component of the current release + VersionPatch = 8 // Patch version component of the current release + VersionMeta = "beta" // Version metadata to append to the version string ) var GitCommit string From 2f23f985a0c6d04a1b37207a4b3ec3f60512a857 Mon Sep 17 00:00:00 2001 From: Anshal Shukla Date: Fri, 15 Mar 2024 11:58:36 +0530 Subject: [PATCH 11/14] release: 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 b80737e5ec..c8c4b10eef 100644 --- a/packaging/templates/package_scripts/control +++ b/packaging/templates/package_scripts/control @@ -1,5 +1,5 @@ Source: bor -Version: 1.2.8-beta +Version: 1.2.8 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.arm64 b/packaging/templates/package_scripts/control.arm64 index c2f1a97067..9dafa758f6 100644 --- a/packaging/templates/package_scripts/control.arm64 +++ b/packaging/templates/package_scripts/control.arm64 @@ -1,5 +1,5 @@ Source: bor -Version: 1.2.8-beta +Version: 1.2.8 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 ebe0684bdd..e03bfa3aec 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.2.8-beta +Version: 1.2.8 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 f42d13d313..dc2f77ca51 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.2.8-beta +Version: 1.2.8 Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.validator b/packaging/templates/package_scripts/control.validator index d2702032cf..e47788ccd2 100644 --- a/packaging/templates/package_scripts/control.validator +++ b/packaging/templates/package_scripts/control.validator @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.2.8-beta +Version: 1.2.8 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 38636e48b4..6e6931eeb4 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.2.8-beta +Version: 1.2.8 Section: develop Priority: standard Maintainer: Polygon diff --git a/params/version.go b/params/version.go index b91d4c99e8..54a2410a56 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 = 2 // Minor version component of the current release - VersionPatch = 8 // Patch version component of the current release - VersionMeta = "beta" // Version metadata to append to the version string + VersionMajor = 1 // Major version component of the current release + VersionMinor = 2 // Minor version component of the current release + VersionPatch = 8 // Patch version component of the current release + VersionMeta = "" // Version metadata to append to the version string ) var GitCommit string From 02f8fec387c331c9651f76e905ea2bfab1e5fa79 Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Tue, 19 Mar 2024 15:55:08 +0530 Subject: [PATCH 12/14] bump version to v1.2.9-beta --- 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 c8c4b10eef..e7ace96e72 100644 --- a/packaging/templates/package_scripts/control +++ b/packaging/templates/package_scripts/control @@ -1,5 +1,5 @@ Source: bor -Version: 1.2.8 +Version: 1.2.9-beta Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.arm64 b/packaging/templates/package_scripts/control.arm64 index 9dafa758f6..2ea263e599 100644 --- a/packaging/templates/package_scripts/control.arm64 +++ b/packaging/templates/package_scripts/control.arm64 @@ -1,5 +1,5 @@ Source: bor -Version: 1.2.8 +Version: 1.2.9-beta 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 e03bfa3aec..ccc8936dbd 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.2.8 +Version: 1.2.9-beta 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 dc2f77ca51..5b4e012780 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.2.8 +Version: 1.2.9-beta Section: develop Priority: standard Maintainer: Polygon diff --git a/packaging/templates/package_scripts/control.validator b/packaging/templates/package_scripts/control.validator index e47788ccd2..5dd2bca4c5 100644 --- a/packaging/templates/package_scripts/control.validator +++ b/packaging/templates/package_scripts/control.validator @@ -1,5 +1,5 @@ Source: bor-profile -Version: 1.2.8 +Version: 1.2.9-beta 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 6e6931eeb4..8b45776fde 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.2.8 +Version: 1.2.9-beta Section: develop Priority: standard Maintainer: Polygon diff --git a/params/version.go b/params/version.go index 54a2410a56..4f2658a99d 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 = 2 // Minor version component of the current release - VersionPatch = 8 // 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 = 2 // Minor version component of the current release + VersionPatch = 9 // Patch version component of the current release + VersionMeta = "beta" // Version metadata to append to the version string ) var GitCommit string From deb34da04d58761ea72f3cc2956c6e1f57212191 Mon Sep 17 00:00:00 2001 From: Manav Darji Date: Tue, 19 Mar 2024 16:27:33 +0530 Subject: [PATCH 13/14] core: remove tracing and handle err in reorg call (#1193) --- core/blockchain.go | 71 ++++++++-------------------------------------- 1 file changed, 12 insertions(+), 59 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index b63ab6378c..b1fd2d5745 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -33,15 +33,11 @@ import ( "sync/atomic" "time" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/trace" - "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/lru" "github.com/ethereum/go-ethereum/common/mclock" "github.com/ethereum/go-ethereum/common/prque" - "github.com/ethereum/go-ethereum/common/tracing" "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core/blockstm" "github.com/ethereum/go-ethereum/core/rawdb" @@ -1722,77 +1718,34 @@ func (bc *BlockChain) WriteBlockAndSetHead(ctx context.Context, block *types.Blo // writeBlockAndSetHead is the internal implementation of WriteBlockAndSetHead. // This function expects the chain mutex to be held. func (bc *BlockChain) writeBlockAndSetHead(ctx context.Context, block *types.Block, receipts []*types.Receipt, logs []*types.Log, state *state.StateDB, emitHeadEvent bool) (status WriteStatus, err error) { - writeBlockAndSetHeadCtx, span := tracing.StartSpan(ctx, "blockchain.writeBlockAndSetHead") - defer tracing.EndSpan(span) - - var stateSyncLogs []*types.Log - - tracing.Exec(writeBlockAndSetHeadCtx, "", "blockchain.writeBlockWithState", func(_ context.Context, span trace.Span) { - stateSyncLogs, err = bc.writeBlockWithState(block, receipts, logs, state) - tracing.SetAttributes( - span, - attribute.Int("number", int(block.Number().Uint64())), - attribute.Bool("error", err != nil), - ) - }) - + stateSyncLogs, err := bc.writeBlockWithState(block, receipts, logs, state) if err != nil { return NonStatTy, err } currentBlock := bc.CurrentBlock() - - var reorg bool - - tracing.Exec(writeBlockAndSetHeadCtx, "", "blockchain.ReorgNeeded", func(_ context.Context, span trace.Span) { - reorg, err = bc.forker.ReorgNeeded(currentBlock, block.Header()) - tracing.SetAttributes( - span, - attribute.Int("number", int(block.Number().Uint64())), - attribute.Int("current block", int(currentBlock.Number.Uint64())), - attribute.Bool("reorg needed", reorg), - attribute.Bool("error", err != nil), - ) - }) - + reorg, err := bc.forker.ReorgNeeded(currentBlock, block.Header()) if err != nil { return NonStatTy, err } - tracing.Exec(writeBlockAndSetHeadCtx, "", "blockchain.reorg", func(_ context.Context, span trace.Span) { - if reorg { - // Reorganise the chain if the parent is not the head block - if block.ParentHash() != currentBlock.Hash() { - if err = bc.reorg(currentBlock, block); err != nil { - status = NonStatTy - } + if reorg { + // Reorganise the chain if the parent is not the head block + if block.ParentHash() != currentBlock.Hash() { + if err = bc.reorg(currentBlock, block); err != nil { + return NonStatTy, err } - - status = CanonStatTy - } else { - status = SideStatTy } - tracing.SetAttributes( - span, - attribute.Int("number", int(block.Number().Uint64())), - attribute.Int("current block", int(currentBlock.Number.Uint64())), - attribute.Bool("reorg needed", reorg), - attribute.Bool("error", err != nil), - attribute.String("status", string(status)), - ) - }) - - if status == NonStatTy { - return + status = CanonStatTy + } else { + status = SideStatTy } + // Set new head. if status == CanonStatTy { - tracing.Exec(writeBlockAndSetHeadCtx, "", "blockchain.writeHeadBlock", func(_ context.Context, _ trace.Span) { - bc.writeHeadBlock(block) - }) + bc.writeHeadBlock(block) } - bc.futureBlocks.Remove(block.Hash()) if status == CanonStatTy { From d9c6d122e20eebd10005f2dd1d7d97796ec096f3 Mon Sep 17 00:00:00 2001 From: Shivam Sharma Date: Wed, 20 Mar 2024 15:25:35 +0530 Subject: [PATCH 14/14] fix : BlockBodiesResponse --- eth/fetcher/block_fetcher.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eth/fetcher/block_fetcher.go b/eth/fetcher/block_fetcher.go index 36028c77e8..1831b756a3 100644 --- a/eth/fetcher/block_fetcher.go +++ b/eth/fetcher/block_fetcher.go @@ -571,7 +571,7 @@ func (f *BlockFetcher) loop() { case res := <-resCh: res.Done <- nil // Ignoring withdrawals here, since the block fetcher is not used post-merge. - txs, uncles, _ := res.Res.(*eth.BlockBodiesPacket).Unpack() + txs, uncles, _ := res.Res.(*eth.BlockBodiesResponse).Unpack() f.FilterBodies(peer, txs, uncles, time.Now(), announcedAt) case <-timeout.C: