Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

eth/protocols/snap: generate storage trie from full dirty snap data #22668

Merged
merged 17 commits into from Apr 27, 2021

Conversation

karalabe
Copy link
Member

@karalabe karalabe commented Apr 14, 2021

This PR implements an idea from @holiman, where instead of assembling subtries for each storage chunk received from the network, we drop all of them to disk first and then assemble the entire storage trie from the final disk content. The final trie might have faults in it if the pivot moves or sync is interrupted and resumed, but that will be fixed during the healing phase. The goal of this PR is to get rid of all the missing trie nodes on the request/reply chunk boundaries.

PR:

20:26) State sync start
[...]
00:55) State sync done  accounts=129,183,697@26.49GiB slots=422,048,701@67.87GiB codes=374,498@1.83GiB state=96.20GiB
[...]
01:27) State heal done  accounts=130,501@6.32MiB      slots=145,732@10.97MiB     codes=26@250.45KiB       nodes=969,287@257.60MiB pending=0

Master:

20:37) State sync start
[...]
00:59) State sync done  accounts=129,017,101@29.34GiB slots=421,925,192@84.05GiB codes=374,886@1.83GiB state=115.23GiB
[...]
01:46) State heal done  accounts=138,384@6.77MiB      slots=178,233@13.37MiB     codes=27@260.00KiB       nodes=1,269,813@360.69MiB

This PR seems to perform very well on testnets, but on mainnet where the sync time is longer, the database ends up thrashed either way. That's fine though, the goal of this PR is not to make things faster (although that's always nice), rather to permit dynamic packet sizes without making thing worse.

Copy link
Contributor

@holiman holiman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks correct to me. I guess we still can't get rid of the notary, since it's used for accounts?

@karalabe
Copy link
Member Author

Btw, I'm still working on this PR, so don't merge it yet. I've found an issue that pushes the wrong keys into the db, but managed to behave correctly (I have an extra short node on top XD). Also implemented the idea for accounts but need to confirm it works ok. After that we need to more massaging as currently the hasher ties up the loop thread causing timeouts on the requests among others. TL;DR it's workable, but there's work to be done still.

@karalabe karalabe force-pushed the dirty-snap branch 3 times, most recently from 0c18c4c to 6574559 Compare April 16, 2021 18:24
@karalabe karalabe added this to the 1.10.3 milestone Apr 19, 2021
Next: next,
Last: last,
root: acc.Root,
Next: next,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wouldn't it be better to use next from res.hashes[i] ( or wherever the last returned key is?) instead of fetching the storage trie from 0000?

Copy link
Contributor

@holiman holiman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

karalabe and others added 17 commits April 27, 2021 14:51
* eth/protocols/snap: make better use of delivered data

* squashme

* eth/protocols/snap: reduce chunking

* squashme

* eth/protocols/snap: reduce chunking further

* eth/protocols/snap: break out hash range calculations

* eth/protocols/snap: use sort.Search instead of looping

* eth/protocols/snap: prevent crash on storage response with no keys

* eth/protocols/snap: nitpicks all around

* eth/protocols/snap: clear heal need on 1-chunk storage completion

* eth/protocols/snap: fix range chunker, add tests

Co-authored-by: Péter Szilágyi <peterke@gmail.com>
@karalabe karalabe merged commit caea6c4 into ethereum:master Apr 27, 2021
iquidus added a commit to ubiq/go-ubiq that referenced this pull request Jul 21, 2021
* les: fix balance expiration (ethereum#22343)

* les/lespay/server: fix balance expiration and add test

* les: move client balances to a new db

* les: rename lespayDb to lesDb

* tests/fuzzers/les: add fuzzer for les server handler (ethereum#22282)

* les: refactored server handler

* tests/fuzzers/les: add fuzzer for les server handler

* tests, les: update les fuzzer

tests: update les fuzzer

tests/fuzzer/les: release resources

tests/fuzzer/les: pre-initialize all resources

* les: refactored server handler and fuzzer

Co-authored-by: rjl493456442 <garyrong0905@gmail.com>

* les: clean up server handler (ethereum#22357)

* cmd/geth: add db commands stats, compact, put, get, delete (ethereum#22014)

This PR introduces:

- db.put to put a value into the database
- db.get to read a value from the database
- db.delete to delete a value from the database
- db.stats to check compaction info from the database
- db.compact to trigger a db compaction

It also moves inspectdb to db.inspect.

* internal/ethapi: reject non-replay-protected txs over RPC (ethereum#22339)

This PR prevents users from submitting transactions without EIP-155 enabled. This behaviour can be overridden by specifying the flag --rpc.allow-unprotected-txs=true.

* accounts/abi/bind: fix up Go mod files for Go 1.16

* Dockerfile: bump to Go 1.16 base images

* travis: bump Android NDK version

* travis: bump builders to Bionic

* travis: manually install Android since Travis is stale (ethereum#22373)

* cmd/utils: remove deprecated command line flags (ethereum#22263)

This removes support for all deprecated flags except --rpc*.

* eth/protocols/snap: lower abortion and resumption logs to debug

* cmd, eth, les: enable serving light clients when non-synced (ethereum#22250)

This PR adds a more CLI flag, so that the les-server can serve light clients even the local node is not synced yet.

This functionality is needed in some testing environments(e.g. hive). After launching the les server, no more blocks will be imported so the node is always marked as "non-synced".

* les, light: improve txstatus retrieval (ethereum#22349)

Transaction unindexing will be enabled by default as of 1.10, which causes tx status retrieval will be broken without this PR. 

This PR introduces a retry mechanism in TxStatus retrieval.

* all: add support for EIP-2718, EIP-2930 transactions (ethereum#21502)

This adds support for EIP-2718 typed transactions as well as EIP-2930
access list transactions (tx type 1). These EIPs are scheduled for the
Berlin fork.

There very few changes to existing APIs in core/types, and several new APIs
to deal with access list transactions. In particular, there are two new
constructor functions for transactions: types.NewTx and types.SignNewTx.
Since the canonical encoding of typed transactions is not RLP-compatible,
Transaction now has new methods for encoding and decoding: MarshalBinary
and UnmarshalBinary.

The existing EIP-155 signer does not support the new transaction types.
All code dealing with transaction signatures should be updated to use the
newer EIP-2930 signer. To make this easier for future updates, we have
added new constructor functions for types.Signer: types.LatestSigner and
types.LatestSignerForChainID. 

This change also adds support for the YoloV3 testnet.

Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>

* cmd/devp2p: add eth66 test suite (ethereum#22363)

Co-authored-by: Martin Holst Swende <martin@swende.se>

* les: move server pool to les/vflux/client (ethereum#22377)

* les: move serverPool to les/vflux/client

* les: add metrics

* les: moved ValueTracker inside ServerPool

* les: protect against node registration before server pool is started

* les/vflux/client: fixed tests

* les: make peer registration safe

* all: define Berlin hard fork spec

* rpc: add separate size limit for websocket (ethereum#22385)

This makes the WebSocket message size limit independent of the
limit used for HTTP requests. The new limit for WebSocket messages 
is 15MB.

* accounts/keystore: use github.com/google/uuid (ethereum#22217)

This replaces the github.com/pborman/uuid dependency with
github.com/google/uuid because the former is only a wrapper for
the latter (since v1.0.0).

Co-authored-by: Felix Lange <fjl@twurst.com>

* core/state: fix eta calculation on pruning (ethereum#22386)

* les: UDP pre-negotiation of available server capacity (ethereum#22183)

This PR implements the first one of the "lespay" UDP queries which
is already useful in itself: the capacity query. The server pool is making
use of this query by doing a cheap UDP query to determine whether it is
worth starting the more expensive TCP connection process.

* core/rawdb: fix the transaction indexer (ethereum#22395)

* core, eth: unship EIP 2315

* core/vm/runtime: more unshipping

* cmd/geth: put allowUnsecureTx flag in RPC section (ethereum#22412)

* params: update chts (ethereum#22418)

* cmd/utils: fix txlookuplimit for archive node (ethereum#22419)

* cmd/utils: fix exclusive check for archive node

* cmd/utils: set the txlookuplimit to 0

* core/forkid, params: unset Berlin fork number (ethereum#22413)

* les: fix nodiscover option on the client side (ethereum#22422)

* cmd: retire whisper flags (ethereum#22421)

* cmd: retire whisper flags

* cmd/geth: remove whisper configs

* tests: update to latest tests (ethereum#22290)

This updates the consensus tests to commit 31d6630 and
adds support for access list transactions in the test runner.

Co-authored-by: Martin Holst Swende <martin@swende.se>

* params: release geth 1.10.0 stable

* params: begin v1.10.1 release cycle

* Revert "core/forkid, params: unset Berlin fork number (ethereum#22413)"

This reverts commit ba99910.

* build: fix PPA failure due to updated debsrc

* build: add support for Ubuntu Hirsute Hippo

* tests: update reference tests with 2315 removed from Berlin

* params: release Geth v1.10.1

* params: begin v1.10.2 release cycle

* core/types: reduce allocations in GasPriceCmp (ethereum#22456)

* les: fix errors in metric namespace (ethereum#22459)

* les: add trailing slash to metric namespace

* les: omit '.' in metric namespace

* cmd: extend dumpgenesis to support network flags on the cmd (ethereum#22406)

* p2p/enr: fix decoding of incomplete lists (ethereum#22484)

Given a list of less than two elements DecodeRLP returned rlp.EOL,
leading to issues in outer decoders.

* cmd/geth: add ancient datadir flag to snapshot subcommands (ethereum#22486)

* cmd/devp2p: better testcase failure output for ethtests (ethereum#22482)

* eth, les: properly init statedb accesslist during tracing (ethereum#22480)

* eth/state, les/state: properly init statedb accesslist when tracing, fixes ethereum#22475

* eth: review comments

* eth/tracers: fix compilation err

* eth/tracers: apply @karalabe's suggested fix

* cmd/geth, eth/downloader: remove copydb command (ethereum#22501)

* cmd/geth: remove copydb command

* eth/downloader: remove fakepeer

* tests/fuzzers: fix goroutine leak in les fuzzer (ethereum#22455)

The oss-fuzz fuzzer has been reporting some failing testcases for les. They're all spurious, and cannot reliably be reproduced. However, running them showed that there was a goroutine leak: the tests created a lot of new clients, which started an exec queue that was never torn down.

This PR fixes the goroutine leak, and also a log message which was erroneously formatted.

* core/types: improve comments in new EIP-2718 code (ethereum#22402)

Responding to these comments:

    https://github.com/ethereum/go-ethereum/pull/21502/files#r579010962
    https://github.com/ethereum/go-ethereum/pull/21502/files#r579021565
    https://github.com/ethereum/go-ethereum/pull/21502/files#r579023510
    https://github.com/ethereum/go-ethereum/pull/21502/files#r578983734

* cmd/clef: docs - link to ethereum org repo (ethereum#22400)

* cmd/clef (docs): fix image background (ethereum#22399)

Flatten the image so we do not have dark text on dark background

* core/rawdb: fix transaction indexing/unindexing hashing error (ethereum#22457)

* core/rawdb: more verbose error logs + better hashing

* core/rawdb: add failing testcase

* core/rawdb: properly hash transactions while indexing/unindexing

* core/rawdb: exit on error + better log msg

* les: fix UDP connection query (ethereum#22451)

This PR fixes multiple issues with the UDP connection pre-negotiation feature:

- the enable condition was wrong (it checked the existence of the DiscV5 struct where it wasn't initialized yet, disabling the feature even if discv5 was enabled)
- the server pool queried already connected nodes when the discovery iterators returned them again
- servers responded positively before they were synced and really willing to accept connections

Metrics are also added on the server side that count the positive and negative replies to served connection queries.

* les: fix UDP connection query (ethereum#22451)

This PR fixes multiple issues with the UDP connection pre-negotiation feature:
- the enable condition was wrong (it checked the existence of the DiscV5 struct where it wasn't initialized yet, disabling the feature even if discv5 was enabled)
- the server pool queried already connected nodes when the discovery iterators returned them again
- servers responded positively before they were synced and really willing to accept connections

Metrics are also added on the server side that count the positive and negative replies to served connection queries.

* les: allow either full enode strings or raw hex ids in the API (ethereum#22423)

* eth/protocols/snap, eth/downloader: don't use bloom filter in snap sync

* eth/protocols/snap: fix typo (ethereum#22530)

* cmd/devp2p/internal/ethtest: return request ID in BlockHeaders response (ethereum#22508)

This PR fixes an issue with the eth66 test suite where, during a readAndServe when
the test is manually responding to GetBlockHeader requests, it now responds
with a BlockHeaders eth66 packet that includes the inbound request ID.

* ethclient: fix error handling for header test (ethereum#22514)

The wantErr field was disused, and the error returned by HeaderByNumber
was not properly tested.

This simplifies the error checking using errors.Is and asserts that getting
an expected missing header returns ethereum.NotFound. Also adds a nil
check condition for header.Number before using big.Int's Sign method.

* accounts/abi/bind: add NoSend transact option (ethereum#22446)

This adds a new option to avoid sending the transaction which is
created by calling a bound contract method.

* go.mod: upgrade goleveldb to commit 64b5b1c (ethereum#22436)

This pulls in a fix for a corruption issue when the process crashes
while a new manifest file is being added.

* go.mod: upgrade goupnp to commit 0ca76305 (ethereum#22479)

This pulls in a fix to skip the broadcast on interfaces which are down.

* consensus/ethash: remove unnecessary variable definition (ethereum#22512)

* cmd/devp2p: use AWS-SDK v2 (ethereum#22360)

This updates the DNS deployer to use AWS SDK v2. Migration is relatively
seamless, although there were two locations that required a slightly
different approach to achieve the same results. In particular, waiting for
DNS change propagation is very different with SDK v2. 

This change also optimizes DNS updates by publishing all changes before
waiting for propagation.

* p2p/dnsdisc: fix flaw in dns size calculation (ethereum#22533)

This fixes the calculation of the tree branch factor. With the new
formula, we now creat at most 13 children instead of 30, ensuring
the TXT record size will be below 370 bytes.

* core: fix potential race in chainIndexerTest (ethereum#22346)

* cmd/devp2p/internal/ethtest: skip eth/66 tests when v66 not supported (ethereum#22460)

* cmd/devp2p: add flag for AWS region (ethereum#22537)

* cmd/devp2p: fix error in updating the cursor when collecting records for route53 (ethereum#22538)

This PR fixes a regression introduced in ethereum#22360, when we updated to the v2 of the AWS sdk, which causes current crawler to just get the same first 100 results over and over, and get stuck in a loop.

* cmd/devp2p: add old block announcement test to eth test suite (ethereum#22474)

Add old block announcement test to eth test suite, checks to make sure old block announcement isn't propagated

* cmd/utils: fix compilation issue on openbsd (ethereum#22511)

* core: fix method comment for `txpool.requestReset` (ethereum#22543)

* accounts: eip-712 signing for ledger (ethereum#22378)

* accounts: eip-712 signing for ledger

* address review comments

* all: add read-only option to database (ethereum#22407)

* all: add read-only option to database

* all: fixes tests

* cmd/geth: migrate flags

* cmd/geth: fix the compact

* cmd/geth: fix the format

* cmd/geth: fix log

* cmd: add chain-readonly

* core: add readonly notion to freezer

* core/rawdb: add log

* core/rawdb: fix freezer close

* cmd: fix

* cmd, core: construct db

* core: update tests

* cmd/geth: check block range against chain head in export cmd (ethereum#22387)

Check the input parameters against the actual head block, exit on error

* core/state/snapshot: fix panic on missing parent

* internal/web3ext, node: migrate node admin API (Start|Stop)RPC->HTTP (ethereum#22461)

* internal/web3ext,node: migrate node admin API (Start|Stop)RPC->HTTP

Corresponding CLI flags --rpc have been moved to --http.

This moves the admin module HTTP RPC start/stop
methods to an equivalent namespace.

Rel ethereum#22263

Date: 2021-03-08 08:00:11-06:00
Signed-off-by: meows <b5c6@protonmail.com>

* internal/web3ext: fix startRPC/HTTP param count (4->5)

Date: 2021-03-16 06:13:23-05:00
Signed-off-by: meows <b5c6@protonmail.com>

* cmd/devp2p: skip ENR field tails properly in nodeset filter (ethereum#22565)

In Geth v1.10, we changed the structure of the "les" ENR entry. As a result, the DHT crawler that creates the DNS lists
no longer recognizes the les nodes, which is fixed in this commit. 

* cmd/devp2p: skip ENR field tails properly in nodeset filter
* cmd/devp2p: fix tail decoder for snap as well
* les: fix tail decoding in "eth" ENR entry

* p2p: fix minor typo and remove fd parameter in checkInboundConn (ethereum#22547)

* p2p/dnsdisc: rate limit resolving before checking cache (ethereum#22566)

This makes the rate limit apply regardless of whether the node is
already cached.

* eth/protocols/snap: fix the flaws in the snap sync (ethereum#22553)

* eth/protocols/snap: fix snap sync

* eth/protocols/snap: fix tests

* eth: fix tiny

* eth: update tests

* eth: update tests

* core/state/snapshot: testcase for ethereum#22534

* eth/protocols/snap: fix boundary loss on full-but-proven range

* core/state/snapshot: lintfix

* eth: address comment

* eth: fix handler

Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Péter Szilágyi <peterke@gmail.com>

* eth/tracers, core: use scopecontext in tracers, provide statedb in capturestart (ethereum#22333)

Fixes the CaptureStart api to include the EVM, thus being able to set the statedb early on. This pr also exposes the struct we used internally in the interpreter to encapsulate the contract, mem, stack, rstack, so we pass it as a single struct to the tracer, and removes the error returns on the capture methods.

* core: fix condition on header verification

* cmd/devp2p: fix comparison of TXT record value (ethereum#22572)

* cmd/devp2p: fix comparison of TXT record value

The AWS API returns quoted DNS strings, so we must encode the new value
before comparing it against the existing record content.

* cmd/devp2p: add test

* cmd/devp2p: fix typo and rename val -> newValue

* eth: dump rpc gas cap and tx fee cap (ethereum#22574)

* eth/protocols, metrics, p2p: add handler performance metrics

* eth/protocols, metrics: use resetting histograms for rare packets

* eth: fix corner case in sync head determination (ethereum#21695)

This avoids synchronisation failures when the local header is ahead of
the local full block.

* cmd/geth, consensus/ethash: add support for --miner.notify.full flag (ethereum#22558)

The PR implements the --miner.notify.full flag that enables full pending block
notifications. When this flag is used, the block notifications sent to mining
endpoints contain the complete block header JSON instead of a work package
array.

Co-authored-by: AlexSSD7 <alexandersadovskyi7@protonmail.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>

* metrics/influxdb: don't push empty histograms, no measurement != 0

* eth/protocols/snap: add peer id and req id to the timeout logs

* cmd/devp2p: update to newer cloudflare API client (ethereum#22588)

This upgrades the cloudflare client dependency to v0.14.0. The new
version changes the API because all methods now require a context
parameter. This change also reduces the log level of the 'Skipping...'
message to debug, following a similar change in the AWS deployer.

* core/state/pruner: move the compaction out of the pruning procedure (ethereum#22579)

The main idea behind it is: the range compaction is very expensive
which can take a few hours to finish. During this long procedure,
a lot of exceptions can occur, e.g.
- Geth is killed manually
- Geth is killed because of machine crash
- etc

In order to minimize the effect of the exceptions, the compaction
is moved out of the pruning. So that even the compaction is not
finished, the pruning is regarded as done.

* eth/protocols/snap: try to prevent requests timing out

* core: add BlockGen.GetBalance method  (ethereum#22589)

* cmd/puppeth: specify working directory for nodejs 15 (ethereum#22549)

* cmd/geth: add db dumptrie command (ethereum#22563)

Adds the command "geth db dumptrie <root> <seek> <max>", to better help investigate the trie data

* core/vm: fix Byzantium address list (ethereum#22603)

* ethstats: avoid creating subscriptions on background goroutine (ethereum#22587)

This fixes an issue where the ethstats service could crash if geth was
started and then immediately stopped due to an internal error. The
cause of the crash was a nil subscription being returned by the backend,
because the background goroutine creating them was scheduled after
the backend had already shut down.

Moving the creation of subscriptions into the Start method, which runs
synchronously during startup of the node, means the returned subscriptions
can never be 'nil'.

Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>

* core/state/snapshot, ethdb: track deletions more accurately (ethereum#22582)

* core/state/snapshot, ethdb: track deletions more accurately

* core/state/snapshot: don't reset the iterator, leveldb's screwy

* ethdb: don't mess with the insert batches for now

* rpc: tighter shutdown synchronization in client subscription (ethereum#22597)

This fixes a rare issue where the client subscription forwarding loop
would attempt send on the subscription's channel after Unsubscribe has
returned, leading to a panic if the subscription channel was already
closed by the user. Example:

    sub, _ := client.Subscribe(..., channel, ...)
    sub.Unsubscribe()
    close(channel)

The race occurred because Unsubscribe called quitWithServer to tell the
forwarding loop to stop sending on sub.channel, but did not wait for the
loop to actually come down. This is fixed by adding an additional channel
to track the shutdown, on which Unsubscribe now waits.

Fixes ethereum#22322

* all: fix miner hashRate -> hashrate on API calls

* core/state/snapshot: fix data race in diff layer (ethereum#22540)

* internal/ethapi: fix eth_chainId method (ethereum#22243)

This removes the duplicated definition of eth_chainID
in package eth and updates the definition in internal/ethapi
to treat chain ID as a bigint.

Co-authored-by: Felix Lange <fjl@twurst.com>

* graphql: add support for tx types and tx access lists (ethereum#22491)

This adds support for EIP-2718 access list transactions in the GraphQL API.

Co-authored-by: Amit Shah <amitshah0t7@gmail.com>
Co-authored-by: Felix Lange <fjl@twurst.com>

* internal/debug: add JSON log format and rename logging flags (ethereum#22341)

This change adds support for logging JSON records when the --log.json flag is
given. The --debug and --backtrace flags are deprecated and replaced by
--log.debug and --log.backtrace.

While changing this, it was noticed that the --memprofilerate and
--blockprofilerate were ineffective (they were always overridden even if
--pprof.memprofilerate was not set). This is also fixed.

Co-authored-by: Felix Lange <fjl@twurst.com>

* cmd/utils: move cache sanity check to SetEthConfig (ethereum#22510)

Move the cache sanity check to the SetEthConfig function
to allow the config file to load.

* consensus/ethash: replace a magic number with it's constant (ethereum#22618)

* les: move client pool to les/vflux/server (ethereum#22495)

* les: move client pool to les/vflux/server

* les/vflux/server: un-expose NodeBalance, remove unused fn, fix bugs

* tests/fuzzers/vflux: add ClientPool fuzzer

* les/vflux/server: fixed balance tests

* les: rebase fix

* les/vflux/server: fixed more bugs

* les/vflux/server: unexported NodeStateMachine fields and flags

* les/vflux/server: unexport all internal components and functions

* les/vflux/server: fixed priorityPool test

* les/vflux/server: polish balance

* les/vflux/server: fixed mutex locking error

* les/vflux/server: priorityPool bug fixed

* common/prque: make Prque wrap-around priority handling optional

* les/vflux/server: rename funcs, small optimizations

* les/vflux/server: fixed timeUntil

* les/vflux/server: separated balance.posValue and negValue

* les/vflux/server: polish setup

* les/vflux/server: enforce capacity curve monotonicity

* les/vflux/server: simplified requestCapacity

* les/vflux/server: requestCapacity with target range, no iterations in SetCapacity

* les/vflux/server: minor changes

* les/vflux/server: moved default factors to balanceTracker

* les/vflux/server: set inactiveFlag in priorityPool

* les/vflux/server: moved related metrics to vfs package

* les/vflux/client: make priorityPool temp state logic cleaner

* les/vflux/server: changed log.Crit to log.Error

* add vflux fuzzer to oss-fuzz

Co-authored-by: rjl493456442 <garyrong0905@gmail.com>

* eth, les: fix tracers (ethereum#22473)

* eth, les: fix tracer

* eth: isolate live trie database in tracer

* eth: fix nil

* eth: fix

* eth, les: add checkLive param

* eth/tracer: fix

* core, eth, internal/ethapi: create access list RPC API (ethereum#22550)

* core/vm: implement AccessListTracer

* eth: implement debug.createAccessList

* core/vm: fixed nil panics in accessListTracer

* eth: better error messages for createAccessList

* eth: some fixes on CreateAccessList

* eth: allow for provided accesslists

* eth: pass accesslist by value

* eth: remove created acocunt from accesslist

* core/vm: simplify access list tracer

* core/vm: unexport accessListTracer

* eth: return best guess if al iteration times out

* eth: return best guess if al iteration times out

* core: docstring, unexport methods

* eth: typo

* internal/ethapi: move createAccessList to eth package

* internal/ethapi: remove reexec from createAccessList

* internal/ethapi: break if al is equal to last run, not if gas is equal

* internal/web3ext: fixed arguments

* core/types: fixed equality check for accesslist

* core/types: no hardcoded vals

* core, internal: simplify access list generation, make it precise

* core/vm: fix typo

Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Péter Szilágyi <peterke@gmail.com>

* eth: fix tracing state retrieval if requesting the non-dirty genesis

* params: update CHTs for v1.10.2

* params: release go-ethereum v1.10.2 stable

* params: begin v1.10.3 release cycle

* eth, les: drop support for eth/64, fix eth/66 tests

* accounts: documentation fixes (ethereum#22645)

* replaces `an chance` with `a chance`
* replaces `SignHashWithPassphrase` with `SignTextWithPassphrase` as there was no SignHashWithPasspharse function in the file

* cmd/geth: add db-command to inspect freezer index (ethereum#22633)

This PR makes it easier to inspect the freezer index, which could be useful to investigate things like ethereum#22111

* cmd/faucet: support testnet flags in the faucet (ethereum#22545)


Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>

* eth/fetcher: avoid spurious timer events at startup (ethereum#22652)


Co-authored-by: Felix Lange <fjl@twurst.com>

* core, eth: faster snapshot generation (ethereum#22504)

* eth/protocols: persist received state segments

* core: initial implementation

* core/state/snapshot: add tests

* core, eth: updates

* eth/protocols/snapshot: count flat state size

* core/state: add metrics

* core/state/snapshot: skip unnecessary deletion

* core/state/snapshot: rename

* core/state/snapshot: use the global batch

* core/state/snapshot: add logs and fix wiping

* core/state/snapshot: fix

* core/state/snapshot: save generation progress even if the batch is empty

* core/state/snapshot: fixes

* core/state/snapshot: fix initial account range length

* core/state/snapshot: fix initial account range

* eth/protocols/snap: store flat states during the healing

* eth/protocols/snap: print logs

* core/state/snapshot: refactor (#4)

* core/state/snapshot: refactor

* core/state/snapshot: tiny fix and polish

Co-authored-by: rjl493456442 <garyrong0905@gmail.com>

* core, eth: fixes

* core, eth: fix healing writer

* core, trie, eth: fix paths

* eth/protocols/snap: fix encoding

* eth, core: add debug log

* core/state/generate: release iterator asap (#5)

core/state/snapshot: less copy

core/state/snapshot: revert split loop

core/state/snapshot: handle storage becoming empty, improve test robustness

core/state: test modified codehash

core/state/snapshot: polish

* core/state/snapshot: optimize stats counter

* core, eth: add metric

* core/state/snapshot: update comments

* core/state/snapshot: improve tests

* core/state/snapshot: replace secure trie with standard trie

* core/state/snapshot: wrap return as the struct

* core/state/snapshot: skip wiping correct states

* core/state/snapshot: updates

* core/state/snapshot: fixes

* core/state/snapshot: fix panic due to reference flaw in closure

* core/state/snapshot: fix errors in state generation logic + fix log output

* core/state/snapshot: remove an error case

* core/state/snapshot: fix condition-check for exhausted snap state

* core/state/snapshot: use stackTrie for small tries

* core/state/snapshot: don't resolve small storage tries in vain

* core/state/snapshot: properly clean up storage of deleted accounts

* core/state/snapshot: avoid RLP-encoding in some cases + minor nitpicks

* core/state/snapshot: fix error (+testcase)

* core/state/snapshot: clean up tests a bit

* core/state/snapshot: work in progress on better tests

* core/state/snapshot: polish code

* core/state/snapshot: fix trie iteration abortion trigger

* core/state/snapshot: fixes flaws

* core/state/snapshot: remove panic

* core/state/snapshot: fix abort

* core/state/snapshot: more tests (plus failing testcase)

* core/state/snapshot: more testcases + fix for failing test

* core/state/snapshot: testcase for malformed data

* core/state/snapshot: some test nitpicks

* core/state/snapshot: improvements to logging

* core/state/snapshot: testcase to demo error in abortion

* core/state/snapshot: fix abortion

* cmd/geth: make verify-state report the root

* trie: fix failing test

* core/state/snapshot: add timer metrics

* core/state/snapshot: fix metrics

* core/state/snapshot: udpate tests

* eth/protocols/snap: write snapshot account even if code or state is needed

* core/state/snapshot: fix diskmore check

* core/state/snapshot: review fixes

* core/state/snapshot: improve error message

* cmd/geth: rename 'error' to 'err' in logs

* core/state/snapshot: fix some review concerns

* core/state/snapshot, eth/protocols/snap: clear snapshot marker when starting/resuming snap sync

* core: add error log

* core/state/snapshot: use proper timers for metrics collection

* core/state/snapshot: address some review concerns

* eth/protocols/snap: improved log message

* eth/protocols/snap: fix heal logs to condense infos

* core/state/snapshot: wait for generator termination before restarting

* core/state/snapshot: revert timers to counters to track total time

Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Péter Szilágyi <peterke@gmail.com>

* core/types: drop some relice data types

* all: make logs a bit easier on the eye to digest (ethereum#22665)

* all: add thousandths separators for big numbers on log messages

* p2p/sentry: drop accidental file

* common, log: add fast number formatter

* common, eth/protocols/snap: simplifty fancy num types

* log: handle nil big ints

* eth/protocols/snap: use ephemeral channels to avoid cross-sync delveries

* core: add TestGenesisHashes and fix YoloV3 (ethereum#22559)

This adds simple unit test checking if the hard-coded genesis
hash values in package params match the actual genesis block hashes.

* log: fix formatting of big.Int (ethereum#22679)

* log: fix formatting of big.Int

The implementation of formatLogfmtBigInt had two issues: it crashed when
the number was actually large enough to hit the big integer case, and
modified the big.Int while formatting it.

* log: don't call FormatLogfmtInt64 for int16

* log: separate from decimals back, not front

Co-authored-by: Péter Szilágyi <peterke@gmail.com>

* les/vflux/server: fix priority cornercase causing fuzzer timeout (ethereum#22650)

* les/vflux/server: fix estimatePriority corner case

* les/vflux/server: simplify inactiveAllowance == 0 case

* trie: make stacktrie not mutate input values (ethereum#22673)

The stacktrie is a bit un-untuitive, API-wise: since it mutates input values.
Such behaviour is dangerous, and easy to get wrong if the calling code 'forgets' this quirk. The behaviour is fixed by this PR, so that the input values are not modified by the stacktrie. 

Note: just as with the Trie, the stacktrie still references the live input objects, so it's still _not_ safe to mutate the values form the callsite.

* core/state/snapshot: avoid copybytes for stacktrie

* eth/catalyst: add catalyst API prototype (ethereum#22641)

This change adds the --catalyst flag, enabling an RPC API for eth2 integration.
In this initial version, catalyst mode also disables all peer-to-peer networking.

Co-authored-by: Mikhail Kalinin <noblesse.knight@gmail.com>
Co-authored-by: Felix Lange <fjl@twurst.com>

* cmd/devp2p: add support for -limit option in nodeset filter command (ethereum#22694)

The new -limit option makes the filter operate on top N nodes by score.
This also adds ENR attribute stats in the nodeset info command.
Node set commands are now documented in README.

* cmd/devp2p: add dns nuke-route53 command (ethereum#22695)

* core: nuke legacy snapshot supporting (ethereum#22663)

* ethash: no block reward in catalyst mode (ethereum#22697)

* trie: make stacktrie support binary marshal/unmarshal (ethereum#22685)

* go.mod: upgrade gopsutils to v3.21.4 (ethereum#22693)

This fixes the OpenBSD/arm64 build.

* tests: disable blockchain tests based on general state tests (ethereum#22704)

* eth, internal: extend the TraceCall API (ethereum#22245)

Adds an an optional parameter `overrides *map[common.Address]account` to the `eth_call` API in order for the caller to  can customize the state.

* eth/tracers, internal/ethapi: fix typos causing lint issue (ethereum#22711)

* les: fix goroutine leaks in tests (ethereum#22707)

* trie: improve the node iterator seek operation (ethereum#22470)

This change improves the efficiency of the nodeIterator seek
operation. Previously, seek essentially ran the iterator forward
until it found the matching node. With this change, it skips
over fullnode children and avoids resolving them from the database.

* accounts/external, signer/core: add support for EIP-2930 transactions (ethereum#22585)

This adds support for signing EIP-2930 with clef.

* rpc: add HTTPError type for HTTP error responses (ethereum#22677)

The new error type is returned by client operations contains details of
the response error code and response body.

Co-authored-by: Felix Lange <fjl@twurst.com>

* eth/protocols, prp/tracker: add support for req/rep rtt tracking (ethereum#22608)

* eth/protocols, prp/tracker: add support for req/rep rtt tracking

* p2p/tracker: sanity cap the number of pending requests

* pap/tracker: linter <3

* p2p/tracker: disable entire tracker if no metrics are enabled

* cmd/devp2p/internal/ethtest: run test suite as Go unit test (ethereum#22698)

This change adds a Go unit test that runs the protocol test suite
against the go-ethereum implementation of the eth protocol.

* core/state/snapshot, true: reuse dirty data instead of hitting disk when generating (ethereum#22667)

* core/state/snapshot: reuse memory data instead of hitting disk when generating

* trie: minor nitpicks wrt the resolver optimization

* core/state/snapshot, trie: use key/value store for resolver

* trie: fix linter

Co-authored-by: Péter Szilágyi <peterke@gmail.com>

* cmd/devp2p/internal/ethtest: add more tx propagation tests (ethereum#22630)

This adds a test for large tx announcement messages, as well as a test to
check that announced tx hashes are requested by the node.

* p2p/discover: improve discv5 handling of IPv4-in-IPv6 addresses (ethereum#22703)

When receiving PING from an IPv4 address over IPv6, the implementation sent
back a IPv4-in-IPv6 address. This change makes it reflect the IPv4 address.

* core: remove old conversion to shuffle leveldb blocks into ancients

* core/rawdb: fix datarace in freezer (ethereum#22728)

The Append / truncate operations were racy. When a datafile reaches 2Gb, a new file is needed. For this operation, we require a writelock, which is not needed in the 99.99% of all cases where the data does fit in the current head-file.

This transition from readlock to writelock was incorrect, and as the readlock was released, a truncate operation could slip in between, and truncate the data. This would have been fine, however, the Append operation continued writing as if no truncation had occurred, e.g writing item 5 where item 0 should reside.

This PR changes the behaviour, so that if when we run into the situation that a new file is needed, it aborts, and retries, this time with a writelock.

The outcome of the situation described above, running on this PR, would instead be that the Append operation exits with a failure.

* les: polish code (ethereum#22625)

* les: polish code

* les/vflus/server: fixes

* les: fix lint

* build: upgrade to golangci-lint v1.39.0 (ethereum#22696)

* build: upgrade to golangci-lint v1.39.0

* consensus/ethash: fix go vet warning regarding reflect.SliceHeader

* eth/catalyst: fix lint issue

* consensus/ethash: fix bug in memoryMapFile

* cmd/puppeth: add support for authentication via ssh agent (ethereum#22634)

* build: upgrade -dlgo version to Go 1.16.3 (ethereum#22746)

* core/vm: make gas cost reporting to tracers correct (ethereum#22702)

Previously, the makeCallVariantGasCallEIP2929 charged the cold account access cost directly, leading to an incorrect gas cost passed to the tracer from the main execution loop.
This change still temporarily charges the cost (to allow for an accurate calculation of the available gas for the call), but then afterwards refunds it and instead returns the correct total gas cost to be then properly charged in the main loop.

* eth/protocols/snap: generate storage trie from full dirty snap data (ethereum#22668)

* eth/protocols/snap: generate storage trie from full dirty snap data

* eth/protocols/snap: get rid of some more dead code

* eth/protocols/snap: less frequent logs, also log during trie generation

* eth/protocols/snap: implement dirty account range stack-hashing

* eth/protocols/snap: don't loop on account trie generation

* eth/protocols/snap: fix account format in trie

* core, eth, ethdb: glue snap packets together, but not chunks

* eth/protocols/snap: print completion log for snap phase

* eth/protocols/snap: extended tests

* eth/protocols/snap: make testcase pass

* eth/protocols/snap: fix account stacktrie commit without defer

* ethdb: fix key counts on reset

* eth/protocols: fix typos

* eth/protocols/snap: make better use of delivered data (ethereum#44)

* eth/protocols/snap: make better use of delivered data

* squashme

* eth/protocols/snap: reduce chunking

* squashme

* eth/protocols/snap: reduce chunking further

* eth/protocols/snap: break out hash range calculations

* eth/protocols/snap: use sort.Search instead of looping

* eth/protocols/snap: prevent crash on storage response with no keys

* eth/protocols/snap: nitpicks all around

* eth/protocols/snap: clear heal need on 1-chunk storage completion

* eth/protocols/snap: fix range chunker, add tests

Co-authored-by: Péter Szilágyi <peterke@gmail.com>

* trie: fix test API error

* eth/protocols/snap: fix some further liter issues

* eth/protocols/snap: fix accidental batch reuse

Co-authored-by: Martin Holst Swende <martin@swende.se>

* p2p/tracker: properly clean up fulfilled requests

* p2p/tracker: only reschedule wake if previous didn't run

* cmd/devp2p, eth/protocols/eth: fix tests + make sanity checks earlier (ethereum#22749)

* eth/gasprice: improve stability of estimated price (ethereum#22722)

This PR makes the gas price oracle ignore transactions priced at `<=1 wei`.

* tests/fuzzers: crypto/bn256 and crypto/bls12381 tests against gnark-crypto  (ethereum#22755)

Add more cross-fuzzers to fuzz bls with gnark versus geth's own bls12-381 library

* params: bump version (begin 5.1 development cycle)

* les, tests: fix les clientpool (ethereum#22756)

* les, tests: fix les clientpool

* tests: disable debug mode

* les: polish code

* update imports in new (non-conflicting) files

* eth/protocols/snap: lower the packet size to avoid overloading link

* cmd/devp2p: fix flaky SameRequestID test (ethereum#22754)

* trie: remove redundant returns + use stacktrie where applicable (ethereum#22760)

* trie: add benchmark for proofless range

* trie: remove unused returns + use stacktrie

* post merge cleanup

* devp2p, faucet: merge cleanup

* core, eth, ethdb, trie: simplify range proofs

* eth: restore eth_hashrate API endpoint

* catalyst: check if block exists in assemble-block call with unknown parent-hash (ethereum#22770)

* add myself as code owner for catalyst (ethereum#22778)

* docs: fix docstring on read head block (ethereum#22776)

* evm: remove unused errors left after EIP-2315 removal (ethereum#22767)

* github: add note about screenshots in issue template (ethereum#22764)

* core/types: add license header (ethereum#22781)

* core/vm: fix typo in comment (ethereum#22785)

* core: remove unused else branch in reorg (ethereum#22783)

* core/vm: replace repeated string with variable in tests (ethereum#22774)

* core: fix typo in comment (ethereum#22773)

* README.md: update commands table, add note about web3.js version (ethereum#22748)

* eth/filters: fix comment on PublicFilterAPI timeoutLoop (ethereum#22782)

* core/state: remove toAddr helper in tests (ethereum#22772)

* downloader: include snap in SyncMode.IsValid

* core, eth: abort snapshot generation on snap sync and resume later

* eth/protocols/snap: use storage batch, not account batch in st task

* cmd/devp2p: fix flakey tests in CI (ethereum#22757)

This PR fixes a couple of issues in the eth test suite that caused flakiness when run in the CI.

* core/vm: clean up contract creation error handling (ethereum#22766)

Do not keep separate flag for "max code size exceeded" case, but instead
assign appropriate error for it sooner.

* core/vm: fix interpreter comments (ethereum#22797)

* Fix interpreter comment

* Fix comment

* params: remove dependency on crypto (ethereum#22788)

* params: remove dependency on crypto

Package params should not depend on package crypto because building
crypto requires cgo.

Since build/ci.go needs package params to get the go-ethereum version
number, C code must be compiled in order to run the build tool, which is
annoying for certain cross-compilation setups.

* params: add SectionHead

* cmd/utils: don't crash on nonexistent datadir (ethereum#22738)

* eth: don't print db upgrade warning on db init

* cmd/utils: use eth DNS tree for snap discovery (ethereum#22808)

This removes auto-configuration of the snap.*.ethdisco.net DNS discovery tree.
Since measurements have shown that > 75% of nodes in all.*.ethdisco.net support
snap, we have decided to retire the dedicated index for snap and just use the eth
tree instead.

The dial iterators of eth and snap now use the same DNS tree in the default configuration,
so both iterators should use the same DNS discovery client instance. This ensures that
the record cache and rate limit are shared. Records will not be requested multiple times.

While testing the change, I noticed that duplicate DNS requests do happen even
when the client instance is shared. This is because the two iterators request the tree
root, link tree root, and first levels of the tree in lockstep. To avoid this problem, the
change also adds a singleflight.Group instance in the client. When one iterator
attempts to resolve an entry which is already being resolved, the singleflight object
waits for the existing resolve call to finish and returns the entry to both places.

* build: improve cross compilation setup (ethereum#22804)

This PR cleans up the CI build system and fixes a couple of issues.

- The go tool launcher code has been moved to internal/build. With the new
  toolchain functions, the environment of the host Go (i.e. the one that built
  ci.go) and the target Go (i.e. the toolchain downloaded by -dlgo) are isolated
  more strictly. This is important to make cross compilation and -dlgo work
  correctly in more cases.
- The -dlgo option now skips the download and uses the host Go if the running Go
  version matches dlgoVersion exactly.
- The 'test' command now supports -dlgo, -cc and -arch. Running unit tests with
  foreign GOARCH is occasionally useful. For example, it can be used to run
  32-bit tests on Windows. It can also be used to run darwin/amd64 tests on
  darwin/arm64 using Rosetta 2.
- The 'aar', 'xcode' and 'xgo' commands now use a slightly different method to
  install external tools. They previously used `go get`, but this comes with the
  annoying side effect of modifying go.mod. They now use `go install` instead,
  which is the recommended way of installing tools without modifying the local
  module.
- The old build warning about outdated Go version has been removed because we're
  much better at keeping backwards compatibility now.

* go.mod: go mod tidy (ethereum#22814)

This updates go.mod for the addition of golang.org/x/sync.

* build: fix iOS framework build (ethereum#22813)

This fixes a regression introduced in ethereum#22804.

* appveyor.yml: upgrade to VisualStudio 2019 image (ethereum#22811)

* build: fix windows installer build for NSIS v3.05 (ethereum#22821)

With the update to a newer AppVeyor build image, creating the Windows
installer no longer worked because of a string quoting error in EnvVarUpdate.nsh.

This applies the fix recommended in https://stackoverflow.com/questions/62081765.

* cmd/devp2p/internal/ethtest: send simultaneous requests on one connection (ethereum#22801)

This changes the SimultaneousRequests test to send the requests from the same
connection, as it doesn't really make sense to test whether a node can respond
to two requests with different request IDs from separate connections.

* params: go-ethereum v1.10.3 stable

* begin test cleanup

* internal: remove old unused openrpc code & tests

* fix broken tests

* update more tests

* Set NetworkId to 8 and handle legacy NetworkId 88

* Refactor legacyNetworkID

* update bootnodes

* bump version from 5.1.0-develop to 5.1.0-ramen

* bump version from 5.1.0-ramen to 5.1.1-develop

Co-authored-by: Felföldi Zsolt <zsfelfoldi@gmail.com>
Co-authored-by: rjl493456442 <garyrong0905@gmail.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Péter Szilágyi <peterke@gmail.com>
Co-authored-by: rene <41963722+renaynay@users.noreply.github.com>
Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>
Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>
Co-authored-by: michael1011 <me@michael1011.at>
Co-authored-by: ligi <ligi@ligi.de>
Co-authored-by: wuff1996 <33193253+wuff1996@users.noreply.github.com>
Co-authored-by: meowsbits <b5c6@protonmail.com>
Co-authored-by: Martin Redmond <21436+reds@users.noreply.github.com>
Co-authored-by: ucwong <ucwong@126.com>
Co-authored-by: jacksoom <lifengliu1994@gmail.com>
Co-authored-by: Quest Henkart <qhenkart@gmail.com>
Co-authored-by: Sina Mahmoodi <1591639+s1na@users.noreply.github.com>
Co-authored-by: Tobias Hildebrandt <79341166+tobias-hildebrandt@users.noreply.github.com>
Co-authored-by: Derek Chiang <me@derekchiang.com>
Co-authored-by: MrChico <martin.lundfall@protonmail.com>
Co-authored-by: Chen Quan <terasum@163.com>
Co-authored-by: Zou Guangxian <zouguangxian@gmail.com>
Co-authored-by: AlexSSD7 <alexandersadovskyi7@protonmail.com>
Co-authored-by: nebojsa94 <nebojsa94@users.noreply.github.com>
Co-authored-by: Edgar Aroutiounian <edgar.factorial@gmail.com>
Co-authored-by: piersy <pierspowlesland@gmail.com>
Co-authored-by: AmitBRD <60668103+AmitBRD@users.noreply.github.com>
Co-authored-by: Amit Shah <amitshah0t7@gmail.com>
Co-authored-by: Peter Simard <petesimard56@gmail.com>
Co-authored-by: Evolution404 <35091674+Evolution404@users.noreply.github.com>
Co-authored-by: Balaji Shetty Pachai <32358081+balajipachai@users.noreply.github.com>
Co-authored-by: Mudit Gupta <guptamudit@ymail.com>
Co-authored-by: xD AKA Rapper King Of cn background diablo & revelations <33193253+r1cs@users.noreply.github.com>
Co-authored-by: Guillaume Ballet <3272758+gballet@users.noreply.github.com>
Co-authored-by: Mikhail Kalinin <noblesse.knight@gmail.com>
Co-authored-by: ryanc414 <ryan@tokencard.io>
Co-authored-by: Nishant Das <nishdas93@gmail.com>
Co-authored-by: Gregory Markou <16929357+GregTheGreek@users.noreply.github.com>
Co-authored-by: Gautam Botrel <gautam.botrel@gmail.com>
Co-authored-by: Diederik Loerakker <proto@protolambda.com>
Co-authored-by: aaronbuchwald <aaron.buchwald56@gmail.com>
Co-authored-by: Paweł Bylica <chfast@gmail.com>
Co-authored-by: Julian Yap <julianokyap@gmail.com>
jwasinger pushed a commit to jwasinger/go-ethereum that referenced this pull request Jul 25, 2021
…thereum#22668)

* eth/protocols/snap: generate storage trie from full dirty snap data

* eth/protocols/snap: get rid of some more dead code

* eth/protocols/snap: less frequent logs, also log during trie generation

* eth/protocols/snap: implement dirty account range stack-hashing

* eth/protocols/snap: don't loop on account trie generation

* eth/protocols/snap: fix account format in trie

* core, eth, ethdb: glue snap packets together, but not chunks

* eth/protocols/snap: print completion log for snap phase

* eth/protocols/snap: extended tests

* eth/protocols/snap: make testcase pass

* eth/protocols/snap: fix account stacktrie commit without defer

* ethdb: fix key counts on reset

* eth/protocols: fix typos

* eth/protocols/snap: make better use of delivered data (ethereum#44)

* eth/protocols/snap: make better use of delivered data

* squashme

* eth/protocols/snap: reduce chunking

* squashme

* eth/protocols/snap: reduce chunking further

* eth/protocols/snap: break out hash range calculations

* eth/protocols/snap: use sort.Search instead of looping

* eth/protocols/snap: prevent crash on storage response with no keys

* eth/protocols/snap: nitpicks all around

* eth/protocols/snap: clear heal need on 1-chunk storage completion

* eth/protocols/snap: fix range chunker, add tests

Co-authored-by: Péter Szilágyi <peterke@gmail.com>

* trie: fix test API error

* eth/protocols/snap: fix some further liter issues

* eth/protocols/snap: fix accidental batch reuse

Co-authored-by: Martin Holst Swende <martin@swende.se>
reds pushed a commit to reds/go-ethereum that referenced this pull request Aug 28, 2021
…thereum#22668)

* eth/protocols/snap: generate storage trie from full dirty snap data

* eth/protocols/snap: get rid of some more dead code

* eth/protocols/snap: less frequent logs, also log during trie generation

* eth/protocols/snap: implement dirty account range stack-hashing

* eth/protocols/snap: don't loop on account trie generation

* eth/protocols/snap: fix account format in trie

* core, eth, ethdb: glue snap packets together, but not chunks

* eth/protocols/snap: print completion log for snap phase

* eth/protocols/snap: extended tests

* eth/protocols/snap: make testcase pass

* eth/protocols/snap: fix account stacktrie commit without defer

* ethdb: fix key counts on reset

* eth/protocols: fix typos

* eth/protocols/snap: make better use of delivered data (ethereum#44)

* eth/protocols/snap: make better use of delivered data

* squashme

* eth/protocols/snap: reduce chunking

* squashme

* eth/protocols/snap: reduce chunking further

* eth/protocols/snap: break out hash range calculations

* eth/protocols/snap: use sort.Search instead of looping

* eth/protocols/snap: prevent crash on storage response with no keys

* eth/protocols/snap: nitpicks all around

* eth/protocols/snap: clear heal need on 1-chunk storage completion

* eth/protocols/snap: fix range chunker, add tests

Co-authored-by: Péter Szilágyi <peterke@gmail.com>

* trie: fix test API error

* eth/protocols/snap: fix some further liter issues

* eth/protocols/snap: fix accidental batch reuse

Co-authored-by: Martin Holst Swende <martin@swende.se>
atif-konasl pushed a commit to frozeman/pandora-execution-engine that referenced this pull request Oct 15, 2021
…thereum#22668)

* eth/protocols/snap: generate storage trie from full dirty snap data

* eth/protocols/snap: get rid of some more dead code

* eth/protocols/snap: less frequent logs, also log during trie generation

* eth/protocols/snap: implement dirty account range stack-hashing

* eth/protocols/snap: don't loop on account trie generation

* eth/protocols/snap: fix account format in trie

* core, eth, ethdb: glue snap packets together, but not chunks

* eth/protocols/snap: print completion log for snap phase

* eth/protocols/snap: extended tests

* eth/protocols/snap: make testcase pass

* eth/protocols/snap: fix account stacktrie commit without defer

* ethdb: fix key counts on reset

* eth/protocols: fix typos

* eth/protocols/snap: make better use of delivered data (#44)

* eth/protocols/snap: make better use of delivered data

* squashme

* eth/protocols/snap: reduce chunking

* squashme

* eth/protocols/snap: reduce chunking further

* eth/protocols/snap: break out hash range calculations

* eth/protocols/snap: use sort.Search instead of looping

* eth/protocols/snap: prevent crash on storage response with no keys

* eth/protocols/snap: nitpicks all around

* eth/protocols/snap: clear heal need on 1-chunk storage completion

* eth/protocols/snap: fix range chunker, add tests

Co-authored-by: Péter Szilágyi <peterke@gmail.com>

* trie: fix test API error

* eth/protocols/snap: fix some further liter issues

* eth/protocols/snap: fix accidental batch reuse

Co-authored-by: Martin Holst Swende <martin@swende.se>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants