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

[Upgrade] Go-Ethereum release v1.9.21 #3

Closed

Conversation

baptiste-b-pegasys
Copy link
Owner

TODO

Plan & Analyse

  • Review the Release Notes
  • Review PRs in the section below

As you review, list extra changes and/or tests to be implemented to ensure compatibility with GoQuorum specific features.

Build & Test

  • Pull and checkout PR branch locally, then merge GoQuorum master into this branch
  • Resolve conflicts, taking into account the prior analysis
  • Implement required changes until lint passes
  • Implement required changes until all unit tests pass
  • Implement required changes until acceptance tests pass
  • Implement extra changes and/or tests
  • Verify any left TODOs in the code

Extra Changes & Tests

  • Example title: example description of change/test

Go-Ethereum Release: Tavum (v1.9.21)

  • Version: v1.9.21
  • Published: 2020-09-09T08:25:11Z

Release notes

Geth v1.9.21 is a regular maintenance release, the highlights being the removal of whisper, better call tracing and multiple memory stability fixes during fast sync to both stabilize usage as well as to fix a memory leak that lead to crashers before.

  • Remove Whisper as promised a couple months ago (#21487, #21526, #21527)!
  • Minor user experience polishes around legacy Ledger derivation paths (#21517).
  • Implement arbitrary call tracing via debug_traceCall on top of arbitrary blocks (#21338).
  • Expose internal transaction revertals and revert reason in the call_tracer tracer (#21387).
  • Cap the number of in-memory trie nodes during fast sync, fix crasher memory leak (#21491).
  • Prepare the trie syncer for path-based operation to support the upcoming snap sync (#21504).
  • Limit the cached data in the downloader more aggressively to avoid memory fluctuations (#21366).
  • Fix the simulated chain to not allow changing block timestamps if transactions were included (#21334).
  • Fix an ABI parser issue around tuples (#21501).

For a full rundown of the changes please consult the Geth 1.9.21 release milestone


As with all our previous releases, you can find the:

Codebase changes assessment

Legend

File Stats: (A) Added, (M) Modified and (R) Removed

Line Stats: (A) Added and (R) Removed

Assessment:

  • ✅ No conflict expected
  • ⚠ Review required to assess changes
  • ‼️ Conflicts expected and review required

19 Pull Requests

🔍 Link Title File Stats
M/A/R
Packages changed
(files changed)
Line Stats
A/R
Top 5 Changed Files
(lines changed)
⚠️ #21334 accounts/abi/bind/backends: Disallow AdjustTime for non-empty blocks 2/0/0
accounts/abi/bind/backends (2)
44/5
accounts/abi/bind/backends/simulated_test.go (82)
accounts/abi/bind/backends/simulated.go (16)
⚠️ #21490 eth: updated comments 3/0/0
eth (3)
3/3
eth/api.go (4)
eth/api_tracer.go (4)
eth/bloombits.go (4)
⚠️ #21448 ``go.mod goleveldb latest update`` 2/0/0
go.mod (1)
go.sum (1)
54/17
#21491 core/state, eth, trie: stabilize memory use, fix memory leak 7/0/0
trie (4)
core/state (2)
eth/downloader (1)
58/29
trie/sync.go (120)
eth/downloader/downloader.go (22)
core/state/sync.go (12)
trie/committer.go (8)
core/state/statedb.go (4)
⚠️ #21387 eth/tracers: revert reason in call_tracer + error for failed internal calls 3/2/0
eth/tracers/internal/tracers (2)
eth/tracers/testdata (2)
eth/tracers (1)
172/15
eth/tracers/testdata/call_tracer_inner_instafail.json (144)
eth/tracers/testdata/call_tracer_revert_reason.json (128)
eth/tracers/tracers_test.go (48)
eth/tracers/internal/tracers/call_tracer.js (30)
eth/tracers/internal/tracers/assets.go (24)
#21497 rpc: fix issue with null JSON-RPC messages 3/0/0
rpc/testdata (2)
rpc (1)
16/3
rpc/json.go (26)
rpc/testdata/invalid-batch.js (6)
rpc/testdata/invalid-nonobj.js (6)
#21501 accounts/abi: fix a bug in getTypeSize method 2/0/0
accounts/abi (2)
37/1
accounts/abi/type_test.go (72)
accounts/abi/type.go (4)
#21503 internal: fix personal.sign() 1/0/0
console (1)
2/2
console/bridge.go (8)
#21455 "Downloader queue stats" is now provided once per minute 1/0/0
eth/downloader (1)
1/1
eth/downloader/queue.go (4)
⚠️ #21432 go.mod: goja update 2/0/0
go.mod (1)
go.sum (1)
3/3
go.sum (8)
go.mod (4)
#21366 eth/downloader: change intial download size 5/0/0
eth/downloader (5)
26/24
eth/downloader/downloader_test.go (48)
eth/downloader/queue.go (28)
eth/downloader/queue_test.go (12)
eth/downloader/downloader.go (8)
eth/downloader/testchain_test.go (4)
#21504 core, eth, trie: prepare trie sync for path based operation 6/0/0
trie (4)
core/state (1)
eth/downloader (1)
480/105
eth/downloader/statesync.go (306)
trie/sync_test.go (298)
core/state/sync_test.go (254)
trie/trie.go (168)
trie/sync.go (132)
⚠️ #21338 eth: added trace_call to trace on top of arbitrary blocks 3/0/0
eth (2)
internal/web3ext (1)
54/8
eth/api_tracer.go (98)
eth/api.go (14)
internal/web3ext/web3ext.go (12)
⚠️ #21514 accounts/abi/bid/backends: 2/0/0
accounts/abi/bind/backends (2)
76/76
accounts/abi/bind/backends/simulated.go (264)
accounts/abi/bind/backends/simulated_test.go (40)
#21487 whisper: remove whisper 6/0/24
whisper/whisperv6 (17)
cmd/geth (3)
mobile (3)
whisper/mailserver (2)
cmd/utils (1)
cmd/wnode (1)
tests/fuzzers/whisperv6/corpus (1)
tests/fuzzers/whisperv6 (1)
whisper/shhclient (1)
17/5826
whisper/whisperv6/filter_test.go (1672)
cmd/wnode/main.go (1546)
whisper/whisperv6/api.go (1186)
whisper/whisperv6/message_test.go (942)
whisper/whisperv6/message.go (710)
⚠️ #21517 accounts/usbwallet, signer/core: show accounts from ledger legacy derivation paths 2/0/0
accounts/usbwallet (1)
signer/core (1)
30/17
signer/core/api.go (66)
accounts/usbwallet/wallet.go (28)
⚠️ #21526 build: remove wnode from the list of packages binaries 1/0/0
build (1)
0/5
build/ci.go (10)
#21527 .github: remove whisper from CODEOWNERS 1/0/0
.github (1)
0/1
.github/CODEOWNERS (2)
⚠️ #21534 params: update CHTs for v1.9.21 release 1/0/0
params (1)
16/16
params/config.go (64)

72 Changed files

🔍 File Lines Changed Linked PR
whisper/whisperv6/whisper.go 2280
whisper/whisperv6/whisper_test.go 1856
whisper/whisperv6/filter_test.go 1672 #21487
cmd/wnode/main.go 1546 #21487
whisper/whisperv6/api.go 1186 #21487
whisper/whisperv6/message_test.go 942 #21487
whisper/whisperv6/message.go 710 #21487
whisper/whisperv6/envelope.go 560 #21487
whisper/whisperv6/peer.go 536 #21487
whisper/whisperv6/filter.go 524 #21487
whisper/mailserver/server_test.go 470 #21487
whisper/mailserver/mailserver.go 418 #21487
whisper/whisperv6/benchmarks_test.go 416 #21487
mobile/shhclient.go 390 #21487
whisper/shhclient/client.go 386 #21487
eth/downloader/statesync.go 306 #21504
trie/sync_test.go 298 #21504
⚠️ accounts/abi/bind/backends/simulated.go 280 #21514
#21334
whisper/whisperv6/topic_test.go 268 #21487
core/state/sync_test.go 254 #21504
trie/sync.go 240 #21491
#21504
mobile/types.go 186 #21487
whisper/whisperv6/doc.go 184 #21487
whisper/whisperv6/envelope_test.go 182 #21487
whisper/whisperv6/gen_newmessage_json.go 180 #21487
tests/fuzzers/whisperv6/whisper-fuzzer.go 180 #21487
trie/trie.go 172 #21491
#21504
whisper/whisperv6/gen_message_json.go 168 #21487
eth/tracers/testdata/call_tracer_inner_instafail.json 144 #21387
whisper/whisperv6/gen_criteria_json.go 132 #21487
whisper/whisperv6/api_test.go 128 #21487
⚠️ go.sum 128 #21432
#21448
eth/tracers/testdata/call_tracer_revert_reason.json 128 #21387
⚠️ accounts/abi/bind/backends/simulated_test.go 122 #21514
#21334
whisper/whisperv6/topic.go 112 #21487
⚠️ eth/api_tracer.go 102 #21490
#21338
accounts/abi/type_test.go 72 #21501
⚠️ signer/core/api.go 66 #21517
⚠️ params/config.go 64 #21534
whisper/whisperv6/config.go 62 #21487
⚠️ cmd/utils/flags.go 54 #21487
⚠️ cmd/geth/config.go 54 #21487
⚠️ eth/downloader/downloader_test.go 48 #21366
⚠️ eth/tracers/tracers_test.go 48 #21387
eth/downloader/queue.go 32 #21455
#21366
eth/tracers/internal/tracers/call_tracer.js 30 #21387
⚠️ eth/downloader/downloader.go 30 #21491
#21366
⚠️ accounts/usbwallet/wallet.go 28 #21517
⚠️ rpc/json.go 26 #21497
⚠️ go.mod 26 #21432
#21448
eth/tracers/internal/tracers/assets.go 24 #21387
mobile/geth.go 20 #21487
⚠️ eth/api.go 18 #21490
#21338
⚠️ cmd/geth/consolecmd_test.go 16 #21487
⚠️ internal/web3ext/web3ext.go 12 #21338
core/state/sync.go 12 #21491
trie/secure_trie.go 12 #21504
eth/downloader/queue_test.go 12 #21366
⚠️ build/ci.go 10 #21526
trie/committer.go 8 #21491
console/bridge.go 8 #21503
rpc/testdata/invalid-batch.js 6 #21497
rpc/testdata/invalid-nonobj.js 6 #21497
⚠️ eth/bloombits.go 4 #21490
trie/trie_test.go 4 #21491
⚠️ params/version.go 4
eth/downloader/testchain_test.go 4 #21366
accounts/abi/type.go 4 #21501
⚠️ cmd/geth/usage.go 4 #21487
⚠️ core/state/statedb.go 4 #21491
.github/CODEOWNERS 2 #21527
tests/fuzzers/whisperv6/corpus/009c5adfa4fd685caef58e1ce932fa7fb209730a 0 #21487

fjl and others added 24 commits August 25, 2020 16:21
…(#21334)

* accounts/abi/bind/backends: Disallow timeshift for non-empty blocks

* accounts/abi/bind/backends: added tests for adjust time

* accounts/abi/bind/simulated: added comments, fixed test for AdjustTime

* accounts/abi/bind/backends: updated comment
* go.mod | goleveldb latest update

* go.mod update

* leveldb options

* go.mod: double check

Co-authored-by: Péter Szilágyi <peterke@gmail.com>
core/state, eth, trie: stabilize memory use, fix memory leak
… calls (#21387)

* tests: add testdata of call tracer

* eth/tracers: return revert reason in call_tracer

* eth/tracers: regenerate assets

* eth/tracers: add error message even if no exec occurrs, fixes #21438

Co-authored-by: Martin Holst Swende <martin@swende.se>
* accounts/abi: fix a bug in getTypeSize method

e.g. for "Tuple[2]" type, the element of the array is a tuple type and the size of the tuple may not be 32.

* accounts/abi: add unit test of getTypeSize method
* "Downloader queue stats" is now a DEBUG information

I think this info is more a DEBUG related information then an INFO. If it must remains an INFO, maybe it can be slow down to one time every 5 minutes or so.

* Update queue.go

"Downloader queue stats" information is now provided once every minute instead of once every 10 seconds.
This changes how the downloader works, a little bit. Previously, when block sync started,
we immediately started filling up to 8192 blocks. Usually this is fine, blocks are small
in the early numbers. The threshold then is lowered as we measure the size of the blocks
that are filled.

However, if the node is shut down and restarts syncing while we're in a heavy segment,
that might be bad. This PR introduces a more conservative initial threshold of 2K blocks
instead.
core, eth, trie: prepare trie sync for path based operation
* eth: Added TraceTransactionPending

* eth: Implement Trace_Call, remove traceTxPending

* eth: debug_call -> debug_traceCall, recompute tx environment if pruned

* eth: fix nil panic

* eth: improve block retrieving logic in tracers

* internal/web3ext: add debug_traceCall to console
…nd anonymous variable assignments (#21514)

Co-authored-by: Osoro Bironga <osoro@doctaroo.com>
* whisper: remove whisper

* Update cmd/geth/config.go

Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>

* cmd/geth: warn on enabling whisper + remove more whisper deps

* mobile: remove all whisper references

Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Martin Holst Swende <martin@swende.se>
…ivation paths (#21517)

* accounts/usbwallet, signer/core: un-hide accounts from ledger legacy derivation paths

* Update accounts/usbwallet/wallet.go

* Update signer/core/api.go

* Update signer/core/api.go
params: update CHTs for v1.9.21 release
@baptiste-b-pegasys baptiste-b-pegasys deleted the upgrade/go-ethereum/v1.9.21-2021602215138 branch June 2, 2021 21:53
baptiste-b-pegasys added a commit that referenced this pull request Jun 24, 2021
* params: begin v1.9.23 release cycle

* accounts/abi: ABI explicit difference between Unpack and UnpackIntoInterface (#21091)

* accounts/abi: refactored abi.Unpack

* accounts/abi/bind: fixed error

* accounts/abi/bind: modified template

* accounts/abi/bind: added ToStruct for conversion

* accounts/abi: reenabled tests

* accounts/abi: fixed tests

* accounts/abi: fixed tests for packing/unpacking

* accounts/abi: fixed tests

* accounts/abi: added more logic to ToStruct

* accounts/abi/bind: fixed template

* accounts/abi/bind: fixed ToStruct conversion

* accounts/abi/: removed unused code

* accounts/abi: updated template

* accounts/abi: refactored unused code

* contracts/checkpointoracle: updated contracts to sol ^0.6.0

* accounts/abi: refactored reflection logic

* accounts/abi: less code duplication in Unpack*

* accounts/abi: fixed rebasing bug

* fix a few typos in comments

* rebase on master

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

* mobile: added constructor for big int (#21597)

* mobile: added constructor for big int

* mobile: tiny nitpick

* core/vm, params: make 2200 in line with spec (#21605)

* core: free pointer from slice after popping element from price heap (#21572)

* Fix potential memory leak in price heap

* core: nil free pointer slice (alternative version)

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

* internal/web3ext: improve eth_getBlockByNumber and eth_getBlockByHash console api (#21608)

* light: fix wrong description in a comment (#21573)

* p2p/enode: remove unused code (#21612)

* build: keep geth-sources.jar build result for JavaDoc (#21596)

* ci: tooltips for javadoc for mobile app

* f space

* cmd/bootnode,internal/debug: fix some comments (#21623)

* trie: use stacktrie for Derivesha operation (#21407)

core/types: use stacktrie for derivesha

trie: add stacktrie file

trie: fix linter

core/types: use stacktrie for derivesha

rebased: adapt stacktrie to the newer version of DeriveSha

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

More linter fixes

review feedback: no key offset for nodes converted to hashes

trie: use EncodeRLP for full nodes

core/types: insert txs in order in derivesha

trie: tests for derivesha with stacktrie

trie: make stacktrie use pooled hashers

trie: make stacktrie reuse tmp slice space

trie: minor polishes on stacktrie

trie/stacktrie: less rlp dancing

core/types: explain the contorsions in DeriveSha

ci: fix goimport errors

trie: clear mem on subtrie hashing

squashme: linter fix

stracktrie: use pooling, less allocs (#3)

trie: in-place hex prefix, reduce allocs and add rawNode.EncodeRLP

Reintroduce the `[]node` method, add the missing `EncodeRLP` implementation for `rawNode` and calculate the hex prefix in place.

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

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

* accounts, signer: implement gnosis safe support (#21593)

* accounts, signer: implement gnosis safe support

* common/math: add type for marshalling big to dec

* accounts, signer: properly sign gnosis requests

* signer, clef: implement account_signGnosisTx

* signer: fix auditlog print, change rpc-name (signGnosisTx to signGnosisSafeTx)

* signer: pass validation-messages/warnings to the UI for gnonsis-safe txs

* signer/core: minor change to validationmessages of typed data

* trie: polishes to trie committer (#21351)

* trie: update tests to check commit integrity

* trie: polish committer

* trie: fix typo

* trie: remove hasvalue notion

According to the benchmarks, type assertion between the pointer and
interface is extremely fast.

BenchmarkIntmethod-12           1000000000               1.91 ns/op
BenchmarkInterface-12           1000000000               2.13 ns/op
BenchmarkTypeSwitch-12          1000000000               1.81 ns/op
BenchmarkTypeAssertion-12       2000000000               1.78 ns/op

So the overhead for asserting whether the shortnode has "valuenode"
child is super tiny. No necessary to have another field.

* trie: linter nitpicks

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

* trie: add Commit-sequence tests for stacktrie commit (#21643)

* core/state/snapshot: stop generator if it hits missing trie nodes (#21649)

* core/state/snapshot: exit Geth if generator hits missing trie nodes

* core/state/snapshot: error instead of hard die on generator fault

* core/state/snapshot: don't enable logging on the tests

* cmd/faucet: enable DNS discovery for known networks (#21636)

* params: update goerli testnet bootnodes (#21659)

* params: update pegasys besu bootnode

* params: update goerli initiative bootnodes

* core/bloombits: faster generator (#21625)

* core/bloombits: add benchmark

* core/bloombits: optimize inserts

* core/types: optimize bloom filters (#21624)

* core/types: tests for bloom

* core/types: refactored bloom filter for receipts, added tests

core/types: replaced old bloom implementation

core/types: change interface of bloom add+test

* core/types: refactor bloom

* core/types: minor tweak on LogsBloom

Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>

* cmd/devp2p/internal/ethtest: improve eth test suite (#21615)

This fixes issues with the protocol handshake and status exchange
and adds support for responding to GetBlockHeaders requests.

* node: relax websocket connection header check (#21646)

This makes it accept the "upgrade,keep-alive" header value, which
apparently is a thing.

* signer/core: don't mismatch reject and no accounts (#21677)

* signer/core: don't mismatch reject and zero accounts, fixes #21674

* signer/core: docs

* p2p/discover: remove use of shared hash instance for key derivation (#21673)

For some reason, using the shared hash causes a cryptographic incompatibility
when using Go 1.15. I noticed this during the development of Discovery v5.1
when I added test vector verification.

The go library commit that broke this is golang/go@97240d5, but the
way we used HKDF is slightly dodgy anyway and it's not a regression.

* core/vm: dedup config check in markdown logger (#21655)

* core/vm: dedup config check

* review feedback: reuse buffer

* eth/downloader: fix data race around the ancientlimit (#21681)

* eth/downloader: fix data race around the ancientlimit

* eth/downloader: initialize the ancientlimit as 0

* eth/downloader: cache parent hash instead of recomputing (#21678)

* core: fix txpool off-by-one error (#21683)

* trie: polish commit function (#21692)

* trie: polish commit function

* trie: fix typo

* accouts, consensus, core: fix some comments (#21617)

* console: fix admin.sleepBlocks (#21629)

* all: replace RWMutex with Mutex in places where RLock is not used (#21622)

* consensus/clique: unexport calcDifficulty and improve comment (#21619)

* trie: fix flaw in stacktrie pool reuse (#21699)

* internal/web3ext: improve some web3 apis (#21639)

* imporve some web3-ext apis

* Update web3ext.go

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

* eth, p2p: use truncated names  (#21698)

* peer: return localAddr instead of name to prevent spam

We currently use the name (which can be freely set by the peer) in several log messages.
This enables malicious actors to write spam into your geth log.
This commit returns the localAddr instead of the freely settable name.

* p2p: reduce usage of peer.Name in warn messages

* eth, p2p: use truncated names

* Update peer.go

Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Felix Lange <fjl@twurst.com>

* cmd/geth, cmd/utils: fixed flags name (#21700)

* miner: don't interrupt mining after successful sync (#21701)

* miner: exit loop when downloader Done or Failed

Following the logic of the comment at the method,
this fixes a regression introduced at 7cf56d6
, which would allow external parties to DoS with
blocks, preventing mining progress.

Signed-off-by: meows <b5c6@protonmail.com>

* miner: remove ineff assign (lint)

Signed-off-by: meows <b5c6@protonmail.com>

* miner: update test re downloader events

Signed-off-by: meows <b5c6@protonmail.com>

* Revert "miner: remove ineff assign (lint)"

This reverts commit eaefcd34ab4862ebc936fb8a07578aa2744bc058.

* Revert "miner: exit loop when downloader Done or Failed"

This reverts commit 23abd34265aa246c38fc390bb72572ad6ae9fe3b.

* miner: add test showing imprecise TestMiner

Signed-off-by: meows <b5c6@protonmail.com>

* miner: fix waitForMiningState precision

This helper function would return an affirmation
on the first positive match on a desired bool.

This was imprecise; it return false positives
by not waiting initially for an 'updated' value.

This fix causes TestMiner_2 to fail, which is
expected.

Signed-off-by: meows <b5c6@protonmail.com>

* miner: remove TestMiner_2 demonstrating broken test

This test demonstrated the imprecision of the test
helper function waitForMiningState. This function
has been fixed with 6d365c2851, and this test test
may now be removed.

Signed-off-by: meows <b5c6@protonmail.com>

* miner: fix test regarding downloader event/mining expectations

See comment for logic.

Signed-off-by: meows <b5c6@protonmail.com>

* miner: add test describing expectations for downloader/mining events

We expect that once the downloader emits a DoneEvent,
signaling a successful sync, that subsequent StartEvents
are not longer permitted to stop the miner.

This prevents a security vulnerability where forced syncs via
fake high blocks would stall mining operation.

Signed-off-by: meows <b5c6@protonmail.com>

* miner: use 'canStop' state to fix downloader event handling

- Break downloader event handling into event
separating Done and Failed events. We need to
treat these cases differently since a DoneEvent
should prevent the miner from being stopped on
subsequent downloader Start events.

- Use canStop state to handle the one-off
case when a downloader first succeeds.

Signed-off-by: meows <b5c6@protonmail.com>

* miner: improve comment wording

Signed-off-by: meows <b5c6@protonmail.com>

* miner: start mining on downloader events iff not already mining

Signed-off-by: meows <b5c6@protonmail.com>

* miner: refactor miner update logic w/r/t downloader events

This makes mining pause/start logic regarding downloader
events more explicit. Instead of eternally handling downloader
events after the first done event, the subscription is closed
when downloader events are no longer actionable.

Signed-off-by: meows <b5c6@protonmail.com>

* miner: fix handling downloader events on subcription closed

Signed-off-by: meows <b5c6@protonmail.com>

* miner: (lint:gosimple) use range over chan instead of for/select

Signed-off-by: meows <b5c6@protonmail.com>

* miner: refactor update loop to remove race condition

The go routine handling the downloader events handling
vars in parallel with the parent routine, causing a
race condition.

This change, though ugly, remove the condition while
still allowing the downloader event subscription to be
closed when the miner has no further use for it (ie DoneEvent).

* miner: alternate fix for miner-flaw

Co-authored-by: meows <b5c6@protonmail.com>

* accounts/keystore: fix flaky test (#21703)

* accounts/keystore: add timeout to test to prevent failure on travis

The TestWalletNotifications test sporadically fails on travis.
This is because we shutdown the event collection before all events are received.
Adding a small timeout (10 milliseconds) allows the collector to be scheduled
and to consume all pending events before we shut it down.

* accounts/keystore: added newlines back in

* accounts/keystore: properly fix the walletNotifications test

* params: update CHTs (#21706)

* miner: set etherbase even if mining isn't possible at the moment (#21707)

* p2p/discover: implement v5.1 wire protocol (#21647)

This change implements the Discovery v5.1 wire protocol and
also adds an interactive test suite for this protocol.

* params: go-ethereum v1.9.23 stable

* fix: adapt to #21091
- Update generated code (abigen, done with go generate)
- Change Unpack to UnpacIntoInterface
- Unused dependency (gotest.tools)

* fix: revert contract generation

Co-authored-by: Péter Szilágyi <peterke@gmail.com>
Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Guillaume Ballet <gballet@gmail.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: aaronbuchwald <aaron.buchwald56@gmail.com>
Co-authored-by: mr_franklin <mr_franklin@126.com>
Co-authored-by: shigeyuki azuchi <azuchi@chaintope.com>
Co-authored-by: gary rong <garyrong0905@gmail.com>
Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: Raw Pong Ghmoa <58883403+q9f@users.noreply.github.com>
Co-authored-by: rene <41963722+renaynay@users.noreply.github.com>
Co-authored-by: Hanjiang Yu <delacroix.yu@gmail.com>
Co-authored-by: Giuseppe Bertone <bertone.giuseppe@gmail.com>
Co-authored-by: meows <b5c6@protonmail.com>
Co-authored-by: Baptiste Boussemart <baptiste.boussemart@consensys.net>
baptiste-b-pegasys pushed a commit that referenced this pull request Jul 12, 2021
core/types: use stacktrie for derivesha

trie: add stacktrie file

trie: fix linter

core/types: use stacktrie for derivesha

rebased: adapt stacktrie to the newer version of DeriveSha

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

More linter fixes

review feedback: no key offset for nodes converted to hashes

trie: use EncodeRLP for full nodes

core/types: insert txs in order in derivesha

trie: tests for derivesha with stacktrie

trie: make stacktrie use pooled hashers

trie: make stacktrie reuse tmp slice space

trie: minor polishes on stacktrie

trie/stacktrie: less rlp dancing

core/types: explain the contorsions in DeriveSha

ci: fix goimport errors

trie: clear mem on subtrie hashing

squashme: linter fix

stracktrie: use pooling, less allocs (#3)

trie: in-place hex prefix, reduce allocs and add rawNode.EncodeRLP

Reintroduce the `[]node` method, add the missing `EncodeRLP` implementation for `rawNode` and calculate the hex prefix in place.

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

Co-authored-by: Martin Holst Swende <martin@swende.se>
baptiste-b-pegasys pushed a commit that referenced this pull request Jan 4, 2022
* faucet: revert change

* eth: added UT for transaction propagation

* internal/eth: fixed merging side effect

* accounts: copy signer

* Added Quorum tag for the UT
baptiste-b-pegasys added a commit that referenced this pull request Jan 28, 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>
baptiste-b-pegasys pushed a commit that referenced this pull request Mar 31, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.