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

httpu multicast fails on multiple interfaces #33

Closed
viric opened this issue Apr 2, 2020 · 7 comments
Closed

httpu multicast fails on multiple interfaces #33

viric opened this issue Apr 2, 2020 · 7 comments

Comments

@viric
Copy link

viric commented Apr 2, 2020

Using a single PacketConn to send multicast UDP requests for SSDP search fails, if there are multiple interfaces in the system.
The WriteTo() will pick any interface and use that alone, not sending the SSDP search to any other network interface.

I think that for SSDP search to work we need a PacketConn per network interface.

@viric
Copy link
Author

viric commented Apr 2, 2020

Using the interface of the default 0.0.0.0 route would be good too. In my case (Windows) it is not using the interface of the default route, but another.

@huin
Copy link
Owner

huin commented May 10, 2020

Sorry for the (very) delayed reply, and thanks for diagnosing this.
I've created the multi-interface branch to provide a possible solution along the lines of your first suggestion. Could you try that out and see if that resolves your issue?

@JochenHiller
Copy link
Contributor

I faced same issue, that with 1 interface all is fine.
Having 2 interfaces to different networks does not work, goupnp.DiscoverDevices("ssdp:all") does not return any results.

I've tested the multi-interface branch. When using it even with only 1 interface I do not get any results. Same for multiple interfaces.

@huin
Copy link
Owner

huin commented May 16, 2020

I faced same issue, that with 1 interface all is fine.
Having 2 interfaces to different networks does not work, goupnp.DiscoverDevices("ssdp:all") does not return any results.

I've tested the multi-interface branch. When using it even with only 1 interface I do not get any results. Same for multiple interfaces.

Did the library work for you on the master or devel branch? It's not clear to me if you're describing a regression on the multi-interface branch or if it's a potential problem with the library as a whole.

Also, do you expect network devices to respond on your network? Note that this library only supports IPv4. You might want to try performing packet captures or other UPnP clients to see if they work. A big problem with this library is that I only have my own home network to test on, and everyone's network and computer configurations are different. Reproducing problems is key to fixing any bugs.

I've also written a command on the devel branch called discoverall which should print out anything that it finds. I've merged that into the multi-interface branch as well, which should be useful for comparison.

Obviously don't share any private information on this bug.

@JochenHiller
Copy link
Contributor

Did the library work for you on the master or devel branch? It's not clear to me if you're describing a regression on the multi-interface branch or if it's a potential problem with the library as a whole.

Sorry for not being precise enough.

The working application used require github.com/huin/goupnp v1.0.0 which AFAI see is the master. The library in whole did work very well, as long as only connected via 1 interface. Thanks for sharing your code BTW !!!

When testing the multi-interface branch, go mod tidy resolved on 2020-05-14

require github.com/huin/goupnp multi-interface

to

require github.com/huin/goupnp v1.0.1-0.20200510113636-70bc05ba64ba

Also, do you expect network devices to respond on your network? Note that this library only supports IPv4. You might want to try performing packet captures or other UPnP clients to see if they work.

Yes: I have IPv4 and IPv6 running in network, but I am aware that only IPv4 is supported. I am using >10 UPnP devices inside network (for business needs), different types of routers, TVs, NASs, and many more.
I am using other UPnP clients as well (all on macOS, gupnp, UPnPAnalyzer, Java UPnP tools), so I can compare behavior, and can obseve network traffic as well (UPnPAnalyzer, wireshark).

A big problem with this library is that I only have my own home network to test on, and everyone's network and computer configurations are different. Reproducing problems is key to fixing any bugs.

I understand this problem very good, as I maintain a Java UPnP tool from time to time (https://github.com/jupnp/jupnp/tree/master/tools/org.jupnp.tool) and you have to fiddle around with a lot of non-compliant behavior due to "broken" UPnP devices. So you need other peoples help to check problems with THEIR devices in case of troubleshooting.

I've also written a command on the devel branch called discoverall which should print out anything that it finds. I've merged that into the multi-interface branch as well, which should be useful for comparison.

Thanks a lot, I will give it a testing next days. I'll keep you updated here.

@JochenHiller
Copy link
Contributor

I gave the branch multi-interface a test in my network environment.

On first test discoverall reported

2020/05/25 14:10:27 write udp 127.0.0.1:58394->239.255.255.250:1900: sendto: can't assign requested address

Why will be the loopback IP be used? I assumed thats wrong.
After applying a small fix discoverall did work well from a first testing, finding UPnP devices on all connected networks:

File network.go, func localIPv4MCastAddrs

if addr.IP.To4() == nil {
	// Not IPv4.
	continue
}
// Fix: do NOT consider loopback IPs
if addr.IP.IsLoopback() {
	// do not use local addrs
	continue
}
addrs = append(addrs, addr.IP.String())

I will provide a PR for that.

@huin
Copy link
Owner

huin commented Jun 20, 2020

I've merged these commits into master. Hopefully that resolves the issue. I'll close this issue, but please reopen it if the problem remains.

@huin huin closed this as completed Jun 20, 2020
fjl pushed a commit to ethereum/go-ethereum that referenced this issue Jan 25, 2021
This updates the goupnp dependency, fixing huin/goupnp#33
bulgakovk pushed a commit to bulgakovk/go-ethereum that referenced this issue Jan 26, 2021
rauljordan added a commit to prysmaticlabs/bazel-go-ethereum that referenced this issue Apr 19, 2021
* les: don't drop sentTo for normal cases (#22048)

* eth/protocols/eth: fix slice resize flaw (#22181)

* les: remove useless protocol defines (#22115)

This PR has two changes in the les protocol:

- the auxRoot is not supported. See ethereum/devp2p#171 for more information
- the empty response will be returned in GetHelperTrieProofsMsg request if the merkle
   proving is failed. note, for backward compatibility, the empty merkle proof as well as
   the request auxiliary data will still be returned in  les2/3 protocol no matter the proving
   is successful or not. the proving failure can happen e.g. request the proving for a
   non-included entry in helper trie (unstable header).

* tests/fuzzers/abi: better test generation (#22158)

* tests/fuzzers/abi: better test generation

* tests/fuzzers/abi: fixed packing issue

* oss-fuzz: enable abi fuzzer

* cmd/geth: dump config for metrics (#22083)

* cmd/geth: dump config

* cmd/geth: dump config

* cmd/geth: properly read config again

* cmd/geth: override metrics if flags are set

* cmd/geth: write metrics regardless if enabled

* cmd/geth: renamed to metricsfromcliargs

* metrics: add default configuration

* core/state/snapshot: write snapshot generator in batch (#22163)

* core/state/snapshot: write snapshot generator in batch

* core: refactor the tests

* core: update tests

* core: update tests

* cmd/geth: graceful shutdown if disk is full (#22103)

Adding warnings of free disk space left and graceful shutdown when there is not enough space left.
This also adds a flag datadir.minfreedisk which can be used to set the trigger for low disk space, and setting it to zero disables the check. 

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

* eth, les: add new config field SyncFromCheckpoint (#22123)

This PR introduces a new config field SyncFromCheckpoint for light client.

In some special scenarios, it's required to start synchronization from some
arbitrary checkpoint or even from the scratch. So this PR offers this
flexibility to users so that the synchronization start point can be configured.

There are two relevant configs: SyncFromCheckpoint and Checkpoint.

- If the SyncFromCheckpoint is true, the light client will try to sync from the
  specified checkpoint.

- If the Checkpoint is not configured, then the light client will sync from the
  scratch(from the latest header if the database is not empty)

Additional notes: these two configs are not visible in the CLI flags but only
accessable in the config file.

Example Usage:

[Eth]
SyncFromCheckpoint = true

[Eth.Checkpoint]
SectionIndex = 100
SectionHead = "0xabc"
CHTRoot = "0xabc"
BloomRoot = "0xabc"

PS. Historical checkpoint can be retrieved from the synced full node or light
client via les_getCheckpoint API.

* oss-fuzz: fix abi fuzzer (#22199)

* go.mod: upgrade golang-lru (#22134)

* downloader: extract findAncestor search functions (#21744)

This is a simple refactoring, extracting common ancestor
negotiation logic to named function

* core: implement background trie prefetcher

Squashed from the following commits:

core/state: lazily init snapshot storage map
core/state: fix flawed meter on storage reads
core/state: make statedb/stateobjects reuse a hasher
core/blockchain, core/state: implement new trie prefetcher
core: make trie prefetcher deliver tries to statedb
core/state: refactor trie_prefetcher, export storage tries
blockchain: re-enable the next-block-prefetcher
state: remove panics in trie prefetcher
core/state/trie_prefetcher: address some review concerns

sq

* core/state: convert prefetcher to concurrent per-trie loader

* eth/filters: fix potential deadlock in filter timeout loop (#22178)

This fixes #22131 and adds a test reproducing the issue.

* event: add ResubscribeErr (#22191)

This adds a way to get the error of the failing subscription
for logging/debugging purposes.

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

* trie: fix range prover (#22210)

Fixes a special case when the trie only has a single trie node and the range proof only contains a single element.

* common/mclock: remove dependency on github.com/aristanetworks/goarista (#22211)

It takes three lines of code to get to runtime.nanotime, no need to
pull a dependency for that.

* cmd, geth: CLI help fixes (#22220)

* cmd, geth: Reflect command being optional - closes 22218

* cmd, geth: Set current year to 2021

* cmd, geth: CLI help fixes (#22220)

* cmd, geth: Reflect command being optional - closes 22218

* cmd, geth: Set current year to 2021

* eth/protocols/snap: snap sync testing (#22179)

* eth/protocols/snap: make timeout configurable

* eth/protocols/snap: snap sync testing

* eth/protocols/snap: test to trigger panic

* eth/protocols/snap: fix race condition on timeouts

* eth/protocols/snap: return error on cancelled sync

* squashme: updates + test causing panic + properly serve accounts in order

* eth/protocols/snap: revert failing storage response

* eth/protocols/snap: revert on bad responses (storage, code)

* eth/protocols/snap: fix account handling stall

* eth/protocols/snap: fix remaining revertal-issues

* eth/protocols/snap: timeouthandler for bytecode requests

* eth/protocols/snap: debugging + fix log message

* eth/protocols/snap: fix misspelliings in docs

* eth/protocols/snap: fix race in bytecode handling

* eth/protocols/snap: undo deduplication of storage roots

* synctests: refactor + minify panic testcase

* eth/protocols/snap: minor polishes

* eth: minor polishes to make logs more useful

* eth/protocols/snap: remove excessive logs from the test runs

* eth/protocols/snap: stress tests with concurrency

* eth/protocols/snap: further fixes to test cancel channel handling

* eth/protocols/snap: extend test timeouts on CI

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

* go.mod: update dependencies (#22216)

This updates go module dependencies as discussed in #22050.

* graphql: change receipt status to decimal instead of hex (#22187)

This PR fixes the receipt status field to be decimal instead of a hex string,
as called for by the spec.

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

* go.mod: upgrade github.com/huin/goupnp (#22227)

This updates the goupnp dependency, fixing huin/goupnp#33

* snapshot: merge loops for better performance (#22160)

* core: reset to genesis when middle block is missing (#22135)

When a sethead/rewind finds that the targeted block is missing, it resets to genesis instead of crashing. Closes #22129

* eth/tracers: move tracing APIs into eth/tracers (#22161)

This moves the tracing RPC API implementation to package eth/tracers.
By doing so, package eth no longer depends on tracing and the duktape JS engine.

The change also enables tracing using the light client. All tracing methods work with the
light client, but it's a lot slower compared to using a full node.

* eth, p2p: reserve half peer slots for snap peers during snap sync (#22171)

* eth, p2p: reserve half peer slots for snap peers during snap sync

* eth: less logging

* eth: rework the eth/snap peer reservation logic

* eth: rework the eth/snap peer reservation logic (again)

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value (#22233)

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value

* internal/ethapi: print tx details when submitting (#22170)

This adds more info about submitted transactions in log messages.

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

* core/state: fix panic in state dumping (#22225)

* core: speed up header import (#21967)

This PR implements the following modifications

- Don't shortcut check if block is present, thus avoid disk lookup
- Don't check hash ancestry in early-check (it's still done in parallel checker)
- Don't check time.Now for every single header

Charts and background info can be found here: https://github.com/holiman/headerimport/blob/main/README.md
With these changes, writing 1M headers goes down to from 80s to 62s.

* accounts/scwallet: use go-ethereum crypto instead of go-ecdh (#22212)

* accounts/scwallet: use go-ethereum crypto instead of go-ecdh

github.com/wsddn/go-ecdh is a wrapper package for ECDH functionality
with any elliptic curve.

Since 'generic' ECDH is not required in accounts/scwallet (the curve is
always secp256k1), we can just use the standard library functionality
and our own crypto libraries to perform ECDH and save a dependency.

* Update accounts/scwallet/securechannel.go

Co-authored-by: Guillaume Ballet <gballet@gmail.com>

* Use the correct key

Co-authored-by: Guillaume Ballet <gballet@gmail.com>

* accounts/scwallet: update documentation (#22242)

* les: switch to new discv5 (#21940)

This PR enables running the new discv5 protocol in both LES client
and server mode. In client mode it mixes discv5 and dnsdisc iterators
(if both are enabled) and filters incoming ENRs for "les" tag and fork ID.
The old p2p/discv5 package and all references to it are removed.

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

* rpc: deprecate Client.ShhSubscribe (#22239)

It never worked, whisper uses polling.

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

* cmd,core,eth,params,tests: define yolov3 + enable EIP-2565 (#22213)

Removes the yolov2 definition, adds yolov3, including EIP-2565. This PR also disables some of the erroneously generated blockchain and statetests, and adds the new genesis hash + alloc for yolov3. 
This PR disables the CLI switches for yolo, since it's not complete until we merge support for 2930.

* les/utils: UDP rate limiter (#21930)

* les/utils: Limiter

* les/utils: dropped prior weight vs variable cost logic, using fixed weights

* les/utils: always create node selector in addressGroup

* les/utils: renamed request weight to request cost

* les/utils: simplified and improved the DoS penalty mechanism

* les/utils: minor fixes

* les/utils: made selection weight calculation nicer

* les/utils: fixed linter warning

* les/utils: more precise and reliable probabilistic test

* les/utils: fixed linter warning

* cmd/clef: don't check file permissions on windows (#22251)

Fixes #20123

* eth/tracers: fix unigram tracer (#22248)

* eth: check snap satelliteness, delegate drop to eth (#22235)

* eth: check snap satelliteness, delegate drop to eth

* eth: better handle eth/snap satellite relation, merge reg/unreg paths

* cmd/geth, node: allow configuring JSON-RPC on custom path prefix (#22184)

This change allows users to set a custom path prefix on which to mount the http-rpc
or ws-rpc handlers via the new flags --http.rpcprefix and --ws.rpcprefix.

Fixes #21826

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

* all: remove unneeded parentheses (#21921)

* remove uneeded convertion type

* remove redundant type in composite literal

* omit explicit type where implicit

* remove unused redundant parenthesis

* remove redundant import alias duktape

* trie : use trie.NewStackTrie instead of new(trie.Trie) (#22246)

The PR makes use of the stacktrie, which is is more lenient on resource consumption, than the regular trie, in cases where we only need it for DeriveSha

* core: reset txpool state on sethead (#22247)

fixes an issue where local transactions that were included in the chain before a SetHead were rejected if resubmitted, since the txpool had not reset the state to the current (older) state.

* fuzzers: added consensys/gurvy library to bn256 differential fuzzer (#21812)

This pr adds consensys' gurvy bn256 variant into the code for differential fuzzing.

* internal/ethapi: comment nitpick (#22270)

* eth: move eth.Config to a common package (#22205)

This moves the eth config definition into a separate package, eth/ethconfig. 
Packages eth and les can now import this common package instead of
importing eth from les, reducing dependencies.

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

* internal/ethapi: fix typo in comment (#22271)

* eth: don't wait for snap registration if we're not running snap (#22272)

Prevents a situation where we (not running snap) connects with a peer running snap, and get stalled waiting for snap registration to succeed (which will never happen), which cause a waitgroup wait to halt shutdown

* consensus: remove seal verification from the consensus engine interface (#22274)

* cmd/utils: enable snapshots by default

* metrics: fix cast omission in cpu_syscall.go (#22262)

fixes an regression which caused build failure on certain platforms

* params: just to make snapshots a bit more official

* all: bloom-filter based pruning mechanism (#21724)

* cmd, core, tests: initial state pruner

core: fix db inspector

cmd/geth: add verify-state

cmd/geth: add verification tool

core/rawdb: implement flatdb

cmd, core: fix rebase

core/state: use new contract code layout

core/state/pruner: avoid deleting genesis state

cmd/geth: add helper function

core, cmd: fix extract genesis

core: minor fixes

contracts: remove useless

core/state/snapshot: plugin stacktrie

core: polish

core/state/snapshot: iterate storage concurrently

core/state/snapshot: fix iteration

core: add comments

core/state/snapshot: polish code

core/state: polish

core/state/snapshot: rebase

core/rawdb: add comments

core/rawdb: fix tests

core/rawdb: improve tests

core/state/snapshot: fix concurrent iteration

core/state: run pruning during the recovery

core, trie: implement martin's idea

core, eth: delete flatdb and polish pruner

trie: fix import

core/state/pruner: add log

core/state/pruner: fix issues

core/state/pruner: don't read back

core/state/pruner: fix contract code write

core/state/pruner: check root node presence

cmd, core: polish log

core/state: use HEAD-127 as the target

core/state/snapshot: improve tests

cmd/geth: fix verification tool

cmd/geth: use HEAD as the verification default target

all: replace the bloomfilter with martin's fork

cmd, core: polish code

core, cmd: forcibly delete state root

core/state/pruner: add hash64

core/state/pruner: fix blacklist

core/state: remove blacklist

cmd, core: delete trie clean cache before pruning

cmd, core: fix lint

cmd, core: fix rebase

core/state: fix the special case for clique networks

core/state/snapshot: remove useless code

core/state/pruner: capping the snapshot after pruning

cmd, core, eth: fixes

core/rawdb: update db inspector

cmd/geth: polish code

core/state/pruner: fsync bloom filter

cmd, core: print warning log

core/state/pruner: adjust the parameters for bloom filter

cmd, core: create the bloom filter by size

core: polish

core/state/pruner: sanitize invalid bloomfilter size

cmd: address comments

cmd/geth: address comments

cmd/geth: address comment

core/state/pruner: address comments

core/state/pruner: rename homedir to datadir

cmd, core: address comments

core/state/pruner: address comment

core/state: address comments

core, cmd, tests: address comments

core: address comments

core/state/pruner: release the iterator after each commit

core/state/pruner: improve pruner

cmd, core: adjust bloom paramters

core/state/pruner: fix lint

core/state/pruner: fix tests

core: fix rebase

core/state/pruner: remove atomic rename

core/state/pruner: address comments

all: run go mod tidy

core/state/pruner: avoid false-positive for the middle state roots

core/state/pruner: add checks for middle roots

cmd/geth: replace crit with error

* core/state/pruner: fix lint

* core: drop legacy bloom filter

* core/state/snapshot: improve pruner

* core/state/snapshot: polish concurrent logs to report ETA vs. hashes

* core/state/pruner: add progress report for pruning and compaction too

* core: fix snapshot test API

* core/state: fix some pruning logs

* core/state/pruner: support recovering from bloom flush fail

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

* core/state/pruner: fix compaction after pruning

* core/state/pruner: fix compaction range error

* internal/debug: add switch to format logs with json (#22207)

adds a flag --log.json which if enabled makes the client format logs with JSON.

* accounts/abi/bind: fixed unpacking error (#22230)

There was a dormant error with structured inputs that failed unpacking.
This commit fixes the error by switching casting to the better abi.ConvertType function.
It also adds a test for calling a view function that returns a struct

* cmd/utils, eth/ethconfig: unindex txs older than ~1 year

* cmd/devp2p: fix documentation for eth-test (#22298)

* core: fix temp memory blowup caused by defers holding on to state

* les: enable les/4 and add tests (#22321)

* cmd/utils: add workaround for FreeBSD statfs quirk (#22310)

Make geth build on FreeBSD, fixes #22309.

* cmd/geth: fix js unclean shutdown (#22302)

* trie: fix bloom crash on fast sync restart

* rpc: increase the number of subscriptions in storm test (#22316)

* core/state/snapshot: ensure Cap retains a min number of layers

* eth: fix snap sync cancellation

* cmd/devp2p/internal/ethtest: use shared message types (#22315)

This updates the eth protocol test suite to use the message type
definitions of the 'production' protocol implementation in eth/protocols/eth.

* eth/handler, broadcast: optimize tx broadcast mechanism (#22176)

This PR optimizes the broadcast loop. Instead of iterating twice through a given set of transactions to weed out which peers have and which do not have a tx, to send/announce transactions, we do it only once.

* core/state: copy the snap when copying the state (#22340)

* core/state: copy the snap when copying the state

* core/state: deep-copy snap stuff during state Copy

* rlp: handle case of normal EOF in Stream.readFull (#22336)

io.Reader may return n > 0 and io.EOF at the end of the input stream.
readFull did not handle this correctly, looking only at the error. This fixes
it to check for n == len(buf) as well.

* node: always show websocket url in logs (#22307)

* eth: implement eth66 (#22241)

* eth/protocols/eth: split up the eth protocol handlers

* eth/protocols/eth: define eth-66 protocol messages

* eth/protocols/eth: poc implement getblockheaders on eth/66

* eth/protocols/eth: implement remaining eth-66 handlers

* eth/protocols: define handler map for eth 66

* eth/downloader: use protocol constants from eth package

* eth/protocols/eth: add ETH66 capability

* eth/downloader: tests for eth66

* eth/downloader: fix error in tests

* eth/protocols/eth: use eth66 for outgoing requests

* eth/protocols/eth: remove unused error type

* eth/protocols/eth: define protocol length

* eth/protocols/eth: fix pooled tx over eth66

* protocols/eth/handlers: revert behavioural change which caused tests to fail

* eth/downloader: fix failing test

* eth/protocols/eth: add testcases + fix flaw with header requests

* eth/protocols: change comments

* eth/protocols/eth: review fixes + fixed flaw in RequestOneHeader

* eth/protocols: documentation

* eth/protocols/eth: review concerns about types

* p2p/dnsdisc: fix hot-spin when all trees are empty (#22313)

In the random sync algorithm used by the DNS node iterator, we first pick a random
tree and then perform one sync action on that tree. This happens in a loop until any
node is found. If no trees contain any nodes, the iterator will enter a hot loop spinning
at 100% CPU.

The fix is complicated. The iterator now checks if a meaningful sync action can
be performed on any tree. If there is nothing to do, it waits for the next root record
recheck time to arrive and then tries again.

Fixes #22306

* les: renamed lespay to vflux (#22347)

* cmd/utils: disable caching preimages by default

* travis, appveyor, build: bump Go to 1.16

* les: fix balance expiration (#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 (#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 (#22357)

* cmd/geth: add db commands stats, compact, put, get, delete (#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 (#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 (#22373)

* cmd/utils: remove deprecated command line flags (#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 (#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 (#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 (#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 (#22363)

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

* les: move server pool to les/vflux/client (#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 (#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 (#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 (#22386)

* les: UDP pre-negotiation of available server capacity (#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 (#22395)

* core, eth: unship EIP 2315

* core/vm/runtime: more unshipping

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

* params: update chts (#22418)

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

* cmd/utils: fix exclusive check for archive node

* cmd/utils: set the txlookuplimit to 0

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

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

* cmd: retire whisper flags (#22421)

* cmd: retire whisper flags

* cmd/geth: remove whisper configs

* tests: update to latest tests (#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 (#22413)"

This reverts commit ba999105ef89473cfe39e5e53354f7099e67a290.

* 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 (#22456)

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

* les: add trailing slash to metric namespace

* les: omit '.' in metric namespace

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

* p2p/enr: fix decoding of incomplete lists (#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 (#22486)

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

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

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

* eth: review comments

* eth/tracers: fix compilation err

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

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

* cmd/geth: remove copydb command

* eth/downloader: remove fakepeer

* tests/fuzzers: fix goroutine leak in les fuzzer (#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 (#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 (#22400)

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

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

* core/rawdb: fix transaction indexing/unindexing hashing error (#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 (#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 (#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 (#22423)

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

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

* cmd/devp2p/internal/ethtest: return request ID in BlockHeaders response (#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 (#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 (#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 (#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 (#22479)

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

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

* cmd/devp2p: use AWS-SDK v2 (#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 (#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 (#22346)

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

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

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

This PR fixes a regression introduced in #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 (#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 (#22511)

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

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

* accounts: eip-712 signing for ledger

* address review comments

* all: add read-only option to database (#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 (#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 (#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 https://github.com/ethereum/go-ethereum/pull/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 (#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 (#22547)

* p2p/dnsdisc: rate limit resolving before checking cache (#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 (#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 #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 (#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 (#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 (#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 (#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 (#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 (#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 (#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  (#22589)

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

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

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

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

* ethstats: avoid creating subscriptions on background goroutine (#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 (#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 (#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 #22322

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

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

* internal/ethapi: fix eth_chainId method (#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 (#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 (#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 (#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 (#22618)

* les: move client pool to les/vflux/server (#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 (#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 (#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 (#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 (#22633)

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

* cmd/faucet: support testnet flags in the faucet (#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 (#22652)


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

* core, eth: faster snapshot generation (#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 (#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 (#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 (#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 (#22650)

* les/vflux/server: fix estimatePriority corner case

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

* trie: make stacktrie not mutate input values (#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 (#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 (#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 (#22695)

* builds

Co-authored-by: Péter Szilágyi <peterke@gmail.com>
Co-authored-by: gary rong <garyrong0905@gmail.com>
Co-authored-by: Dan DeGreef <dan.degreef@gmail.com>
Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Alex Mazalov <mazalov@gmail.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: ucwong <ucwong@126.com>
Co-authored-by: meowsbits <b5c6@protonmail.com>
Co-authored-by: Sina Mahmoodi <1591639+s1na@users.noreply.github.com>
Co-authored-by: Łukasz Zimnoch <lukaszzimnoch1994@gmail.com>
Co-authored-by: ligi <ligi@ligi.de>
Co-authored-by: rene <41963722+renaynay@users.noreply.github.com>
Co-authored-by: Melvin Junhee Woo <melvin.woo@groundx.xyz>
Co-authored-by: Guillaume Ballet <gballet@gmail.com>
Co-authored-by: Felföldi Zsolt <zsfelfoldi@gmail.com>
Co-authored-by: Alex Prut <1648497+alexprut@users.noreply.github.com>
Co-authored-by: isdyaufh8o7cq <sebaskil@icloud.com>
Co-authored-by: Or Neeman <oneeman@gmail.com>
Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>
Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>
Co-authored-by: michael1011 <me@michael1011.at>
Co-authored-by: wuff1996 <33193253+wuff1996@users.noreply.github.com>
Co-authored-by: Martin Redmond <21436+reds@users.noreply.github.com>
Co-authored-by: jacksoom <lifengliu1994@gmail.com>
Co-authored-by: Quest Henkart <qhenkart@gmail.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>
achraf17 added a commit to Consensys/quorum that referenced this issue Jan 27, 2022
* consensus/ethash: implement faster difficulty calculators (#21976)

This PR adds re-written difficulty calculators, which are based on uint256. It also adds a fuzzer + oss-fuzz integration for the new fuzzer. It does differential fuzzing between the new and old calculators.

Note: this PR does not actually enable the new calculators.

* consensus: refactor FinalizeAndAssemble to use Finalize (#21993)

* core, eth, les: implement unclean-shutdown marker (#21893)

This PR implements unclean shutdown marker. Every time geth boots, it adds a timestamp to a list of timestamps in the database. This list is capped at 10. At a clean shutdown, the timestamp is removed again. 
Thus, when geth exits unclean, the marker remains, and at boot up we show the most recent unclean shutdowns to the user, which makes it easier to diagnose root-causes to certain problems. 

Co-authored-by: Nagy Salem <me@muhnagy.com>

* abi/bind: fix error-handling in generated wrappers for functions returning structs (#22005)

Fixes the template used when generating code, which in some scenarios would lead to panic instead of returning an error.

* cmd/abigen: clarify abigen alias flag usage (#21875)

* doc: clarify abigen alias flag usage

update the `abigen --alias` flag help info, give an example to make it more clear

related issue: ethereum/go-ethereum#21846

* Update cmd/abigen/main.go

Co-authored-by: ligi <ligi@ligi.de>

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

* core, eth: split eth package, implement snap protocol (#21482)

This commit splits the eth package, separating the handling of eth and snap protocols. It also includes the capability to run snap sync (https://github.com/ethereum/devp2p/blob/master/caps/snap.md) , but does not enable it by default. 

Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Martin Holst Swende <martin@swende.se>

* cmd/geth: fixed parallelization flaw in account import test (#22002)

* eth/protocols/eth: remove magic numbers in test (#21999)

* eth, core: speed up some tests (#22000)

* les: les/4 minimalistic version (#21909)

* les: allow tx unindexing in les/4 light server mode

* les: minor fixes

* les: more small fixes

* les: add meaningful constants for recentTxIndex handshake field

* cmd/faucet: sort requests by newest first (#22018)

* eth/download/statesync : optimize to avoid a copy in state sync hashing  (#22035)

* eth/download/statesync : state hash sum optimized

* go fmt with blank in imports

* keccak read arg fix

* eth/downloader: fix typo in comment (#22019)

* internal/ethapi: restore net_version RPC method (#22061)

During the snap and eth refactor, the net_version rpc call was falsely deprecated.
This restores the net_version RPC handler as most eth2 nodes and other software
depend on it.

* common,crypto: move fuzzers out of core (#22029)

* common,crypto: move fuzzers out of core

* fuzzers: move vm fuzzer out from core

* fuzzing: rework cover package logic

* fuzzers: lint

* README.md: update Travis badge (#22079)

The legacy dot-org URL was displaying a message about the repository
having migrated to the dot-com service, which now covers open-source
projects as well.

* eth, eth/tracers: include intrinsic gas in calltracer, expose for all tracers (#22038)

* eth/tracers: share tx gas price with js tracer

* eth/tracers: use `go generate`

* eth/tracers: try with another version of go-bindata

* eth/tracers: export txGas

* eth, eth/tracers: pass intrinsic gas to js tracers

eth/tracers: include tx gas in tracers usedGas

eth/tracers: fix prestate tracer's sender balance

eth/tracers: rm unnecessary import

eth/tracers: pass intrinsicGas separately to tracer

eth/tracers: fix tests broken by lack of txdata

eth, eth/tracers: minor fix

* eth/tracers: regenerate assets + unexport test-struct + add testcase

* eth/tracers: simplify tests + make table-driven

Co-authored-by: Guillaume Ballet <gballet@gmail.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>

* tests/fuzzers: fix false positive in bitutil fuzzer (#22076)

* cmd/geth: replace wiki links with new doc pages (#22071)

* eth/filters: replace wiki links with new doc pages (#22070)

* signer: docs - replace wiki links with new doc pages (#22069)

* eth/downloader: remove unnecessary condition (#22052)

* docs: replace wiki links with new doc pages in readme.md (#22065) (#22066)

* core/rawdb, eth/protocols : Method name typo fix (#22026)

* accounts/abi/bind: fix erroneous test (#22053)

closes #22049

* core/state/snapshot: gethring -> gathering typo (#22104)

* cmd/geth: update copyright year (#22099)

* .github: Replace wiki links with new doc pages (#22065) (#22068)

* node: rename startNetworking to openEndpoints (#22105)

* SECURITY.md: link to release page (#22067)

Add links to go-ethereum's GitHub release page.

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

* cmd: support v1.1 Twitter API in faucet, fix puppeth

* miner: avoid sleeping in miner (#22108)

This PR removes a logic in the miner, which was originally intended to help temporary testnets based on ethash from "running off into the future". If the difficulty was low, and a few computers started mining several blocks per second, the ethash rules (which demand 1s delay between blocks) would push the blocktimes further and further away.
The solution was to make the miner sleep while this happened.

Nowadays, this problem is solved instead by PoA chains, and it's recommended to let testnets and devnets be based on clique instead. The existing logic is problematic, since it can cause stalls within the miner making it difficult for remote workers to submit work if the channel is blocked on a sleep.

Credits to Saar Tochner for reporting this via the bug bounty

* cmd/geth: usb is off by default (#21984)

* graphql: use a decimal representation for gas limit and gas used (#21883)

This changes the JSON encoding of blocks returned by the API
to have decimal instead of hexadecimal numbers. The spec wants
it this way.

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

* cmd/geth: added --mainnet flag (#21932)

* cmd/geth: added --mainnet flag

* cmd/utils: set default genesis if --mainnet is specified

* cmd/utils: addressed comments

* common/compiler: fix parsing of solc output with solidity v.0.8.0 (#22092)

Solidity 0.8.0 changes the way that output is marshalled. This patch allows to parse both
the legacy format used previously and the new format.

See also https://docs.soliditylang.org/en/breaking/080-breaking-changes.html#interface-changes

* eth/downloader: enhanced test cases for downloader queue (#22114)

* cmd/utils, eth/downloader: minor snap nitpicks

* crypto: fix ineffectual assignments (#22124)

* crypto/bls12381: fixed ineffectual assignment

* crypto/signify: fix ineffectual assignment

* graphql: return decimal for `estimateGas` and `cumulativeGas` queries  (#22126)

* estimateGas, cumulativeGas
* linted
* add test for estimateGas

* snapshot, trie: fixed typos, mostly in snapshot pkg (#22133)

* cmd/faucet: fix websocket race regression after switching to gorilla

* eth/protocols/snap: track reverts when peer rejects request (#22016)

* eth/protocols/snap: reschedule missed deliveries

* eth/protocols/snap: clarify log message

* eth/protocols/snap: revert failures async and update runloop

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

* eth/protocols/snap: speed up hash checks (#22023)

* eth/protocols/snap: speed up hash checks

* eth/protocols/snap: nit fix

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

* cmd/faucet: switch Facebook auth over to mobile site

* les: remove transaction propagation limits (#22125)

* cmd/faucet: fix nonce-gap problem (#22145)

* cmd/faucet: avoid encoding for each client

* cmd/faucet: fix flaw in clearing of txs, avoid sending more than necessary

* cmd/faucet: fix flaw in tx cropping

* cmd/faucet: revert change to not always send tx info

* cmd/faucet: review fixes

* cmd/faucet: revert #22018, fix order in UI

* cmd/faucet: fix lock error

* cmd/faucet: revert json changes

* squashme

* ethclient: better test suite for ethclient package (#22127)

This commit extends the ethclient test suite and increases code coverage of the ethclient
package from ~15% to >55%. These tests act as early smoke tests to signal issues in the
RPC-interface. E.g. if a functionality like eth_chainId or eth_call breaks, the test
will break.

* eth/downloader: fix race condition in tests (#22140)

* downloader: fix race condition in tests

* eth/downloader: fix race condition in tests

* Revert "downloader: fix race condition in tests"

This reverts commit 108033ebc6985de83791d375b6e6647a77d28d5a.

* core: persist bad blocks (#21827)

* core: persist bad blocks

* core, eth, internal: address comments

* core/rawdb: add badblocks to inspector

* core, eth: update

* internal: revert

* core, eth: only save 10 bad blocks

* core/rawdb: address comments

* core/rawdb: fix

* core: address comments

* common/prque: pull in tests and benchmarks from upstream

* eth: improve log message (#22146)

* eth: fixed typos

* eth: fixed log message

* graphql: fix issue with unmarshalling int32 into `Long` type #22153

* eth: return error from eth_chainID during sync before EIP-155 activates (#21686)

This changes the chainID RPC method to return an error when EIP-155 is not yet
active at the current block height. It used to simply return zero in this case, but
that's confusing.

* cmd/utils: avoid making console preloads absolute (#22109)

Resolves etclabscore/core-geth#273

jsre.JSRE already handles establishing preload
file paths relative to the 'assets' path (aka docroot),
where it joins the assets dir and the file path if relative,
or uses the file path only if absolute.

The duplication of this logic by MakeConsolePreloads
caused preloaded files to have paths which contained
duplicate references to the assets dir path.

Date: 2020-12-30 08:25:01-06:00
Signed-off-by: meows <b5c6@protonmail.com>

* go.mod: use github.com/holiman/bloomfilter/v2 (#22044)

* deps: use improved bloom filter implementation

* eth/handler, trie: use 4 keys for syncbloom + minor fixes

* eth/protocols, trie: revert change on syncbloom method signature

* cmd/utils: don't enumerate USB unless --usb is set (#22130)

USB enumeration still occured. Make sure it will only occur if --usb is set.
This also deprecates the 'NoUSB' config file option in favor of a new option 'USB'.

* tests: update the reference tests (#22009)

* graphql: fix spurious error in test (#22164)

This solves an issue in graphql tests:

    graphql_test.go:38: could not create new node: datadir already used by another process

* consensus/ethash: increase seal timeout for tests (#22162)

It seems that the 2 second timeout is not enough for Travis CI:

   --- FAIL: TestTestMode (2.00s)
       ethash_test.go:53: sealing result timeout

* graphql: fix spurious travis failure (#22166)

The tests sometimes failed with certain go versions because
the behavior of http.Server.Shutdown changed over time. A bug
that was fixed in Go 1.15 could cause active connections on unrelated
servers to close unexpectedly. This is fixed by avoiding use of the
same port number in all tests.

* cmd/faucet: update the embedded website asset

* core/state/snapshot: add generation logs to storage too

* les: don't drop sentTo for normal cases (#22048)

* eth/protocols/eth: fix slice resize flaw (#22181)

* les: remove useless protocol defines (#22115)

This PR has two changes in the les protocol:

- the auxRoot is not supported. See ethereum/devp2p#171 for more information
- the empty response will be returned in GetHelperTrieProofsMsg request if the merkle
   proving is failed. note, for backward compatibility, the empty merkle proof as well as
   the request auxiliary data will still be returned in  les2/3 protocol no matter the proving
   is successful or not. the proving failure can happen e.g. request the proving for a
   non-included entry in helper trie (unstable header).

* tests/fuzzers/abi: better test generation (#22158)

* tests/fuzzers/abi: better test generation

* tests/fuzzers/abi: fixed packing issue

* oss-fuzz: enable abi fuzzer

* cmd/geth: dump config for metrics (#22083)

* cmd/geth: dump config

* cmd/geth: dump config

* cmd/geth: properly read config again

* cmd/geth: override metrics if flags are set

* cmd/geth: write metrics regardless if enabled

* cmd/geth: renamed to metricsfromcliargs

* metrics: add default configuration

* core/state/snapshot: write snapshot generator in batch (#22163)

* core/state/snapshot: write snapshot generator in batch

* core: refactor the tests

* core: update tests

* core: update tests

* cmd/geth: graceful shutdown if disk is full (#22103)

Adding warnings of free disk space left and graceful shutdown when there is not enough space left.
This also adds a flag datadir.minfreedisk which can be used to set the trigger for low disk space, and setting it to zero disables the check. 

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

* eth, les: add new config field SyncFromCheckpoint (#22123)

This PR introduces a new config field SyncFromCheckpoint for light client.

In some special scenarios, it's required to start synchronization from some
arbitrary checkpoint or even from the scratch. So this PR offers this
flexibility to users so that the synchronization start point can be configured.

There are two relevant configs: SyncFromCheckpoint and Checkpoint.

- If the SyncFromCheckpoint is true, the light client will try to sync from the
  specified checkpoint.

- If the Checkpoint is not configured, then the light client will sync from the
  scratch(from the latest header if the database is not empty)

Additional notes: these two configs are not visible in the CLI flags but only
accessable in the config file.

Example Usage:

[Eth]
SyncFromCheckpoint = true

[Eth.Checkpoint]
SectionIndex = 100
SectionHead = "0xabc"
CHTRoot = "0xabc"
BloomRoot = "0xabc"

PS. Historical checkpoint can be retrieved from the synced full node or light
client via les_getCheckpoint API.

* oss-fuzz: fix abi fuzzer (#22199)

* go.mod: upgrade golang-lru (#22134)

* downloader: extract findAncestor search functions (#21744)

This is a simple refactoring, extracting common ancestor
negotiation logic to named function

* core: implement background trie prefetcher

Squashed from the following commits:

core/state: lazily init snapshot storage map
core/state: fix flawed meter on storage reads
core/state: make statedb/stateobjects reuse a hasher
core/blockchain, core/state: implement new trie prefetcher
core: make trie prefetcher deliver tries to statedb
core/state: refactor trie_prefetcher, export storage tries
blockchain: re-enable the next-block-prefetcher
state: remove panics in trie prefetcher
core/state/trie_prefetcher: address some review concerns

sq

* core/state: convert prefetcher to concurrent per-trie loader

* eth/filters: fix potential deadlock in filter timeout loop (#22178)

This fixes #22131 and adds a test reproducing the issue.

* event: add ResubscribeErr (#22191)

This adds a way to get the error of the failing subscription
for logging/debugging purposes.

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

* trie: fix range prover (#22210)

Fixes a special case when the trie only has a single trie node and the range proof only contains a single element.

* common/mclock: remove dependency on github.com/aristanetworks/goarista (#22211)

It takes three lines of code to get to runtime.nanotime, no need to
pull a dependency for that.

* cmd, geth: CLI help fixes (#22220)

* cmd, geth: Reflect command being optional - closes 22218

* cmd, geth: Set current year to 2021

* cmd, geth: CLI help fixes (#22220)

* cmd, geth: Reflect command being optional - closes 22218

* cmd, geth: Set current year to 2021

* eth/protocols/snap: snap sync testing (#22179)

* eth/protocols/snap: make timeout configurable

* eth/protocols/snap: snap sync testing

* eth/protocols/snap: test to trigger panic

* eth/protocols/snap: fix race condition on timeouts

* eth/protocols/snap: return error on cancelled sync

* squashme: updates + test causing panic + properly serve accounts in order

* eth/protocols/snap: revert failing storage response

* eth/protocols/snap: revert on bad responses (storage, code)

* eth/protocols/snap: fix account handling stall

* eth/protocols/snap: fix remaining revertal-issues

* eth/protocols/snap: timeouthandler for bytecode requests

* eth/protocols/snap: debugging + fix log message

* eth/protocols/snap: fix misspelliings in docs

* eth/protocols/snap: fix race in bytecode handling

* eth/protocols/snap: undo deduplication of storage roots

* synctests: refactor + minify panic testcase

* eth/protocols/snap: minor polishes

* eth: minor polishes to make logs more useful

* eth/protocols/snap: remove excessive logs from the test runs

* eth/protocols/snap: stress tests with concurrency

* eth/protocols/snap: further fixes to test cancel channel handling

* eth/protocols/snap: extend test timeouts on CI

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

* go.mod: update dependencies (#22216)

This updates go module dependencies as discussed in #22050.

* graphql: change receipt status to decimal instead of hex (#22187)

This PR fixes the receipt status field to be decimal instead of a hex string,
as called for by the spec.

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

* go.mod: upgrade github.com/huin/goupnp (#22227)

This updates the goupnp dependency, fixing huin/goupnp#33

* snapshot: merge loops for better performance (#22160)

* core: reset to genesis when middle block is missing (#22135)

When a sethead/rewind finds that the targeted block is missing, it resets to genesis instead of crashing. Closes #22129

* eth/tracers: move tracing APIs into eth/tracers (#22161)

This moves the tracing RPC API implementation to package eth/tracers.
By doing so, package eth no longer depends on tracing and the duktape JS engine.

The change also enables tracing using the light client. All tracing methods work with the
light client, but it's a lot slower compared to using a full node.

* eth, p2p: reserve half peer slots for snap peers during snap sync (#22171)

* eth, p2p: reserve half peer slots for snap peers during snap sync

* eth: less logging

* eth: rework the eth/snap peer reservation logic

* eth: rework the eth/snap peer reservation logic (again)

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value (#22233)

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value

* internal/ethapi: print tx details when submitting (#22170)

This adds more info about submitted transactions in log messages.

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

* core/state: fix panic in state dumping (#22225)

* core: speed up header import (#21967)

This PR implements the following modifications

- Don't shortcut check if block is present, thus avoid disk lookup
- Don't check hash ancestry in early-check (it's still done in parallel checker)
- Don't check time.Now for every single header

Charts and background info can be found here: https://github.com/holiman/headerimport/blob/main/README.md
With these changes, writing 1M headers goes down to from 80s to 62s.

* accounts/scwallet: use go-ethereum crypto instead of go-ecdh (#22212)

* accounts/scwallet: use go-ethereum crypto instead of go-ecdh

github.com/wsddn/go-ecdh is a wrapper package for ECDH functionality
with any elliptic curve.

Since 'generic' ECDH is not required in accounts/scwallet (the curve is
always secp256k1), we can just use the standard library functionality
and our own crypto libraries to perform ECDH and save a dependency.

* Update accounts/scwallet/securechannel.go

Co-authored-by: Guillaume Ballet <gballet@gmail.com>

* Use the correct key

Co-authored-by: Guillaume Ballet <gballet@gmail.com>

* accounts/scwallet: update documentation (#22242)

* les: switch to new discv5 (#21940)

This PR enables running the new discv5 protocol in both LES client
and server mode. In client mode it mixes discv5 and dnsdisc iterators
(if both are enabled) and filters incoming ENRs for "les" tag and fork ID.
The old p2p/discv5 package and all references to it are removed.

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

* rpc: deprecate Client.ShhSubscribe (#22239)

It never worked, whisper uses polling.

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

* cmd,core,eth,params,tests: define yolov3 + enable EIP-2565 (#22213)

Removes the yolov2 definition, adds yolov3, including EIP-2565. This PR also disables some of the erroneously generated blockchain and statetests, and adds the new genesis hash + alloc for yolov3. 
This PR disables the CLI switches for yolo, since it's not complete until we merge support for 2930.

* les/utils: UDP rate limiter (#21930)

* les/utils: Limiter

* les/utils: dropped prior weight vs variable cost logic, using fixed weights

* les/utils: always create node selector in addressGroup

* les/utils: renamed request weight to request cost

* les/utils: simplified and improved the DoS penalty mechanism

* les/utils: minor fixes

* les/utils: made selection weight calculation nicer

* les/utils: fixed linter warning

* les/utils: more precise and reliable probabilistic test

* les/utils: fixed linter warning

* cmd/clef: don't check file permissions on windows (#22251)

Fixes #20123

* eth/tracers: fix unigram tracer (#22248)

* eth: check snap satelliteness, delegate drop to eth (#22235)

* eth: check snap satelliteness, delegate drop to eth

* eth: better handle eth/snap satellite relation, merge reg/unreg paths

* cmd/geth, node: allow configuring JSON-RPC on custom path prefix (#22184)

This change allows users to set a custom path prefix on which to mount the http-rpc
or ws-rpc handlers via the new flags --http.rpcprefix and --ws.rpcprefix.

Fixes #21826

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

* all: remove unneeded parentheses (#21921)

* remove uneeded convertion type

* remove redundant type in composite literal

* omit explicit type where implicit

* remove unused redundant parenthesis

* remove redundant import alias duktape

* trie : use trie.NewStackTrie instead of new(trie.Trie) (#22246)

The PR makes use of the stacktrie, which is is more lenient on resource consumption, than the regular trie, in cases where we only need it for DeriveSha

* core: reset txpool state on sethead (#22247)

fixes an issue where local transactions that were included in the chain before a SetHead were rejected if resubmitted, since the txpool had not reset the state to the current (older) state.

* fuzzers: added consensys/gurvy library to bn256 differential fuzzer (#21812)

This pr adds consensys' gurvy bn256 variant into the code for differential fuzzing.

* internal/ethapi: comment nitpick (#22270)

* eth: move eth.Config to a common package (#22205)

This moves the eth config definition into a separate package, eth/ethconfig. 
Packages eth and les can now import this common package instead of
importing eth from les, reducing dependencies.

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

* internal/ethapi: fix typo in comment (#22271)

* eth: don't wait for snap registration if we're not running snap (#22272)

Prevents a situation where we (not running snap) connects with a peer running snap, and get stalled waiting for snap registration to succeed (which will never happen), which cause a waitgroup wait to halt shutdown

* consensus: remove seal verification from the consensus engine interface (#22274)

* cmd/utils: enable snapshots by default

* metrics: fix cast omission in cpu_syscall.go (#22262)

fixes an regression which caused build failure on certain platforms

* params: just to make snapshots a bit more official

* all: bloom-filter based pruning mechanism (#21724)

* cmd, core, tests: initial state pruner

core: fix db inspector

cmd/geth: add verify-state

cmd/geth: add verification tool

core/rawdb: implement flatdb

cmd, core: fix rebase

core/state: use new contract code layout

core/state/pruner: avoid deleting genesis state

cmd/geth: add helper function

core, cmd: fix extract genesis

core: minor fixes

contracts: remove useless

core/state/snapshot: plugin stacktrie

core: polish

core/state/snapshot: iterate storage concurrently

core/state/snapshot: fix iteration

core: add comments

core/state/snapshot: polish code

core/state: polish

core/state/snapshot: rebase

core/rawdb: add comments

core/rawdb: fix tests

core/rawdb: improve tests

core/state/snapshot: fix concurrent iteration

core/state: run pruning during the recovery

core, trie: implement martin's idea

core, eth: delete flatdb and polish pruner

trie: fix import

core/state/pruner: add log

core/state/pruner: fix issues

core/state/pruner: don't read back

core/state/pruner: fix contract code write

core/state/pruner: check root node presence

cmd, core: polish log

core/state: use HEAD-127 as the target

core/state/snapshot: improve tests

cmd/geth: fix verification tool

cmd/geth: use HEAD as the verification default target

all: replace the bloomfilter with martin's fork

cmd, core: polish code

core, cmd: forcibly delete state root

core/state/pruner: add hash64

core/state/pruner: fix blacklist

core/state: remove blacklist

cmd, core: delete trie clean cache before pruning

cmd, core: fix lint

cmd, core: fix rebase

core/state: fix the special case for clique networks

core/state/snapshot: remove useless code

core/state/pruner: capping the snapshot after pruning

cmd, core, eth: fixes

core/rawdb: update db inspector

cmd/geth: polish code

core/state/pruner: fsync bloom filter

cmd, core: print warning log

core/state/pruner: adjust the parameters for bloom filter

cmd, core: create the bloom filter by size

core: polish

core/state/pruner: sanitize invalid bloomfilter size

cmd: address comments

cmd/geth: address comments

cmd/geth: address comment

core/state/pruner: address comments

core/state/pruner: rename homedir to datadir

cmd, core: address comments

core/state/pruner: address comment

core/state: address comments

core, cmd, tests: address comments

core: address comments

core/state/pruner: release the iterator after each commit

core/state/pruner: improve pruner

cmd, core: adjust bloom paramters

core/state/pruner: fix lint

core/state/pruner: fix tests

core: fix rebase

core/state/pruner: remove atomic rename

core/state/pruner: address comments

all: run go mod tidy

core/state/pruner: avoid false-positive for the middle state roots

core/state/pruner: add checks for middle roots

cmd/geth: replace crit with error

* core/state/pruner: fix lint

* core: drop legacy bloom filter

* core/state/snapshot: improve pruner

* core/state/snapshot: polish concurrent logs to report ETA vs. hashes

* core/state/pruner: add progress report for pruning and compaction too

* core: fix snapshot test API

* core/state: fix some pruning logs

* core/state/pruner: support recovering from bloom flush fail

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

* core/state/pruner: fix compaction after pruning

* core/state/pruner: fix compaction range error

* internal/debug: add switch to format logs with json (#22207)

adds a flag --log.json which if enabled makes the client format logs with JSON.

* accounts/abi/bind: fixed unpacking error (#22230)

There was a dormant error with structured inputs that failed unpacking.
This commit fixes the error by switching casting to the better abi.ConvertType function.
It also adds a test for calling a view function that returns a struct

* cmd/utils, eth/ethconfig: unindex txs older than ~1 year

* cmd/devp2p: fix documentation for eth-test (#22298)

* core: fix temp memory blowup caused by defers holding on to state

* les: enable les/4 and add tests (#22321)

* cmd/utils: add workaround for FreeBSD statfs quirk (#22310)

Make geth build on FreeBSD, fixes #22309.

* cmd/geth: fix js unclean shutdown (#22302)

* trie: fix bloom crash on fast sync restart

* rpc: increase the number of subscriptions in storm test (#22316)

* core/state/snapshot: ensure Cap retains a min number of layers

* eth: fix snap sync cancellation

* cmd/devp2p/internal/ethtest: use shared message types (#22315)

This updates the eth protocol test suite to use the message type
definitions of the 'production' protocol implementation in eth/protocols/eth.

* eth/handler, broadcast: optimize tx broadcast mechanism (#22176)

This PR optimizes the broadcast loop. Instead of iterating twice through a given set of transactions to weed out which peers have and which do not have a tx, to send/announce transactions, we do it only once.

* core/state: copy the snap when copying the state (#22340)

* core/state: copy the snap when copying the state

* core/state: deep-copy snap stuff during state Copy

* rlp: handle case of normal EOF in Stream.readFull (#22336)

io.Reader may return n > 0 and io.EOF at the end of the input stream.
readFull did not handle this correctly, looking only at the error. This fixes
it to check for n == len(buf) as well.

* node: always show websocket url in logs (#22307)

* eth: implement eth66 (#22241)

* eth/protocols/eth: split up the eth protocol handlers

* eth/protocols/eth: define eth-66 protocol messages

* eth/protocols/eth: poc implement getblockheaders on eth/66

* eth/protocols/eth: implement remaining eth-66 handlers

* eth/protocols: define handler map for eth 66

* eth/downloader: use protocol constants from eth package

* eth/protocols/eth: add ETH66 capability

* eth/downloader: tests for eth66

* eth/downloader: fix error in tests

* eth/protocols/eth: use eth66 for outgoing requests

* eth/protocols/eth: remove unused error type

* eth/protocols/eth: define protocol length

* eth/protocols/eth: fix pooled tx over eth66

* protocols/eth/handlers: revert behavioural change which caused tests to fail

* eth/downloader: fix failing test

* eth/protocols/eth: add testcases + fix flaw with header requests

* eth/protocols: change comments

* eth/protocols/eth: review fixes + fixed flaw in RequestOneHeader

* eth/protocols: documentation

* eth/protocols/eth: review concerns about types

* p2p/dnsdisc: fix hot-spin when all trees are empty (#22313)

In the random sync algorithm used by the DNS node iterator, we first pick a random
tree and then perform one sync action on that tree. This happens in a loop until any
node is found. If no trees contain any nodes, the iterator will enter a hot loop spinning
at 100% CPU.

The fix is complicated. The iterator now checks if a meaningful sync action can
be performed on any tree. If there is nothing to do, it waits for the next root record
recheck time to arrive and then tries again.

Fixes #22306

* les: renamed lespay to vflux (#22347)

* cmd/utils: disable caching preimages by default

* travis, appveyor, build: bump Go to 1.16

* les: fix balance expiration (#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 (#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 (#22357)

* cmd/geth: add db commands stats, compact, put, get, delete (#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 (#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 (#22373)

* cmd/utils: remove deprecated command line flags (#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 (#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 (#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 (#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 (#22363)

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

* les: move server pool to les/vflux/client (#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 (#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 (#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 (#22386)

* les: UDP pre-negotiation of available server capacity (#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 (#22395)

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

* params: update chts (#22418)

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

* cmd/utils: fix exclusive check for archive node

* cmd/utils: set the txlookuplimit to 0

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

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

* cmd: retire whisper flags (#22421)

* cmd: retire whisper flags

* cmd/geth: remove whisper configs

* tests: update to latest tests (#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

* Update after the tracers factoring and solve some linting

* fix all the linting issues

* fix graphql test

* fix wallet test

* fix cmd package test

* fix internal package test

* fix internal package test

* fix accounts and contracts package test

* fix light package test

* fix some unit tests and changes on the state_prefetcher.go

* fix core unit test

* fix unit test

* faucet: do not replace normal url to mobile version

* faucet: revert change

* eth: added UT for transaction propagation

* internal/eth: fixed merging side effect

* accounts: copy signer

* Added Quorum tag for the UT

* fix: add some fixes and UT (#3)

* faucet: revert change

* eth: added UT for transaction propagation

* internal/eth: fixed merging side effect

* accounts: copy signer

* Added Quorum tag for the UT

* fix: eth/handler.go accept tx for raft consensus

* fix: internal/ethapi add check for accessList if its nil

* add eth66 protocol to consensus

* fix: broadcaster

* revert: logs

* disable flakey facebook test

* fix: eth/api_backend.go use the modified GetReceipts to get the private receipts for PSI

* fix: eth/traces fix the tracer to ignore the tx that the party is not part of

* fix: raft/snapshot remove the trimming of the peer ID

* Accept chainId on permissioning endpoints

* fix: force preimages for making complete dumps
preimages is disabled by default by geth 1.10, but needed for contract extension

* Specify chainId against permision contracts

* Specify chainId with NewWalletTransactor

* Remove chainId from NewWalletTransactor

* Pass chainId through to NewWalletTransactor from config

* fix lint

* fix unit tests

* fix lint

* Upgrade protobuf to 1.5.1

* remove commented code

* added few error checks and some code cleaning

* added few error checks and some code cleaning

* fix conflict merge

* fix linter

* Prevent prune-state from being used when IsQuorum is enabled

Signed-off-by: Antony Denyer <git@antonydenyer.co.uk>

* Remove date for deprecation notice, made more generic

* fix: miner/worker.go mix-up when resolving conflicts about miner sleeping

Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Mr-Leshiy <alex_pozhilenkov@adoriasoft.com>
Co-authored-by: Nagy Salem <me@muhnagy.com>
Co-authored-by: Connor Stein <connor.stein@mail.mcgill.ca>
Co-authored-by: Shiming <codingmylife@gmail.com>
Co-authored-by: ligi <ligi@ligi.de>
Co-authored-by: Péter Szilágyi <peterke@gmail.com>
Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Mr-Leshiy <leshiy12345678@gmail.com>
Co-authored-by: Felföldi Zsolt <zsfelfoldi@gmail.com>
Co-authored-by: ucwong <ucwong@126.com>
Co-authored-by: Timo Tijhof <krinklemail@gmail.com>
Co-authored-by: Sina Mahmoodi <1591639+s1na@users.noreply.github.com>
Co-authored-by: Guillaume Ballet <gballet@gmail.com>
Co-authored-by: Suriyaa Sundararuban <isc.suriyaa@gmail.com>
Co-authored-by: jk-jeongkyun <45347815+jeongkyun-oh@users.noreply.github.com>
Co-authored-by: yumiel yoomee1313 <yumiel.ko@groundx.xyz>
Co-authored-by: Melvin Junhee Woo <melvin.woo@groundx.xyz>
Co-authored-by: Vie <yangchenzhong@gmail.com>
Co-authored-by: rene <41963722+renaynay@users.noreply.github.com>
Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: Antoine Toulme <atoulme@users.noreply.github.com>
Co-authored-by: gary rong <garyrong0905@gmail.com>
Co-authored-by: Chris Ziogas <ziogaschr@gmail.com>
Co-authored-by: meowsbits <b5c6@protonmail.com>
Co-authored-by: Dan DeGreef <dan.degreef@gmail.com>
Co-authored-by: Alex Mazalov <mazalov@gmail.com>
Co-authored-by: Łukasz Zimnoch <lukaszzimnoch1994@gmail.com>
Co-authored-by: Alex Prut <1648497+alexprut@users.noreply.github.com>
Co-authored-by: isdyaufh8o7cq <sebaskil@icloud.com>
Co-authored-by: Or Neeman <oneeman@gmail.com>
Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>
Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>
Co-authored-by: achraf <achraf.sellami@consensys.net>
Co-authored-by: achraf17 <achrafsellami0@gmail.com>
Co-authored-by: Baptiste Boussemart <baptiste.boussemart@consensys.net>
Co-authored-by: Antony Denyer <git@antonydenyer.co.uk>
Co-authored-by: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>
Co-authored-by: Antony Denyer <email@antonydenyer.co.uk>
acoshift added a commit to reichain/rei that referenced this issue Feb 8, 2022
commit c50aaab3911681ac0174b24527627a4f3e22e1d6
Author: Antony Denyer <git@antonydenyer.co.uk>
Date:   Thu Jan 27 09:49:19 2022 +0000

    Bump version to v22.1.0

commit d258a138864999157cbcd7be4037b70d7cb772e5
Author: Quorum Bot <46820074+quorumbot@users.noreply.github.com>
Date:   Thu Jan 27 09:14:50 2022 +0000

    [Upgrade] Go-Ethereum release v1.10.0 (#1249)

    * consensus/ethash: implement faster difficulty calculators (#21976)

    This PR adds re-written difficulty calculators, which are based on uint256. It also adds a fuzzer + oss-fuzz integration for the new fuzzer. It does differential fuzzing between the new and old calculators.

    Note: this PR does not actually enable the new calculators.

    * consensus: refactor FinalizeAndAssemble to use Finalize (#21993)

    * core, eth, les: implement unclean-shutdown marker (#21893)

    This PR implements unclean shutdown marker. Every time geth boots, it adds a timestamp to a list of timestamps in the database. This list is capped at 10. At a clean shutdown, the timestamp is removed again.
    Thus, when geth exits unclean, the marker remains, and at boot up we show the most recent unclean shutdowns to the user, which makes it easier to diagnose root-causes to certain problems.

    Co-authored-by: Nagy Salem <me@muhnagy.com>

    * abi/bind: fix error-handling in generated wrappers for functions returning structs (#22005)

    Fixes the template used when generating code, which in some scenarios would lead to panic instead of returning an error.

    * cmd/abigen: clarify abigen alias flag usage (#21875)

    * doc: clarify abigen alias flag usage

    update the `abigen --alias` flag help info, give an example to make it more clear

    related issue: https://github.com/ethereum/go-ethereum/issues/21846

    * Update cmd/abigen/main.go

    Co-authored-by: ligi <ligi@ligi.de>

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

    * core, eth: split eth package, implement snap protocol (#21482)

    This commit splits the eth package, separating the handling of eth and snap protocols. It also includes the capability to run snap sync (https://github.com/ethereum/devp2p/blob/master/caps/snap.md) , but does not enable it by default.

    Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
    Co-authored-by: Martin Holst Swende <martin@swende.se>

    * cmd/geth: fixed parallelization flaw in account import test (#22002)

    * eth/protocols/eth: remove magic numbers in test (#21999)

    * eth, core: speed up some tests (#22000)

    * les: les/4 minimalistic version (#21909)

    * les: allow tx unindexing in les/4 light server mode

    * les: minor fixes

    * les: more small fixes

    * les: add meaningful constants for recentTxIndex handshake field

    * cmd/faucet: sort requests by newest first (#22018)

    * eth/download/statesync : optimize to avoid a copy in state sync hashing  (#22035)

    * eth/download/statesync : state hash sum optimized

    * go fmt with blank in imports

    * keccak read arg fix

    * eth/downloader: fix typo in comment (#22019)

    * internal/ethapi: restore net_version RPC method (#22061)

    During the snap and eth refactor, the net_version rpc call was falsely deprecated.
    This restores the net_version RPC handler as most eth2 nodes and other software
    depend on it.

    * common,crypto: move fuzzers out of core (#22029)

    * common,crypto: move fuzzers out of core

    * fuzzers: move vm fuzzer out from core

    * fuzzing: rework cover package logic

    * fuzzers: lint

    * README.md: update Travis badge (#22079)

    The legacy dot-org URL was displaying a message about the repository
    having migrated to the dot-com service, which now covers open-source
    projects as well.

    * eth, eth/tracers: include intrinsic gas in calltracer, expose for all tracers (#22038)

    * eth/tracers: share tx gas price with js tracer

    * eth/tracers: use `go generate`

    * eth/tracers: try with another version of go-bindata

    * eth/tracers: export txGas

    * eth, eth/tracers: pass intrinsic gas to js tracers

    eth/tracers: include tx gas in tracers usedGas

    eth/tracers: fix prestate tracer's sender balance

    eth/tracers: rm unnecessary import

    eth/tracers: pass intrinsicGas separately to tracer

    eth/tracers: fix tests broken by lack of txdata

    eth, eth/tracers: minor fix

    * eth/tracers: regenerate assets + unexport test-struct + add testcase

    * eth/tracers: simplify tests + make table-driven

    Co-authored-by: Guillaume Ballet <gballet@gmail.com>
    Co-authored-by: Martin Holst Swende <martin@swende.se>

    * tests/fuzzers: fix false positive in bitutil fuzzer (#22076)

    * cmd/geth: replace wiki links with new doc pages (#22071)

    * eth/filters: replace wiki links with new doc pages (#22070)

    * signer: docs - replace wiki links with new doc pages (#22069)

    * eth/downloader: remove unnecessary condition (#22052)

    * docs: replace wiki links with new doc pages in readme.md (#22065) (#22066)

    * core/rawdb, eth/protocols : Method name typo fix (#22026)

    * accounts/abi/bind: fix erroneous test (#22053)

    closes #22049

    * core/state/snapshot: gethring -> gathering typo (#22104)

    * cmd/geth: update copyright year (#22099)

    * .github: Replace wiki links with new doc pages (#22065) (#22068)

    * node: rename startNetworking to openEndpoints (#22105)

    * SECURITY.md: link to release page (#22067)

    Add links to go-ethereum's GitHub release page.

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

    * cmd: support v1.1 Twitter API in faucet, fix puppeth

    * miner: avoid sleeping in miner (#22108)

    This PR removes a logic in the miner, which was originally intended to help temporary testnets based on ethash from "running off into the future". If the difficulty was low, and a few computers started mining several blocks per second, the ethash rules (which demand 1s delay between blocks) would push the blocktimes further and further away.
    The solution was to make the miner sleep while this happened.

    Nowadays, this problem is solved instead by PoA chains, and it's recommended to let testnets and devnets be based on clique instead. The existing logic is problematic, since it can cause stalls within the miner making it difficult for remote workers to submit work if the channel is blocked on a sleep.

    Credits to Saar Tochner for reporting this via the bug bounty

    * cmd/geth: usb is off by default (#21984)

    * graphql: use a decimal representation for gas limit and gas used (#21883)

    This changes the JSON encoding of blocks returned by the API
    to have decimal instead of hexadecimal numbers. The spec wants
    it this way.

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

    * cmd/geth: added --mainnet flag (#21932)

    * cmd/geth: added --mainnet flag

    * cmd/utils: set default genesis if --mainnet is specified

    * cmd/utils: addressed comments

    * common/compiler: fix parsing of solc output with solidity v.0.8.0 (#22092)

    Solidity 0.8.0 changes the way that output is marshalled. This patch allows to parse both
    the legacy format used previously and the new format.

    See also https://docs.soliditylang.org/en/breaking/080-breaking-changes.html#interface-changes

    * eth/downloader: enhanced test cases for downloader queue (#22114)

    * cmd/utils, eth/downloader: minor snap nitpicks

    * crypto: fix ineffectual assignments (#22124)

    * crypto/bls12381: fixed ineffectual assignment

    * crypto/signify: fix ineffectual assignment

    * graphql: return decimal for `estimateGas` and `cumulativeGas` queries  (#22126)

    * estimateGas, cumulativeGas
    * linted
    * add test for estimateGas

    * snapshot, trie: fixed typos, mostly in snapshot pkg (#22133)

    * cmd/faucet: fix websocket race regression after switching to gorilla

    * eth/protocols/snap: track reverts when peer rejects request (#22016)

    * eth/protocols/snap: reschedule missed deliveries

    * eth/protocols/snap: clarify log message

    * eth/protocols/snap: revert failures async and update runloop

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

    * eth/protocols/snap: speed up hash checks (#22023)

    * eth/protocols/snap: speed up hash checks

    * eth/protocols/snap: nit fix

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

    * cmd/faucet: switch Facebook auth over to mobile site

    * les: remove transaction propagation limits (#22125)

    * cmd/faucet: fix nonce-gap problem (#22145)

    * cmd/faucet: avoid encoding for each client

    * cmd/faucet: fix flaw in clearing of txs, avoid sending more than necessary

    * cmd/faucet: fix flaw in tx cropping

    * cmd/faucet: revert change to not always send tx info

    * cmd/faucet: review fixes

    * cmd/faucet: revert #22018, fix order in UI

    * cmd/faucet: fix lock error

    * cmd/faucet: revert json changes

    * squashme

    * ethclient: better test suite for ethclient package (#22127)

    This commit extends the ethclient test suite and increases code coverage of the ethclient
    package from ~15% to >55%. These tests act as early smoke tests to signal issues in the
    RPC-interface. E.g. if a functionality like eth_chainId or eth_call breaks, the test
    will break.

    * eth/downloader: fix race condition in tests (#22140)

    * downloader: fix race condition in tests

    * eth/downloader: fix race condition in tests

    * Revert "downloader: fix race condition in tests"

    This reverts commit 108033ebc6985de83791d375b6e6647a77d28d5a.

    * core: persist bad blocks (#21827)

    * core: persist bad blocks

    * core, eth, internal: address comments

    * core/rawdb: add badblocks to inspector

    * core, eth: update

    * internal: revert

    * core, eth: only save 10 bad blocks

    * core/rawdb: address comments

    * core/rawdb: fix

    * core: address comments

    * common/prque: pull in tests and benchmarks from upstream

    * eth: improve log message (#22146)

    * eth: fixed typos

    * eth: fixed log message

    * graphql: fix issue with unmarshalling int32 into `Long` type #22153

    * eth: return error from eth_chainID during sync before EIP-155 activates (#21686)

    This changes the chainID RPC method to return an error when EIP-155 is not yet
    active at the current block height. It used to simply return zero in this case, but
    that's confusing.

    * cmd/utils: avoid making console preloads absolute (#22109)

    Resolves https://github.com/etclabscore/core-geth/issues/273

    jsre.JSRE already handles establishing preload
    file paths relative to the 'assets' path (aka docroot),
    where it joins the assets dir and the file path if relative,
    or uses the file path only if absolute.

    The duplication of this logic by MakeConsolePreloads
    caused preloaded files to have paths which contained
    duplicate references to the assets dir path.

    Date: 2020-12-30 08:25:01-06:00
    Signed-off-by: meows <b5c6@protonmail.com>

    * go.mod: use github.com/holiman/bloomfilter/v2 (#22044)

    * deps: use improved bloom filter implementation

    * eth/handler, trie: use 4 keys for syncbloom + minor fixes

    * eth/protocols, trie: revert change on syncbloom method signature

    * cmd/utils: don't enumerate USB unless --usb is set (#22130)

    USB enumeration still occured. Make sure it will only occur if --usb is set.
    This also deprecates the 'NoUSB' config file option in favor of a new option 'USB'.

    * tests: update the reference tests (#22009)

    * graphql: fix spurious error in test (#22164)

    This solves an issue in graphql tests:

        graphql_test.go:38: could not create new node: datadir already used by another process

    * consensus/ethash: increase seal timeout for tests (#22162)

    It seems that the 2 second timeout is not enough for Travis CI:

       --- FAIL: TestTestMode (2.00s)
           ethash_test.go:53: sealing result timeout

    * graphql: fix spurious travis failure (#22166)

    The tests sometimes failed with certain go versions because
    the behavior of http.Server.Shutdown changed over time. A bug
    that was fixed in Go 1.15 could cause active connections on unrelated
    servers to close unexpectedly. This is fixed by avoiding use of the
    same port number in all tests.

    * cmd/faucet: update the embedded website asset

    * core/state/snapshot: add generation logs to storage too

    * les: don't drop sentTo for normal cases (#22048)

    * eth/protocols/eth: fix slice resize flaw (#22181)

    * les: remove useless protocol defines (#22115)

    This PR has two changes in the les protocol:

    - the auxRoot is not supported. See ethereum/devp2p#171 for more information
    - the empty response will be returned in GetHelperTrieProofsMsg request if the merkle
       proving is failed. note, for backward compatibility, the empty merkle proof as well as
       the request auxiliary data will still be returned in  les2/3 protocol no matter the proving
       is successful or not. the proving failure can happen e.g. request the proving for a
       non-included entry in helper trie (unstable header).

    * tests/fuzzers/abi: better test generation (#22158)

    * tests/fuzzers/abi: better test generation

    * tests/fuzzers/abi: fixed packing issue

    * oss-fuzz: enable abi fuzzer

    * cmd/geth: dump config for metrics (#22083)

    * cmd/geth: dump config

    * cmd/geth: dump config

    * cmd/geth: properly read config again

    * cmd/geth: override metrics if flags are set

    * cmd/geth: write metrics regardless if enabled

    * cmd/geth: renamed to metricsfromcliargs

    * metrics: add default configuration

    * core/state/snapshot: write snapshot generator in batch (#22163)

    * core/state/snapshot: write snapshot generator in batch

    * core: refactor the tests

    * core: update tests

    * core: update tests

    * cmd/geth: graceful shutdown if disk is full (#22103)

    Adding warnings of free disk space left and graceful shutdown when there is not enough space left.
    This also adds a flag datadir.minfreedisk which can be used to set the trigger for low disk space, and setting it to zero disables the check.

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

    * eth, les: add new config field SyncFromCheckpoint (#22123)

    This PR introduces a new config field SyncFromCheckpoint for light client.

    In some special scenarios, it's required to start synchronization from some
    arbitrary checkpoint or even from the scratch. So this PR offers this
    flexibility to users so that the synchronization start point can be configured.

    There are two relevant configs: SyncFromCheckpoint and Checkpoint.

    - If the SyncFromCheckpoint is true, the light client will try to sync from the
      specified checkpoint.

    - If the Checkpoint is not configured, then the light client will sync from the
      scratch(from the latest header if the database is not empty)

    Additional notes: these two configs are not visible in the CLI flags but only
    accessable in the config file.

    Example Usage:

    [Eth]
    SyncFromCheckpoint = true

    [Eth.Checkpoint]
    SectionIndex = 100
    SectionHead = "0xabc"
    CHTRoot = "0xabc"
    BloomRoot = "0xabc"

    PS. Historical checkpoint can be retrieved from the synced full node or light
    client via les_getCheckpoint API.

    * oss-fuzz: fix abi fuzzer (#22199)

    * go.mod: upgrade golang-lru (#22134)

    * downloader: extract findAncestor search functions (#21744)

    This is a simple refactoring, extracting common ancestor
    negotiation logic to named function

    * core: implement background trie prefetcher

    Squashed from the following commits:

    core/state: lazily init snapshot storage map
    core/state: fix flawed meter on storage reads
    core/state: make statedb/stateobjects reuse a hasher
    core/blockchain, core/state: implement new trie prefetcher
    core: make trie prefetcher deliver tries to statedb
    core/state: refactor trie_prefetcher, export storage tries
    blockchain: re-enable the next-block-prefetcher
    state: remove panics in trie prefetcher
    core/state/trie_prefetcher: address some review concerns

    sq

    * core/state: convert prefetcher to concurrent per-trie loader

    * eth/filters: fix potential deadlock in filter timeout loop (#22178)

    This fixes #22131 and adds a test reproducing the issue.

    * event: add ResubscribeErr (#22191)

    This adds a way to get the error of the failing subscription
    for logging/debugging purposes.

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

    * trie: fix range prover (#22210)

    Fixes a special case when the trie only has a single trie node and the range proof only contains a single element.

    * common/mclock: remove dependency on github.com/aristanetworks/goarista (#22211)

    It takes three lines of code to get to runtime.nanotime, no need to
    pull a dependency for that.

    * cmd, geth: CLI help fixes (#22220)

    * cmd, geth: Reflect command being optional - closes 22218

    * cmd, geth: Set current year to 2021

    * cmd, geth: CLI help fixes (#22220)

    * cmd, geth: Reflect command being optional - closes 22218

    * cmd, geth: Set current year to 2021

    * eth/protocols/snap: snap sync testing (#22179)

    * eth/protocols/snap: make timeout configurable

    * eth/protocols/snap: snap sync testing

    * eth/protocols/snap: test to trigger panic

    * eth/protocols/snap: fix race condition on timeouts

    * eth/protocols/snap: return error on cancelled sync

    * squashme: updates + test causing panic + properly serve accounts in order

    * eth/protocols/snap: revert failing storage response

    * eth/protocols/snap: revert on bad responses (storage, code)

    * eth/protocols/snap: fix account handling stall

    * eth/protocols/snap: fix remaining revertal-issues

    * eth/protocols/snap: timeouthandler for bytecode requests

    * eth/protocols/snap: debugging + fix log message

    * eth/protocols/snap: fix misspelliings in docs

    * eth/protocols/snap: fix race in bytecode handling

    * eth/protocols/snap: undo deduplication of storage roots

    * synctests: refactor + minify panic testcase

    * eth/protocols/snap: minor polishes

    * eth: minor polishes to make logs more useful

    * eth/protocols/snap: remove excessive logs from the test runs

    * eth/protocols/snap: stress tests with concurrency

    * eth/protocols/snap: further fixes to test cancel channel handling

    * eth/protocols/snap: extend test timeouts on CI

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

    * go.mod: update dependencies (#22216)

    This updates go module dependencies as discussed in #22050.

    * graphql: change receipt status to decimal instead of hex (#22187)

    This PR fixes the receipt status field to be decimal instead of a hex string,
    as called for by the spec.

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

    * go.mod: upgrade github.com/huin/goupnp (#22227)

    This updates the goupnp dependency, fixing huin/goupnp#33

    * snapshot: merge loops for better performance (#22160)

    * core: reset to genesis when middle block is missing (#22135)

    When a sethead/rewind finds that the targeted block is missing, it resets to genesis instead of crashing. Closes #22129

    * eth/tracers: move tracing APIs into eth/tracers (#22161)

    This moves the tracing RPC API implementation to package eth/tracers.
    By doing so, package eth no longer depends on tracing and the duktape JS engine.

    The change also enables tracing using the light client. All tracing methods work with the
    light client, but it's a lot slower compared to using a full node.

    * eth, p2p: reserve half peer slots for snap peers during snap sync (#22171)

    * eth, p2p: reserve half peer slots for snap peers during snap sync

    * eth: less logging

    * eth: rework the eth/snap peer reservation logic

    * eth: rework the eth/snap peer reservation logic (again)

    * tests/fuzzers/abi: fixed one-off panic with int.Min64 value (#22233)

    * tests/fuzzers/abi: fixed one-off panic with int.Min64 value

    * tests/fuzzers/abi: fixed one-off panic with int.Min64 value

    * internal/ethapi: print tx details when submitting (#22170)

    This adds more info about submitted transactions in log messages.

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

    * core/state: fix panic in state dumping (#22225)

    * core: speed up header import (#21967)

    This PR implements the following modifications

    - Don't shortcut check if block is present, thus avoid disk lookup
    - Don't check hash ancestry in early-check (it's still done in parallel checker)
    - Don't check time.Now for every single header

    Charts and background info can be found here: https://github.com/holiman/headerimport/blob/main/README.md
    With these changes, writing 1M headers goes down to from 80s to 62s.

    * accounts/scwallet: use go-ethereum crypto instead of go-ecdh (#22212)

    * accounts/scwallet: use go-ethereum crypto instead of go-ecdh

    github.com/wsddn/go-ecdh is a wrapper package for ECDH functionality
    with any elliptic curve.

    Since 'generic' ECDH is not required in accounts/scwallet (the curve is
    always secp256k1), we can just use the standard library functionality
    and our own crypto libraries to perform ECDH and save a dependency.

    * Update accounts/scwallet/securechannel.go

    Co-authored-by: Guillaume Ballet <gballet@gmail.com>

    * Use the correct key

    Co-authored-by: Guillaume Ballet <gballet@gmail.com>

    * accounts/scwallet: update documentation (#22242)

    * les: switch to new discv5 (#21940)

    This PR enables running the new discv5 protocol in both LES client
    and server mode. In client mode it mixes discv5 and dnsdisc iterators
    (if both are enabled) and filters incoming ENRs for "les" tag and fork ID.
    The old p2p/discv5 package and all references to it are removed.

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

    * rpc: deprecate Client.ShhSubscribe (#22239)

    It never worked, whisper uses polling.

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

    * cmd,core,eth,params,tests: define yolov3 + enable EIP-2565 (#22213)

    Removes the yolov2 definition, adds yolov3, including EIP-2565. This PR also disables some of the erroneously generated blockchain and statetests, and adds the new genesis hash + alloc for yolov3.
    This PR disables the CLI switches for yolo, since it's not complete until we merge support for 2930.

    * les/utils: UDP rate limiter (#21930)

    * les/utils: Limiter

    * les/utils: dropped prior weight vs variable cost logic, using fixed weights

    * les/utils: always create node selector in addressGroup

    * les/utils: renamed request weight to request cost

    * les/utils: simplified and improved the DoS penalty mechanism

    * les/utils: minor fixes

    * les/utils: made selection weight calculation nicer

    * les/utils: fixed linter warning

    * les/utils: more precise and reliable probabilistic test

    * les/utils: fixed linter warning

    * cmd/clef: don't check file permissions on windows (#22251)

    Fixes #20123

    * eth/tracers: fix unigram tracer (#22248)

    * eth: check snap satelliteness, delegate drop to eth (#22235)

    * eth: check snap satelliteness, delegate drop to eth

    * eth: better handle eth/snap satellite relation, merge reg/unreg paths

    * cmd/geth, node: allow configuring JSON-RPC on custom path prefix (#22184)

    This change allows users to set a custom path prefix on which to mount the http-rpc
    or ws-rpc handlers via the new flags --http.rpcprefix and --ws.rpcprefix.

    Fixes #21826

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

    * all: remove unneeded parentheses (#21921)

    * remove uneeded convertion type

    * remove redundant type in composite literal

    * omit explicit type where implicit

    * remove unused redundant parenthesis

    * remove redundant import alias duktape

    * trie : use trie.NewStackTrie instead of new(trie.Trie) (#22246)

    The PR makes use of the stacktrie, which is is more lenient on resource consumption, than the regular trie, in cases where we only need it for DeriveSha

    * core: reset txpool state on sethead (#22247)

    fixes an issue where local transactions that were included in the chain before a SetHead were rejected if resubmitted, since the txpool had not reset the state to the current (older) state.

    * fuzzers: added consensys/gurvy library to bn256 differential fuzzer (#21812)

    This pr adds consensys' gurvy bn256 variant into the code for differential fuzzing.

    * internal/ethapi: comment nitpick (#22270)

    * eth: move eth.Config to a common package (#22205)

    This moves the eth config definition into a separate package, eth/ethconfig.
    Packages eth and les can now import this common package instead of
    importing eth from les, reducing dependencies.

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

    * internal/ethapi: fix typo in comment (#22271)

    * eth: don't wait for snap registration if we're not running snap (#22272)

    Prevents a situation where we (not running snap) connects with a peer running snap, and get stalled waiting for snap registration to succeed (which will never happen), which cause a waitgroup wait to halt shutdown

    * consensus: remove seal verification from the consensus engine interface (#22274)

    * cmd/utils: enable snapshots by default

    * metrics: fix cast omission in cpu_syscall.go (#22262)

    fixes an regression which caused build failure on certain platforms

    * params: just to make snapshots a bit more official

    * all: bloom-filter based pruning mechanism (#21724)

    * cmd, core, tests: initial state pruner

    core: fix db inspector

    cmd/geth: add verify-state

    cmd/geth: add verification tool

    core/rawdb: implement flatdb

    cmd, core: fix rebase

    core/state: use new contract code layout

    core/state/pruner: avoid deleting genesis state

    cmd/geth: add helper function

    core, cmd: fix extract genesis

    core: minor fixes

    contracts: remove useless

    core/state/snapshot: plugin stacktrie

    core: polish

    core/state/snapshot: iterate storage concurrently

    core/state/snapshot: fix iteration

    core: add comments

    core/state/snapshot: polish code

    core/state: polish

    core/state/snapshot: rebase

    core/rawdb: add comments

    core/rawdb: fix tests

    core/rawdb: improve tests

    core/state/snapshot: fix concurrent iteration

    core/state: run pruning during the recovery

    core, trie: implement martin's idea

    core, eth: delete flatdb and polish pruner

    trie: fix import

    core/state/pruner: add log

    core/state/pruner: fix issues

    core/state/pruner: don't read back

    core/state/pruner: fix contract code write

    core/state/pruner: check root node presence

    cmd, core: polish log

    core/state: use HEAD-127 as the target

    core/state/snapshot: improve tests

    cmd/geth: fix verification tool

    cmd/geth: use HEAD as the verification default target

    all: replace the bloomfilter with martin's fork

    cmd, core: polish code

    core, cmd: forcibly delete state root

    core/state/pruner: add hash64

    core/state/pruner: fix blacklist

    core/state: remove blacklist

    cmd, core: delete trie clean cache before pruning

    cmd, core: fix lint

    cmd, core: fix rebase

    core/state: fix the special case for clique networks

    core/state/snapshot: remove useless code

    core/state/pruner: capping the snapshot after pruning

    cmd, core, eth: fixes

    core/rawdb: update db inspector

    cmd/geth: polish code

    core/state/pruner: fsync bloom filter

    cmd, core: print warning log

    core/state/pruner: adjust the parameters for bloom filter

    cmd, core: create the bloom filter by size

    core: polish

    core/state/pruner: sanitize invalid bloomfilter size

    cmd: address comments

    cmd/geth: address comments

    cmd/geth: address comment

    core/state/pruner: address comments

    core/state/pruner: rename homedir to datadir

    cmd, core: address comments

    core/state/pruner: address comment

    core/state: address comments

    core, cmd, tests: address comments

    core: address comments

    core/state/pruner: release the iterator after each commit

    core/state/pruner: improve pruner

    cmd, core: adjust bloom paramters

    core/state/pruner: fix lint

    core/state/pruner: fix tests

    core: fix rebase

    core/state/pruner: remove atomic rename

    core/state/pruner: address comments

    all: run go mod tidy

    core/state/pruner: avoid false-positive for the middle state roots

    core/state/pruner: add checks for middle roots

    cmd/geth: replace crit with error

    * core/state/pruner: fix lint

    * core: drop legacy bloom filter

    * core/state/snapshot: improve pruner

    * core/state/snapshot: polish concurrent logs to report ETA vs. hashes

    * core/state/pruner: add progress report for pruning and compaction too

    * core: fix snapshot test API

    * core/state: fix some pruning logs

    * core/state/pruner: support recovering from bloom flush fail

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

    * core/state/pruner: fix compaction after pruning

    * core/state/pruner: fix compaction range error

    * internal/debug: add switch to format logs with json (#22207)

    adds a flag --log.json which if enabled makes the client format logs with JSON.

    * accounts/abi/bind: fixed unpacking error (#22230)

    There was a dormant error with structured inputs that failed unpacking.
    This commit fixes the error by switching casting to the better abi.ConvertType function.
    It also adds a test for calling a view function that returns a struct

    * cmd/utils, eth/ethconfig: unindex txs older than ~1 year

    * cmd/devp2p: fix documentation for eth-test (#22298)

    * core: fix temp memory blowup caused by defers holding on to state

    * les: enable les/4 and add tests (#22321)

    * cmd/utils: add workaround for FreeBSD statfs quirk (#22310)

    Make geth build on FreeBSD, fixes #22309.

    * cmd/geth: fix js unclean shutdown (#22302)

    * trie: fix bloom crash on fast sync restart

    * rpc: increase the number of subscriptions in storm test (#22316)

    * core/state/snapshot: ensure Cap retains a min number of layers

    * eth: fix snap sync cancellation

    * cmd/devp2p/internal/ethtest: use shared message types (#22315)

    This updates the eth protocol test suite to use the message type
    definitions of the 'production' protocol implementation in eth/protocols/eth.

    * eth/handler, broadcast: optimize tx broadcast mechanism (#22176)

    This PR optimizes the broadcast loop. Instead of iterating twice through a given set of transactions to weed out which peers have and which do not have a tx, to send/announce transactions, we do it only once.

    * core/state: copy the snap when copying the state (#22340)

    * core/state: copy the snap when copying the state

    * core/state: deep-copy snap stuff during state Copy

    * rlp: handle case of normal EOF in Stream.readFull (#22336)

    io.Reader may return n > 0 and io.EOF at the end of the input stream.
    readFull did not handle this correctly, looking only at the error. This fixes
    it to check for n == len(buf) as well.

    * node: always show websocket url in logs (#22307)

    * eth: implement eth66 (#22241)

    * eth/protocols/eth: split up the eth protocol handlers

    * eth/protocols/eth: define eth-66 protocol messages

    * eth/protocols/eth: poc implement getblockheaders on eth/66

    * eth/protocols/eth: implement remaining eth-66 handlers

    * eth/protocols: define handler map for eth 66

    * eth/downloader: use protocol constants from eth package

    * eth/protocols/eth: add ETH66 capability

    * eth/downloader: tests for eth66

    * eth/downloader: fix error in tests

    * eth/protocols/eth: use eth66 for outgoing requests

    * eth/protocols/eth: remove unused error type

    * eth/protocols/eth: define protocol length

    * eth/protocols/eth: fix pooled tx over eth66

    * protocols/eth/handlers: revert behavioural change which caused tests to fail

    * eth/downloader: fix failing test

    * eth/protocols/eth: add testcases + fix flaw with header requests

    * eth/protocols: change comments

    * eth/protocols/eth: review fixes + fixed flaw in RequestOneHeader

    * eth/protocols: documentation

    * eth/protocols/eth: review concerns about types

    * p2p/dnsdisc: fix hot-spin when all trees are empty (#22313)

    In the random sync algorithm used by the DNS node iterator, we first pick a random
    tree and then perform one sync action on that tree. This happens in a loop until any
    node is found. If no trees contain any nodes, the iterator will enter a hot loop spinning
    at 100% CPU.

    The fix is complicated. The iterator now checks if a meaningful sync action can
    be performed on any tree. If there is nothing to do, it waits for the next root record
    recheck time to arrive and then tries again.

    Fixes #22306

    * les: renamed lespay to vflux (#22347)

    * cmd/utils: disable caching preimages by default

    * travis, appveyor, build: bump Go to 1.16

    * les: fix balance expiration (#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 (#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 (#22357)

    * cmd/geth: add db commands stats, compact, put, get, delete (#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 (#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 (#22373)

    * cmd/utils: remove deprecated command line flags (#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 (#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 (#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 (#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 (#22363)

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

    * les: move server pool to les/vflux/client (#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 (#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 (#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 (#22386)

    * les: UDP pre-negotiation of available server capacity (#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 (#22395)

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

    * params: update chts (#22418)

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

    * cmd/utils: fix exclusive check for archive node

    * cmd/utils: set the txlookuplimit to 0

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

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

    * cmd: retire whisper flags (#22421)

    * cmd: retire whisper flags

    * cmd/geth: remove whisper configs

    * tests: update to latest tests (#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

    * Update after the tracers factoring and solve some linting

    * fix all the linting issues

    * fix graphql test

    * fix wallet test

    * fix cmd package test

    * fix internal package test

    * fix internal package test

    * fix accounts and contracts package test

    * fix light package test

    * fix some unit tests and changes on the state_prefetcher.go

    * fix core unit test

    * fix unit test

    * faucet: do not replace normal url to mobile version

    * faucet: revert change

    * eth: added UT for transaction propagation

    * internal/eth: fixed merging side effect

    * accounts: copy signer

    * Added Quorum tag for the UT

    * fix: add some fixes and UT (#3)

    * faucet: revert change

    * eth: added UT for transaction propagation

    * internal/eth: fixed merging side effect

    * accounts: copy signer

    * Added Quorum tag for the UT

    * fix: eth/handler.go accept tx for raft consensus

    * fix: internal/ethapi add check for accessList if its nil

    * add eth66 protocol to consensus

    * fix: broadcaster

    * revert: logs

    * disable flakey facebook test

    * fix: eth/api_backend.go use the modified GetReceipts to get the private receipts for PSI

    * fix: eth/traces fix the tracer to ignore the tx that the party is not part of

    * fix: raft/snapshot remove the trimming of the peer ID

    * Accept chainId on permissioning endpoints

    * fix: force preimages for making complete dumps
    preimages is disabled by default by geth 1.10, but needed for contract extension

    * Specify chainId against permision contracts

    * Specify chainId with NewWalletTransactor

    * Remove chainId from NewWalletTransactor

    * Pass chainId through to NewWalletTransactor from config

    * fix lint

    * fix unit tests

    * fix lint

    * Upgrade protobuf to 1.5.1

    * remove commented code

    * added few error checks and some code cleaning

    * added few error checks and some code cleaning

    * fix conflict merge

    * fix linter

    * Prevent prune-state from being used when IsQuorum is enabled

    Signed-off-by: Antony Denyer <git@antonydenyer.co.uk>

    * Remove date for deprecation notice, made more generic

    * fix: miner/worker.go mix-up when resolving conflicts about miner sleeping

    Co-authored-by: Martin Holst Swende <martin@swende.se>
    Co-authored-by: Mr-Leshiy <alex_pozhilenkov@adoriasoft.com>
    Co-authored-by: Nagy Salem <me@muhnagy.com>
    Co-authored-by: Connor Stein <connor.stein@mail.mcgill.ca>
    Co-authored-by: Shiming <codingmylife@gmail.com>
    Co-authored-by: ligi <ligi@ligi.de>
    Co-authored-by: Péter Szilágyi <peterke@gmail.com>
    Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
    Co-authored-by: Mr-Leshiy <leshiy12345678@gmail.com>
    Co-authored-by: Felföldi Zsolt <zsfelfoldi@gmail.com>
    Co-authored-by: ucwong <ucwong@126.com>
    Co-authored-by: Timo Tijhof <krinklemail@gmail.com>
    Co-authored-by: Sina Mahmoodi <1591639+s1na@users.noreply.github.com>
    Co-authored-by: Guillaume Ballet <gballet@gmail.com>
    Co-authored-by: Suriyaa Sundararuban <isc.suriyaa@gmail.com>
    Co-authored-by: jk-jeongkyun <45347815+jeongkyun-oh@users.noreply.github.com>
    Co-authored-by: yumiel yoomee1313 <yumiel.ko@groundx.xyz>
    Co-authored-by: Melvin Junhee Woo <melvin.woo@groundx.xyz>
    Co-authored-by: Vie <yangchenzhong@gmail.com>
    Co-authored-by: rene <41963722+renaynay@users.noreply.github.com>
    Co-authored-by: Felix Lange <fjl@twurst.com>
    Co-authored-by: Antoine Toulme <atoulme@users.noreply.github.com>
    Co-authored-by: gary rong <garyrong0905@gmail.com>
    Co-authored-by: Chris Ziogas <ziogaschr@gmail.com>
    Co-authored-by: meowsbits <b5c6@protonmail.com>
    Co-authored-by: Dan DeGreef <dan.degreef@gmail.com>
    Co-authored-by: Alex Mazalov <mazalov@gmail.com>
    Co-authored-by: Łukasz Zimnoch <lukaszzimnoch1994@gmail.com>
    Co-authored-by: Alex Prut <1648497+alexprut@users.noreply.github.com>
    Co-authored-by: isdyaufh8o7cq <sebaskil@icloud.com>
    Co-authored-by: Or Neeman <oneeman@gmail.com>
    Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>
    Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>
    Co-authored-by: achraf <achraf.sellami@consensys.net>
    Co-authored-by: achraf17 <achrafsellami0@gmail.com>
    Co-authored-by: Baptiste Boussemart <baptiste.boussemart@consensys.net>
    Co-authored-by: Antony Denyer <git@antonydenyer.co.uk>
    Co-authored-by: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>
    Co-authored-by: Antony Denyer <email@antonydenyer.co.uk>

commit cd11c38e7bc0345a70ef85a8b085e7755bb0ee78
Author: Antony Denyer <email@antonydenyer.co.uk>
Date:   Mon Jan 24 10:39:07 2022 +0000

    bump version to 21.10.2 (#1310)

commit 393ed37d277098d89fca478eb5565c006949ba5a
Author: Satpal <28562234+SatpalSandhu61@users.noreply.github.com>
Date:   Mon Jan 24 10:35:17 2022 +0000

    Fix issue with inconsistent private state root when using MPS with PMT. (#1283)

    * Fix issue with inconsistent private state root when using MPS with PMT.

    * Extend debug.dumpBlock() to allow dump of private state when second parameter set to "private".

commit 559b9f8207cda6656a5ad465fb31679b9aa2a93b
Author: achraf17 <achraf.sellami@consensys.net>
Date:   Fri Jan 14 14:01:55 2022 +0400

    fix readme link for transaction lifecycle (#1309)

commit 111641ff8be49fc209cfdbfcd3aca91133780817
Author: Antony Denyer <email@antonydenyer.co.uk>
Date:   Thu Jan 13 16:03:56 2022 +0000

    readme fix links (#1307)

commit 595520d9d220cd0d350a9dab1b59294ea7eb3893
Author: Antony Denyer <email@antonydenyer.co.uk>
Date:   Thu Jan 13 15:42:24 2022 +0000

    Update readme to fix dead links (#1306)

    * Update readme to fix dead links

    Co-authored-by: achraf17 <achrafsellami0@gmail.com>

commit 729f58f57840e8c5eadf8d5620341393de0fd5a7
Author: Antony Denyer <email@antonydenyer.co.uk>
Date:   Thu Jan 13 08:56:11 2022 +0000

    Bump version to v21.10.1 (#1304)

commit 5c9f94d5f81a5608e051ffd6a06454dc527adcf1
Author: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>
Date:   Thu Jan 13 09:55:50 2022 +0100

    Fix errors when there is high load (#1302)

    * fix: concurrent modification on map

    * fix: seg fault
    write cache in same routine

    * revert modification

    Co-authored-by: Antony Denyer <email@antonydenyer.co.uk>

commit f45e6858f0ce4788ddbd8ee3e4a22f49b1345bdc
Author: Antony Denyer <email@antonydenyer.co.uk>
Date:   Wed Jan 12 12:35:27 2022 +0000

    Update packages to fix issues identified by cve db (#1303)

    CVE-2019-11254
    CVE-2020-27813

commit f6a2b20a7fb7dba7d10e49a72e4a6a9a47e9bf76
Author: Lucas Saldanha <lucas.saldanha@consensys.net>
Date:   Thu Jan 13 01:01:54 2022 +1300

    Merge pull request #1280 from lucassaldanha/qbft-logs

    Remove warn log when receiving pre-prepare msg for future block

commit aa9e5b879b883c569b7e7a91400e94270f0f0866
Merge: 07dd08ea6 8abac49bc
Author: Antony Denyer <email@antonydenyer.co.uk>
Date:   Wed Jan 12 11:52:32 2022 +0000

    Merge pull request #1289 from ConsenSys/github/template

    add contributing statement on issues

commit 8abac49bcad055c1a5df9ee9f21715c2eec1267c
Merge: 38440a65b 07dd08ea6
Author: Antony Denyer <email@antonydenyer.co.uk>
Date:   Wed Jan 12 09:51:50 2022 +0000

    Merge branch 'master' into github/template

commit 38440a65ba4bf01ea3f0ab2852fc6b2ef21501e8
Author: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>
Date:   Wed Jan 12 10:33:42 2022 +0100

    Update .github/CONTRIBUTING.md

commit 07dd08ea61076e107507aa2fe17503e2a86eb4f5
Author: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>
Date:   Tue Jan 11 15:29:39 2022 +0100

    fix: limit number of concurrent ATs running (#1276)

    limit number of concurrent ATs running and the size of the matrix

commit d755fa1babe8b73b65156d808e7023caf71dfbfa
Author: Baptiste Boussemart <baptiste.boussemart@consensys.net>
Date:   Tue Jan 4 14:49:57 2022 +0100

    add contributing statement on issues

commit 919800f019cc5d2b931b5cd81600640a8e7cd444
Author: Jitendra Bhurat <jbhurat@gmail.com>
Date:   Tue Nov 2 05:57:47 2021 -0400

    Added test to confirm that there is no deadlock when testQBFTBlock is set to 1 (#1272)

    Co-authored-by: Ricardo Silva <1945557+ricardolyn@users.noreply.github.com>

commit de5e8b25875295547f30a9419f47abd1fa115e0e
Merge: 3bb2ae67b ef940787d
Author: Antony Denyer <email@antonydenyer.co.uk>
Date:   Tue Nov 2 09:31:04 2021 +0000

    Merge pull request #1274 from antonydenyer/master

    Bump version to v21.10.0

commit ef940787de3fa14e7a7c0fca356ae95944882225
Merge: cf7fdc489 3bb2ae67b
Author: Antony Denyer <email@antonydenyer.co.uk>
Date:   Tue Nov 2 09:02:25 2021 +0000

    Merge branch 'master' into master

commit 3bb2ae67b4abde6419c0d1f2f0304c4a54386a51
Merge: 9b8739efc 6be279da7
Author: Antony Denyer <email@antonydenyer.co.uk>
Date:   Tue Nov 2 09:02:13 2021 +0000

    Merge pull request #1273 from chris-j-h/upstream-merge-fixes

    Upstream merge fixes

commit cf7fdc489f520ed2afaa5ea833073afee74a5903
Author: Antony Denyer <git@antonydenyer.co.uk>
Date:   Mon Nov 1 10:36:09 2021 +0000

    Bump version to v21.10.0

commit 6be279da746cc11a9550da03b5db72518cd7678b
Author: chris <chrishounsom@icloud.com>
Date:   Mon Nov 1 10:24:27 2021 +0000

    Add Quorum Privacy Precompile to ActivePrecompiles list
    This is currently only used for the experimental YoloV2 EIP 2929 (where all active precompiles for the current block height must be known) so not critical but worth fixing ahead of the concrete release that will be pulled in from a future upstream geth merge

    Also includes core/vm: fix Byzantium address list (#22603) (cherry picked from commit 44fe466999ce7f8b02de7e83de955f8847342309)

commit 9b8739efc933036b8956c6c2c236d3a5f30afaa4
Author: Satpal <28562234+SatpalSandhu61@users.noreply.github.com>
Date:   Thu Oct 7 14:28:00 2021 +0100

    Receipt unit test was not checking QuorumReceiptExtraData in PSReceipt (#1266)

commit 3d453a45fd0e69ed2e33c5cb51560bd2473c544b
Author: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>
Date:   Fri Oct 1 10:01:57 2021 +0200

    Revert "fix: private trie cache db with gc (#1235)" (#1262)

    Bug found in the MPS, want to package this feature for both dual state and MPS.

    This reverts commit 614b212d4f99565acde226dd7c74dfa7d559aee2.

commit 87648f6a39064efc5ba4fc775f32ff2af4531fa1
Author: Ricardo Silva <1945557+ricardolyn@users.noreply.github.com>
Date:   Thu Sep 30 17:01:56 2021 +0100

    Send transactions to all peers instead of a sub-set (#1261)

    * send transactions to all peers

    * add unit test

    * tidy up

    * fix lint issues

    * add wait for peers to be synced

    * Apply suggestions from code review

    Co-authored-by: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>

    * improve handling of peers registration and fix issues from suggestion.

    Co-authored-by: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>

commit 743e4a164b39d1186bbc27367b4cd2cfc4bb635c
Author: Vinod Damle <vdamle@users.noreply.github.com>
Date:   Thu Sep 30 09:31:07 2021 -0400

    IBFT: Ensure that Committed Seal is not zero value (#1118)

    * Ensure there is no zero addr Committed Seal

    When a commit message is processed, if the Proposal is missing due to
    some reason, we should not generate a Zero address Committed Seal. Such
    an incorrect seal causes `BAD BLOCK` failure with an `invalid signature`
    error during operations such as Block import

    * run gofmt

    * Remove stale comment

    * Add unit test

    * Revert "Remove stale comment"

    This reverts commit 279be718b6ee3926125fa2b0397ca75f9e90b972.

    * Move comment

    * Update test with error checking

    Co-authored-by: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>

    Co-authored-by: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>

commit b57775d045863adfe84764a3849713086bb6f378
Author: Loïc Vincent-Genod <37535451+VGLoic@users.noreply.github.com>
Date:   Thu Sep 30 10:57:20 2021 +0200

    replace crypto secp256k1 (#1260)

    * delete internal module

    * remove crypto/secp256k1 dependency

    * precise new repository in README

commit 155bcdb483e59b5e5930e5360998b8fcf3b54e0a
Author: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>
Date:   Wed Sep 22 11:04:22 2021 +0200

    typo: change whitelist to autorization list (#1257)

    * typo: change whitelist to autorization list

    * add unit test

    * fix: add log when using deprecated flag

commit 90307a783873eafa9406c7a2d3fb1c05258a84db
Author: Loïc Vincent-Genod <37535451+VGLoic@users.noreply.github.com>
Date:   Tue Sep 21 12:44:14 2021 +0200

    feat: add build sentinel job in the build workflow (#1256)

    Co-authored-by: Ricardo Silva <1945557+ricardolyn@users.noreply.github.com>

commit c6bce6491817dc790584804d84d6c750b750cf9e
Author: Nam Truong <nam.p.truong@outlook.com>
Date:   Tue Sep 14 14:32:52 2021 +0100

    Contract extension with mandatory recipients (#1252)

    * Add MandatoryRecipients data in SendRequest and SendSignedTxRequest to private TM

    * Update send and sendsignedtx method to include MandatoryRecipients, reject if PTM does not support correct version

    * Add new Tessera feature version - mandatoryRecipientsVersion

    * Add PrivacyFlagMandatoryRecipients and new feature to support MandatoryRecipients

    * Add mandatoryFor to PrivateTxArgs, validations and unit tests

    * Implement GetMandatory api call to Tessera

    * interface impl

    * update mock generation

    * update mock generation

    * Cater for mandatory recipients data when extending contract

    * api to retrieve privacymetadata - also include mandatory recipients for relevant flag type

    * unit tests

    * fix lint check

    * don't fetch mr when tx is standardprivate

    Co-authored-by: Krish Swaminathan <39480483+Krish1979@users.noreply.github.com>

commit 58ac9bae4eb2da01eb645391cf6827526b3f3aed
Author: Nam Truong <nam.p.truong@outlook.com>
Date:   Tue Sep 14 10:30:38 2021 +0100

    Fix private receipt of privacy marker transaction (#1253)

    * Add MandatoryRecipients data in SendRequest and SendSignedTxRequest to private TM

    * Update send and sendsignedtx method to include MandatoryRecipients, reject if PTM does not support correct version

    * Add new Tessera feature version - mandatoryRecipientsVersion

    * Add PrivacyFlagMandatoryRecipients and new feature to support MandatoryRecipients

    * Add mandatoryFor to PrivateTxArgs, validations and unit tests

    * fix return private receipt if transaction is a privacy marker transaction

commit c1add76e3effe97fd6c2eb2329bc0d63512b9f39
Author: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>
Date:   Wed Sep 8 10:25:24 2021 +0200

    upgradebot with git configured so git merge works (#1250)

    Co-authored-by: Ricardo Silva <1945557+ricardolyn@users.noreply.github.com>

commit 38999c7f221f77077864270d1948be0f8fc1ef04
Author: Nam Truong <nam.p.truong@outlook.com>
Date:   Tue Sep 7 16:23:34 2021 +0100

    Support mandatory recipients (#1243)

    * Add MandatoryRecipients data in SendRequest and SendSignedTxRequest to private TM

    * Update send and sendsignedtx method to include MandatoryRecipients, reject if PTM does not support correct version

    * Add new Tessera feature version - mandatoryRecipientsVersion

    * Add PrivacyFlagMandatoryRecipients and new feature to support MandatoryRecipients

    * Add mandatoryFor to PrivateTxArgs, validations and unit tests

    Co-authored-by: Krish Swaminathan <39480483+Krish1979@users.noreply.github.com>

commit 15fceadfd0c0173ecdaf21807e9bb6a1871d58df
Author: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>
Date:   Fri Sep 3 11:18:34 2021 +0200

    fix: flacky unit test (#1248)

    * fix: flacky unit test
    wait group outside the go routine
    retry loop for test that depends on non-triggered state

    * fix: review

    Co-authored-by: Ricardo Silva <1945557+ricardolyn@users.noreply.github.com>

commit df651519a53790676dbef401b5f24b1bc0b183da
Author: Quorum Bot <46820074+quorumbot@users.noreply.github.com>
Date:   Fri Sep 3 09:20:44 2021 +0100

    [Upgrade] Go-Ethereum release v1.9.25 (#1223)

    * params: begin v1.9.25 release cycle

    * crypto/bn256: improve bn256 fuzzer (#21815)

    * crypto/cloudflare: fix nil deref in random G1/G2 reading

    * crypto/bn256: improve fuzzer

    * crypto/bn256: fix some flaws in fuzzer

    * crypto/bn256: better comments for u, P and Order (#21836)

    * tests/fuzzers: improve the fuzzers (#21829)

    * tests/fuzzers, common/bitutil: make fuzzers use correct returnvalues + remove output

    * tests/fuzzers/stacktrie: fix duplicate-key insertion in stacktrie (false positive)

    * tests/fuzzers/stacktrie: fix compilation error

    * tests/fuzzers: linter nits

    * core/vm, protocol_params: implement eip-2565 modexp repricing (#21607)

    * core/vm, protocol_params: implement eip-2565 modexp repricing

    * core/vm: fix review concerns

    * core, all: split vm.Context into BlockContext and TxContext (#21672)

    * all: core: split vm.Config into BlockConfig and TxConfig

    * core: core/vm: reset EVM between tx in block instead of creating new

    * core/vm: added docs

    * accounts/abi: template: set events Raw field in Parse methods (#21807)

    * common: fix documentation of Address.SetBytes (#21814)

    * crypto/bn256: refine comments according to #19577, #21595, and #21836 (#21847)

    * consensus/ethash: fix usage of *reflect.SliceHeader (#21372)

    * consensus/ethash: only use *reflect.SliceHeader, not reflect.SliceHeader. See comment here: https://github.com/golang/go/issues/40397\#issuecomment-663748689

    * consensus/ethash: pr feedback from @mdempsky, makes a copy of dest such that is not mutated

    * consensus/ethash: remove noop assign

    * consensus/ethash: apply same fix to another location

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

    * cmd/geth: remove retesteth

    * crypto/secp256k1: add checking z sign in affineFromJacobian (#18419)

    The z == 0 check is hit whenever we Add two points with the same x1/x2
    coordinate. crypto/elliptic uses the same check in their affineFromJacobian
    function. This change does not affect block processing or tx signature verification
    in any way, because it does not use the Add or Double methods.

    * cmd/geth: improve les test on windows (#21860)

    * all: disable recording preimage of trie keys (#21402)

    * cmd, core, eth, light, trie: disable recording preimage by default

    * core, eth: fix unit tests

    * core: fix import

    * all: change to nopreimage

    * cmd, core, eth, trie: use cache.preimages flag

    * cmd: enable preimages for archive node

    * cmd/utils, trie: simplify preimage tracking a bit

    * core: fix linter

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

    * metrics: fix the panic for reading empty cpu stats (#21864)

    * node: support expressive origin rules in ws.origins (#21481)

    * Only compare hostnames in ws.origins

    Also using a helper function for ToLower consolidates all preparation steps in one function for more maintainable consistency.

    Spaces => tabs

    Remove a semicolon

    Add space at start of comment

    Remove parens around conditional

    Handle case wehre parsed hostname is empty

    When passing a single word like "localhost" the parsed hostname is an empty string. Handle this and the error-parsing case together as default, and the nonempty hostname case in the conditional.

    Refactor with new originIsAllowed functions

    Adds originIsAllowed() & ruleAllowsOrigin(); removes prepOriginForComparison

    Remove blank line

    Added tests for simple allowed-orign rule

    which does not specify a protocol or port, just a hostname

    Fix copy-paste: `:=` => `=`

    Remove parens around conditional

    Remove autoadded whitespace on blank lines

    Compare scheme, hostname, and port with rule

    if the rule specifies those portions.

    Remove one autoadded trailing whitespace

    Better handle case where only origin host is given

    e.g. "localhost"

    Remove parens around conditional

    Refactor: attemptWebsocketConnectionFromOrigin DRY

    Include return type on helper function

    Provide srv obj in helper fn

    Provide srv to helper fn

    Remove stray underscore

    Remove blank line

    parent 93e666b4c1e7e49b8406dc83ed93f4a02ea49ac1
    author wbt <wbt@users.noreply.github.com> 1598559718 -0400
    committer Martin Holst Swende <martin@swende.se> 1605602257 +0100
    gpgsig -----BEGIN PGP SIGNATURE-----

     iQFFBAABCAAvFiEEypmrtbNuJK1doP1AaDtDjAWl3fAFAl+zi9ARHG1hcnRpbkBz
     d2VuZGUuc2UACgkQaDtDjAWl3fDRiwgAoMtzU8dwRV7Q9xkCwWEx9Wz2f3n6jUr2
     VWBycDKGKwRkPPOER3oc9kzjGU/P1tFlK07PjfnAKZ9KWzxpDcJZwYM3xCBurG7A
     16y4YsQnzgPNONv3xIkdi3RZtDBIiPFFEmdZFFvZ/jKexfI6JIYPngCAoqdTIFb9
     On/aPvvVWQn1ExfmarsvvJ7kUDUG77tZipuacEH5FfFsfelBWOEYPe+I9ToUHskv
     +qO6rOkV1Ojk8eBc6o0R1PnApwCAlEhJs7aM/SEOg4B4ZJJneiFuEXBIG9+0yS2I
     NOicuDPLGucOB5nBsfIKI3USPeE+3jxdT8go2lN5Nrhm6MimoILDsQ==
     =sgUp
     -----END PGP SIGNATURE-----

    Refactor: drop err var for more concise test lines

    Add several tests for new WebSocket origin checks

    Remove autoadded whitespace on blank lines

    Restore TestWebsocketOrigins originally-named test

    and rename the others to be helpers rather than full tests

    Remove autoadded whitespace on blank line

    Temporarily comment out new test sets

    Uncomment test around origin rule with scheme

    Remove tests without scheme on browser origin

    per https://github.com/ethereum/go-ethereum/pull/21481/files#r479371498

    Uncomment tests with port; remove some blank lines

    Handle when browser does not specify scheme/port

    Uncomment test for including scheme & port in rule

    Add IP tests

    * node: more tests + table-driven, ws origin changes

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

    * trie, rpc, cmd/geth: fix tests on 32-bit and windows + minor rpc fixes (#21871)

    * trie: fix tests to work on 32-bit systems

    * les: make test work on 32-bit platform

    * cmd/geth: fix windows-issues on tests

    * trie: improve balance

    * cmd/geth: make account tests less verbose + less mem intense

    * rpc: make debug-level log output less verbose

    * cmd/geth: lint

    * crypto/bn256: fix bn256Mul fuzzer to not hang on large input (#21872)

    * crypto/bn256: fix bn256Mul fuzzer to not hang on large input

    * Update crypto/bn256/bn256_fuzz.go

    Co-authored-by: ligi <ligi@ligi.de>

    Co-authored-by: ligi <ligi@ligi.de>

    * p2p: avoid spinning loop on out-of-handles (#21878)

    * p2p: avoid busy-loop on temporary errors

    * p2p: address review concerns

    * les/utils: protect against WeightedRandomSelect overflow (#21839)

    Also fixes a bug in les/flowcontrol that caused the overflow.

    * github: Add new style of issue-templates

    closes #20024

    * tests/fuzzers/bls1381: add bls fuzzer (#21796)

    * added bls fuzzer

    * crypto/bls12381: revert bls-changes, fixup fuzzer tests

    * fuzzers: split bls fuzzing into 8 different units

    * fuzzers/bls: remove (now stale) corpus

    * crypto/bls12381: added blsfuzz corpus

    * fuzzers/bls12381: fix the bls corpus

    * fuzzers: fix oss-fuzz script

    * tests/fuzzers: fixups on bls corpus

    * test/fuzzers: remove leftover corpus

    Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>

    * cmd/faucet: improve handling of facebook post url (#21838)

    Resolves #21532

    Co-authored-by: roger <dengjun@huobi.com>

    * les: fix GetProofsV2 bug (#21896)

    * github: Remove vulnerability.md (#21894)

    This type is automatically offered by github after changing to the new style and a security.md being present

    * cmd/devp2p/internal/ethtest: add 'large announcement' tests (#21792)

    * cmd/devp2p/internal/ethtest: added large announcement tests

    * cmd/devp2p/internal/ethtest: added large announcement tests

    * cmd/devp2p/internal/ethtest: refactored stuff a bit

    * cmd/devp2p/internal/ethtest: added TestMaliciousStatus/Handshake

    * cmd/devp2p/internal/ethtest: fixed rebasing issue

    * happy linter, happy life

    * cmd/devp2p/internal/ethtest: used readAndServe

    * stuff

    * cmd/devp2p/internal/ethtest: fixed test cases

    * core/types: fixed typo (#21897)

    * all: simplify nested complexity and if blocks ending with a return statement (#21854)

    Changes:

        Simplify nested complexity
        If an if blocks ends with a return statement then remove the else nesting.

    Most of the changes has also been reported in golint https://goreportcard.com/report/github.com/ethereum/go-ethereum#golint

    * graphql: always return 400 if errors are present in the response (#21882)

    * Make sure to return 400 when errors are present in the response

    * graphql: use less memory in chainconfig for tests

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

    * all: remove redundant conversions and import names (#21903)

    * p2p/discover: fix deadlock in discv5 message dispatch (#21858)

    This fixes a deadlock that could occur when a response packet arrived
    after a call had already rece…
antonydenyer pushed a commit to Consensys/quorum that referenced this issue Apr 27, 2022
* p2p/discover: fix deadlock in discv5 message dispatch (#21858)

This fixes a deadlock that could occur when a response packet arrived
after a call had already received enough responses and was about to
signal completion to the dispatch loop.

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

* crypto: signing builds with signify/minisign (#21798)

* internal/build: implement signify's signing func
* Add signify to the ci utility
* fix output file format
* Add unit test for signify
* holiman's + travis' feedback
* internal/build: verify signify's output
* crypto: move signify to common dir
* use go-minisign to verify binaries
* more holiman feedback
* crypto, ci: support minisign output
* only accept one-line trusted comments
* configurable untrusted comments
* code cleanup in tests
* revert to use ed25519 from the stdlib
* bug: fix for empty untrusted comments
* write timestamp as comment if trusted comment isn't present
* rename line checker to commentHasManyLines
* crypto: added signify fuzzer (#6)
* crypto: added signify fuzzer
* stuff
* crypto: updated signify fuzzer to fuzz comments
* crypto: repro signify crashes
* rebased fuzzer on build-signify branch
* hide fuzzer behind gofuzz build flag
* extract key data inside a single function
* don't treat \r as a newline
* travis: fix signing command line
* do not use an external binary in tests
* crypto: move signify to crypto/signify
* travis: fix formatting issue
* ci: fix linter build after package move

Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>

* accounts, signer: fix Ledger Live account derivation path (clef) (#21757)

* signer/core/api: fix derivation of ledger live accounts

For ledger hardware wallets, change account iteration as follows:

- ledger legacy: m/44'/60'/0'/X; for 0<=X<5
- ledger live: m/44'/60'/0'/0/X; for 0<=X<5

- ledger legacy: m/44'/60'/0'/X; for 0<=X<10
- ledger live: m/44'/60'/X'/0/0; for 0<=X<10

Non-ledger derivation is unchanged and remains as:
- non-ledger: m/44'/60'/0'/0/X; for 0<=X<10

* signer/core/api: derive ten default paths for all hardware wallets, plus ten legacy and ten live paths for ledger wallets

* signer/core/api: as .../0'/0/0 already included by default paths, do not include it again with ledger live paths

* accounts, signer: implement path iterators for hd wallets

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

* accounts/keystore: add missing function doc for SignText (#21914)

Co-authored-by: Pascal Dierich <pascal@pascaldierich.com>

* cmd/geth: make tests run quicker + use less memory and disk (#21919)

* cmd/devp2p/internal/ethtest: add transaction tests (#21857)

* p2p/nodestate: fix deadlock during shutdown of les server (#21927)

This PR fixes a deadlock reported here: #21925

The cause is that many operations may be pending, but if the close happens, only one of them gets awoken and exits, the others remain waiting for a signal that never comes.

* les: fix nodiscover option (#21906)

* params: update CHTs (#21941)

* eth: fix error in tracing if reexec is set (#21830)

* eth: fix error in tracing if reexec is set

* eth: change pointer embedding to value-embedding

* go.mod: update github.com/golang/snappy(#21934)

This updates the snappy library depency to include a fix for
a Go 1.16 incompatibility issue.

* cmd/devp2p: add node filter for snap + fix arg error (#21950)

* core/vm/runtime: remove duplicated line (#21956)


This line is duplicated, though it doesn't cause any issues.

* core: improve contextual information on core errors (#21869)

A lot of times when we hit 'core' errors, example: invalid tx, the information provided is
insufficient. We miss several pieces of information: what account has nonce too high,
and what transaction in that block was offending?

This PR adds that information, using the new type of wrapped errors.
It also adds a testcase which (partly) verifies the output from the errors.

The first commit changes all usage of direct equality-checks on core errors, into
using errors.Is. The second commit adds contextual information. This wraps most
of the core errors with more information, and also wraps it one more time in
stateprocessor, to further provide tx index and tx hash, if such a tx is encoutered in
a block. The third commit uses the chainmaker to try to generate chains with such
errors in them, thus triggering the errors and checking that the generated string meets
expectations.

* cmd/geth: implement vulnerability check (#21859)

* cmd/geth: implement vulnerability check

* cmd/geth: use minisign to verify vulnerability feed

* cmd/geth: add the test too

* cmd/geth: more minisig/signify testing

* cmd/geth: support multiple pubfiles for signing

* cmd/geth: add @holiman minisig pubkey

* cmd/geth: polishes on vulnerability check

* cmd/geth: fix ineffassign linter nit

* cmd/geth: add CVE to version check struct

* cmd/geth/testdata: add missing testfile

* cmd/geth: add more keys to versionchecker

* cmd/geth: support file:// URLs in version check

* cmd/geth: improve key ID printing when signature check fails

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

* les: cosmetic rewrite of the arm64 float bug workaround (#21960)

* les: revert arm float bug workaround to check go 1.15

* add traces to reproduce outside travis

* simpler workaround

* crypto/secp256k1: add workaround for go mod vendor (#21735)

Go won't vendor C files if there are no Go files present in the directory.
Workaround is to add dummy Go files.

Fixes: #20232

* accounts/abi/bind: allow specifying signer on transactOpts (#21356)

This commit enables users to specify which signer they want to use while creating their transactOpts.
Previously all contract interactions used the homestead signer. Now a user can specify whether they
want to sign with homestead or EIP155 and specify the chainID which adds another layer of security.

Closes #16484

* common: improve printing of Hash and Address (#21834)

Both Hash and Address have a String method, which returns the value as
hex with 0x prefix. They also had a Format method which tried to print
the value using printf of []byte. The way Format worked was at odds with
String though, leading to a situation where fmt.Sprintf("%v", hash)
returned the decimal notation and hash.String() returned a hex string.

This commit makes it consistent again. Both types now support the %v,
%s, %q format verbs for 0x-prefixed hex output. %x, %X creates
unprefixed hex output. %d is also supported and returns the decimal
notation "[1 2 3...]".

For Address, the case of hex characters in %v, %s, %q output is
determined using the EIP-55 checksum. Using %x, %X with Address
disables checksumming.

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

* core,les: headerchain import in batches (#21471)

* core: add test for headerchain inserts

* core, light: write headerchains in batches

* core: change to one callback per batch of inserted headers + review concerns

* core: error-check on batch write

* core: unexport writeHeaders

* core: remove callback parameter in InsertHeaderChain

The semantics of InsertHeaderChain are now much simpler: it is now an
all-or-nothing operation. The new WriteStatus return value allows
callers to check for the canonicality of the insertion. This change
simplifies use of HeaderChain in package les, where the callback was
previously used to post chain events.

* core: skip some hashing when writing headers

* core: less hashing in header validation

* core: fix headerchain flaw regarding blacklisted hashes

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

* cmd/geth: add test to verify regexps in version check (#21962)

* crypto/signify, build: fix archive signing with signify (#21977)

This fixes some issues in crypto/signify and makes release signing work.

The archive signing step in ci.go used getenvBase64, which decodes the key data.
This is incorrect here because crypto/signify already base64-decodes the key.

* p2p/enode: avoid crashing for invalid IP (#21981)

The database panicked for invalid IPs. This is usually no problem
because all code paths leading to node DB access verify the IP, but it's
dangerous because improper validation can turn this panic into a DoS
vulnerability. The quick fix here is to just turn database accesses
using invalid IP into a noop. This isn't great, but I'm planning to
remove the node DB for discv5 long-term, so it should be fine to have
this quick fix for half a year.

Fixes #21849

* les, light: remove untrusted header retrieval in ODR (#21907)

* les, light: remove untrusted header retrieval in ODR

* les: polish

* light: check the hash equality in odr

* core, trie: speed up some tests with quadratic processing flaw (#21987)

This commit fixes a flaw in two testcases, and brings down the exec-time from ~40s to ~8s for trie/TestIncompleteSync.

The checkConsistency was performed over and over again on the complete set of nodes, not just the recently added, turning it into a quadratic runtime.

* les: introduce forkID (#21974)

* les: introduce forkID

* les: address comment

* build: upgrade to Go 1.15.6 (#21986)

* params: go-ethereum v1.9.25 stable

* params: begin v1.9.26 release cycle

* les: rework float conversion on arm64 and other architectures (#21994)

The previous fix #21960 converted the float to an intermediate signed int, before attempting the uint conversion. Although this works, this doesn't guarantee that other architectures will work the same.

* miner, test: fix potential goroutine leak (#21989)

In miner/worker.go, there are two goroutine using channel w.newWorkCh: newWorkerLoop() sends to this channel, and mainLoop() receives from this channel. Only the receive operation is in a select.

However, w.exitCh may be closed by another goroutine. This is fine for the receive since receive is in select, but if the send operation is blocking, then it will block forever. This commit puts the send in a select, so it won't block even if w.exitCh is closed.

Similarly, there are two goroutines using channel errc: the parent that runs the test receives from it, and the child created at line 573 sends to it. If the parent goroutine exits too early by calling t.Fatalf() at line 614, then the child goroutine will be blocked at line 574 forever. This commit adds 1 buffer to errc. Now send will not block, and receive is not influenced because receive still needs to wait for the send.

* cmd/faucet: use Twitter API instead of scraping webpage (#21850)

This PR adds support for using Twitter API to query the tweet and author details. There are two reasons behind this change:

- Twitter will be deprecating the legacy website on 15th December. The current method is expected to stop working then.
- More importantly, the current system uses Twitter handle for spam protection but the Twitter handle can be changed via automated calls. This allows bots to use the same tweet to withdraw funds infinite times as long as they keep changing their handle between every request. The Rinkeby as well as the Goerli faucet are being actively drained via this method. This PR changes the spam protection to be based on Twitter IDs instead of usernames. A user can not change their Twitter ID.

* core/txpool: remove "local" notion from the txpool price heap (#21478)

* core: separate the local notion from the pricedHeap

* core: add benchmarks

* core: improve tests

* core: address comments

* core: degrade the panic to error message

* core: fix typo

* core: address comments

* core: address comment

* core: use PEAK instead of POP

* core: address comments

* consensus/ethash: implement faster difficulty calculators (#21976)

This PR adds re-written difficulty calculators, which are based on uint256. It also adds a fuzzer + oss-fuzz integration for the new fuzzer. It does differential fuzzing between the new and old calculators.

Note: this PR does not actually enable the new calculators.

* consensus: refactor FinalizeAndAssemble to use Finalize (#21993)

* core, eth, les: implement unclean-shutdown marker (#21893)

This PR implements unclean shutdown marker. Every time geth boots, it adds a timestamp to a list of timestamps in the database. This list is capped at 10. At a clean shutdown, the timestamp is removed again. 
Thus, when geth exits unclean, the marker remains, and at boot up we show the most recent unclean shutdowns to the user, which makes it easier to diagnose root-causes to certain problems. 

Co-authored-by: Nagy Salem <me@muhnagy.com>

* abi/bind: fix error-handling in generated wrappers for functions returning structs (#22005)

Fixes the template used when generating code, which in some scenarios would lead to panic instead of returning an error.

* cmd/abigen: clarify abigen alias flag usage (#21875)

* doc: clarify abigen alias flag usage

update the `abigen --alias` flag help info, give an example to make it more clear

related issue: https://github.com/ethereum/go-ethereum/issues/21846

* Update cmd/abigen/main.go

Co-authored-by: ligi <ligi@ligi.de>

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

* core, eth: split eth package, implement snap protocol (#21482)

This commit splits the eth package, separating the handling of eth and snap protocols. It also includes the capability to run snap sync (https://github.com/ethereum/devp2p/blob/master/caps/snap.md) , but does not enable it by default. 

Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Martin Holst Swende <martin@swende.se>

* cmd/geth: fixed parallelization flaw in account import test (#22002)

* eth/protocols/eth: remove magic numbers in test (#21999)

* eth, core: speed up some tests (#22000)

* les: les/4 minimalistic version (#21909)

* les: allow tx unindexing in les/4 light server mode

* les: minor fixes

* les: more small fixes

* les: add meaningful constants for recentTxIndex handshake field

* cmd/faucet: sort requests by newest first (#22018)

* eth/download/statesync : optimize to avoid a copy in state sync hashing  (#22035)

* eth/download/statesync : state hash sum optimized

* go fmt with blank in imports

* keccak read arg fix

* eth/downloader: fix typo in comment (#22019)

* internal/ethapi: restore net_version RPC method (#22061)

During the snap and eth refactor, the net_version rpc call was falsely deprecated.
This restores the net_version RPC handler as most eth2 nodes and other software
depend on it.

* common,crypto: move fuzzers out of core (#22029)

* common,crypto: move fuzzers out of core

* fuzzers: move vm fuzzer out from core

* fuzzing: rework cover package logic

* fuzzers: lint

* README.md: update Travis badge (#22079)

The legacy dot-org URL was displaying a message about the repository
having migrated to the dot-com service, which now covers open-source
projects as well.

* eth, eth/tracers: include intrinsic gas in calltracer, expose for all tracers (#22038)

* eth/tracers: share tx gas price with js tracer

* eth/tracers: use `go generate`

* eth/tracers: try with another version of go-bindata

* eth/tracers: export txGas

* eth, eth/tracers: pass intrinsic gas to js tracers

eth/tracers: include tx gas in tracers usedGas

eth/tracers: fix prestate tracer's sender balance

eth/tracers: rm unnecessary import

eth/tracers: pass intrinsicGas separately to tracer

eth/tracers: fix tests broken by lack of txdata

eth, eth/tracers: minor fix

* eth/tracers: regenerate assets + unexport test-struct + add testcase

* eth/tracers: simplify tests + make table-driven

Co-authored-by: Guillaume Ballet <gballet@gmail.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>

* tests/fuzzers: fix false positive in bitutil fuzzer (#22076)

* cmd/geth: replace wiki links with new doc pages (#22071)

* eth/filters: replace wiki links with new doc pages (#22070)

* signer: docs - replace wiki links with new doc pages (#22069)

* eth/downloader: remove unnecessary condition (#22052)

* docs: replace wiki links with new doc pages in readme.md (#22065) (#22066)

* core/rawdb, eth/protocols : Method name typo fix (#22026)

* accounts/abi/bind: fix erroneous test (#22053)

closes #22049

* core/state/snapshot: gethring -> gathering typo (#22104)

* cmd/geth: update copyright year (#22099)

* .github: Replace wiki links with new doc pages (#22065) (#22068)

* node: rename startNetworking to openEndpoints (#22105)

* SECURITY.md: link to release page (#22067)

Add links to go-ethereum's GitHub release page.

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

* cmd: support v1.1 Twitter API in faucet, fix puppeth

* miner: avoid sleeping in miner (#22108)

This PR removes a logic in the miner, which was originally intended to help temporary testnets based on ethash from "running off into the future". If the difficulty was low, and a few computers started mining several blocks per second, the ethash rules (which demand 1s delay between blocks) would push the blocktimes further and further away.
The solution was to make the miner sleep while this happened.

Nowadays, this problem is solved instead by PoA chains, and it's recommended to let testnets and devnets be based on clique instead. The existing logic is problematic, since it can cause stalls within the miner making it difficult for remote workers to submit work if the channel is blocked on a sleep.

Credits to Saar Tochner for reporting this via the bug bounty

* cmd/geth: usb is off by default (#21984)

* graphql: use a decimal representation for gas limit and gas used (#21883)

This changes the JSON encoding of blocks returned by the API
to have decimal instead of hexadecimal numbers. The spec wants
it this way.

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

* cmd/geth: added --mainnet flag (#21932)

* cmd/geth: added --mainnet flag

* cmd/utils: set default genesis if --mainnet is specified

* cmd/utils: addressed comments

* common/compiler: fix parsing of solc output with solidity v.0.8.0 (#22092)

Solidity 0.8.0 changes the way that output is marshalled. This patch allows to parse both
the legacy format used previously and the new format.

See also https://docs.soliditylang.org/en/breaking/080-breaking-changes.html#interface-changes

* eth/downloader: enhanced test cases for downloader queue (#22114)

* cmd/utils, eth/downloader: minor snap nitpicks

* crypto: fix ineffectual assignments (#22124)

* crypto/bls12381: fixed ineffectual assignment

* crypto/signify: fix ineffectual assignment

* graphql: return decimal for `estimateGas` and `cumulativeGas` queries  (#22126)

* estimateGas, cumulativeGas
* linted
* add test for estimateGas

* snapshot, trie: fixed typos, mostly in snapshot pkg (#22133)

* cmd/faucet: fix websocket race regression after switching to gorilla

* eth/protocols/snap: track reverts when peer rejects request (#22016)

* eth/protocols/snap: reschedule missed deliveries

* eth/protocols/snap: clarify log message

* eth/protocols/snap: revert failures async and update runloop

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

* eth/protocols/snap: speed up hash checks (#22023)

* eth/protocols/snap: speed up hash checks

* eth/protocols/snap: nit fix

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

* cmd/faucet: switch Facebook auth over to mobile site

* les: remove transaction propagation limits (#22125)

* cmd/faucet: fix nonce-gap problem (#22145)

* cmd/faucet: avoid encoding for each client

* cmd/faucet: fix flaw in clearing of txs, avoid sending more than necessary

* cmd/faucet: fix flaw in tx cropping

* cmd/faucet: revert change to not always send tx info

* cmd/faucet: review fixes

* cmd/faucet: revert #22018, fix order in UI

* cmd/faucet: fix lock error

* cmd/faucet: revert json changes

* squashme

* ethclient: better test suite for ethclient package (#22127)

This commit extends the ethclient test suite and increases code coverage of the ethclient
package from ~15% to >55%. These tests act as early smoke tests to signal issues in the
RPC-interface. E.g. if a functionality like eth_chainId or eth_call breaks, the test
will break.

* eth/downloader: fix race condition in tests (#22140)

* downloader: fix race condition in tests

* eth/downloader: fix race condition in tests

* Revert "downloader: fix race condition in tests"

This reverts commit 108033ebc6985de83791d375b6e6647a77d28d5a.

* core: persist bad blocks (#21827)

* core: persist bad blocks

* core, eth, internal: address comments

* core/rawdb: add badblocks to inspector

* core, eth: update

* internal: revert

* core, eth: only save 10 bad blocks

* core/rawdb: address comments

* core/rawdb: fix

* core: address comments

* common/prque: pull in tests and benchmarks from upstream

* eth: improve log message (#22146)

* eth: fixed typos

* eth: fixed log message

* graphql: fix issue with unmarshalling int32 into `Long` type #22153

* eth: return error from eth_chainID during sync before EIP-155 activates (#21686)

This changes the chainID RPC method to return an error when EIP-155 is not yet
active at the current block height. It used to simply return zero in this case, but
that's confusing.

* cmd/utils: avoid making console preloads absolute (#22109)

Resolves https://github.com/etclabscore/core-geth/issues/273

jsre.JSRE already handles establishing preload
file paths relative to the 'assets' path (aka docroot),
where it joins the assets dir and the file path if relative,
or uses the file path only if absolute.

The duplication of this logic by MakeConsolePreloads
caused preloaded files to have paths which contained
duplicate references to the assets dir path.

Date: 2020-12-30 08:25:01-06:00
Signed-off-by: meows <b5c6@protonmail.com>

* go.mod: use github.com/holiman/bloomfilter/v2 (#22044)

* deps: use improved bloom filter implementation

* eth/handler, trie: use 4 keys for syncbloom + minor fixes

* eth/protocols, trie: revert change on syncbloom method signature

* cmd/utils: don't enumerate USB unless --usb is set (#22130)

USB enumeration still occured. Make sure it will only occur if --usb is set.
This also deprecates the 'NoUSB' config file option in favor of a new option 'USB'.

* tests: update the reference tests (#22009)

* graphql: fix spurious error in test (#22164)

This solves an issue in graphql tests:

    graphql_test.go:38: could not create new node: datadir already used by another process

* consensus/ethash: increase seal timeout for tests (#22162)

It seems that the 2 second timeout is not enough for Travis CI:

   --- FAIL: TestTestMode (2.00s)
       ethash_test.go:53: sealing result timeout

* graphql: fix spurious travis failure (#22166)

The tests sometimes failed with certain go versions because
the behavior of http.Server.Shutdown changed over time. A bug
that was fixed in Go 1.15 could cause active connections on unrelated
servers to close unexpectedly. This is fixed by avoiding use of the
same port number in all tests.

* cmd/faucet: update the embedded website asset

* core/state/snapshot: add generation logs to storage too

* les: don't drop sentTo for normal cases (#22048)

* eth/protocols/eth: fix slice resize flaw (#22181)

* les: remove useless protocol defines (#22115)

This PR has two changes in the les protocol:

- the auxRoot is not supported. See ethereum/devp2p#171 for more information
- the empty response will be returned in GetHelperTrieProofsMsg request if the merkle
   proving is failed. note, for backward compatibility, the empty merkle proof as well as
   the request auxiliary data will still be returned in  les2/3 protocol no matter the proving
   is successful or not. the proving failure can happen e.g. request the proving for a
   non-included entry in helper trie (unstable header).

* tests/fuzzers/abi: better test generation (#22158)

* tests/fuzzers/abi: better test generation

* tests/fuzzers/abi: fixed packing issue

* oss-fuzz: enable abi fuzzer

* cmd/geth: dump config for metrics (#22083)

* cmd/geth: dump config

* cmd/geth: dump config

* cmd/geth: properly read config again

* cmd/geth: override metrics if flags are set

* cmd/geth: write metrics regardless if enabled

* cmd/geth: renamed to metricsfromcliargs

* metrics: add default configuration

* core/state/snapshot: write snapshot generator in batch (#22163)

* core/state/snapshot: write snapshot generator in batch

* core: refactor the tests

* core: update tests

* core: update tests

* cmd/geth: graceful shutdown if disk is full (#22103)

Adding warnings of free disk space left and graceful shutdown when there is not enough space left.
This also adds a flag datadir.minfreedisk which can be used to set the trigger for low disk space, and setting it to zero disables the check. 

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

* eth, les: add new config field SyncFromCheckpoint (#22123)

This PR introduces a new config field SyncFromCheckpoint for light client.

In some special scenarios, it's required to start synchronization from some
arbitrary checkpoint or even from the scratch. So this PR offers this
flexibility to users so that the synchronization start point can be configured.

There are two relevant configs: SyncFromCheckpoint and Checkpoint.

- If the SyncFromCheckpoint is true, the light client will try to sync from the
  specified checkpoint.

- If the Checkpoint is not configured, then the light client will sync from the
  scratch(from the latest header if the database is not empty)

Additional notes: these two configs are not visible in the CLI flags but only
accessable in the config file.

Example Usage:

[Eth]
SyncFromCheckpoint = true

[Eth.Checkpoint]
SectionIndex = 100
SectionHead = "0xabc"
CHTRoot = "0xabc"
BloomRoot = "0xabc"

PS. Historical checkpoint can be retrieved from the synced full node or light
client via les_getCheckpoint API.

* oss-fuzz: fix abi fuzzer (#22199)

* go.mod: upgrade golang-lru (#22134)

* downloader: extract findAncestor search functions (#21744)

This is a simple refactoring, extracting common ancestor
negotiation logic to named function

* core: implement background trie prefetcher

Squashed from the following commits:

core/state: lazily init snapshot storage map
core/state: fix flawed meter on storage reads
core/state: make statedb/stateobjects reuse a hasher
core/blockchain, core/state: implement new trie prefetcher
core: make trie prefetcher deliver tries to statedb
core/state: refactor trie_prefetcher, export storage tries
blockchain: re-enable the next-block-prefetcher
state: remove panics in trie prefetcher
core/state/trie_prefetcher: address some review concerns

sq

* core/state: convert prefetcher to concurrent per-trie loader

* eth/filters: fix potential deadlock in filter timeout loop (#22178)

This fixes #22131 and adds a test reproducing the issue.

* event: add ResubscribeErr (#22191)

This adds a way to get the error of the failing subscription
for logging/debugging purposes.

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

* trie: fix range prover (#22210)

Fixes a special case when the trie only has a single trie node and the range proof only contains a single element.

* common/mclock: remove dependency on github.com/aristanetworks/goarista (#22211)

It takes three lines of code to get to runtime.nanotime, no need to
pull a dependency for that.

* cmd, geth: CLI help fixes (#22220)

* cmd, geth: Reflect command being optional - closes 22218

* cmd, geth: Set current year to 2021

* cmd, geth: CLI help fixes (#22220)

* cmd, geth: Reflect command being optional - closes 22218

* cmd, geth: Set current year to 2021

* eth/protocols/snap: snap sync testing (#22179)

* eth/protocols/snap: make timeout configurable

* eth/protocols/snap: snap sync testing

* eth/protocols/snap: test to trigger panic

* eth/protocols/snap: fix race condition on timeouts

* eth/protocols/snap: return error on cancelled sync

* squashme: updates + test causing panic + properly serve accounts in order

* eth/protocols/snap: revert failing storage response

* eth/protocols/snap: revert on bad responses (storage, code)

* eth/protocols/snap: fix account handling stall

* eth/protocols/snap: fix remaining revertal-issues

* eth/protocols/snap: timeouthandler for bytecode requests

* eth/protocols/snap: debugging + fix log message

* eth/protocols/snap: fix misspelliings in docs

* eth/protocols/snap: fix race in bytecode handling

* eth/protocols/snap: undo deduplication of storage roots

* synctests: refactor + minify panic testcase

* eth/protocols/snap: minor polishes

* eth: minor polishes to make logs more useful

* eth/protocols/snap: remove excessive logs from the test runs

* eth/protocols/snap: stress tests with concurrency

* eth/protocols/snap: further fixes to test cancel channel handling

* eth/protocols/snap: extend test timeouts on CI

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

* go.mod: update dependencies (#22216)

This updates go module dependencies as discussed in #22050.

* graphql: change receipt status to decimal instead of hex (#22187)

This PR fixes the receipt status field to be decimal instead of a hex string,
as called for by the spec.

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

* go.mod: upgrade github.com/huin/goupnp (#22227)

This updates the goupnp dependency, fixing huin/goupnp#33

* snapshot: merge loops for better performance (#22160)

* core: reset to genesis when middle block is missing (#22135)

When a sethead/rewind finds that the targeted block is missing, it resets to genesis instead of crashing. Closes #22129

* eth/tracers: move tracing APIs into eth/tracers (#22161)

This moves the tracing RPC API implementation to package eth/tracers.
By doing so, package eth no longer depends on tracing and the duktape JS engine.

The change also enables tracing using the light client. All tracing methods work with the
light client, but it's a lot slower compared to using a full node.

* eth, p2p: reserve half peer slots for snap peers during snap sync (#22171)

* eth, p2p: reserve half peer slots for snap peers during snap sync

* eth: less logging

* eth: rework the eth/snap peer reservation logic

* eth: rework the eth/snap peer reservation logic (again)

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value (#22233)

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value

* internal/ethapi: print tx details when submitting (#22170)

This adds more info about submitted transactions in log messages.

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

* core/state: fix panic in state dumping (#22225)

* core: speed up header import (#21967)

This PR implements the following modifications

- Don't shortcut check if block is present, thus avoid disk lookup
- Don't check hash ancestry in early-check (it's still done in parallel checker)
- Don't check time.Now for every single header

Charts and background info can be found here: https://github.com/holiman/headerimport/blob/main/README.md
With these changes, writing 1M headers goes down to from 80s to 62s.

* accounts/scwallet: use go-ethereum crypto instead of go-ecdh (#22212)

* accounts/scwallet: use go-ethereum crypto instead of go-ecdh

github.com/wsddn/go-ecdh is a wrapper package for ECDH functionality
with any elliptic curve.

Since 'generic' ECDH is not required in accounts/scwallet (the curve is
always secp256k1), we can just use the standard library functionality
and our own crypto libraries to perform ECDH and save a dependency.

* Update accounts/scwallet/securechannel.go

Co-authored-by: Guillaume Ballet <gballet@gmail.com>

* Use the correct key

Co-authored-by: Guillaume Ballet <gballet@gmail.com>

* accounts/scwallet: update documentation (#22242)

* les: switch to new discv5 (#21940)

This PR enables running the new discv5 protocol in both LES client
and server mode. In client mode it mixes discv5 and dnsdisc iterators
(if both are enabled) and filters incoming ENRs for "les" tag and fork ID.
The old p2p/discv5 package and all references to it are removed.

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

* rpc: deprecate Client.ShhSubscribe (#22239)

It never worked, whisper uses polling.

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

* cmd,core,eth,params,tests: define yolov3 + enable EIP-2565 (#22213)

Removes the yolov2 definition, adds yolov3, including EIP-2565. This PR also disables some of the erroneously generated blockchain and statetests, and adds the new genesis hash + alloc for yolov3. 
This PR disables the CLI switches for yolo, since it's not complete until we merge support for 2930.

* les/utils: UDP rate limiter (#21930)

* les/utils: Limiter

* les/utils: dropped prior weight vs variable cost logic, using fixed weights

* les/utils: always create node selector in addressGroup

* les/utils: renamed request weight to request cost

* les/utils: simplified and improved the DoS penalty mechanism

* les/utils: minor fixes

* les/utils: made selection weight calculation nicer

* les/utils: fixed linter warning

* les/utils: more precise and reliable probabilistic test

* les/utils: fixed linter warning

* cmd/clef: don't check file permissions on windows (#22251)

Fixes #20123

* eth/tracers: fix unigram tracer (#22248)

* eth: check snap satelliteness, delegate drop to eth (#22235)

* eth: check snap satelliteness, delegate drop to eth

* eth: better handle eth/snap satellite relation, merge reg/unreg paths

* cmd/geth, node: allow configuring JSON-RPC on custom path prefix (#22184)

This change allows users to set a custom path prefix on which to mount the http-rpc
or ws-rpc handlers via the new flags --http.rpcprefix and --ws.rpcprefix.

Fixes #21826

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

* all: remove unneeded parentheses (#21921)

* remove uneeded convertion type

* remove redundant type in composite literal

* omit explicit type where implicit

* remove unused redundant parenthesis

* remove redundant import alias duktape

* trie : use trie.NewStackTrie instead of new(trie.Trie) (#22246)

The PR makes use of the stacktrie, which is is more lenient on resource consumption, than the regular trie, in cases where we only need it for DeriveSha

* core: reset txpool state on sethead (#22247)

fixes an issue where local transactions that were included in the chain before a SetHead were rejected if resubmitted, since the txpool had not reset the state to the current (older) state.

* fuzzers: added consensys/gurvy library to bn256 differential fuzzer (#21812)

This pr adds consensys' gurvy bn256 variant into the code for differential fuzzing.

* internal/ethapi: comment nitpick (#22270)

* eth: move eth.Config to a common package (#22205)

This moves the eth config definition into a separate package, eth/ethconfig. 
Packages eth and les can now import this common package instead of
importing eth from les, reducing dependencies.

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

* internal/ethapi: fix typo in comment (#22271)

* eth: don't wait for snap registration if we're not running snap (#22272)

Prevents a situation where we (not running snap) connects with a peer running snap, and get stalled waiting for snap registration to succeed (which will never happen), which cause a waitgroup wait to halt shutdown

* consensus: remove seal verification from the consensus engine interface (#22274)

* cmd/utils: enable snapshots by default

* metrics: fix cast omission in cpu_syscall.go (#22262)

fixes an regression which caused build failure on certain platforms

* params: just to make snapshots a bit more official

* all: bloom-filter based pruning mechanism (#21724)

* cmd, core, tests: initial state pruner

core: fix db inspector

cmd/geth: add verify-state

cmd/geth: add verification tool

core/rawdb: implement flatdb

cmd, core: fix rebase

core/state: use new contract code layout

core/state/pruner: avoid deleting genesis state

cmd/geth: add helper function

core, cmd: fix extract genesis

core: minor fixes

contracts: remove useless

core/state/snapshot: plugin stacktrie

core: polish

core/state/snapshot: iterate storage concurrently

core/state/snapshot: fix iteration

core: add comments

core/state/snapshot: polish code

core/state: polish

core/state/snapshot: rebase

core/rawdb: add comments

core/rawdb: fix tests

core/rawdb: improve tests

core/state/snapshot: fix concurrent iteration

core/state: run pruning during the recovery

core, trie: implement martin's idea

core, eth: delete flatdb and polish pruner

trie: fix import

core/state/pruner: add log

core/state/pruner: fix issues

core/state/pruner: don't read back

core/state/pruner: fix contract code write

core/state/pruner: check root node presence

cmd, core: polish log

core/state: use HEAD-127 as the target

core/state/snapshot: improve tests

cmd/geth: fix verification tool

cmd/geth: use HEAD as the verification default target

all: replace the bloomfilter with martin's fork

cmd, core: polish code

core, cmd: forcibly delete state root

core/state/pruner: add hash64

core/state/pruner: fix blacklist

core/state: remove blacklist

cmd, core: delete trie clean cache before pruning

cmd, core: fix lint

cmd, core: fix rebase

core/state: fix the special case for clique networks

core/state/snapshot: remove useless code

core/state/pruner: capping the snapshot after pruning

cmd, core, eth: fixes

core/rawdb: update db inspector

cmd/geth: polish code

core/state/pruner: fsync bloom filter

cmd, core: print warning log

core/state/pruner: adjust the parameters for bloom filter

cmd, core: create the bloom filter by size

core: polish

core/state/pruner: sanitize invalid bloomfilter size

cmd: address comments

cmd/geth: address comments

cmd/geth: address comment

core/state/pruner: address comments

core/state/pruner: rename homedir to datadir

cmd, core: address comments

core/state/pruner: address comment

core/state: address comments

core, cmd, tests: address comments

core: address comments

core/state/pruner: release the iterator after each commit

core/state/pruner: improve pruner

cmd, core: adjust bloom paramters

core/state/pruner: fix lint

core/state/pruner: fix tests

core: fix rebase

core/state/pruner: remove atomic rename

core/state/pruner: address comments

all: run go mod tidy

core/state/pruner: avoid false-positive for the middle state roots

core/state/pruner: add checks for middle roots

cmd/geth: replace crit with error

* core/state/pruner: fix lint

* core: drop legacy bloom filter

* core/state/snapshot: improve pruner

* core/state/snapshot: polish concurrent logs to report ETA vs. hashes

* core/state/pruner: add progress report for pruning and compaction too

* core: fix snapshot test API

* core/state: fix some pruning logs

* core/state/pruner: support recovering from bloom flush fail

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

* core/state/pruner: fix compaction after pruning

* core/state/pruner: fix compaction range error

* internal/debug: add switch to format logs with json (#22207)

adds a flag --log.json which if enabled makes the client format logs with JSON.

* accounts/abi/bind: fixed unpacking error (#22230)

There was a dormant error with structured inputs that failed unpacking.
This commit fixes the error by switching casting to the better abi.ConvertType function.
It also adds a test for calling a view function that returns a struct

* cmd/utils, eth/ethconfig: unindex txs older than ~1 year

* cmd/devp2p: fix documentation for eth-test (#22298)

* core: fix temp memory blowup caused by defers holding on to state

* les: enable les/4 and add tests (#22321)

* cmd/utils: add workaround for FreeBSD statfs quirk (#22310)

Make geth build on FreeBSD, fixes #22309.

* cmd/geth: fix js unclean shutdown (#22302)

* trie: fix bloom crash on fast sync restart

* rpc: increase the number of subscriptions in storm test (#22316)

* core/state/snapshot: ensure Cap retains a min number of layers

* eth: fix snap sync cancellation

* cmd/devp2p/internal/ethtest: use shared message types (#22315)

This updates the eth protocol test suite to use the message type
definitions of the 'production' protocol implementation in eth/protocols/eth.

* eth/handler, broadcast: optimize tx broadcast mechanism (#22176)

This PR optimizes the broadcast loop. Instead of iterating twice through a given set of transactions to weed out which peers have and which do not have a tx, to send/announce transactions, we do it only once.

* core/state: copy the snap when copying the state (#22340)

* core/state: copy the snap when copying the state

* core/state: deep-copy snap stuff during state Copy

* rlp: handle case of normal EOF in Stream.readFull (#22336)

io.Reader may return n > 0 and io.EOF at the end of the input stream.
readFull did not handle this correctly, looking only at the error. This fixes
it to check for n == len(buf) as well.

* node: always show websocket url in logs (#22307)

* eth: implement eth66 (#22241)

* eth/protocols/eth: split up the eth protocol handlers

* eth/protocols/eth: define eth-66 protocol messages

* eth/protocols/eth: poc implement getblockheaders on eth/66

* eth/protocols/eth: implement remaining eth-66 handlers

* eth/protocols: define handler map for eth 66

* eth/downloader: use protocol constants from eth package

* eth/protocols/eth: add ETH66 capability

* eth/downloader: tests for eth66

* eth/downloader: fix error in tests

* eth/protocols/eth: use eth66 for outgoing requests

* eth/protocols/eth: remove unused error type

* eth/protocols/eth: define protocol length

* eth/protocols/eth: fix pooled tx over eth66

* protocols/eth/handlers: revert behavioural change which caused tests to fail

* eth/downloader: fix failing test

* eth/protocols/eth: add testcases + fix flaw with header requests

* eth/protocols: change comments

* eth/protocols/eth: review fixes + fixed flaw in RequestOneHeader

* eth/protocols: documentation

* eth/protocols/eth: review concerns about types

* p2p/dnsdisc: fix hot-spin when all trees are empty (#22313)

In the random sync algorithm used by the DNS node iterator, we first pick a random
tree and then perform one sync action on that tree. This happens in a loop until any
node is found. If no trees contain any nodes, the iterator will enter a hot loop spinning
at 100% CPU.

The fix is complicated. The iterator now checks if a meaningful sync action can
be performed on any tree. If there is nothing to do, it waits for the next root record
recheck time to arrive and then tries again.

Fixes #22306

* les: renamed lespay to vflux (#22347)

* cmd/utils: disable caching preimages by default

* travis, appveyor, build: bump Go to 1.16

* les: fix balance expiration (#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 (#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 (#22357)

* cmd/geth: add db commands stats, compact, put, get, delete (#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 (#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 (#22373)

* cmd/utils: remove deprecated command line flags (#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 (#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 (#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 (#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 (#22363)

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

* les: move server pool to les/vflux/client (#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 (#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 (#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 (#22386)

* les: UDP pre-negotiation of available server capacity (#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 (#22395)

* core, eth: unship EIP 2315

* core/vm/runtime: more unshipping

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

* params: update chts (#22418)

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

* cmd/utils: fix exclusive check for archive node

* cmd/utils: set the txlookuplimit to 0

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

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

* cmd: retire whisper flags (#22421)

* cmd: retire whisper flags

* cmd/geth: remove whisper configs

* tests: update to latest tests (#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 (#22413)"

This reverts commit ba999105ef89473cfe39e5e53354f7099e67a290.

* 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

* revert geth alignment

* revert deprecation notices

* revert unnecessary changes

* improve some changes

* revert some changes

* revert database cache, move error handling

* revert changes

* remove duplicated code

Co-authored-by: Nishant Das <nishdas93@gmail.com>
Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: Guillaume Ballet <gballet@gmail.com>
Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Kristofer Peterson <svenski123@users.noreply.github.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Pascal Dierich <pascal@merkleplant.xyz>
Co-authored-by: Pascal Dierich <pascal@pascaldierich.com>
Co-authored-by: Felföldi Zsolt <zsfelfoldi@gmail.com>
Co-authored-by: gary rong <garyrong0905@gmail.com>
Co-authored-by: Chris Ziogas <ziogas_chr@hotmail.com>
Co-authored-by: Steve Ruckdashel <steven.ruckdashel@optum.com>
Co-authored-by: Li, Cheng <lob4tt@gmail.com>
Co-authored-by: lzhfromustc <43191155+lzhfromustc@users.noreply.github.com>
Co-authored-by: Mudit Gupta <guptamudit@ymail.com>
Co-authored-by: Mr-Leshiy <alex_pozhilenkov@adoriasoft.com>
Co-authored-by: Nagy Salem <me@muhnagy.com>
Co-authored-by: Connor Stein <connor.stein@mail.mcgill.ca>
Co-authored-by: Shiming <codingmylife@gmail.com>
Co-authored-by: ligi <ligi@ligi.de>
Co-authored-by: Péter Szilágyi <peterke@gmail.com>
Co-authored-by: Mr-Leshiy <leshiy12345678@gmail.com>
Co-authored-by: ucwong <ucwong@126.com>
Co-authored-by: Timo Tijhof <krinklemail@gmail.com>
Co-authored-by: Sina Mahmoodi <1591639+s1na@users.noreply.github.com>
Co-authored-by: Suriyaa Sundararuban <isc.suriyaa@gmail.com>
Co-authored-by: jk-jeongkyun <45347815+jeongkyun-oh@users.noreply.github.com>
Co-authored-by: yumiel yoomee1313 <yumiel.ko@groundx.xyz>
Co-authored-by: Melvin Junhee Woo <melvin.woo@groundx.xyz>
Co-authored-by: Vie <yangchenzhong@gmail.com>
Co-authored-by: rene <41963722+renaynay@users.noreply.github.com>
Co-authored-by: Antoine Toulme <atoulme@users.noreply.github.com>
Co-authored-by: Chris Ziogas <ziogaschr@gmail.com>
Co-authored-by: meowsbits <b5c6@protonmail.com>
Co-authored-by: Dan DeGreef <dan.degreef@gmail.com>
Co-authored-by: Alex Mazalov <mazalov@gmail.com>
Co-authored-by: Łukasz Zimnoch <lukaszzimnoch1994@gmail.com>
Co-authored-by: Alex Prut <1648497+alexprut@users.noreply.github.com>
Co-authored-by: isdyaufh8o7cq <sebaskil@icloud.com>
Co-authored-by: Or Neeman <oneeman@gmail.com>
Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>
Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>
Co-authored-by: Baptiste Boussemart <baptiste.boussemart@consensys.net>
Co-authored-by: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>
antonydenyer pushed a commit to achraf17/quorum that referenced this issue May 5, 2022
* p2p/discover: fix deadlock in discv5 message dispatch (#21858)

This fixes a deadlock that could occur when a response packet arrived
after a call had already received enough responses and was about to
signal completion to the dispatch loop.

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

* crypto: signing builds with signify/minisign (#21798)

* internal/build: implement signify's signing func
* Add signify to the ci utility
* fix output file format
* Add unit test for signify
* holiman's + travis' feedback
* internal/build: verify signify's output
* crypto: move signify to common dir
* use go-minisign to verify binaries
* more holiman feedback
* crypto, ci: support minisign output
* only accept one-line trusted comments
* configurable untrusted comments
* code cleanup in tests
* revert to use ed25519 from the stdlib
* bug: fix for empty untrusted comments
* write timestamp as comment if trusted comment isn't present
* rename line checker to commentHasManyLines
* crypto: added signify fuzzer (#6)
* crypto: added signify fuzzer
* stuff
* crypto: updated signify fuzzer to fuzz comments
* crypto: repro signify crashes
* rebased fuzzer on build-signify branch
* hide fuzzer behind gofuzz build flag
* extract key data inside a single function
* don't treat \r as a newline
* travis: fix signing command line
* do not use an external binary in tests
* crypto: move signify to crypto/signify
* travis: fix formatting issue
* ci: fix linter build after package move

Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>

* accounts, signer: fix Ledger Live account derivation path (clef) (#21757)

* signer/core/api: fix derivation of ledger live accounts

For ledger hardware wallets, change account iteration as follows:

- ledger legacy: m/44'/60'/0'/X; for 0<=X<5
- ledger live: m/44'/60'/0'/0/X; for 0<=X<5

- ledger legacy: m/44'/60'/0'/X; for 0<=X<10
- ledger live: m/44'/60'/X'/0/0; for 0<=X<10

Non-ledger derivation is unchanged and remains as:
- non-ledger: m/44'/60'/0'/0/X; for 0<=X<10

* signer/core/api: derive ten default paths for all hardware wallets, plus ten legacy and ten live paths for ledger wallets

* signer/core/api: as .../0'/0/0 already included by default paths, do not include it again with ledger live paths

* accounts, signer: implement path iterators for hd wallets

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

* accounts/keystore: add missing function doc for SignText (#21914)

Co-authored-by: Pascal Dierich <pascal@pascaldierich.com>

* cmd/geth: make tests run quicker + use less memory and disk (#21919)

* cmd/devp2p/internal/ethtest: add transaction tests (#21857)

* p2p/nodestate: fix deadlock during shutdown of les server (#21927)

This PR fixes a deadlock reported here: #21925

The cause is that many operations may be pending, but if the close happens, only one of them gets awoken and exits, the others remain waiting for a signal that never comes.

* les: fix nodiscover option (#21906)

* params: update CHTs (#21941)

* eth: fix error in tracing if reexec is set (#21830)

* eth: fix error in tracing if reexec is set

* eth: change pointer embedding to value-embedding

* go.mod: update github.com/golang/snappy(#21934)

This updates the snappy library depency to include a fix for
a Go 1.16 incompatibility issue.

* cmd/devp2p: add node filter for snap + fix arg error (#21950)

* core/vm/runtime: remove duplicated line (#21956)


This line is duplicated, though it doesn't cause any issues.

* core: improve contextual information on core errors (#21869)

A lot of times when we hit 'core' errors, example: invalid tx, the information provided is
insufficient. We miss several pieces of information: what account has nonce too high,
and what transaction in that block was offending?

This PR adds that information, using the new type of wrapped errors.
It also adds a testcase which (partly) verifies the output from the errors.

The first commit changes all usage of direct equality-checks on core errors, into
using errors.Is. The second commit adds contextual information. This wraps most
of the core errors with more information, and also wraps it one more time in
stateprocessor, to further provide tx index and tx hash, if such a tx is encoutered in
a block. The third commit uses the chainmaker to try to generate chains with such
errors in them, thus triggering the errors and checking that the generated string meets
expectations.

* cmd/geth: implement vulnerability check (#21859)

* cmd/geth: implement vulnerability check

* cmd/geth: use minisign to verify vulnerability feed

* cmd/geth: add the test too

* cmd/geth: more minisig/signify testing

* cmd/geth: support multiple pubfiles for signing

* cmd/geth: add @holiman minisig pubkey

* cmd/geth: polishes on vulnerability check

* cmd/geth: fix ineffassign linter nit

* cmd/geth: add CVE to version check struct

* cmd/geth/testdata: add missing testfile

* cmd/geth: add more keys to versionchecker

* cmd/geth: support file:// URLs in version check

* cmd/geth: improve key ID printing when signature check fails

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

* les: cosmetic rewrite of the arm64 float bug workaround (#21960)

* les: revert arm float bug workaround to check go 1.15

* add traces to reproduce outside travis

* simpler workaround

* crypto/secp256k1: add workaround for go mod vendor (#21735)

Go won't vendor C files if there are no Go files present in the directory.
Workaround is to add dummy Go files.

Fixes: #20232

* accounts/abi/bind: allow specifying signer on transactOpts (#21356)

This commit enables users to specify which signer they want to use while creating their transactOpts.
Previously all contract interactions used the homestead signer. Now a user can specify whether they
want to sign with homestead or EIP155 and specify the chainID which adds another layer of security.

Closes #16484

* common: improve printing of Hash and Address (#21834)

Both Hash and Address have a String method, which returns the value as
hex with 0x prefix. They also had a Format method which tried to print
the value using printf of []byte. The way Format worked was at odds with
String though, leading to a situation where fmt.Sprintf("%v", hash)
returned the decimal notation and hash.String() returned a hex string.

This commit makes it consistent again. Both types now support the %v,
%s, %q format verbs for 0x-prefixed hex output. %x, %X creates
unprefixed hex output. %d is also supported and returns the decimal
notation "[1 2 3...]".

For Address, the case of hex characters in %v, %s, %q output is
determined using the EIP-55 checksum. Using %x, %X with Address
disables checksumming.

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

* core,les: headerchain import in batches (#21471)

* core: add test for headerchain inserts

* core, light: write headerchains in batches

* core: change to one callback per batch of inserted headers + review concerns

* core: error-check on batch write

* core: unexport writeHeaders

* core: remove callback parameter in InsertHeaderChain

The semantics of InsertHeaderChain are now much simpler: it is now an
all-or-nothing operation. The new WriteStatus return value allows
callers to check for the canonicality of the insertion. This change
simplifies use of HeaderChain in package les, where the callback was
previously used to post chain events.

* core: skip some hashing when writing headers

* core: less hashing in header validation

* core: fix headerchain flaw regarding blacklisted hashes

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

* cmd/geth: add test to verify regexps in version check (#21962)

* crypto/signify, build: fix archive signing with signify (#21977)

This fixes some issues in crypto/signify and makes release signing work.

The archive signing step in ci.go used getenvBase64, which decodes the key data.
This is incorrect here because crypto/signify already base64-decodes the key.

* p2p/enode: avoid crashing for invalid IP (#21981)

The database panicked for invalid IPs. This is usually no problem
because all code paths leading to node DB access verify the IP, but it's
dangerous because improper validation can turn this panic into a DoS
vulnerability. The quick fix here is to just turn database accesses
using invalid IP into a noop. This isn't great, but I'm planning to
remove the node DB for discv5 long-term, so it should be fine to have
this quick fix for half a year.

Fixes #21849

* les, light: remove untrusted header retrieval in ODR (#21907)

* les, light: remove untrusted header retrieval in ODR

* les: polish

* light: check the hash equality in odr

* core, trie: speed up some tests with quadratic processing flaw (#21987)

This commit fixes a flaw in two testcases, and brings down the exec-time from ~40s to ~8s for trie/TestIncompleteSync.

The checkConsistency was performed over and over again on the complete set of nodes, not just the recently added, turning it into a quadratic runtime.

* les: introduce forkID (#21974)

* les: introduce forkID

* les: address comment

* build: upgrade to Go 1.15.6 (#21986)

* params: go-ethereum v1.9.25 stable

* params: begin v1.9.26 release cycle

* les: rework float conversion on arm64 and other architectures (#21994)

The previous fix #21960 converted the float to an intermediate signed int, before attempting the uint conversion. Although this works, this doesn't guarantee that other architectures will work the same.

* miner, test: fix potential goroutine leak (#21989)

In miner/worker.go, there are two goroutine using channel w.newWorkCh: newWorkerLoop() sends to this channel, and mainLoop() receives from this channel. Only the receive operation is in a select.

However, w.exitCh may be closed by another goroutine. This is fine for the receive since receive is in select, but if the send operation is blocking, then it will block forever. This commit puts the send in a select, so it won't block even if w.exitCh is closed.

Similarly, there are two goroutines using channel errc: the parent that runs the test receives from it, and the child created at line 573 sends to it. If the parent goroutine exits too early by calling t.Fatalf() at line 614, then the child goroutine will be blocked at line 574 forever. This commit adds 1 buffer to errc. Now send will not block, and receive is not influenced because receive still needs to wait for the send.

* cmd/faucet: use Twitter API instead of scraping webpage (#21850)

This PR adds support for using Twitter API to query the tweet and author details. There are two reasons behind this change:

- Twitter will be deprecating the legacy website on 15th December. The current method is expected to stop working then.
- More importantly, the current system uses Twitter handle for spam protection but the Twitter handle can be changed via automated calls. This allows bots to use the same tweet to withdraw funds infinite times as long as they keep changing their handle between every request. The Rinkeby as well as the Goerli faucet are being actively drained via this method. This PR changes the spam protection to be based on Twitter IDs instead of usernames. A user can not change their Twitter ID.

* core/txpool: remove "local" notion from the txpool price heap (#21478)

* core: separate the local notion from the pricedHeap

* core: add benchmarks

* core: improve tests

* core: address comments

* core: degrade the panic to error message

* core: fix typo

* core: address comments

* core: address comment

* core: use PEAK instead of POP

* core: address comments

* consensus/ethash: implement faster difficulty calculators (#21976)

This PR adds re-written difficulty calculators, which are based on uint256. It also adds a fuzzer + oss-fuzz integration for the new fuzzer. It does differential fuzzing between the new and old calculators.

Note: this PR does not actually enable the new calculators.

* consensus: refactor FinalizeAndAssemble to use Finalize (#21993)

* core, eth, les: implement unclean-shutdown marker (#21893)

This PR implements unclean shutdown marker. Every time geth boots, it adds a timestamp to a list of timestamps in the database. This list is capped at 10. At a clean shutdown, the timestamp is removed again. 
Thus, when geth exits unclean, the marker remains, and at boot up we show the most recent unclean shutdowns to the user, which makes it easier to diagnose root-causes to certain problems. 

Co-authored-by: Nagy Salem <me@muhnagy.com>

* abi/bind: fix error-handling in generated wrappers for functions returning structs (#22005)

Fixes the template used when generating code, which in some scenarios would lead to panic instead of returning an error.

* cmd/abigen: clarify abigen alias flag usage (#21875)

* doc: clarify abigen alias flag usage

update the `abigen --alias` flag help info, give an example to make it more clear

related issue: https://github.com/ethereum/go-ethereum/issues/21846

* Update cmd/abigen/main.go

Co-authored-by: ligi <ligi@ligi.de>

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

* core, eth: split eth package, implement snap protocol (#21482)

This commit splits the eth package, separating the handling of eth and snap protocols. It also includes the capability to run snap sync (https://github.com/ethereum/devp2p/blob/master/caps/snap.md) , but does not enable it by default. 

Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Martin Holst Swende <martin@swende.se>

* cmd/geth: fixed parallelization flaw in account import test (#22002)

* eth/protocols/eth: remove magic numbers in test (#21999)

* eth, core: speed up some tests (#22000)

* les: les/4 minimalistic version (#21909)

* les: allow tx unindexing in les/4 light server mode

* les: minor fixes

* les: more small fixes

* les: add meaningful constants for recentTxIndex handshake field

* cmd/faucet: sort requests by newest first (#22018)

* eth/download/statesync : optimize to avoid a copy in state sync hashing  (#22035)

* eth/download/statesync : state hash sum optimized

* go fmt with blank in imports

* keccak read arg fix

* eth/downloader: fix typo in comment (#22019)

* internal/ethapi: restore net_version RPC method (#22061)

During the snap and eth refactor, the net_version rpc call was falsely deprecated.
This restores the net_version RPC handler as most eth2 nodes and other software
depend on it.

* common,crypto: move fuzzers out of core (#22029)

* common,crypto: move fuzzers out of core

* fuzzers: move vm fuzzer out from core

* fuzzing: rework cover package logic

* fuzzers: lint

* README.md: update Travis badge (#22079)

The legacy dot-org URL was displaying a message about the repository
having migrated to the dot-com service, which now covers open-source
projects as well.

* eth, eth/tracers: include intrinsic gas in calltracer, expose for all tracers (#22038)

* eth/tracers: share tx gas price with js tracer

* eth/tracers: use `go generate`

* eth/tracers: try with another version of go-bindata

* eth/tracers: export txGas

* eth, eth/tracers: pass intrinsic gas to js tracers

eth/tracers: include tx gas in tracers usedGas

eth/tracers: fix prestate tracer's sender balance

eth/tracers: rm unnecessary import

eth/tracers: pass intrinsicGas separately to tracer

eth/tracers: fix tests broken by lack of txdata

eth, eth/tracers: minor fix

* eth/tracers: regenerate assets + unexport test-struct + add testcase

* eth/tracers: simplify tests + make table-driven

Co-authored-by: Guillaume Ballet <gballet@gmail.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>

* tests/fuzzers: fix false positive in bitutil fuzzer (#22076)

* cmd/geth: replace wiki links with new doc pages (#22071)

* eth/filters: replace wiki links with new doc pages (#22070)

* signer: docs - replace wiki links with new doc pages (#22069)

* eth/downloader: remove unnecessary condition (#22052)

* docs: replace wiki links with new doc pages in readme.md (#22065) (#22066)

* core/rawdb, eth/protocols : Method name typo fix (#22026)

* accounts/abi/bind: fix erroneous test (#22053)

closes #22049

* core/state/snapshot: gethring -> gathering typo (#22104)

* cmd/geth: update copyright year (#22099)

* .github: Replace wiki links with new doc pages (#22065) (#22068)

* node: rename startNetworking to openEndpoints (#22105)

* SECURITY.md: link to release page (#22067)

Add links to go-ethereum's GitHub release page.

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

* cmd: support v1.1 Twitter API in faucet, fix puppeth

* miner: avoid sleeping in miner (#22108)

This PR removes a logic in the miner, which was originally intended to help temporary testnets based on ethash from "running off into the future". If the difficulty was low, and a few computers started mining several blocks per second, the ethash rules (which demand 1s delay between blocks) would push the blocktimes further and further away.
The solution was to make the miner sleep while this happened.

Nowadays, this problem is solved instead by PoA chains, and it's recommended to let testnets and devnets be based on clique instead. The existing logic is problematic, since it can cause stalls within the miner making it difficult for remote workers to submit work if the channel is blocked on a sleep.

Credits to Saar Tochner for reporting this via the bug bounty

* cmd/geth: usb is off by default (#21984)

* graphql: use a decimal representation for gas limit and gas used (#21883)

This changes the JSON encoding of blocks returned by the API
to have decimal instead of hexadecimal numbers. The spec wants
it this way.

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

* cmd/geth: added --mainnet flag (#21932)

* cmd/geth: added --mainnet flag

* cmd/utils: set default genesis if --mainnet is specified

* cmd/utils: addressed comments

* common/compiler: fix parsing of solc output with solidity v.0.8.0 (#22092)

Solidity 0.8.0 changes the way that output is marshalled. This patch allows to parse both
the legacy format used previously and the new format.

See also https://docs.soliditylang.org/en/breaking/080-breaking-changes.html#interface-changes

* eth/downloader: enhanced test cases for downloader queue (#22114)

* cmd/utils, eth/downloader: minor snap nitpicks

* crypto: fix ineffectual assignments (#22124)

* crypto/bls12381: fixed ineffectual assignment

* crypto/signify: fix ineffectual assignment

* graphql: return decimal for `estimateGas` and `cumulativeGas` queries  (#22126)

* estimateGas, cumulativeGas
* linted
* add test for estimateGas

* snapshot, trie: fixed typos, mostly in snapshot pkg (#22133)

* cmd/faucet: fix websocket race regression after switching to gorilla

* eth/protocols/snap: track reverts when peer rejects request (#22016)

* eth/protocols/snap: reschedule missed deliveries

* eth/protocols/snap: clarify log message

* eth/protocols/snap: revert failures async and update runloop

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

* eth/protocols/snap: speed up hash checks (#22023)

* eth/protocols/snap: speed up hash checks

* eth/protocols/snap: nit fix

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

* cmd/faucet: switch Facebook auth over to mobile site

* les: remove transaction propagation limits (#22125)

* cmd/faucet: fix nonce-gap problem (#22145)

* cmd/faucet: avoid encoding for each client

* cmd/faucet: fix flaw in clearing of txs, avoid sending more than necessary

* cmd/faucet: fix flaw in tx cropping

* cmd/faucet: revert change to not always send tx info

* cmd/faucet: review fixes

* cmd/faucet: revert #22018, fix order in UI

* cmd/faucet: fix lock error

* cmd/faucet: revert json changes

* squashme

* ethclient: better test suite for ethclient package (#22127)

This commit extends the ethclient test suite and increases code coverage of the ethclient
package from ~15% to >55%. These tests act as early smoke tests to signal issues in the
RPC-interface. E.g. if a functionality like eth_chainId or eth_call breaks, the test
will break.

* eth/downloader: fix race condition in tests (#22140)

* downloader: fix race condition in tests

* eth/downloader: fix race condition in tests

* Revert "downloader: fix race condition in tests"

This reverts commit 108033ebc6985de83791d375b6e6647a77d28d5a.

* core: persist bad blocks (#21827)

* core: persist bad blocks

* core, eth, internal: address comments

* core/rawdb: add badblocks to inspector

* core, eth: update

* internal: revert

* core, eth: only save 10 bad blocks

* core/rawdb: address comments

* core/rawdb: fix

* core: address comments

* common/prque: pull in tests and benchmarks from upstream

* eth: improve log message (#22146)

* eth: fixed typos

* eth: fixed log message

* graphql: fix issue with unmarshalling int32 into `Long` type #22153

* eth: return error from eth_chainID during sync before EIP-155 activates (#21686)

This changes the chainID RPC method to return an error when EIP-155 is not yet
active at the current block height. It used to simply return zero in this case, but
that's confusing.

* cmd/utils: avoid making console preloads absolute (#22109)

Resolves https://github.com/etclabscore/core-geth/issues/273

jsre.JSRE already handles establishing preload
file paths relative to the 'assets' path (aka docroot),
where it joins the assets dir and the file path if relative,
or uses the file path only if absolute.

The duplication of this logic by MakeConsolePreloads
caused preloaded files to have paths which contained
duplicate references to the assets dir path.

Date: 2020-12-30 08:25:01-06:00
Signed-off-by: meows <b5c6@protonmail.com>

* go.mod: use github.com/holiman/bloomfilter/v2 (#22044)

* deps: use improved bloom filter implementation

* eth/handler, trie: use 4 keys for syncbloom + minor fixes

* eth/protocols, trie: revert change on syncbloom method signature

* cmd/utils: don't enumerate USB unless --usb is set (#22130)

USB enumeration still occured. Make sure it will only occur if --usb is set.
This also deprecates the 'NoUSB' config file option in favor of a new option 'USB'.

* tests: update the reference tests (#22009)

* graphql: fix spurious error in test (#22164)

This solves an issue in graphql tests:

    graphql_test.go:38: could not create new node: datadir already used by another process

* consensus/ethash: increase seal timeout for tests (#22162)

It seems that the 2 second timeout is not enough for Travis CI:

   --- FAIL: TestTestMode (2.00s)
       ethash_test.go:53: sealing result timeout

* graphql: fix spurious travis failure (#22166)

The tests sometimes failed with certain go versions because
the behavior of http.Server.Shutdown changed over time. A bug
that was fixed in Go 1.15 could cause active connections on unrelated
servers to close unexpectedly. This is fixed by avoiding use of the
same port number in all tests.

* cmd/faucet: update the embedded website asset

* core/state/snapshot: add generation logs to storage too

* les: don't drop sentTo for normal cases (#22048)

* eth/protocols/eth: fix slice resize flaw (#22181)

* les: remove useless protocol defines (#22115)

This PR has two changes in the les protocol:

- the auxRoot is not supported. See ethereum/devp2p#171 for more information
- the empty response will be returned in GetHelperTrieProofsMsg request if the merkle
   proving is failed. note, for backward compatibility, the empty merkle proof as well as
   the request auxiliary data will still be returned in  les2/3 protocol no matter the proving
   is successful or not. the proving failure can happen e.g. request the proving for a
   non-included entry in helper trie (unstable header).

* tests/fuzzers/abi: better test generation (#22158)

* tests/fuzzers/abi: better test generation

* tests/fuzzers/abi: fixed packing issue

* oss-fuzz: enable abi fuzzer

* cmd/geth: dump config for metrics (#22083)

* cmd/geth: dump config

* cmd/geth: dump config

* cmd/geth: properly read config again

* cmd/geth: override metrics if flags are set

* cmd/geth: write metrics regardless if enabled

* cmd/geth: renamed to metricsfromcliargs

* metrics: add default configuration

* core/state/snapshot: write snapshot generator in batch (#22163)

* core/state/snapshot: write snapshot generator in batch

* core: refactor the tests

* core: update tests

* core: update tests

* cmd/geth: graceful shutdown if disk is full (#22103)

Adding warnings of free disk space left and graceful shutdown when there is not enough space left.
This also adds a flag datadir.minfreedisk which can be used to set the trigger for low disk space, and setting it to zero disables the check. 

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

* eth, les: add new config field SyncFromCheckpoint (#22123)

This PR introduces a new config field SyncFromCheckpoint for light client.

In some special scenarios, it's required to start synchronization from some
arbitrary checkpoint or even from the scratch. So this PR offers this
flexibility to users so that the synchronization start point can be configured.

There are two relevant configs: SyncFromCheckpoint and Checkpoint.

- If the SyncFromCheckpoint is true, the light client will try to sync from the
  specified checkpoint.

- If the Checkpoint is not configured, then the light client will sync from the
  scratch(from the latest header if the database is not empty)

Additional notes: these two configs are not visible in the CLI flags but only
accessable in the config file.

Example Usage:

[Eth]
SyncFromCheckpoint = true

[Eth.Checkpoint]
SectionIndex = 100
SectionHead = "0xabc"
CHTRoot = "0xabc"
BloomRoot = "0xabc"

PS. Historical checkpoint can be retrieved from the synced full node or light
client via les_getCheckpoint API.

* oss-fuzz: fix abi fuzzer (#22199)

* go.mod: upgrade golang-lru (#22134)

* downloader: extract findAncestor search functions (#21744)

This is a simple refactoring, extracting common ancestor
negotiation logic to named function

* core: implement background trie prefetcher

Squashed from the following commits:

core/state: lazily init snapshot storage map
core/state: fix flawed meter on storage reads
core/state: make statedb/stateobjects reuse a hasher
core/blockchain, core/state: implement new trie prefetcher
core: make trie prefetcher deliver tries to statedb
core/state: refactor trie_prefetcher, export storage tries
blockchain: re-enable the next-block-prefetcher
state: remove panics in trie prefetcher
core/state/trie_prefetcher: address some review concerns

sq

* core/state: convert prefetcher to concurrent per-trie loader

* eth/filters: fix potential deadlock in filter timeout loop (#22178)

This fixes #22131 and adds a test reproducing the issue.

* event: add ResubscribeErr (#22191)

This adds a way to get the error of the failing subscription
for logging/debugging purposes.

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

* trie: fix range prover (#22210)

Fixes a special case when the trie only has a single trie node and the range proof only contains a single element.

* common/mclock: remove dependency on github.com/aristanetworks/goarista (#22211)

It takes three lines of code to get to runtime.nanotime, no need to
pull a dependency for that.

* cmd, geth: CLI help fixes (#22220)

* cmd, geth: Reflect command being optional - closes 22218

* cmd, geth: Set current year to 2021

* cmd, geth: CLI help fixes (#22220)

* cmd, geth: Reflect command being optional - closes 22218

* cmd, geth: Set current year to 2021

* eth/protocols/snap: snap sync testing (#22179)

* eth/protocols/snap: make timeout configurable

* eth/protocols/snap: snap sync testing

* eth/protocols/snap: test to trigger panic

* eth/protocols/snap: fix race condition on timeouts

* eth/protocols/snap: return error on cancelled sync

* squashme: updates + test causing panic + properly serve accounts in order

* eth/protocols/snap: revert failing storage response

* eth/protocols/snap: revert on bad responses (storage, code)

* eth/protocols/snap: fix account handling stall

* eth/protocols/snap: fix remaining revertal-issues

* eth/protocols/snap: timeouthandler for bytecode requests

* eth/protocols/snap: debugging + fix log message

* eth/protocols/snap: fix misspelliings in docs

* eth/protocols/snap: fix race in bytecode handling

* eth/protocols/snap: undo deduplication of storage roots

* synctests: refactor + minify panic testcase

* eth/protocols/snap: minor polishes

* eth: minor polishes to make logs more useful

* eth/protocols/snap: remove excessive logs from the test runs

* eth/protocols/snap: stress tests with concurrency

* eth/protocols/snap: further fixes to test cancel channel handling

* eth/protocols/snap: extend test timeouts on CI

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

* go.mod: update dependencies (#22216)

This updates go module dependencies as discussed in #22050.

* graphql: change receipt status to decimal instead of hex (#22187)

This PR fixes the receipt status field to be decimal instead of a hex string,
as called for by the spec.

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

* go.mod: upgrade github.com/huin/goupnp (#22227)

This updates the goupnp dependency, fixing huin/goupnp#33

* snapshot: merge loops for better performance (#22160)

* core: reset to genesis when middle block is missing (#22135)

When a sethead/rewind finds that the targeted block is missing, it resets to genesis instead of crashing. Closes #22129

* eth/tracers: move tracing APIs into eth/tracers (#22161)

This moves the tracing RPC API implementation to package eth/tracers.
By doing so, package eth no longer depends on tracing and the duktape JS engine.

The change also enables tracing using the light client. All tracing methods work with the
light client, but it's a lot slower compared to using a full node.

* eth, p2p: reserve half peer slots for snap peers during snap sync (#22171)

* eth, p2p: reserve half peer slots for snap peers during snap sync

* eth: less logging

* eth: rework the eth/snap peer reservation logic

* eth: rework the eth/snap peer reservation logic (again)

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value (#22233)

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value

* internal/ethapi: print tx details when submitting (#22170)

This adds more info about submitted transactions in log messages.

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

* core/state: fix panic in state dumping (#22225)

* core: speed up header import (#21967)

This PR implements the following modifications

- Don't shortcut check if block is present, thus avoid disk lookup
- Don't check hash ancestry in early-check (it's still done in parallel checker)
- Don't check time.Now for every single header

Charts and background info can be found here: https://github.com/holiman/headerimport/blob/main/README.md
With these changes, writing 1M headers goes down to from 80s to 62s.

* accounts/scwallet: use go-ethereum crypto instead of go-ecdh (#22212)

* accounts/scwallet: use go-ethereum crypto instead of go-ecdh

github.com/wsddn/go-ecdh is a wrapper package for ECDH functionality
with any elliptic curve.

Since 'generic' ECDH is not required in accounts/scwallet (the curve is
always secp256k1), we can just use the standard library functionality
and our own crypto libraries to perform ECDH and save a dependency.

* Update accounts/scwallet/securechannel.go

Co-authored-by: Guillaume Ballet <gballet@gmail.com>

* Use the correct key

Co-authored-by: Guillaume Ballet <gballet@gmail.com>

* accounts/scwallet: update documentation (#22242)

* les: switch to new discv5 (#21940)

This PR enables running the new discv5 protocol in both LES client
and server mode. In client mode it mixes discv5 and dnsdisc iterators
(if both are enabled) and filters incoming ENRs for "les" tag and fork ID.
The old p2p/discv5 package and all references to it are removed.

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

* rpc: deprecate Client.ShhSubscribe (#22239)

It never worked, whisper uses polling.

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

* cmd,core,eth,params,tests: define yolov3 + enable EIP-2565 (#22213)

Removes the yolov2 definition, adds yolov3, including EIP-2565. This PR also disables some of the erroneously generated blockchain and statetests, and adds the new genesis hash + alloc for yolov3. 
This PR disables the CLI switches for yolo, since it's not complete until we merge support for 2930.

* les/utils: UDP rate limiter (#21930)

* les/utils: Limiter

* les/utils: dropped prior weight vs variable cost logic, using fixed weights

* les/utils: always create node selector in addressGroup

* les/utils: renamed request weight to request cost

* les/utils: simplified and improved the DoS penalty mechanism

* les/utils: minor fixes

* les/utils: made selection weight calculation nicer

* les/utils: fixed linter warning

* les/utils: more precise and reliable probabilistic test

* les/utils: fixed linter warning

* cmd/clef: don't check file permissions on windows (#22251)

Fixes #20123

* eth/tracers: fix unigram tracer (#22248)

* eth: check snap satelliteness, delegate drop to eth (#22235)

* eth: check snap satelliteness, delegate drop to eth

* eth: better handle eth/snap satellite relation, merge reg/unreg paths

* cmd/geth, node: allow configuring JSON-RPC on custom path prefix (#22184)

This change allows users to set a custom path prefix on which to mount the http-rpc
or ws-rpc handlers via the new flags --http.rpcprefix and --ws.rpcprefix.

Fixes #21826

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

* all: remove unneeded parentheses (#21921)

* remove uneeded convertion type

* remove redundant type in composite literal

* omit explicit type where implicit

* remove unused redundant parenthesis

* remove redundant import alias duktape

* trie : use trie.NewStackTrie instead of new(trie.Trie) (#22246)

The PR makes use of the stacktrie, which is is more lenient on resource consumption, than the regular trie, in cases where we only need it for DeriveSha

* core: reset txpool state on sethead (#22247)

fixes an issue where local transactions that were included in the chain before a SetHead were rejected if resubmitted, since the txpool had not reset the state to the current (older) state.

* fuzzers: added consensys/gurvy library to bn256 differential fuzzer (#21812)

This pr adds consensys' gurvy bn256 variant into the code for differential fuzzing.

* internal/ethapi: comment nitpick (#22270)

* eth: move eth.Config to a common package (#22205)

This moves the eth config definition into a separate package, eth/ethconfig. 
Packages eth and les can now import this common package instead of
importing eth from les, reducing dependencies.

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

* internal/ethapi: fix typo in comment (#22271)

* eth: don't wait for snap registration if we're not running snap (#22272)

Prevents a situation where we (not running snap) connects with a peer running snap, and get stalled waiting for snap registration to succeed (which will never happen), which cause a waitgroup wait to halt shutdown

* consensus: remove seal verification from the consensus engine interface (#22274)

* cmd/utils: enable snapshots by default

* metrics: fix cast omission in cpu_syscall.go (#22262)

fixes an regression which caused build failure on certain platforms

* params: just to make snapshots a bit more official

* all: bloom-filter based pruning mechanism (#21724)

* cmd, core, tests: initial state pruner

core: fix db inspector

cmd/geth: add verify-state

cmd/geth: add verification tool

core/rawdb: implement flatdb

cmd, core: fix rebase

core/state: use new contract code layout

core/state/pruner: avoid deleting genesis state

cmd/geth: add helper function

core, cmd: fix extract genesis

core: minor fixes

contracts: remove useless

core/state/snapshot: plugin stacktrie

core: polish

core/state/snapshot: iterate storage concurrently

core/state/snapshot: fix iteration

core: add comments

core/state/snapshot: polish code

core/state: polish

core/state/snapshot: rebase

core/rawdb: add comments

core/rawdb: fix tests

core/rawdb: improve tests

core/state/snapshot: fix concurrent iteration

core/state: run pruning during the recovery

core, trie: implement martin's idea

core, eth: delete flatdb and polish pruner

trie: fix import

core/state/pruner: add log

core/state/pruner: fix issues

core/state/pruner: don't read back

core/state/pruner: fix contract code write

core/state/pruner: check root node presence

cmd, core: polish log

core/state: use HEAD-127 as the target

core/state/snapshot: improve tests

cmd/geth: fix verification tool

cmd/geth: use HEAD as the verification default target

all: replace the bloomfilter with martin's fork

cmd, core: polish code

core, cmd: forcibly delete state root

core/state/pruner: add hash64

core/state/pruner: fix blacklist

core/state: remove blacklist

cmd, core: delete trie clean cache before pruning

cmd, core: fix lint

cmd, core: fix rebase

core/state: fix the special case for clique networks

core/state/snapshot: remove useless code

core/state/pruner: capping the snapshot after pruning

cmd, core, eth: fixes

core/rawdb: update db inspector

cmd/geth: polish code

core/state/pruner: fsync bloom filter

cmd, core: print warning log

core/state/pruner: adjust the parameters for bloom filter

cmd, core: create the bloom filter by size

core: polish

core/state/pruner: sanitize invalid bloomfilter size

cmd: address comments

cmd/geth: address comments

cmd/geth: address comment

core/state/pruner: address comments

core/state/pruner: rename homedir to datadir

cmd, core: address comments

core/state/pruner: address comment

core/state: address comments

core, cmd, tests: address comments

core: address comments

core/state/pruner: release the iterator after each commit

core/state/pruner: improve pruner

cmd, core: adjust bloom paramters

core/state/pruner: fix lint

core/state/pruner: fix tests

core: fix rebase

core/state/pruner: remove atomic rename

core/state/pruner: address comments

all: run go mod tidy

core/state/pruner: avoid false-positive for the middle state roots

core/state/pruner: add checks for middle roots

cmd/geth: replace crit with error

* core/state/pruner: fix lint

* core: drop legacy bloom filter

* core/state/snapshot: improve pruner

* core/state/snapshot: polish concurrent logs to report ETA vs. hashes

* core/state/pruner: add progress report for pruning and compaction too

* core: fix snapshot test API

* core/state: fix some pruning logs

* core/state/pruner: support recovering from bloom flush fail

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

* core/state/pruner: fix compaction after pruning

* core/state/pruner: fix compaction range error

* internal/debug: add switch to format logs with json (#22207)

adds a flag --log.json which if enabled makes the client format logs with JSON.

* accounts/abi/bind: fixed unpacking error (#22230)

There was a dormant error with structured inputs that failed unpacking.
This commit fixes the error by switching casting to the better abi.ConvertType function.
It also adds a test for calling a view function that returns a struct

* cmd/utils, eth/ethconfig: unindex txs older than ~1 year

* cmd/devp2p: fix documentation for eth-test (#22298)

* core: fix temp memory blowup caused by defers holding on to state

* les: enable les/4 and add tests (#22321)

* cmd/utils: add workaround for FreeBSD statfs quirk (#22310)

Make geth build on FreeBSD, fixes #22309.

* cmd/geth: fix js unclean shutdown (#22302)

* trie: fix bloom crash on fast sync restart

* rpc: increase the number of subscriptions in storm test (#22316)

* core/state/snapshot: ensure Cap retains a min number of layers

* eth: fix snap sync cancellation

* cmd/devp2p/internal/ethtest: use shared message types (#22315)

This updates the eth protocol test suite to use the message type
definitions of the 'production' protocol implementation in eth/protocols/eth.

* eth/handler, broadcast: optimize tx broadcast mechanism (#22176)

This PR optimizes the broadcast loop. Instead of iterating twice through a given set of transactions to weed out which peers have and which do not have a tx, to send/announce transactions, we do it only once.

* core/state: copy the snap when copying the state (#22340)

* core/state: copy the snap when copying the state

* core/state: deep-copy snap stuff during state Copy

* rlp: handle case of normal EOF in Stream.readFull (#22336)

io.Reader may return n > 0 and io.EOF at the end of the input stream.
readFull did not handle this correctly, looking only at the error. This fixes
it to check for n == len(buf) as well.

* node: always show websocket url in logs (#22307)

* eth: implement eth66 (#22241)

* eth/protocols/eth: split up the eth protocol handlers

* eth/protocols/eth: define eth-66 protocol messages

* eth/protocols/eth: poc implement getblockheaders on eth/66

* eth/protocols/eth: implement remaining eth-66 handlers

* eth/protocols: define handler map for eth 66

* eth/downloader: use protocol constants from eth package

* eth/protocols/eth: add ETH66 capability

* eth/downloader: tests for eth66

* eth/downloader: fix error in tests

* eth/protocols/eth: use eth66 for outgoing requests

* eth/protocols/eth: remove unused error type

* eth/protocols/eth: define protocol length

* eth/protocols/eth: fix pooled tx over eth66

* protocols/eth/handlers: revert behavioural change which caused tests to fail

* eth/downloader: fix failing test

* eth/protocols/eth: add testcases + fix flaw with header requests

* eth/protocols: change comments

* eth/protocols/eth: review fixes + fixed flaw in RequestOneHeader

* eth/protocols: documentation

* eth/protocols/eth: review concerns about types

* p2p/dnsdisc: fix hot-spin when all trees are empty (#22313)

In the random sync algorithm used by the DNS node iterator, we first pick a random
tree and then perform one sync action on that tree. This happens in a loop until any
node is found. If no trees contain any nodes, the iterator will enter a hot loop spinning
at 100% CPU.

The fix is complicated. The iterator now checks if a meaningful sync action can
be performed on any tree. If there is nothing to do, it waits for the next root record
recheck time to arrive and then tries again.

Fixes #22306

* les: renamed lespay to vflux (#22347)

* cmd/utils: disable caching preimages by default

* travis, appveyor, build: bump Go to 1.16

* les: fix balance expiration (#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 (#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 (#22357)

* cmd/geth: add db commands stats, compact, put, get, delete (#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 (#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 (#22373)

* cmd/utils: remove deprecated command line flags (#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 (#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 (#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 (#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 (#22363)

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

* les: move server pool to les/vflux/client (#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 (#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 (#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 (#22386)

* les: UDP pre-negotiation of available server capacity (#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 (#22395)

* core, eth: unship EIP 2315

* core/vm/runtime: more unshipping

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

* params: update chts (#22418)

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

* cmd/utils: fix exclusive check for archive node

* cmd/utils: set the txlookuplimit to 0

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

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

* cmd: retire whisper flags (#22421)

* cmd: retire whisper flags

* cmd/geth: remove whisper configs

* tests: update to latest tests (#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 (#22413)"

This reverts commit ba999105ef89473cfe39e5e53354f7099e67a290.

* 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

* revert geth alignment

* revert deprecation notices

* revert unnecessary changes

* improve some changes

* revert some changes

* revert database cache, move error handling

* revert changes

* remove duplicated code

Co-authored-by: Nishant Das <nishdas93@gmail.com>
Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: Guillaume Ballet <gballet@gmail.com>
Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Kristofer Peterson <svenski123@users.noreply.github.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Pascal Dierich <pascal@merkleplant.xyz>
Co-authored-by: Pascal Dierich <pascal@pascaldierich.com>
Co-authored-by: Felföldi Zsolt <zsfelfoldi@gmail.com>
Co-authored-by: gary rong <garyrong0905@gmail.com>
Co-authored-by: Chris Ziogas <ziogas_chr@hotmail.com>
Co-authored-by: Steve Ruckdashel <steven.ruckdashel@optum.com>
Co-authored-by: Li, Cheng <lob4tt@gmail.com>
Co-authored-by: lzhfromustc <43191155+lzhfromustc@users.noreply.github.com>
Co-authored-by: Mudit Gupta <guptamudit@ymail.com>
Co-authored-by: Mr-Leshiy <alex_pozhilenkov@adoriasoft.com>
Co-authored-by: Nagy Salem <me@muhnagy.com>
Co-authored-by: Connor Stein <connor.stein@mail.mcgill.ca>
Co-authored-by: Shiming <codingmylife@gmail.com>
Co-authored-by: ligi <ligi@ligi.de>
Co-authored-by: Péter Szilágyi <peterke@gmail.com>
Co-authored-by: Mr-Leshiy <leshiy12345678@gmail.com>
Co-authored-by: ucwong <ucwong@126.com>
Co-authored-by: Timo Tijhof <krinklemail@gmail.com>
Co-authored-by: Sina Mahmoodi <1591639+s1na@users.noreply.github.com>
Co-authored-by: Suriyaa Sundararuban <isc.suriyaa@gmail.com>
Co-authored-by: jk-jeongkyun <45347815+jeongkyun-oh@users.noreply.github.com>
Co-authored-by: yumiel yoomee1313 <yumiel.ko@groundx.xyz>
Co-authored-by: Melvin Junhee Woo <melvin.woo@groundx.xyz>
Co-authored-by: Vie <yangchenzhong@gmail.com>
Co-authored-by: rene <41963722+renaynay@users.noreply.github.com>
Co-authored-by: Antoine Toulme <atoulme@users.noreply.github.com>
Co-authored-by: Chris Ziogas <ziogaschr@gmail.com>
Co-authored-by: meowsbits <b5c6@protonmail.com>
Co-authored-by: Dan DeGreef <dan.degreef@gmail.com>
Co-authored-by: Alex Mazalov <mazalov@gmail.com>
Co-authored-by: Łukasz Zimnoch <lukaszzimnoch1994@gmail.com>
Co-authored-by: Alex Prut <1648497+alexprut@users.noreply.github.com>
Co-authored-by: isdyaufh8o7cq <sebaskil@icloud.com>
Co-authored-by: Or Neeman <oneeman@gmail.com>
Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>
Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>
Co-authored-by: Baptiste Boussemart <baptiste.boussemart@consensys.net>
Co-authored-by: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>
antonydenyer pushed a commit to Consensys/quorum that referenced this issue Jun 1, 2022
* cmd/faucet: update the embedded website asset

* core/state/snapshot: add generation logs to storage too

* les: don't drop sentTo for normal cases (#22048)

* eth/protocols/eth: fix slice resize flaw (#22181)

* les: remove useless protocol defines (#22115)

This PR has two changes in the les protocol:

- the auxRoot is not supported. See ethereum/devp2p#171 for more information
- the empty response will be returned in GetHelperTrieProofsMsg request if the merkle
   proving is failed. note, for backward compatibility, the empty merkle proof as well as
   the request auxiliary data will still be returned in  les2/3 protocol no matter the proving
   is successful or not. the proving failure can happen e.g. request the proving for a
   non-included entry in helper trie (unstable header).

* tests/fuzzers/abi: better test generation (#22158)

* tests/fuzzers/abi: better test generation

* tests/fuzzers/abi: fixed packing issue

* oss-fuzz: enable abi fuzzer

* cmd/geth: dump config for metrics (#22083)

* cmd/geth: dump config

* cmd/geth: dump config

* cmd/geth: properly read config again

* cmd/geth: override metrics if flags are set

* cmd/geth: write metrics regardless if enabled

* cmd/geth: renamed to metricsfromcliargs

* metrics: add default configuration

* core/state/snapshot: write snapshot generator in batch (#22163)

* core/state/snapshot: write snapshot generator in batch

* core: refactor the tests

* core: update tests

* core: update tests

* cmd/geth: graceful shutdown if disk is full (#22103)

Adding warnings of free disk space left and graceful shutdown when there is not enough space left.
This also adds a flag datadir.minfreedisk which can be used to set the trigger for low disk space, and setting it to zero disables the check. 

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

* eth, les: add new config field SyncFromCheckpoint (#22123)

This PR introduces a new config field SyncFromCheckpoint for light client.

In some special scenarios, it's required to start synchronization from some
arbitrary checkpoint or even from the scratch. So this PR offers this
flexibility to users so that the synchronization start point can be configured.

There are two relevant configs: SyncFromCheckpoint and Checkpoint.

- If the SyncFromCheckpoint is true, the light client will try to sync from the
  specified checkpoint.

- If the Checkpoint is not configured, then the light client will sync from the
  scratch(from the latest header if the database is not empty)

Additional notes: these two configs are not visible in the CLI flags but only
accessable in the config file.

Example Usage:

[Eth]
SyncFromCheckpoint = true

[Eth.Checkpoint]
SectionIndex = 100
SectionHead = "0xabc"
CHTRoot = "0xabc"
BloomRoot = "0xabc"

PS. Historical checkpoint can be retrieved from the synced full node or light
client via les_getCheckpoint API.

* oss-fuzz: fix abi fuzzer (#22199)

* go.mod: upgrade golang-lru (#22134)

* downloader: extract findAncestor search functions (#21744)

This is a simple refactoring, extracting common ancestor
negotiation logic to named function

* core: implement background trie prefetcher

Squashed from the following commits:

core/state: lazily init snapshot storage map
core/state: fix flawed meter on storage reads
core/state: make statedb/stateobjects reuse a hasher
core/blockchain, core/state: implement new trie prefetcher
core: make trie prefetcher deliver tries to statedb
core/state: refactor trie_prefetcher, export storage tries
blockchain: re-enable the next-block-prefetcher
state: remove panics in trie prefetcher
core/state/trie_prefetcher: address some review concerns

sq

* core/state: convert prefetcher to concurrent per-trie loader

* eth/filters: fix potential deadlock in filter timeout loop (#22178)

This fixes #22131 and adds a test reproducing the issue.

* event: add ResubscribeErr (#22191)

This adds a way to get the error of the failing subscription
for logging/debugging purposes.

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

* trie: fix range prover (#22210)

Fixes a special case when the trie only has a single trie node and the range proof only contains a single element.

* common/mclock: remove dependency on github.com/aristanetworks/goarista (#22211)

It takes three lines of code to get to runtime.nanotime, no need to
pull a dependency for that.

* cmd, geth: CLI help fixes (#22220)

* cmd, geth: Reflect command being optional - closes 22218

* cmd, geth: Set current year to 2021

* cmd, geth: CLI help fixes (#22220)

* cmd, geth: Reflect command being optional - closes 22218

* cmd, geth: Set current year to 2021

* eth/protocols/snap: snap sync testing (#22179)

* eth/protocols/snap: make timeout configurable

* eth/protocols/snap: snap sync testing

* eth/protocols/snap: test to trigger panic

* eth/protocols/snap: fix race condition on timeouts

* eth/protocols/snap: return error on cancelled sync

* squashme: updates + test causing panic + properly serve accounts in order

* eth/protocols/snap: revert failing storage response

* eth/protocols/snap: revert on bad responses (storage, code)

* eth/protocols/snap: fix account handling stall

* eth/protocols/snap: fix remaining revertal-issues

* eth/protocols/snap: timeouthandler for bytecode requests

* eth/protocols/snap: debugging + fix log message

* eth/protocols/snap: fix misspelliings in docs

* eth/protocols/snap: fix race in bytecode handling

* eth/protocols/snap: undo deduplication of storage roots

* synctests: refactor + minify panic testcase

* eth/protocols/snap: minor polishes

* eth: minor polishes to make logs more useful

* eth/protocols/snap: remove excessive logs from the test runs

* eth/protocols/snap: stress tests with concurrency

* eth/protocols/snap: further fixes to test cancel channel handling

* eth/protocols/snap: extend test timeouts on CI

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

* go.mod: update dependencies (#22216)

This updates go module dependencies as discussed in #22050.

* graphql: change receipt status to decimal instead of hex (#22187)

This PR fixes the receipt status field to be decimal instead of a hex string,
as called for by the spec.

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

* go.mod: upgrade github.com/huin/goupnp (#22227)

This updates the goupnp dependency, fixing huin/goupnp#33

* snapshot: merge loops for better performance (#22160)

* core: reset to genesis when middle block is missing (#22135)

When a sethead/rewind finds that the targeted block is missing, it resets to genesis instead of crashing. Closes #22129

* eth/tracers: move tracing APIs into eth/tracers (#22161)

This moves the tracing RPC API implementation to package eth/tracers.
By doing so, package eth no longer depends on tracing and the duktape JS engine.

The change also enables tracing using the light client. All tracing methods work with the
light client, but it's a lot slower compared to using a full node.

* eth, p2p: reserve half peer slots for snap peers during snap sync (#22171)

* eth, p2p: reserve half peer slots for snap peers during snap sync

* eth: less logging

* eth: rework the eth/snap peer reservation logic

* eth: rework the eth/snap peer reservation logic (again)

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value (#22233)

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value

* tests/fuzzers/abi: fixed one-off panic with int.Min64 value

* internal/ethapi: print tx details when submitting (#22170)

This adds more info about submitted transactions in log messages.

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

* core/state: fix panic in state dumping (#22225)

* core: speed up header import (#21967)

This PR implements the following modifications

- Don't shortcut check if block is present, thus avoid disk lookup
- Don't check hash ancestry in early-check (it's still done in parallel checker)
- Don't check time.Now for every single header

Charts and background info can be found here: https://github.com/holiman/headerimport/blob/main/README.md
With these changes, writing 1M headers goes down to from 80s to 62s.

* accounts/scwallet: use go-ethereum crypto instead of go-ecdh (#22212)

* accounts/scwallet: use go-ethereum crypto instead of go-ecdh

github.com/wsddn/go-ecdh is a wrapper package for ECDH functionality
with any elliptic curve.

Since 'generic' ECDH is not required in accounts/scwallet (the curve is
always secp256k1), we can just use the standard library functionality
and our own crypto libraries to perform ECDH and save a dependency.

* Update accounts/scwallet/securechannel.go

Co-authored-by: Guillaume Ballet <gballet@gmail.com>

* Use the correct key

Co-authored-by: Guillaume Ballet <gballet@gmail.com>

* accounts/scwallet: update documentation (#22242)

* les: switch to new discv5 (#21940)

This PR enables running the new discv5 protocol in both LES client
and server mode. In client mode it mixes discv5 and dnsdisc iterators
(if both are enabled) and filters incoming ENRs for "les" tag and fork ID.
The old p2p/discv5 package and all references to it are removed.

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

* rpc: deprecate Client.ShhSubscribe (#22239)

It never worked, whisper uses polling.

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

* cmd,core,eth,params,tests: define yolov3 + enable EIP-2565 (#22213)

Removes the yolov2 definition, adds yolov3, including EIP-2565. This PR also disables some of the erroneously generated blockchain and statetests, and adds the new genesis hash + alloc for yolov3. 
This PR disables the CLI switches for yolo, since it's not complete until we merge support for 2930.

* les/utils: UDP rate limiter (#21930)

* les/utils: Limiter

* les/utils: dropped prior weight vs variable cost logic, using fixed weights

* les/utils: always create node selector in addressGroup

* les/utils: renamed request weight to request cost

* les/utils: simplified and improved the DoS penalty mechanism

* les/utils: minor fixes

* les/utils: made selection weight calculation nicer

* les/utils: fixed linter warning

* les/utils: more precise and reliable probabilistic test

* les/utils: fixed linter warning

* cmd/clef: don't check file permissions on windows (#22251)

Fixes #20123

* eth/tracers: fix unigram tracer (#22248)

* eth: check snap satelliteness, delegate drop to eth (#22235)

* eth: check snap satelliteness, delegate drop to eth

* eth: better handle eth/snap satellite relation, merge reg/unreg paths

* cmd/geth, node: allow configuring JSON-RPC on custom path prefix (#22184)

This change allows users to set a custom path prefix on which to mount the http-rpc
or ws-rpc handlers via the new flags --http.rpcprefix and --ws.rpcprefix.

Fixes #21826

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

* all: remove unneeded parentheses (#21921)

* remove uneeded convertion type

* remove redundant type in composite literal

* omit explicit type where implicit

* remove unused redundant parenthesis

* remove redundant import alias duktape

* trie : use trie.NewStackTrie instead of new(trie.Trie) (#22246)

The PR makes use of the stacktrie, which is is more lenient on resource consumption, than the regular trie, in cases where we only need it for DeriveSha

* core: reset txpool state on sethead (#22247)

fixes an issue where local transactions that were included in the chain before a SetHead were rejected if resubmitted, since the txpool had not reset the state to the current (older) state.

* fuzzers: added consensys/gurvy library to bn256 differential fuzzer (#21812)

This pr adds consensys' gurvy bn256 variant into the code for differential fuzzing.

* internal/ethapi: comment nitpick (#22270)

* eth: move eth.Config to a common package (#22205)

This moves the eth config definition into a separate package, eth/ethconfig. 
Packages eth and les can now import this common package instead of
importing eth from les, reducing dependencies.

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

* internal/ethapi: fix typo in comment (#22271)

* eth: don't wait for snap registration if we're not running snap (#22272)

Prevents a situation where we (not running snap) connects with a peer running snap, and get stalled waiting for snap registration to succeed (which will never happen), which cause a waitgroup wait to halt shutdown

* consensus: remove seal verification from the consensus engine interface (#22274)

* cmd/utils: enable snapshots by default

* metrics: fix cast omission in cpu_syscall.go (#22262)

fixes an regression which caused build failure on certain platforms

* params: just to make snapshots a bit more official

* all: bloom-filter based pruning mechanism (#21724)

* cmd, core, tests: initial state pruner

core: fix db inspector

cmd/geth: add verify-state

cmd/geth: add verification tool

core/rawdb: implement flatdb

cmd, core: fix rebase

core/state: use new contract code layout

core/state/pruner: avoid deleting genesis state

cmd/geth: add helper function

core, cmd: fix extract genesis

core: minor fixes

contracts: remove useless

core/state/snapshot: plugin stacktrie

core: polish

core/state/snapshot: iterate storage concurrently

core/state/snapshot: fix iteration

core: add comments

core/state/snapshot: polish code

core/state: polish

core/state/snapshot: rebase

core/rawdb: add comments

core/rawdb: fix tests

core/rawdb: improve tests

core/state/snapshot: fix concurrent iteration

core/state: run pruning during the recovery

core, trie: implement martin's idea

core, eth: delete flatdb and polish pruner

trie: fix import

core/state/pruner: add log

core/state/pruner: fix issues

core/state/pruner: don't read back

core/state/pruner: fix contract code write

core/state/pruner: check root node presence

cmd, core: polish log

core/state: use HEAD-127 as the target

core/state/snapshot: improve tests

cmd/geth: fix verification tool

cmd/geth: use HEAD as the verification default target

all: replace the bloomfilter with martin's fork

cmd, core: polish code

core, cmd: forcibly delete state root

core/state/pruner: add hash64

core/state/pruner: fix blacklist

core/state: remove blacklist

cmd, core: delete trie clean cache before pruning

cmd, core: fix lint

cmd, core: fix rebase

core/state: fix the special case for clique networks

core/state/snapshot: remove useless code

core/state/pruner: capping the snapshot after pruning

cmd, core, eth: fixes

core/rawdb: update db inspector

cmd/geth: polish code

core/state/pruner: fsync bloom filter

cmd, core: print warning log

core/state/pruner: adjust the parameters for bloom filter

cmd, core: create the bloom filter by size

core: polish

core/state/pruner: sanitize invalid bloomfilter size

cmd: address comments

cmd/geth: address comments

cmd/geth: address comment

core/state/pruner: address comments

core/state/pruner: rename homedir to datadir

cmd, core: address comments

core/state/pruner: address comment

core/state: address comments

core, cmd, tests: address comments

core: address comments

core/state/pruner: release the iterator after each commit

core/state/pruner: improve pruner

cmd, core: adjust bloom paramters

core/state/pruner: fix lint

core/state/pruner: fix tests

core: fix rebase

core/state/pruner: remove atomic rename

core/state/pruner: address comments

all: run go mod tidy

core/state/pruner: avoid false-positive for the middle state roots

core/state/pruner: add checks for middle roots

cmd/geth: replace crit with error

* core/state/pruner: fix lint

* core: drop legacy bloom filter

* core/state/snapshot: improve pruner

* core/state/snapshot: polish concurrent logs to report ETA vs. hashes

* core/state/pruner: add progress report for pruning and compaction too

* core: fix snapshot test API

* core/state: fix some pruning logs

* core/state/pruner: support recovering from bloom flush fail

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

* core/state/pruner: fix compaction after pruning

* core/state/pruner: fix compaction range error

* internal/debug: add switch to format logs with json (#22207)

adds a flag --log.json which if enabled makes the client format logs with JSON.

* accounts/abi/bind: fixed unpacking error (#22230)

There was a dormant error with structured inputs that failed unpacking.
This commit fixes the error by switching casting to the better abi.ConvertType function.
It also adds a test for calling a view function that returns a struct

* cmd/utils, eth/ethconfig: unindex txs older than ~1 year

* cmd/devp2p: fix documentation for eth-test (#22298)

* core: fix temp memory blowup caused by defers holding on to state

* les: enable les/4 and add tests (#22321)

* cmd/utils: add workaround for FreeBSD statfs quirk (#22310)

Make geth build on FreeBSD, fixes #22309.

* cmd/geth: fix js unclean shutdown (#22302)

* trie: fix bloom crash on fast sync restart

* rpc: increase the number of subscriptions in storm test (#22316)

* core/state/snapshot: ensure Cap retains a min number of layers

* eth: fix snap sync cancellation

* cmd/devp2p/internal/ethtest: use shared message types (#22315)

This updates the eth protocol test suite to use the message type
definitions of the 'production' protocol implementation in eth/protocols/eth.

* eth/handler, broadcast: optimize tx broadcast mechanism (#22176)

This PR optimizes the broadcast loop. Instead of iterating twice through a given set of transactions to weed out which peers have and which do not have a tx, to send/announce transactions, we do it only once.

* core/state: copy the snap when copying the state (#22340)

* core/state: copy the snap when copying the state

* core/state: deep-copy snap stuff during state Copy

* rlp: handle case of normal EOF in Stream.readFull (#22336)

io.Reader may return n > 0 and io.EOF at the end of the input stream.
readFull did not handle this correctly, looking only at the error. This fixes
it to check for n == len(buf) as well.

* node: always show websocket url in logs (#22307)

* eth: implement eth66 (#22241)

* eth/protocols/eth: split up the eth protocol handlers

* eth/protocols/eth: define eth-66 protocol messages

* eth/protocols/eth: poc implement getblockheaders on eth/66

* eth/protocols/eth: implement remaining eth-66 handlers

* eth/protocols: define handler map for eth 66

* eth/downloader: use protocol constants from eth package

* eth/protocols/eth: add ETH66 capability

* eth/downloader: tests for eth66

* eth/downloader: fix error in tests

* eth/protocols/eth: use eth66 for outgoing requests

* eth/protocols/eth: remove unused error type

* eth/protocols/eth: define protocol length

* eth/protocols/eth: fix pooled tx over eth66

* protocols/eth/handlers: revert behavioural change which caused tests to fail

* eth/downloader: fix failing test

* eth/protocols/eth: add testcases + fix flaw with header requests

* eth/protocols: change comments

* eth/protocols/eth: review fixes + fixed flaw in RequestOneHeader

* eth/protocols: documentation

* eth/protocols/eth: review concerns about types

* p2p/dnsdisc: fix hot-spin when all trees are empty (#22313)

In the random sync algorithm used by the DNS node iterator, we first pick a random
tree and then perform one sync action on that tree. This happens in a loop until any
node is found. If no trees contain any nodes, the iterator will enter a hot loop spinning
at 100% CPU.

The fix is complicated. The iterator now checks if a meaningful sync action can
be performed on any tree. If there is nothing to do, it waits for the next root record
recheck time to arrive and then tries again.

Fixes #22306

* les: renamed lespay to vflux (#22347)

* cmd/utils: disable caching preimages by default

* travis, appveyor, build: bump Go to 1.16

* les: fix balance expiration (#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 (#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 (#22357)

* cmd/geth: add db commands stats, compact, put, get, delete (#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 (#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 (#22373)

* cmd/utils: remove deprecated command line flags (#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 (#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 (#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 (#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 (#22363)

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

* les: move server pool to les/vflux/client (#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 (#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 (#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 (#22386)

* les: UDP pre-negotiation of available server capacity (#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 (#22395)

* core, eth: unship EIP 2315

* core/vm/runtime: more unshipping

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

* params: update chts (#22418)

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

* cmd/utils: fix exclusive check for archive node

* cmd/utils: set the txlookuplimit to 0

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

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

* cmd: retire whisper flags (#22421)

* cmd: retire whisper flags

* cmd/geth: remove whisper configs

* tests: update to latest tests (#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 (#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 (#22456)

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

* les: add trailing slash to metric namespace

* les: omit '.' in metric namespace

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

* p2p/enr: fix decoding of incomplete lists (#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 (#22486)

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

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

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

* eth: review comments

* eth/tracers: fix compilation err

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

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

* cmd/geth: remove copydb command

* eth/downloader: remove fakepeer

* tests/fuzzers: fix goroutine leak in les fuzzer (#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 (#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 (#22400)

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

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

* core/rawdb: fix transaction indexing/unindexing hashing error (#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 (#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 (#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 (#22423)

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

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

* cmd/devp2p/internal/ethtest: return request ID in BlockHeaders response (#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 (#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 (#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 (#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 (#22479)

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

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

* cmd/devp2p: use AWS-SDK v2 (#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 (#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 (#22346)

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

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

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

This PR fixes a regression introduced in #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 (#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 (#22511)

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

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

* accounts: eip-712 signing for ledger

* address review comments

* all: add read-only option to database (#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 (#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 (#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/go-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 (#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 (#22547)

* p2p/dnsdisc: rate limit resolving before checking cache (#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 (#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 #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 (#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 (#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 (#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 (#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 (#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 (#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 (#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  (#22589)

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

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

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

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

* ethstats: avoid creating subscriptions on background goroutine (#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 (#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 (#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 #22322

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

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

* internal/ethapi: fix eth_chainId method (#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 (#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 (#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 (#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 (#22618)

* les: move client pool to les/vflux/server (#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 (#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 (#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

* Merge branch 'master' into upgrade/go-ethereum/v1.10.2-2022428043256

* Merge branch 'master' into upgrade/go-ethereum/v1.10.2-2022428043256

* Merge branch 'master' into upgrade/go-ethereum/v1.10.2-2022428043256

* Merge branch 'master' into upgrade/go-ethereum/v1.10.2-2022519080100

* fixes: diffs, todos done

* fix: tracers

* fix: tracers

* fix: quorum precompile contracts

* remove note book

* diff fixes: private db prepare, api result
other minor changes

* fix: revert diff

* remove useless warning

* fix diffs

* fix: merge

* fix: merge, diff

* revert unwanted modification
tag goquorum additions

* Update eth/api_backend.go

* Update eth/api_backend.go

* update state_accessor.go

Co-authored-by: Péter Szilágyi <peterke@gmail.com>
Co-authored-by: gary rong <garyrong0905@gmail.com>
Co-authored-by: Dan DeGreef <dan.degreef@gmail.com>
Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Alex Mazalov <mazalov@gmail.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: ucwong <ucwong@126.com>
Co-authored-by: meowsbits <b5c6@protonmail.com>
Co-authored-by: Sina Mahmoodi <1591639+s1na@users.noreply.github.com>
Co-authored-by: Łukasz Zimnoch <lukaszzimnoch1994@gmail.com>
Co-authored-by: ligi <ligi@ligi.de>
Co-authored-by: rene <41963722+renaynay@users.noreply.github.com>
Co-authored-by: Melvin Junhee Woo <melvin.woo@groundx.xyz>
Co-authored-by: Guillaume Ballet <gballet@gmail.com>
Co-authored-by: Felföldi Zsolt <zsfelfoldi@gmail.com>
Co-authored-by: Alex Prut <1648497+alexprut@users.noreply.github.com>
Co-authored-by: isdyaufh8o7cq <sebaskil@icloud.com>
Co-authored-by: Or Neeman <oneeman@gmail.com>
Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>
Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>
Co-authored-by: michael1011 <me@michael1011.at>
Co-authored-by: wuff1996 <33193253+wuff1996@users.noreply.github.com>
Co-authored-by: Martin Redmond <21436+reds@users.noreply.github.com>
Co-authored-by: jacksoom <lifengliu1994@gmail.com>
Co-authored-by: Quest Henkart <qhenkart@gmail.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: baptiste-b-pegasys <85155432+baptiste-b-pegasys@users.noreply.github.com>
Co-authored-by: Baptiste Boussemart <baptiste.boussemart@consensys.net>
Co-authored-by: achraf17 <achrafsellami0@gmail.com>
Co-authored-by: achraf <achraf.sellami@consensys.net>
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

No branches or pull requests

3 participants