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

core/rawdb: simple legacy receipt converter #24028

Merged
merged 10 commits into from Mar 23, 2022

Conversation

s1na
Copy link
Contributor

@s1na s1na commented Dec 1, 2021

This is a slower but simpler version of #23454. I still plan to add in batch reading.

}
for _, f := range files {
// This will replace the index + table files up to and including the switchover file.
if err := os.Rename(filepath.Join(migrationPath, f.Name()), filepath.Join(ancientsPath, f.Name())); err != nil {
Copy link
Contributor

@holiman holiman Dec 2, 2021

Choose a reason for hiding this comment

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

One thing to be aware of, which I find pretty counter-intuitive, is that f.Name() doesn't return the canonical filename, but "the name of the file as presented to Open".

	f, _ := os.Open("/tmp/foo")
	fmt.Printf("name: %v", f.Name())

prints out

name: /tmp/foo

So it looks to me like this shouldn't work, but I haven't tested it, maybe it does?

Copy link
Contributor Author

@s1na s1na Dec 2, 2021

Choose a reason for hiding this comment

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

That is counter-intuitive...however in this case it works because ioutil.ReadDir returns a list of fs.FileInfo which is a bit different than os.File struct.

Copy link
Member

@rjl493456442 rjl493456442 Jan 11, 2022

Choose a reason for hiding this comment

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

Yes, maybe add some comments about the file name? So that next time we won't be confused.

Copy link
Member

@rjl493456442 rjl493456442 Jan 11, 2022

Choose a reason for hiding this comment

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

The behavior of Os.Rename depends on the operator system. We may need to handle at least windows explicitly.

For example, go-leveldb uses this code for windows
https://github.com/syndtr/goleveldb/blob/master/leveldb/storage/file_storage_windows.go#L66

But I never test it :P

// with the item as argument. If `fn` returns an error the iteration stops
// and that error will be returned.
func (t *freezerTable) forEach(fn func(uint64, []byte) error) error {
items := atomic.LoadUint64(&t.items)
Copy link
Contributor

@holiman holiman Dec 2, 2021

Choose a reason for hiding this comment

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

Would be neat to somehow prevent write operations while forEach is executing. t.RetrieveItems is safe, in itself, but since we're iterating over a wider range, it would be even better to have a mutex guarantee across the entire range, not just per-batch.
Not sure how to solve that.

Incidentally: this forEach function doesn't have to be part of freezerTable, right? It could be implemented on the caller-side too, couldn't it? Then it would be protected by the freezer writelock, and not exposed to any other callers.

Just speculatng here...

Copy link
Contributor Author

@s1na s1na Dec 2, 2021

Choose a reason for hiding this comment

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

Yes a mutex guarantee is kinda tricky here since it possibly takes a long time. I made it a method of freezerTable thinking it might be useful for other purposes where there isn't concurrent access to the table (e.g. InitDatabaseFromFreezer). For now I changed it into an anonymous function defined in MigrateTable. There its clear that no other goroutine is accessing the table and the writelock is also taken.

In the meanwhile I'll think over how we can handle locking better

Copy link
Contributor

@holiman holiman Dec 3, 2021

Choose a reason for hiding this comment

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

I think it's fine as you've done now, having it anonymous and protected by f.writeLock.

holiman
holiman approved these changes Dec 3, 2021
Copy link
Contributor

@holiman holiman left a comment

Code looks good to me, I haven't actually tested it the functionality on a live dataset.

@fjl fjl self-assigned this Dec 7, 2021
@fjl fjl changed the title cmd,core: Simple legacy receipt converter core/rawdb: simple legacy receipt converter Dec 14, 2021
@s1na
Copy link
Contributor Author

s1na commented Dec 17, 2021

For a few weeks now I've been trying to generate a realistic dataset, by doing a full sync with an old version. I did that till block 7688456 (May 2019 which is roughly when receipts were modified). Then changed to v1.9.0 and synced further till 9,069,000 (Istanbul HF). Then I updated to a more recent version (I think v1.9.10) which for some reason switched sync to fast sync automatically and anyway got things in a situation where I have only till block 8,979,001 in the ancients. I tried migration on that dataset:

INFO [12-16|15:09:23.203] Starting migration                       ancients=8,979,001 firstLegacy=46147
INFO [12-16|15:09:23.206] Processing legacy elements               number=0
INFO [12-16|15:09:27.026] Processing legacy elements               number=500,000
INFO [12-16|15:09:41.922] Processing legacy elements               number=1,000,000
INFO [12-16|15:10:04.826] Processing legacy elements               number=1,500,000
INFO [12-16|15:10:32.580] Processing legacy elements               number=2,000,000
INFO [12-16|15:11:02.757] Processing legacy elements               number=2,500,000
INFO [12-16|15:11:32.961] Processing legacy elements               number=3,000,000
INFO [12-16|15:12:19.584] Processing legacy elements               number=3,500,000
INFO [12-16|15:14:46.302] Processing legacy elements               number=4,000,000
INFO [12-16|15:22:02.437] Processing legacy elements               number=4,500,000
INFO [12-16|15:32:57.499] Processing legacy elements               number=5,000,000
INFO [12-16|15:43:57.339] Processing legacy elements               number=5,500,000
INFO [12-16|15:57:31.337] Processing legacy elements               number=6,000,000
INFO [12-16|16:08:47.485] Processing legacy elements               number=6,500,000
INFO [12-16|16:18:34.338] Processing legacy elements               number=7,000,000
INFO [12-16|16:29:08.083] Processing legacy elements               number=7,500,000
INFO [12-16|16:34:51.004] Processing legacy elements               number=8,000,000
INFO [12-16|16:37:30.997] Processing legacy elements               number=8,500,000
INFO [12-16|16:40:29.258] Migration finished                       duration=1h31m6.054413489s

Running freezer-compare:

INFO [12-17|08:22:12.022] Starting comparison                      ancients=8,979,001 ancients2=13,630,078 kind=receipts
INFO [12-17|08:26:40.100] Comparison finished                      duration=4m28.078147641s

Regarding size:

ubuntu@geth-sync-test:~$ du -h ~/datadir-receipts/geth/chaindata/ancient
136G    /home/ubuntu/datadir-receipts/geth/chaindata/ancient
ubuntu@geth-sync-test:~$ du -h ~/datadir-receipts/geth/chaindata/ancient-migrated/
106G    /home/ubuntu/datadir-receipts/geth/chaindata/ancient-migrated/

The legacy ancients dir has 32 receipt files whereas the migrated one has 16.

@s1na s1na force-pushed the legacy-converter-simple branch from 374d17b to 8abbbf2 Compare Jan 7, 2022
@s1na
Copy link
Contributor Author

s1na commented Jan 7, 2022

I added a check on geth startup which warns users when they have legacy receipts in their freezer.

core/types/legacy.go Outdated Show resolved Hide resolved
core/rawdb/table.go Outdated Show resolved Hide resolved
core/rawdb/database.go Outdated Show resolved Hide resolved
core/rawdb/freezer.go Outdated Show resolved Hide resolved
core/rawdb/freezer.go Outdated Show resolved Hide resolved
}
for _, f := range files {
// This will replace the index + table files up to and including the switchover file.
if err := os.Rename(filepath.Join(migrationPath, f.Name()), filepath.Join(ancientsPath, f.Name())); err != nil {
Copy link
Member

@rjl493456442 rjl493456442 Jan 11, 2022

Choose a reason for hiding this comment

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

Yes, maybe add some comments about the file name? So that next time we won't be confused.

}
for _, f := range files {
// This will replace the index + table files up to and including the switchover file.
if err := os.Rename(filepath.Join(migrationPath, f.Name()), filepath.Join(ancientsPath, f.Name())); err != nil {
Copy link
Member

@rjl493456442 rjl493456442 Jan 11, 2022

Choose a reason for hiding this comment

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

The behavior of Os.Rename depends on the operator system. We may need to handle at least windows explicitly.

For example, go-leveldb uses this code for windows
https://github.com/syndtr/goleveldb/blob/master/leveldb/storage/file_storage_windows.go#L66

But I never test it :P

cmd/geth/dbcmd.go Outdated Show resolved Hide resolved
cmd/geth/dbcmd.go Outdated Show resolved Hide resolved
cmd/geth/dbcmd.go Outdated Show resolved Hide resolved
@s1na
Copy link
Contributor Author

s1na commented Jan 13, 2022

@rjl493456442 I don't know why I can't directly reply to your comment above. Do you remember at the top of your head what exactly the windows issue with os.Rename is? I added a test which seems to pass on CI. It also tests the case where a file needs to be replaced which I saw someone reporting. The other thing I saw is this might not work when window explorer has that dir open which seems more minor.

Anyhow I don't know if the CI image is representative, something I could do is run windows on a VM and execute the test.

@rjl493456442
Copy link
Member

rjl493456442 commented Jan 18, 2022

@s1na I never test this os.rename behavior on windows. I thought it might be something so that go-leveldb handles it differently with its own syscall.

But yes, if the os.rename can work perfectly on windows, then I think it's totally fine to use it directly.

@holiman
Copy link
Contributor

holiman commented Jan 21, 2022

From discussion last week: the check that is performed on every node at startup, iterating through the first 40K blocks (on mainnet) to find the first receipt and check legacy, should be improved (since it affects the boot phase of all users).
For this check, it's sufficient to look at the indices-structure and figure out the first non-empty block, without actually loading the data.

Otherwise this LGTM. @fjl did you have anything to add -- I left that call early ?

@s1na
Copy link
Contributor Author

s1na commented Jan 21, 2022

@holiman we had another discussion with Felix and the conclusion was the best approach is not to do the initial check at all when users have an up-to-date freezer. We could possibly use Gary's freezer versioning schema for this. I want to look into how exactly he does versioning and if that would suit the purpose here.

@holiman
Copy link
Contributor

holiman commented Mar 10, 2022

We could possibly use Gary's freezer versioning schema for this. I want to look into how exactly he does versioning and if that would suit the purpose here.

I don't think that will help you. I still think we should just do this:

For this check, it's sufficient to look at the indices-structure and figure out the first non-empty block, without actually loading the data.

Alternatively: for mainnet, just load up block whatever block was the first with a tx in it, and check it. Wham-bam done.

@fjl
Copy link
Contributor

fjl commented Mar 10, 2022

This mainnet idea is pretty good and will fix 99% of cases.

s1na added 5 commits Mar 17, 2022
core/rawdb: use forEach in migrate

core/rawdb: batch reads in forEach

core/rawdb: make forEach anonymous fn

cmd/geth: check for legacy receipts on node startup

fix err msg

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

fix log

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

fix some review comments

add warning to cmd

drop isLegacy fn from migrateTable params

add test for windows rename

test replacing in windows case
@s1na s1na force-pushed the legacy-converter-simple branch from d0987df to e08d82f Compare Mar 17, 2022
cmd/geth/config.go Outdated Show resolved Hide resolved
@s1na
Copy link
Contributor Author

s1na commented Mar 18, 2022

So I tried out the versioning stuff here: s1na/go-ethereum@legacy-converter-simple...legacy-converter-simple-version

I had to expose two new methods on ethdb.Database for reading and setting the version.

@@ -167,7 +168,8 @@ func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) {
firstIdx := uint64(0)
// Hack to speed up check for mainnet because we know
// the first non-empty block.
if cfg.Eth.NetworkId == 1 {
ghash := rawdb.ReadCanonicalHash(eth.ChainDb(), 0)
if cfg.Eth.NetworkId == 1 && ghash == params.MainnetGenesisHash {
Copy link
Contributor

@holiman holiman Mar 21, 2022

Choose a reason for hiding this comment

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

Whenever we check for "Is Mainnet?", we usually only care about the genesis hash, not checking the networkid. I think we can ignore the network id

Copy link
Contributor Author

@s1na s1na Mar 21, 2022

Choose a reason for hiding this comment

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

Is there any downsides to checking it nevertheless?

@holiman
Copy link
Contributor

holiman commented Mar 21, 2022

Regarding the versioning. I'm not sure.

I had misremembered, and didn't think about the fact that the versioning is per table. So having version=2 be specific for the receipts type, but mean nothing in particular for other types feels a bit wrong.
Seems to me like we're abusing the versioning -- instead of having the versioning define the syntax of how data is stored , we're using it to version the inner content of the data itself.

}
return nil
}
if table.itemOffset > 0 || table.itemHidden > 0 {
Copy link
Member

@rjl493456442 rjl493456442 Mar 22, 2022

Choose a reason for hiding this comment

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

Any specific reason for rejecting this type of table? It's ok to keep this checking but would be nice to get rid of it eventually.

Copy link
Contributor Author

@s1na s1na Mar 23, 2022

Choose a reason for hiding this comment

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

I added this quick check to make sure the table hasn't been tail-trimmed. Because the migration process will not fully work for such a table right now and need some tweaks. I'll add a todo comment

core/rawdb/freezer.go Show resolved Hide resolved
core/rawdb/freezer.go Outdated Show resolved Hide resolved
@rjl493456442
Copy link
Member

rjl493456442 commented Mar 22, 2022

Re-version, perhaps it's unnecessary? The cost is we need to load a few receipts in database in each restart(the number can be a few thousands receipts) but for computer the cost is acceptable?

I think a quick hack is to also define the firstIndex for other testnets(rinkeby, goerli, ropsten) and get rid of this logic when the migration is not needed? I admit it's a "dirty" hack but for most of people this does nothing essentially.

Copy link
Contributor

@holiman holiman left a comment

LGTM

@holiman holiman merged commit fd4f60f into ethereum:master Mar 23, 2022
1 check failed
@holiman holiman added this to the 1.10.17 milestone Mar 23, 2022
sidhujag pushed a commit to syscoin/go-ethereum that referenced this issue Mar 24, 2022
* cmd,core: add simple legacy receipt converter

core/rawdb: use forEach in migrate

core/rawdb: batch reads in forEach

core/rawdb: make forEach anonymous fn

cmd/geth: check for legacy receipts on node startup

fix err msg

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

fix log

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

fix some review comments

add warning to cmd

drop isLegacy fn from migrateTable params

add test for windows rename

test replacing in windows case

* minor fix

* sanity check for tail-deletion

* add log before moving files around

* speed-up hack for mainnet

* fix mainnet check, use networkid instead

* check mainnet genesis

* review fixes

* resume previous migration attempt

* core/rawdb: lint fix

Co-authored-by: Martin Holst Swende <martin@swende.se>
holiman pushed a commit that referenced this issue May 26, 2022
In #24028 we flagged a warning when finding legacy receipts in the freezer. This PR nudges users a bit more strongly by preventing geth from starting in this case until receipts have been migrated.

It also adds a flag --ignore-legacy-receipts which when present allows geth to start normally.
JacekGlen pushed a commit to JacekGlen/go-ethereum that referenced this issue May 26, 2022
* cmd,core: add simple legacy receipt converter

core/rawdb: use forEach in migrate

core/rawdb: batch reads in forEach

core/rawdb: make forEach anonymous fn

cmd/geth: check for legacy receipts on node startup

fix err msg

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

fix log

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

fix some review comments

add warning to cmd

drop isLegacy fn from migrateTable params

add test for windows rename

test replacing in windows case

* minor fix

* sanity check for tail-deletion

* add log before moving files around

* speed-up hack for mainnet

* fix mainnet check, use networkid instead

* check mainnet genesis

* review fixes

* resume previous migration attempt

* core/rawdb: lint fix

Co-authored-by: Martin Holst Swende <martin@swende.se>
abdulrabbani00 added a commit to cerc-io/go-ethereum that referenced this issue Jun 15, 2022
commit 23bee16
Author: Péter Szilágyi <peterke@gmail.com>
Date:   Wed Jun 15 15:35:32 2022 +0300

    params: release Geth v1.10.19

commit d78d302
Author: Marius van der Wijden <m.vanderwijden@live.de>
Date:   Wed Jun 15 14:35:53 2022 +0200

    node: add info message when JWT secret is loaded (ethereum#25095)

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

commit d8f9638
Author: Marius van der Wijden <m.vanderwijden@live.de>
Date:   Wed Jun 15 13:10:38 2022 +0200

    cmd, params: implement Gray Glacier hard-fork (EIP-5133) (ethereum#25088)

    * cmd/geth, params: implement Gray Glacier (EIP-5133)

    * cmd/evm: add gray glacier tests

    * params: nitpicks

    * params: fixes

commit 3060216
Author: rjl493456442 <garyrong0905@gmail.com>
Date:   Wed Jun 15 18:56:47 2022 +0800

    eth: introduce eth67 protocol (ethereum#24093)

    The new protocol version removes support for GetNodeData.
    See https://eips.ethereum.org/EIPS/eip-4938 for more information.

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

commit 3273ad1
Author: lightclient <14004106+lightclient@users.noreply.github.com>
Date:   Wed Jun 15 09:29:23 2022 +0200

    eth: add missing period at end of sentences (ethereum#25058)

    eth: add missing periods on end of comments

commit bc013bc
Author: lmittmann <lmittmann@users.noreply.github.com>
Date:   Tue Jun 14 14:09:48 2022 +0200

    all: prefer `new(big.Int)` over `big.NewInt(0)` (ethereum#25087)

    minor performance improvement: `big.NewInt(0).Xxx` -> `new(big.Int).Xxx`

commit 8cfd121
Author: Marius van der Wijden <m.vanderwijden@live.de>
Date:   Tue Jun 14 14:08:43 2022 +0200

    common: improve pretty duration regex (ethereum#25073)

    * common: improve pretty duration regex

    * common: improve pretty duration regex

commit 6ad620d
Author: s7v7nislands <s7v7nislands@gmail.com>
Date:   Tue Jun 14 19:47:11 2022 +0800

    cmd/ethkey: use accounts.TextHash (ethereum#25069)

commit 1cf58c7
Author: lightclient <14004106+lightclient@users.noreply.github.com>
Date:   Tue Jun 14 12:59:05 2022 +0200

    readme,eth: remove references to eth.wiki (ethereum#25086)

commit f74bb3a
Author: Ivan Aracki <aracki.ivan@gmail.com>
Date:   Tue Jun 14 10:24:29 2022 +0200

    cmd/utils: update --ropsten description (ethereum#25078)

commit a907d7e
Author: Martin Holst Swende <martin@swende.se>
Date:   Mon Jun 13 16:24:45 2022 +0200

    all: more linters (ethereum#24783)

    This enables the following linters

    - typecheck
    - unused
    - staticcheck
    - bidichk
    - durationcheck
    - exportloopref
    - gosec

    WIth a few exceptions.

    - We use a deprecated protobuf in trezor. I didn't want to mess with that, since I cannot meaningfully test any changes there.
    - The deprecated TypeMux is used in a few places still, so the warning for it is silenced for now.
    - Using string type in context.WithValue is apparently wrong, one should use a custom type, to prevent collisions between different places in the hierarchy of callers. That should be fixed at some point, but may require some attention.
    - The warnings for using weak random generator are squashed, since we use a lot of random without need for cryptographic guarantees.

commit eb94896
Author: Gustavo Silva <GustavoRSSilva@users.noreply.github.com>
Date:   Fri Jun 10 16:47:06 2022 +0100

    Chore:  Minimal gramatical errors (signleton -> singleton) (ethereum#25057)

    core: fix typos

commit 3f5b5ec
Author: Luozhu <70309026+LuozhuZhang@users.noreply.github.com>
Date:   Fri Jun 10 16:57:32 2022 +0800

    internal/ethapi: fix typo in comment (ethereum#25056)

    typo error: keccack256 -> keccak256

commit 594e321
Author: int88 <106391185+int88@users.noreply.github.com>
Date:   Thu Jun 9 00:40:37 2022 +0800

    core/evm: fix error in comment (ethereum#25040)

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

commit f503718
Author: henridf <henri@dubfer.com>
Date:   Wed Jun 8 18:32:07 2022 +0200

    core/types: improve LogForStorage and ReceiptForStorage comments (ethereum#25032)

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

commit 6160296
Author: Rajaram Gaunker <zimbabao@gmail.com>
Date:   Wed Jun 8 09:31:43 2022 -0700

    core/types: remove unused field 'td' in Block (ethereum#25010)

commit b60a08d
Author: Martin Holst Swende <martin@swende.se>
Date:   Wed Jun 8 15:36:25 2022 +0200

    eth/catalyst: remove unauthenticated 'engine' api (ethereum#24997)

    Removes engine from any unauthenticated RPC service.

commit c4dab8c
Merge: 138f0d7 106a162
Author: Péter Szilágyi <peterke@gmail.com>
Date:   Wed Jun 8 16:34:43 2022 +0300

    Merge pull request ethereum#25044 from karalabe/rpc-histograms

    rpc: swap out timer metrics to histograms

commit 106a162
Author: Péter Szilágyi <peterke@gmail.com>
Date:   Wed Jun 8 16:24:33 2022 +0300

    rpc: swap out timer metrics to histograms

commit 138f0d7
Author: Håvard Anda Estensen <haavard.ae@gmail.com>
Date:   Tue Jun 7 17:27:21 2022 +0200

    p2p: use errors.Is for error comparison (ethereum#24882)

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

commit 41e7548
Author: Péter Szilágyi <peterke@gmail.com>
Date:   Tue Jun 7 13:49:07 2022 +0300

    eth, les, params: log chain config a bit saner (ethereum#24904)

    Previously on Geth startup we just logged the chain config is a semi-json-y format. Whilst that worked while we had a handful of hard-forks defined, currently it's kind of unwieldy.

    This PR converts that original data dump and converts it into a user friendly - alas multiline - log output.

commit 450f5da
Author: Seungbae.yu <72970043+dbadoy@users.noreply.github.com>
Date:   Tue Jun 7 19:46:27 2022 +0900

    accounts: increase parseURL test coverage (ethereum#25033)

    accounts/url: add test logic what check null string to parseURL()

commit 403624a
Author: Martin Holst Swende <martin@swende.se>
Date:   Tue Jun 7 12:15:22 2022 +0200

    p2p/discover: fix panicky test (ethereum#25038)

commit 5e8fa1d
Author: Marius van der Wijden <m.vanderwijden@live.de>
Date:   Tue Jun 7 09:06:34 2022 +0200

    tests/fuzzers/bls12381: fix blst pairing (ethereum#25037)

    * tests/fuzzers/bls12381: fix blst pairing

    * tests/fuzzers/bls12381: only build on gofuzz

    * tests/fuzzers/bls12381: remove unused code

    * tests/fuzzers/bls12381: remove unused code

commit 84b3272
Author: lwh <lwhile521@gmail.com>
Date:   Tue Jun 7 14:38:54 2022 +0800

    accounts/abi/bind: fix duplicate field names in the generated go struct (ethereum#24924)

    * accounts/abi/bind: fix duplicate field names in the generated go struct ethereum#24627

    * accounts, cmd/abigen: resolve name conflicts

    * ci lint, accounts/abi: remove unused function overloadedArgName

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

commit d9566e3
Author: Sina Mahmoodi <1591639+s1na@users.noreply.github.com>
Date:   Tue Jun 7 08:31:19 2022 +0200

    eth/filters: fix getLogs for pending block (ethereum#24949)

    * eth/filters: fix pending for getLogs

    * add pending method to test backend

    * fix block range validation

commit 7e9514b
Author: Martin Holst Swende <martin@swende.se>
Date:   Tue Jun 7 08:11:01 2022 +0200

    params: update ropsten terminal total difficulty block (ethereum#25018)

commit 6b3e6cb
Author: aaronbuchwald <aaron.buchwald56@gmail.com>
Date:   Tue Jun 7 02:02:04 2022 -0400

    trie: move locking into trieDB insert method (ethereum#25030)

    Move locking into trieDB insert function

commit 096daa9
Author: Ikko Ashimine <eltociear@gmail.com>
Date:   Tue Jun 7 00:55:16 2022 +0900

    eth/tracers: fix typo in 4byte_tracer_legacy.js (ethereum#25020)

    indentifier -> identifier

commit 10da980
Author: lightclient <14004106+lightclient@users.noreply.github.com>
Date:   Mon Jun 6 17:33:05 2022 +0200

    eth/api: use `hexutil.Bytes` for account range method (ethereum#25024)

    eth/api: use hexutil.Bytes for range at methods

commit 22defa5
Author: rjl493456442 <garyrong0905@gmail.com>
Date:   Mon Jun 6 23:14:55 2022 +0800

    all: introduce trie owner notion (ethereum#24750)

    * cmd, core/state, light, trie, eth: add trie owner notion

    * all: refactor

    * tests: fix goimports

    * core/state/snapshot: fix ineffasigns

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

commit c375ee9
Author: Martin Holst Swende <martin@swende.se>
Date:   Mon Jun 6 17:09:39 2022 +0200

    cmd/geth, core/state/snapshot: rework journal loading, implement account-check (ethereum#24765)

    * cmd/geth, core/state/snapshot: rework journal loading, implement account-check

    * core/state/snapshot, cmd/geth: polish code (#37)

    * core/state/snapshot: minor nits

    * core/state/snapshot: simplify error logic

    * cmd/geth: go format

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

commit d6b5574
Author: Marius van der Wijden <m.vanderwijden@live.de>
Date:   Mon Jun 6 17:01:59 2022 +0200

    tests/fuzzers/bls12381: fix blst deserializing (ethereum#25036)

    * tests/fuzzers/bls12381: fix blst deserializing

    * tests/fuzzers/bls12381: fix blst deserializing

commit 997f1c4
Author: Paweł Bylica <chfast@gmail.com>
Date:   Fri Jun 3 10:40:14 2022 +0200

    core/vm: optimize jumpdest analysis (ethereum#23500)

    core/vm: optimize PUSH opcode discrimination

commit b453767
Author: s7v7nislands <s7v7nislands@gmail.com>
Date:   Fri Jun 3 15:25:25 2022 +0800

    go.mod: clean up (ethereum#25017)

commit 5bc4e8f
Author: Jonathan Le Brun <42697488+icyfry@users.noreply.github.com>
Date:   Thu Jun 2 20:26:44 2022 +0200

    go.mod: set go version to 1.17 (ethereum#24926)

    set go version to 1.17

commit 490c45c
Author: Ivan Kuznetsov <me@jeiwan.ru>
Date:   Fri Jun 3 01:25:12 2022 +0700

    consensus/misc: reduce allocations and improve comments in CalcBaseFee (ethereum#24958)

    * consensus/misc: reduce allocations in CalcBaseFee

    * consensus/misc: add formulas of CalcBaseFee

commit 6f075bf
Author: Martin Holst Swende <martin@swende.se>
Date:   Thu Jun 2 20:21:35 2022 +0200

    node: make jwt test less dependent on time (ethereum#25016)

commit 2227589
Author: Marius van der Wijden <m.vanderwijden@live.de>
Date:   Thu Jun 2 13:15:17 2022 +0200

    eth/catalyst: return 0x0 on Invalid block on top of pow block (ethereum#25006)

commit 3c6d6f7
Author: Marius van der Wijden <m.vanderwijden@live.de>
Date:   Thu Jun 2 13:13:28 2022 +0200

    tests/fuzzers/bls12381: Add BLST to fuzzing support (ethereum#24249)

    * tests/fuzzers/bls12381: added blst library

    * go.mod: added blst dependency

    * tests/fuzzers/bls12381: stuff

    * tests/fuzzers/bls12381: added blst to pairing fuzzer

commit d8a2305
Author: Martin Holst Swende <martin@swende.se>
Date:   Thu Jun 2 11:39:36 2022 +0200

    eth/tracers: add support for block overrides in debug_traceCall (ethereum#24871)

    This PR adds support for block overrides when doing debug_traceCall.

    - Previously, debug_traceCall against pending erroneously used a common.Hash{} stateroot when looking up the state, meaning that a totally empty state was used -- so it always failed,
    - With this change, we reject executing debug_traceCall against pending.
    - And we add ability to override all evm-visible header fields.

commit f9806dc
Author: rjl493456442 <garyrong0905@gmail.com>
Date:   Wed Jun 1 17:03:24 2022 +0800

    core: fix canonical hash marker update (ethereum#24996)

    * core: fix reorg

    * core: revert change for memory efficiency

    * core: revert changes

commit 8c0c043
Author: Marius van der Wijden <m.vanderwijden@live.de>
Date:   Tue May 31 11:11:50 2022 +0200

    core/beacon: prevent invalid logsBloom length panic (ethereum#24946)

    * core/beacon: prevent invalid logsBloom length panic

    * core/beacon: prevent negative baseFeePerGas

    * Update core/beacon/types.go

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

    * eth/catalys: go format

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

commit 03157b6
Author: Boqin Qin(秦 伯钦) <Bobbqqin@gmail.com>
Date:   Tue May 31 02:35:37 2022 +0800

    eth/filters: use buffered channel to avoid goroutine leak (ethereum#24928)

commit 2140aab
Author: Martin Holst Swende <martin@swende.se>
Date:   Mon May 30 14:45:27 2022 +0200

    contracs/checkpointoracle: fix directives (ethereum#24944)

    contracts/checkpointoracle: redefine go-generate logic

commit 93fe175
Author: Marius van der Wijden <m.vanderwijden@live.de>
Date:   Mon May 30 13:28:15 2022 +0200

    eth/catalyst: fix edge case in NewPayload (ethereum#24955)

    Fixes an issue where we would accept a NewPayload where the grandparent is already post ttd, and the parent still has a Difficulty

commit 8845227
Author: Harry Kalodner <harry.kalodner@gmail.com>
Date:   Mon May 30 07:00:23 2022 -0400

    consensus/clique: fix race condition (ethereum#24957)

    * consensus/clique: remove race condition

    * consensus/clique: fix one more signer data race

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

commit a10660b
Author: rjl493456442 <garyrong0905@gmail.com>
Date:   Mon May 30 18:37:42 2022 +0800

    cmd/geth: extend traverseRawState command (ethereum#24954)

    This PR adds node verification into traverseRawState command, so corrupted trie nodes can also be detected.

commit 86af788
Author: Marius van der Wijden <m.vanderwijden@live.de>
Date:   Mon May 30 08:42:06 2022 +0200

    core: use less memory during reorgs (ethereum#24616)

    This PR significantly reduces the memory consumption of a long reorg

commit be97427
Author: Marius van der Wijden <m.vanderwijden@live.de>
Date:   Fri May 27 08:23:55 2022 +0200

    params: set emergency ropsten TTD to 100_000_000_000_000_000_000_000 (ethereum#24975)

commit 0287e1a
Author: Martin Holst Swende <martin@swende.se>
Date:   Thu May 26 09:26:37 2022 +0200

    cmd/abigen: accept combined-json via stdin (ethereum#24960)

commit 0559a9a
Author: Sina Mahmoodi <1591639+s1na@users.noreply.github.com>
Date:   Thu May 26 09:22:10 2022 +0200

    cmd/geth: exit when freezer has legacy receipts (ethereum#24943)

    In ethereum#24028 we flagged a warning when finding legacy receipts in the freezer. This PR nudges users a bit more strongly by preventing geth from starting in this case until receipts have been migrated.

    It also adds a flag --ignore-legacy-receipts which when present allows geth to start normally.

commit d575a2d
Author: Felix Lange <fjl@twurst.com>
Date:   Wed May 25 14:44:52 2022 +0200

    params: begin v1.10.19 release cycle
bgelb added a commit to bgelb/go-ethereum that referenced this issue Jun 16, 2022
* core/types: improve error for too short transaction / receipt encoding (ethereum#24256)


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

* rlp, trie: faster trie node encoding (ethereum#24126)

This change speeds up trie hashing and all other activities that require
RLP encoding of trie nodes by approximately 20%. The speedup is achieved by
avoiding reflection overhead during node encoding.

The interface type trie.node now contains a method 'encode' that works with
rlp.EncoderBuffer. Management of EncoderBuffers is left to calling code.
trie.hasher, which is pooled to avoid allocations, now maintains an
EncoderBuffer. This means memory resources related to trie node encoding
are tied to the hasher pool.

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

* cmd/geth: make authrpc listening address settable from command line (ethereum#24522)

The default listening address "localhost" is not sufficient when running
geth in Docker.

* core, ethdb, tests, trie: introduce database snapshot (ethereum#24486)

* core/rawdb, cmd, ethdb, eth: implement freezer tail deletion (ethereum#23954)

* core/rawdb, cmd, ethdb, eth: implement freezer tail deletion

* core/rawdb: address comments from martin and sina

* core/rawdb: fixes cornercase in tail deletion

* core/rawdb: separate metadata into a standalone file

* core/rawdb: remove unused code

* core/rawdb: add random test

* core/rawdb: polish code

* core/rawdb: fsync meta file before manipulating the index

* core/rawdb: fix typo

* core/rawdb: address comments

* eth/protocols/snap: avoid estimating infinite percentage

* graphql: fee history fields (ethereum#24452)

This PR adds the `NextBaseFeePerGas` to `Block` and `EffectiveTip` to `Transaction` to make it easier for clients to compute fee history themselves via graphql queries.

* eth/protocols/snap: a little typo Merkel -> Merkle (ethereum#24530)

* eth/downloader: implement beacon sync (ethereum#23982)

* eth/downloader: implement beacon sync

* eth/downloader: fix a crash if the beacon chain is reduced in length

* eth/downloader: fix beacon sync start/stop thrashing data race

* eth/downloader: use a non-nil pivot even in degenerate sync requests

* eth/downloader: don't touch internal state on beacon Head retrieval

* eth/downloader: fix spelling mistakes

* eth/downloader: fix some typos

* eth: integrate legacy/beacon sync switchover and UX

* eth: handle UX wise being stuck on post-merge TTD

* core, eth: integrate the beacon client with the beacon sync

* eth/catalyst: make some warning messages nicer

* eth/downloader: remove Ethereum 1&2 notions in favor of merge

* core/beacon, eth: clean up engine API returns a bit

* eth/downloader: add skeleton extension tests

* eth/catalyst: keep non-kiln spec, handle mining on ttd

* eth/downloader: add beacon header retrieval tests

* eth: fixed spelling, commented failing tests out

* eth/downloader: review fixes

* eth/downloader: drop peers failing to deliver beacon headers

* core/rawdb: track beacon sync data in db inspect

* eth: fix review concerns

* internal/web3ext: nit

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

* rpc: fix defer in test (ethereum#24490)


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

* go.mod: upgrade upnp dependency (ethereum#24536)

* core/rawdb: add specified key length iterator (ethereum#24535)

* trie: fix two issues in trie iterator (ethereum#24539)

* trie: fix memory leak in trie iterator

In the trie iterator, live nodes are tracked in a stack while iterating.
Popped node states should be explictly set to nil in order to get
garbage-collected.

* trie: fix empty trie iterator

* build: fix linter install on windows (ethereum#24523)

* eth/tracers: use hex encoding for debug_traceBlock argument (ethereum#24517)

* cmd/geth: set EnableBashCompletion = true (ethereum#24313)

prepare ethereum#24145

* cmd/geth: rename --whitelist to --eth.requiredblocks (ethereum#24505)

* cmd, eth: Rename whitelist argument to peer.requiredblocks

* eth/ethconfig: document PeerRequiredBlocks better

* cmd/utils: rename new flag to --eth.requiredblocks

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

* build, Dockerfile: bump Go to 1.18

* eth/downloader: fix off-by-one error in test causing 50% fails

* les, tests: fix vflux fuzzer by removing unnecessary panic (ethereum#24537)

* crypto: use btcec/v2 for no-cgo (ethereum#24533)

This updates the no-cgo implementations in the crypto package to use
the github.com/btcsuite/btcd/btcec/v2 module instead of the older btcec
package that was part of the main github.com/btcsuite/btcd module.

name                   old time/op  new time/op  delta
EcrecoverSignature-32   198µs ± 0%   144µs ± 0%  -27.11%
VerifySignature-32      177µs ± 0%   128µs ± 0%  -27.44%
DecompressPubkey-32    20.9µs ± 0%  10.1µs ± 0%  -51.51%

Use (*ModNScalar).IsOverHalfOrder instead of math/big.Int when checking
for malleable signatures.

* core: eth: implement Kiln-v2 spec (ethereum#24506)

* core/beacon: eth/catalyst: updated engine api to new version

* core: implement exchangeTransitionConfig

* core/beacon: prevRandao instead of Random

* eth/catalyst: Fix ExchangeTransitionConfig, add test

* eth/catalyst: stop external miners on TTD reached

* node: implement --authrpc.vhosts flag

* core: allow for config override on non-mainnet networks

* eth/catalyst: fix peters comments

* eth/catalyst: make stop remote sealer more explicit

* eth/catalyst: add log output

* cmd/utils: rename authrpc.host to authrpc.addr

* eth/catalyst: disable the disabling of the miner

* eth: core: remove notion of terminal pow block

* eth: les: more of peters nitpicks

* core, params: add kiln flag (ethereum#24548)

* docs/postmortems: fix spelling (ethereum#24558)

* eth/downloader: terminate beacon sync early when linked to local chain (ethereum#24550)

* eth/downloader: terminate beacon sync early when linked to local chain

* eth/downloader: fix backfiller resume on early beacon termination

* core/rawdb: fix db commands (ethereum#24540)

* crypto/bls12381: go format

* core: store genesis allocation and recommit them if necessary (ethereum#24460)

* core: store genesis allocation and recommit them if necessary

* core: recover predefined genesis allocation if possible

* eth/downloader: ignore zero size header batch for importing (ethereum#24569)

* eth/downloader: ignore zero size header batch for importing

* core, light: reject empty header batch for importing

* core/rawdb: simple legacy receipt converter (ethereum#24028)

* cmd,core: add simple legacy receipt converter

core/rawdb: use forEach in migrate

core/rawdb: batch reads in forEach

core/rawdb: make forEach anonymous fn

cmd/geth: check for legacy receipts on node startup

fix err msg

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

fix log

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

fix some review comments

add warning to cmd

drop isLegacy fn from migrateTable params

add test for windows rename

test replacing in windows case

* minor fix

* sanity check for tail-deletion

* add log before moving files around

* speed-up hack for mainnet

* fix mainnet check, use networkid instead

* check mainnet genesis

* review fixes

* resume previous migration attempt

* core/rawdb: lint fix

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

* eth/downloader: fix flakey test (ethereum#24576)

* eth/catalyst: fix log message (ethereum#24574)

* node: allow JWT pass by file only (ethereum#24579)

* build: upgrade to golangci-lint v1.45.2 (ethereum#24586)

* internal/build: show ppa upload process stdout on stdout (ethereum#24588)

* internal/build: prevent travis timeout during ppa upload (ethereum#24589)

* internal/build: exit sftp upload (ethereum#24590)

* build: close sftp connection when done (ethereum#24593)

* core: set ttd override on all chain variations

* core/vm: fix sstore gas comment type (ethereum#24583)

* cmd/geth: change to non-fatal error message when legacy receipt storage is not implemented (ethereum#24603)

* cmd/geth: only check for presence of legacy receipts if developer mode is not enabled

* cmd/geth: degrade log level

* cmd/geth: fix format

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

* eth/catalyst: only apply block if we actually have the state (ethereum#24598)

* eth/catalyst: only apply block if we actually have the state

* add header to payload queue

* Update cmd/geth/dbcmd.go

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

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

* params: go-ethereum v1.10.17 stable

* params: begin v1.10.18 release cycle

* rlp: fix typo in comment (ethereum#24595)

Co-authored-by: Yong Yang <yangyong775654@163.com>

* core/state/snapshot: clean up the generation code (ethereum#24479)

* go.mod : upnp 1.0.3 stable version (ethereum#24573)

* internal/ethapi: add refund to StructLogRes (ethereum#24567)

* internal/ethapi: add refund to StructLogRes

* Update internal/ethapi/api.go

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

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

* eth/tracers/logger: use omitempty to reduce log bloat  (ethereum#24547)

Makes the evm json output less verbose: omitting output of `memory` and `returndata` in case they are empty.

* common/compiler: add extra include paths to solidity compiler (ethereum#24541)

This PR adds a ExtraAllowedPath field to Solidity and exposes two APIs: CompileSource and CompileFiles, which were hidden inside CompileSolidityString and CompileSolidity before.

* core: verify genesis extradata for clique (ethereum#24470)

* Add extra-data checks for clique genesis

* Update genesis.go

* Update genesis.go

* core: simplify clique genesis check

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

* eth: change snapshot extension registration failure to warning instead of error (ethereum#24475)

* core: Change Snapshot extension registration failed to Debug

* Update eth/handler.go

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

* trie, les, tests, core: implement trie tracer (ethereum#24403)

Trie tracer is an auxiliary tool to capture all deleted nodes
which can't be captured by trie.Committer. The deleted nodes
can be removed from the disk later.

* core,eth: implement tx-level hooks for tracers (ethereum#24510)

* core,eth: add empty tx logger hooks

* core,eth: add initial and remaining gas to tx hooks

* store tx gasLimit in js tracer

* use gasLimit to compute intrinsic cost for js tracer

* re-use rules in transitiondb

* rm logs

* rm logs

* Mv some fields from Start to TxStart

* simplify sender lookup in prestate tracer

* mv env to TxStart

* Revert "mv env to TxStart"

This reverts commit 6569396.

* Revert "simplify sender lookup in prestate tracer"

This reverts commit ab65bce.

* Revert "Mv some fields from Start to TxStart"

This reverts commit aa50d3d.

* fix intrinsic gas for prestate tracer

* add comments

* refactor

* fix test case

* simplify consumedGas calc in prestate tracer

* eth: clarify the error string on getlogs failure (ethereum#24617)

This PR makes the errors we spit out a bit more clear about what block is problematic.

* eth/downloader: retrieve pivot header from local chain if necessary (ethereum#24610)

* eth/downloader: retrieve pivot header from local chain if necessary

* eth/downloader: improve readability

* eth/downloader: update fix

* eth/downloader: add beacon sync tests

* eth/downloader: remove duplicated code

* README: update free space required (ethereum#24636)

* rpc: fixed a typo (ethereum#24642)

* eth/fetcher: if peers never respond, drop them

* eth/tracers: refactor traceTx to separate out struct logging (ethereum#24326)

* eth/tracers: refactor traceTx to separate out struct logging

review fix

Update eth/tracers/api.go

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

Mv ExecutionResult type to logger package

review fix

impl GetResult for StructLogger

make formatLogs private

confused exit and end..

account for intrinsicGas in structlogger, fix TraceCall test

Add Stop method to logger

Simplify traceTx

Fix test

rm logger from blockchain test

account for refund in structLogger

* use tx hooks in struct logger

* minor

* avoid executionResult in struct logger

* revert blockchain test changes

* README: remove mentions of fast sync (ethereum#24656)

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

* core/state/snapshot: remove noop map item assignment

* cmd/geth: inspect snapshot dangling storage (ethereum#24643)

* cmd/geth: inspect snapshot dangling storage

* cmd/geth: make verify-state invoke verify-dangling

* accounts/abi: handle tuple arrays in ParseSelector (ethereum#24587)

Closes ethereum#24571

* all: use T.TempDir to create temporary test directories (ethereum#24633)

This commit replaces ioutil.TempDir with t.TempDir in tests. The
directory created by t.TempDir is automatically removed when the test
and all its subtests complete.

Prior to this commit, temporary directory created using ioutil.TempDir
had to be removed manually by calling os.RemoveAll, which is omitted in
some tests. The error handling boilerplate e.g.

	defer func() {
		if err := os.RemoveAll(dir); err != nil {
			t.Fatal(err)
		}
	}

is also tedious, but t.TempDir handles this for us nicely.

Reference: https://pkg.go.dev/testing#T.TempDir
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>

* les: fix panic in ultralight client sync (ethereum#24641)

* log: modify lock defer unlock order in sync handler (ethereum#24667)

This modifies the order of Lock() defer Unlock() to follow the more
typically used pattern.

* build/deb: update Debian control file to remove unencrypted git protocol (ethereum#24676)

* core/types: make "miner" optional in Header JSON (ethereum#24666)

"miner" is not set for pending block responses in some cases.

Fixes ethereum#24632

* cmd: set DefaultGasLimit to 30M (ethereum#24680)

* cmd: set DefaultGasLimit to 30M, rem deprec. Flag

* cmd: revert flag deprecation

* core: fix benchmark panic (ethereum#24657)

This PR fixes a few panics in the chain marker benchmarks. The root
cause for panic is in chain marker the genesis header/block is not
accessible, while it's expected to be obtained in tests. So this PR
avoids touching genesis header at all to avoid panic.

* abi/base: return error for pending call error (ethereum#24649)

If a pending contract call errors, return that error right away rather
than ignoring it to allow an error somewhere else. This is helpful for
callers to know if perhaps a call failed because of the context deadline
being expired. This change mirrors the behavior of non-pending contract
calls.

* build: add imports for go generate tools (ethereum#24682)

This adds a tools.go file to import all command packages used for
go:generate. Doing so makes it possible to execute go-based code
generators using 'go run', locking in the tool version using go.mod.

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

* eth/tracers: make txhash blockhash accessible to native tracers (ethereum#24679)

* cmd/geth: support bigints for --override.terminaltotaldifficulty (ethereum#24646)


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

* eth/downloader: remove stale beacon headers as backfilling progresses (ethereum#24670)

* eth/downloader: remove stale beacon headers as backfilling progresses

* eth/downloader: remove leftover from a previous design

* eth/downloader: do partial beacon cleanups if chain is large

* eth/downloader: linter != heart

* build: upgrade -dlgo version to Go 1.18.1 (ethereum#24689)

* build: upgrade -dlgo version to Go 1.18.1

* build: upgrade -dlgo version for macOS to Go 1.18.1

* eth/downloader: resolve local header by hash for beacon sync (ethereum#24691)

* eth/downlaoder: resolve local header by hash for beacon sync

* eth/downloader: fix error message

* eth/downloader: cap the reverse header resolving

* eth/downloader: re-enable tests

* eth/downloader: add warning logs

* go.mod: upgrade btcec and add 'chainhash' module requirement (ethereum#24700)

See ethereum#24554 and btcsuite/btcd#1839

This is an attempt to resolve a Go module dependency issue that arises
when both 'github.com/btcsuite/btcd/btcec/v2' and the older, non-v2
btcd module are required as dependencies.

* trie: remove unused makeHashNode (ethereum#24702)

* core/vm: fix typo (ethereum#24714)

Was just browsing the code and found this.

* eth/downloader: fix typo in downloader.go (ethereum#24704)

synchornization -> synchronization

* eth/tracers/logger: remove unnecessary comparisons in accessList.equal (ethereum#24663)

This change removes extraneous/unnecessary checks for equality
when comparing 2 accessList values A and B. Given that we validate that
their lengths of A and B are equal, if so and if every element in A is
in B, reflexively every element in B is already in A. If that weren't
the case and an element g existed in A but not in B, that would mean
that there is an extra element and hence a mathematical contradiction.

Fixes ethereum#24658

* README.md: update Go min required version to 1.16 (ethereum#24713)

* .github: update CODEOWNERS (ethereum#24743)

* internal/flags: fix godoc (ethereum#24734)

* cmd/faucet: fix genesis flag and improve documentation (ethereum#24735)

* cmd/evm: ensure input length is even (ethereum#24721)

* cmd/evm: ensure input length is even

* cmd/evm: minor nit + lintfix

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

* fix typo (ethereum#24731)

* mobile: fix receipt encoding to json (ethereum#24701)

* p2p: fix type of DiscSubprotocolError (ethereum#24747)

It was 'int' accidentally, should be DiscReason instead.

* all: use 'embed' instead of go-bindata (ethereum#24744)

* cmd/geth, core/state/snapshot: fix flaw in dangling-storage check + inspect difflayers (ethereum#24677)

This PR fixes the flaw that @rjl493456442 found in https://github.com/ethereum/go-ethereum/pull/#issuecomment-1093817551 , namely, that the snapshot iterator uses the combined (disk + difflayers) 'view', wheres the raw iterator uses only the disk 'view'.

This PR instead splits up the work: one phase is iterating the disk layer data, another phase is loading the journalled difflayers and performing the same check there.

* cmd/*: refactor get flag value (ethereum#24761)

* consensus/ethash: fix typos in var names (ethereum#24745)

* internal/ethapi: add db operations to api (ethereum#24739)

Adds `debug_dbGet` method to rpc api

* core/types: fix unhandled errors in TestTransactionCoding (ethereum#24692)

* cmd/utils: utilize beacon wrapper in makechain (ethereum#24620)

* cmd/utils: utilize beacon wrapper in makechain

* cmd/utils: fix fake-pow to also be wrapped in beacon

* consensus/misc: correct error message

* all: use common.FileExist for checking file existence (ethereum#24748)

* ethclient/gethclient: return storage proofs in GetProof (ethereum#24697)

Storage proofs were being unmarshalled from the RPC form to the go struct, but were not being included in the final returned struct.

* eth/filters: remove unused struct fields (ethereum#24782)

* cmd/clef: fixups to the python clef poc (ethereum#24440)

This PR fixes up the example python clef wrapper. The poc is intended to demonstrate how to wite a UI for clef, and had severely bitrotted.
With these changes, it "works" in the sense that all the built-in tests triggers the intended python callbacks (no errors about method not found). It does not "work" in the sense that the wrapper can be used as an actual UI. It will auto-reject any signing requests, for example.

* cmd/evm: make evm t8n handle post-merge transitions (ethereum#24546)

This adds the ability to run --state.fork=Merged, and have post-merge rules apply. When doing so, it also requires the input env to contain currentRandom, and enforces the currentDifficulty to be omitted or zero.

* cmd: group network and db path flags together (ethereum#24698)

This PR groups all built-in network flags together and list them in the command as a whole.

And all database path flags(datadir, ancient) are also grouped, since usually these two are
used together.

* accounts: fix typo in comments (ethereum#24805)

* docker: speed up docker image build (ethereum#24796)

This PR improves the docker build speed for repeated builds where go.mod and go.sum do no change, by placing the downloaded dependencies in a lower layer

* cmd/utils: double limit on free-disk monitor (ethereum#24781)

This PR doubles the limit on which to trigger automatic shutdown, and also changes the timer to run once every 30s instead of 60s.

* build: fix formatted logs (ethereum#24807)

Changed `log.Fatal` to `log.Fatalf()` as it has a parameter...

* build: ppa build for jammy (ubuntu 22.04)

* graphql: add rawReceipt field to transaction type (ethereum#24738)

* graphql: add tx receiptsRLP field

* use MarshalBinary

Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>

* update schema

Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>

* rename to rawReceipt

* indent fix

Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>

* eth/filters: fix code comment (ethereum#24799)

* cmd/geth: fix init genesis for dev (ethereum#24693)

* cmd/geth: fix init genesis for dev

* use ancient flag for init genesis cmd

* cmd, eth: fix required blocks regression

* core: fix WriteBlockAndSetHead documentation (ethereum#24818)

* core: recover state when beacon sets canonical head if it's missing (ethereum#24613)

* core: recover the state in SetChainHead if the head state is missing

* core: disable test logging

* core: address comment from martin

* core: improve log level in case state is recovered

* core, eth, les, light: rename SetChainHead to SetCanonical

* eth/protocols/eth: fix godoc comments (ethereum#24810)


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

* eth/filters: remove explicit continue label in filterLogs (ethereum#24795)

The loop label can be removed because this 'continue' statement
is not in a nested loop.

* p2p/simulations: escape mockerType value from request (ethereum#24822)


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

* p2p/simulations: fix typo in network_test.go (ethereum#24824)

* miner: discard interrupted blocks (ethereum#24638)

During mining, when a new head arrives and interrupts the block building, the block being built should not be commited (but discarded). Committing the interrupted block introduces unnecessary delay, and possibly causes miner to mine on the previous head, which could result in higher uncle rate.

* core/rawdb: untie freezer and ancient chain data (ethereum#24684)

Previously freezer has only been used for storing ancient chain data, while obviously it can be used more. This PR unties the chain data and freezer, keep the minimal freezer structure and move all other logic (like incrementally freezing block data) into a separate structure called ChainFreezer.

This PR also extends the database interface by adding a new ancient store function AncientDatadir which can return the root directory of ancient store. The ancient root directory can be used when we want to open some other ancient-stores (e.g. reverse diff freezer).

* core/vm: implement EIP-3855: PUSH0 instruction (ethereum#24039)

* core/vm: Implement PUSH0

* Move PUSH0 to enable3855

* Add method doc

* eth/fetcher: avoid hang in tests (partial fix for ethereum#23331) (ethereum#23351)

* eth/fetcher: fix test to avoid hanging. Partial fix for ethereum#23331

* eth/filters: avoid dangling goroutines

* eth/fetcher: revert closing of proceed

* signer/fourbyte: import new signatures (ethereum#22865)

* abi: fix checks when all fields are indexed (ethereum#24792)

This PR fixes abi checks in the edge case where all arguments are indexed

* core/state/snapshot: fix race condition (ethereum#24685)

Fixes three race conditions found through fuzzing by David Theodore

* all: replace strings.Replace with string.ReplaceAll (ethereum#24835)

* internal: drop TestSignCliqueBlock (ethereum#24837)

* signer/fourbyte: remove offending signatures (ethereum#24842)

* core/vm: update benchmark to use Errorf instead of Sprintf (ethereum#24845)

* eth/protocols/snap: sort trienode heal requests by path (ethereum#24779)

* sort snap trienode heal requests

* eth/protocols/snap: remove debug code

* eth/protocols/snap: simplify sort, generate pathsets later

* eth/protocols/snap: review concern

* eth/protocols/snap: renamings

* eth/protocols/snap: add comments in Merge

* eth/protocols/snap: remove variable 'last' in Merge

* eth/protocols/snap: fix lint flaws in test

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

* cmd/geth: print info banner for --dev mode (ethereum#24759)


Co-authored-by: nedifi <nedifi@users.noreply.github.com>
Co-authored-by: Felix Lange <fjl@twurst.com>

* core/vm: clean up some dead functions (ethereum#24851)

* core/vm: separate opcode group for 0x20 range (ethereum#24850)

* ethclient: add PeerCount method (ethereum#24849)

* adding peer count function

* Update ethclient.go

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

* core/vm: optimize Memory.Set32 (ethereum#24847)

* core/vm: remove unnecessary memset for Memory.Set32

* core/vm: optimize Memory.Set32

* graphql: fix long literal passed in a variable (ethereum#24864)

* core/vm: for tracing, do not report post-op memory

* internal/ethapi: add debug_getRawReceipts RPC method (ethereum#24773)

Adds a method to retrieve all the binary encoded receipts from a block

* params: set ropsten TTD for TheMerge (ethereum#24876)

* cmd/utils: add deprecation warning for Rinkeby

* core/asm: use strings.Builder and fix godoc issues (ethereum#24861)

* all: replace uses of ioutil with io and os (ethereum#24869)

* cmd/geth: update vulnerabilities.json testdata (ethereum#24856)

* core/vm: reduce overhead in instructions-benchmark (ethereum#24860)

* core/vm: reduce footprint of OP benchmark

* core/vm: for opBenchmark, add code to detect inputs mutation

* Update core/vm/instructions_test.go

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

* core/vm: opBenchmark, stop timer before sanity-test code

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

* eth: fix flaky test, don't attach empty slots/proofs (ethereum#24885)

* eth/protocols/snap: don't include empty snapshot slot slice

This PR fixes the snapshot storage serving handler. In snap protocol
the response is capped by the response size. Server can cutdown the
response if the accumulated byte size exceeds the local hard limit.

It means we can meet a special scenario that there is no storage slot
included for a requested account, but we attach the proof for this
account by mistake.

So in the prover side, when it meets a empty storage response but with
a valid proof proves there are some more slots left in the trie, then
requestor will reject this response and disconnect with server.

In this PR, if there is no storage slot served for the requested account,
then no proof should be attached as well.

* eth/protocols/snap: loosen restrictions for flaky tests

* eth/catalyst: fix flaky test in catalyst

* graphql: add raw fields to block and tx (ethereum#24816)

* eth/catalyst: set the correct LatestValidHash (ethereum#24855)

* eth/catalyst: set the correct LatestValidHash

* eth/catalyst: core: return LVH during reorg, rework invalid teminal block

* eth/catalyst: nitpicks

* cmd/geth: add `db check-state-content` to verify integrity of trie nodes (ethereum#24840)

This PR adds db tooling (geth db check-state-content)  to verify the integrity of trie nodes. It iterates through the 32-byte key space in the database, which is expected to contain RLP-encoded trie nodes, addressed by hash.

* all: use strings.EqualFold for string comparison (ethereum#24890)

* all: replace non-trivial uses of package ioutil with os (ethereum#24886)


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

* ethdb/remotedb, cmd: add support for remote (readonly) databases (ethereum#24836)

* ethdb/remotedb, cmd: add support for remote (readonly) databases

* ethdb/remotedb: minor changes

* ethdb/remotedb: close the conn

* cmd, ethdb: add rpc accessor for ancient data

* internal/ethapi: license

* ethdb/remotedb: linter fixes

* core, eth, internal, rpc: implement final block (ethereum#24282)

* eth: core: implement finalized block

* eth/catalyst: fix final block

* eth/catalyst: update finalized head gauge

* internal/jsre/deps: updated web3.js to allow for finalized block

* eth/catalyst: make sure only one thread can call fcu

* eth/catalyst: nitpicks

* eth/catalyst: use plain mutex

* eth: nitpicks

* eth/catalyst, miner: build the execution payload async (ethereum#24866)

* eth/catalyst: build the execution payload async

* miner: added comment, added test case

* eth/catalyst: miner: move async block production to miner

* eth/catalyst, miner: support generate seal block async

* miner: rework GetSealingBlockAsync to use a passed channel

* miner: apply rjl's diff

* eth/catalyst: nitpicks

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

* eth/tracers/js: goja tracer (ethereum#23773)

This adds a JS tracer runtime environment based on the Goja VM. The new
runtime replaces the duktape runtime, which will be removed soon.

Goja is implemented in Go and is faster for cases where the Go <-> JS
transition overhead dominates overall performance. It is faster because
duktape is written in C, and the transition cost includes the cost of using
cgo. Another reason for using Goja is that go-duktape is not maintained
anymore.

We expect the performace of JS tracing to be at least as good or better with
this change.

* params: update goerli bootnodes (ethereum#24900)

* params: update goerli bootnodes

* params: use ip for enodes

* params: fix broken linter

* ethdb/remotedb: fix flawed check in Has/HasAncient

* core: fix the order of address in queue (ethereum#24907)

reverse the order of address in queue

* tests: update reference tests (ethereum#24899)

* tests: update reference tests

* tests: fix flaw in state test execution

* f

* eth/tracers/js: add memory.length method (ethereum#24887)

* eth/catalyst: update implementation to spec (ethereum#24802)

* eth/catalyst: return invalid payload attributes error

* eth/catalyst: implement LVH as specified, add tests

* eth/catalyst: return current block hash not header hash

* eth/catalyst: fix test

* eth/catalyst: bring error codes in line with spec

* core, eth, les, rpc: polish catalyst errors, add context

* build/bot: add mac build script (ethereum#24917)

* build/bot: remove xctool invocation in macos build script (ethereum#24918)

* build/bot: add ppa-build.sh (ethereum#24919)

* build/bot: avoid install of python-bzrlib, python-paramiko in PPA build (ethereum#24921)

* build/bot: create .ssh directory in ppa-build.sh (ethereum#24922)

* core/state/snapshot: detect and clean up dangling storage snapshot in generation (ethereum#24811)

* core/state/snapshot: check dangling storages when generating snapshot

* core/state/snapshot: polish

* core/state/snapshot: wipe the last part of the dangling storages

* core/state/snapshot: fix and add tests

* core/state/snapshot: fix comment

* README: remove mentions of fast sync (ethereum#24656)

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

* core, cmd: expose dangling storage detector for wider usage

* core/state/snapshot: rename variable

* core, ethdb: use global iterators for snapshot generation

* core/state/snapshot: polish

* cmd, core/state/snapshot: polish

* core/state/snapshot: polish

* Update core/state/snapshot/generate.go

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

* ethdb: extend db test suite and fix memorydb iterator

* ethdb/dbtest: rollback changes

* ethdb/memorydb: simplify iteration

* core/state/snapshot: update dangling counter

* core/state/snapshot: release iterators

* core/state/snapshot: update metrics

* core/state/snapshot: update time metrics

* metrics/influxdb: temp solution to present counter meaningfully, remove it

* add debug log, revert later

* core/state/snapshot: fix iterator panic

* all: customized snapshot iterator for backward iteration

* core, ethdb: polish

* core/state/snapshot: remove debug log

* core/state/snapshot: address comments from peter

* core/state/snapshot: reopen the iterator at the next position

* ethdb, core/state/snapshot: address comment from peter

* core/state/snapshot: reopen exhausted iterators

Co-authored-by: Tbnoapi <63448616+nuoomnoy02@users.noreply.github.com>
Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: Martin Holst Swende <martin@swende.se>

* accounts/abi: validate fieldnames, fixes ethereum#24930 (ethereum#24932)

* common/compiler, cmd/abigen: remove solc/vyper compiler integration

* eth/tracers/js: drop duktape engine (ethereum#24934)

ethereum#23773 added a JS tracer which uses Goja as its engine. In this PR I remove the previous tracer which used duktape as well as remove the dependencies.

This PR also comes with 2 fixes in the Goja tracer and one small behavioural change:

    I had handled errors in the native Go functions by panicing. My oversight was that Goja only handles panics with a Goja.Value as argument. The difference is panic(goja.Value) allows JS to catch the exception whereas Interrupt(error) doesn't.
    There was a race in how I handled Stop.
    Because of 1. some of the methods that simply return nil on error (like memory.slice) now throw an exception.

* signer/core: always pad clique header extra data with space for sealer's signature (ethereum#24941)

* signer/core: always pad clique header extra data with space for sealer's signature

* capitalize comment

* go.mod: upgrade to btcsuite/btcd/btcec v2.2.0 (ethereum#24939)

This should fully resolve dependency conflict issues in modules
that also depend on btcsuite/btcd v0.22.0.

* params: update CHTs for Geth 1.10.18

* all: update license headers and AUTHORS from git history (ethereum#24947)

* AUTHORS: remove one more duplicate entry (ethereum#24950)

* go.mod: upgrade to docker v1.6.2 (ethereum#24956)

This upgrade is necessary to silence a Dependabot warning.

* params: go-ethereum v1.10.18 stable

* params: begin v1.10.19 release cycle

* cmd/geth: exit when freezer has legacy receipts (ethereum#24943)

In ethereum#24028 we flagged a warning when finding legacy receipts in the freezer. This PR nudges users a bit more strongly by preventing geth from starting in this case until receipts have been migrated.

It also adds a flag --ignore-legacy-receipts which when present allows geth to start normally.

* cmd/abigen: accept combined-json via stdin (ethereum#24960)

* params: set emergency ropsten TTD to 100_000_000_000_000_000_000_000 (ethereum#24975)

* core: use less memory during reorgs (ethereum#24616)

This PR significantly reduces the memory consumption of a long reorg

* cmd/geth: extend traverseRawState command (ethereum#24954)

This PR adds node verification into traverseRawState command, so corrupted trie nodes can also be detected.

* consensus/clique: fix race condition (ethereum#24957)

* consensus/clique: remove race condition

* consensus/clique: fix one more signer data race

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

* eth/catalyst: fix edge case in NewPayload (ethereum#24955)

Fixes an issue where we would accept a NewPayload where the grandparent is already post ttd, and the parent still has a Difficulty

* contracs/checkpointoracle: fix directives (ethereum#24944)

contracts/checkpointoracle: redefine go-generate logic

* eth/filters: use buffered channel to avoid goroutine leak (ethereum#24928)

* core/beacon: prevent invalid logsBloom length panic (ethereum#24946)

* core/beacon: prevent invalid logsBloom length panic

* core/beacon: prevent negative baseFeePerGas

* Update core/beacon/types.go

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

* eth/catalys: go format

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

* core: fix canonical hash marker update (ethereum#24996)

* core: fix reorg

* core: revert change for memory efficiency

* core: revert changes

* eth/tracers: add support for block overrides in debug_traceCall (ethereum#24871)

This PR adds support for block overrides when doing debug_traceCall.

- Previously, debug_traceCall against pending erroneously used a common.Hash{} stateroot when looking up the state, meaning that a totally empty state was used -- so it always failed,
- With this change, we reject executing debug_traceCall against pending.
- And we add ability to override all evm-visible header fields.

* tests/fuzzers/bls12381: Add BLST to fuzzing support (ethereum#24249)

* tests/fuzzers/bls12381: added blst library

* go.mod: added blst dependency

* tests/fuzzers/bls12381: stuff

* tests/fuzzers/bls12381: added blst to pairing fuzzer

* eth/catalyst: return 0x0 on Invalid block on top of pow block (ethereum#25006)

* node: make jwt test less dependent on time (ethereum#25016)

* consensus/misc: reduce allocations and improve comments in CalcBaseFee (ethereum#24958)

* consensus/misc: reduce allocations in CalcBaseFee

* consensus/misc: add formulas of CalcBaseFee

* go.mod: set go version to 1.17 (ethereum#24926)

set go version to 1.17

* go.mod: clean up (ethereum#25017)

* core/vm: optimize jumpdest analysis (ethereum#23500)

core/vm: optimize PUSH opcode discrimination

* tests/fuzzers/bls12381: fix blst deserializing (ethereum#25036)

* tests/fuzzers/bls12381: fix blst deserializing

* tests/fuzzers/bls12381: fix blst deserializing

* cmd/geth, core/state/snapshot: rework journal loading, implement account-check (ethereum#24765)

* cmd/geth, core/state/snapshot: rework journal loading, implement account-check

* core/state/snapshot, cmd/geth: polish code (ethereum#37)

* core/state/snapshot: minor nits

* core/state/snapshot: simplify error logic

* cmd/geth: go format

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

* all: introduce trie owner notion (ethereum#24750)

* cmd, core/state, light, trie, eth: add trie owner notion

* all: refactor

* tests: fix goimports

* core/state/snapshot: fix ineffasigns

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

* eth/api: use `hexutil.Bytes` for account range method (ethereum#25024)

eth/api: use hexutil.Bytes for range at methods

* eth/tracers: fix typo in 4byte_tracer_legacy.js (ethereum#25020)

indentifier -> identifier

* trie: move locking into trieDB insert method (ethereum#25030)

Move locking into trieDB insert function

* params: update ropsten terminal total difficulty block (ethereum#25018)

* eth/filters: fix getLogs for pending block (ethereum#24949)

* eth/filters: fix pending for getLogs

* add pending method to test backend

* fix block range validation

* accounts/abi/bind: fix duplicate field names in the generated go struct (ethereum#24924)

* accounts/abi/bind: fix duplicate field names in the generated go struct ethereum#24627

* accounts, cmd/abigen: resolve name conflicts

* ci lint, accounts/abi: remove unused function overloadedArgName

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

* tests/fuzzers/bls12381: fix blst pairing (ethereum#25037)

* tests/fuzzers/bls12381: fix blst pairing

* tests/fuzzers/bls12381: only build on gofuzz

* tests/fuzzers/bls12381: remove unused code

* tests/fuzzers/bls12381: remove unused code

* p2p/discover: fix panicky test (ethereum#25038)

* accounts: increase parseURL test coverage (ethereum#25033)

accounts/url: add test logic what check null string to parseURL()

* eth, les, params: log chain config a bit saner (ethereum#24904)

Previously on Geth startup we just logged the chain config is a semi-json-y format. Whilst that worked while we had a handful of hard-forks defined, currently it's kind of unwieldy. 

This PR converts that original data dump and converts it into a user friendly - alas multiline - log output.

* p2p: use errors.Is for error comparison (ethereum#24882)


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

* rpc: swap out timer metrics to histograms

* eth/catalyst: remove unauthenticated 'engine' api (ethereum#24997)

Removes engine from any unauthenticated RPC service.

* core/types: remove unused field 'td' in Block (ethereum#25010)

* core/types: improve LogForStorage and ReceiptForStorage comments (ethereum#25032)


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

* core/evm: fix error in comment (ethereum#25040)


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

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

typo error: keccack256 -> keccak256

* Chore:  Minimal gramatical errors (signleton -> singleton) (ethereum#25057)

core: fix typos

* all: more linters (ethereum#24783)

This enables the following linters

- typecheck
- unused
- staticcheck
- bidichk
- durationcheck
- exportloopref
- gosec

WIth a few exceptions.

- We use a deprecated protobuf in trezor. I didn't want to mess with that, since I cannot meaningfully test any changes there.
- The deprecated TypeMux is used in a few places still, so the warning for it is silenced for now.
- Using string type in context.WithValue is apparently wrong, one should use a custom type, to prevent collisions between different places in the hierarchy of callers. That should be fixed at some point, but may require some attention.
- The warnings for using weak random generator are squashed, since we use a lot of random without need for cryptographic guarantees.

* cmd/utils: update --ropsten description (ethereum#25078)

* readme,eth: remove references to eth.wiki (ethereum#25086)

* cmd/ethkey: use accounts.TextHash (ethereum#25069)

* common: improve pretty duration regex (ethereum#25073)

* common: improve pretty duration regex

* common: improve pretty duration regex

* all: prefer `new(big.Int)` over `big.NewInt(0)` (ethereum#25087)

minor performance improvement: `big.NewInt(0).Xxx` -> `new(big.Int).Xxx`

* eth: add missing period at end of sentences (ethereum#25058)

eth: add missing periods on end of comments

* eth: introduce eth67 protocol (ethereum#24093)

The new protocol version removes support for GetNodeData.
See https://eips.ethereum.org/EIPS/eip-4938 for more information.

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

* cmd, params: implement Gray Glacier hard-fork (EIP-5133) (ethereum#25088)

* cmd/geth, params: implement Gray Glacier (EIP-5133)

* cmd/evm: add gray glacier tests

* params: nitpicks

* params: fixes

* node: add info message when JWT secret is loaded (ethereum#25095)


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

* params: release Geth v1.10.19

Co-authored-by: Justus <jus@gtsbr.org>
Co-authored-by: Felix Lange <fjl@twurst.com>
Co-authored-by: Qian Bin <cola.tin.com@gmail.com>
Co-authored-by: rjl493456442 <garyrong0905@gmail.com>
Co-authored-by: Martin Holst Swende <martin@swende.se>
Co-authored-by: Sina Mahmoodi <1591639+s1na@users.noreply.github.com>
Co-authored-by: 沉风 <myself659@users.noreply.github.com>
Co-authored-by: Péter Szilágyi <peterke@gmail.com>
Co-authored-by: Marius van der Wijden <m.vanderwijden@live.de>
Co-authored-by: s7v7nislands <s7v7nislands@gmail.com>
Co-authored-by: ucwong <ucwong@126.com>
Co-authored-by: aaronbuchwald <aaron.buchwald56@gmail.com>
Co-authored-by: ligi <ligi@ligi.de>
Co-authored-by: Guifel <toowik@gmail.com>
Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>
Co-authored-by: Jonathan Chappelow <chappjc@users.noreply.github.com>
Co-authored-by: alvaroahp11 <64142599+alvaroahp11@users.noreply.github.com>
Co-authored-by: Zhang Zhuo <mycinbrin@gmail.com>
Co-authored-by: jwasinger <j-wasinger@hotmail.com>
Co-authored-by: flowerofdream <775654398@qq.com>
Co-authored-by: Yong Yang <yangyong775654@163.com>
Co-authored-by: zhiqiangxu <652732310@qq.com>
Co-authored-by: Guruprasad Kamath <48196632+gurukamath@users.noreply.github.com>
Co-authored-by: Nic Jansma <nic@nicj.net>
Co-authored-by: John Adler <adlerjohn@users.noreply.github.com>
Co-authored-by: Tatsuya Shimoda <tacoo@users.noreply.github.com>
Co-authored-by: Tbnoapi <63448616+nuoomnoy02@users.noreply.github.com>
Co-authored-by: Tangui Clairet <tangui.clairet@gmail.com>
Co-authored-by: Eng Zer Jun <engzerjun@gmail.com>
Co-authored-by: Vaibhaw <kvaibhaw99@gmail.com>
Co-authored-by: JoeGruffins <34998433+JoeGruffins@users.noreply.github.com>
Co-authored-by: Marius Kjærstad <sandakersmann@users.noreply.github.com>
Co-authored-by: Darioush Jalali <darioush.jalali@avalabs.org>
Co-authored-by: Enrique Ortiz <hi@enriqueortiz.dev>
Co-authored-by: Ikko Ashimine <eltociear@gmail.com>
Co-authored-by: Emmanuel T Odeke <odeke@ualberta.ca>
Co-authored-by: Koosha K <koosha--@users.noreply.github.com>
Co-authored-by: Nikita Kozhemyakin <enginegl.ec@gmail.com>
Co-authored-by: henopied <13500516+henopied@users.noreply.github.com>
Co-authored-by: John Difool <johndifoolpi@gmail.com>
Co-authored-by: tia-99 <67107070+tia-99@users.noreply.github.com>
Co-authored-by: Joshua Gutow <jbgutow@gmail.com>
Co-authored-by: hero5512 <lvshuaino@gmail.com>
Co-authored-by: nujabes403 <nujabes403@gmail.com>
Co-authored-by: EXEC <execvy@gmail.com>
Co-authored-by: Evgeny Kolyakov <freaker2k7@users.noreply.github.com>
Co-authored-by: milesvant <milesvant@gmail.com>
Co-authored-by: ImanSharaf <78227895+ImanSharaf@users.noreply.github.com>
Co-authored-by: Mateusz Morusiewicz <11313015+Ruteri@users.noreply.github.com>
Co-authored-by: Alex Beregszaszi <alex@rtfs.hu>
Co-authored-by: Rachel Franks <nfranks@protonmail.com>
Co-authored-by: ||= nil <103940716+nedifi@users.noreply.github.com>
Co-authored-by: nedifi <nedifi@users.noreply.github.com>
Co-authored-by: Felipe Strozberg <48066928+FelStroz@users.noreply.github.com>
Co-authored-by: Håvard Anda Estensen <haavard.ae@gmail.com>
Co-authored-by: Afr Schoe <58883403+q9f@users.noreply.github.com>
Co-authored-by: zhaochonghe <41711151+zhaochonghe@users.noreply.github.com>
Co-authored-by: Eduard S <eduardsanou@posteo.net>
Co-authored-by: Harry Kalodner <harry.kalodner@gmail.com>
Co-authored-by: Boqin Qin(秦 伯钦) <Bobbqqin@gmail.com>
Co-authored-by: Ivan Kuznetsov <me@jeiwan.ru>
Co-authored-by: Jonathan Le Brun <42697488+icyfry@users.noreply.github.com>
Co-authored-by: Paweł Bylica <chfast@gmail.com>
Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com>
Co-authored-by: lwh <lwhile521@gmail.com>
Co-authored-by: Seungbae.yu <72970043+dbadoy@users.noreply.github.com>
Co-authored-by: Rajaram Gaunker <zimbabao@gmail.com>
Co-authored-by: henridf <henri@dubfer.com>
Co-authored-by: int88 <106391185+int88@users.noreply.github.com>
Co-authored-by: Luozhu <70309026+LuozhuZhang@users.noreply.github.com>
Co-authored-by: Gustavo Silva <GustavoRSSilva@users.noreply.github.com>
Co-authored-by: Ivan Aracki <aracki.ivan@gmail.com>
Co-authored-by: lmittmann <lmittmann@users.noreply.github.com>
dmarzzz pushed a commit to blocknative/go-ethereum that referenced this issue Jun 27, 2022
* params: begin v1.10.18 release cycle

* rlp: fix typo in comment (ethereum#24595)

Co-authored-by: Yong Yang <yangyong775654@163.com>

* core/state/snapshot: clean up the generation code (ethereum#24479)

* go.mod : upnp 1.0.3 stable version (ethereum#24573)

* internal/ethapi: add refund to StructLogRes (ethereum#24567)

* internal/ethapi: add refund to StructLogRes

* Update internal/ethapi/api.go

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

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

* eth/tracers/logger: use omitempty to reduce log bloat  (ethereum#24547)

Makes the evm json output less verbose: omitting output of `memory` and `returndata` in case they are empty.

* common/compiler: add extra include paths to solidity compiler (ethereum#24541)

This PR adds a ExtraAllowedPath field to Solidity and exposes two APIs: CompileSource and CompileFiles, which were hidden inside CompileSolidityString and CompileSolidity before.

* core: verify genesis extradata for clique (ethereum#24470)

* Add extra-data checks for clique genesis

* Update genesis.go

* Update genesis.go

* core: simplify clique genesis check

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

* eth: change snapshot extension registration failure to warning instead of error (ethereum#24475)

* core: Change Snapshot extension registration failed to Debug

* Update eth/handler.go

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

* trie, les, tests, core: implement trie tracer (ethereum#24403)

Trie tracer is an auxiliary tool to capture all deleted nodes
which can't be captured by trie.Committer. The deleted nodes
can be removed from the disk later.

* core,eth: implement tx-level hooks for tracers (ethereum#24510)

* core,eth: add empty tx logger hooks

* core,eth: add initial and remaining gas to tx hooks

* store tx gasLimit in js tracer

* use gasLimit to compute intrinsic cost for js tracer

* re-use rules in transitiondb

* rm logs

* rm logs

* Mv some fields from Start to TxStart

* simplify sender lookup in prestate tracer

* mv env to TxStart

* Revert "mv env to TxStart"

This reverts commit 6569396.

* Revert "simplify sender lookup in prestate tracer"

This reverts commit ab65bce.

* Revert "Mv some fields from Start to TxStart"

This reverts commit aa50d3d.

* fix intrinsic gas for prestate tracer

* add comments

* refactor

* fix test case

* simplify consumedGas calc in prestate tracer

* eth: clarify the error string on getlogs failure (ethereum#24617)

This PR makes the errors we spit out a bit more clear about what block is problematic.

* eth/downloader: retrieve pivot header from local chain if necessary (ethereum#24610)

* eth/downloader: retrieve pivot header from local chain if necessary

* eth/downloader: improve readability

* eth/downloader: update fix

* eth/downloader: add beacon sync tests

* eth/downloader: remove duplicated code

* README: update free space required (ethereum#24636)

* rpc: fixed a typo (ethereum#24642)

* eth/fetcher: if peers never respond, drop them

* eth/tracers: refactor traceTx to separate out struct logging (ethereum#24326)

* eth/tracers: refactor traceTx to separate out struct logging

review fix

Update eth/tracers/api.go

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

Mv ExecutionResult type to logger package

review fix

impl GetResult for StructLogger

make formatLogs private

confused exit and end..

account for intrinsicGas in structlogger, fix TraceCall test

Add Stop method to logger

Simplify traceTx

Fix test

rm logger from blockchain test

account for refund in structLogger

* use tx hooks in struct logger

* minor

* avoid executionResult in struct logger

* revert blockchain test changes

* README: remove mentions of fast sync (ethereum#24656)

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

* core/state/snapshot: remove noop map item assignment

* cmd/geth: inspect snapshot dangling storage (ethereum#24643)

* cmd/geth: inspect snapshot dangling storage

* cmd/geth: make verify-state invoke verify-dangling

* accounts/abi: handle tuple arrays in ParseSelector (ethereum#24587)

Closes ethereum#24571

* all: use T.TempDir to create temporary test directories (ethereum#24633)

This commit replaces ioutil.TempDir with t.TempDir in tests. The
directory created by t.TempDir is automatically removed when the test
and all its subtests complete.

Prior to this commit, temporary directory created using ioutil.TempDir
had to be removed manually by calling os.RemoveAll, which is omitted in
some tests. The error handling boilerplate e.g.

	defer func() {
		if err := os.RemoveAll(dir); err != nil {
			t.Fatal(err)
		}
	}

is also tedious, but t.TempDir handles this for us nicely.

Reference: https://pkg.go.dev/testing#T.TempDir
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>

* les: fix panic in ultralight client sync (ethereum#24641)

* log: modify lock defer unlock order in sync handler (ethereum#24667)

This modifies the order of Lock() defer Unlock() to follow the more
typically used pattern.

* build/deb: update Debian control file to remove unencrypted git protocol (ethereum#24676)

* core/types: make "miner" optional in Header JSON (ethereum#24666)

"miner" is not set for pending block responses in some cases.

Fixes ethereum#24632

* cmd: set DefaultGasLimit to 30M (ethereum#24680)

* cmd: set DefaultGasLimit to 30M, rem deprec. Flag

* cmd: revert flag deprecation

* core: fix benchmark panic (ethereum#24657)

This PR fixes a few panics in the chain marker benchmarks. The root
cause for panic is in chain marker the genesis header/block is not
accessible, while it's expected to be obtained in tests. So this PR
avoids touching genesis header at all to avoid panic.

* abi/base: return error for pending call error (ethereum#24649)

If a pending contract call errors, return that error right away rather
than ignoring it to allow an error somewhere else. This is helpful for
callers to know if perhaps a call failed because of the context deadline
being expired. This change mirrors the behavior of non-pending contract
calls.

* build: add imports for go generate tools (ethereum#24682)

This adds a tools.go file to import all command packages used for
go:generate. Doing so makes it possible to execute go-based code
generators using 'go run', locking in the tool version using go.mod.

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

* eth/tracers: make txhash blockhash accessible to native tracers (ethereum#24679)

* cmd/geth: support bigints for --override.terminaltotaldifficulty (ethereum#24646)


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

* eth/downloader: remove stale beacon headers as backfilling progresses (ethereum#24670)

* eth/downloader: remove stale beacon headers as backfilling progresses

* eth/downloader: remove leftover from a previous design

* eth/downloader: do partial beacon cleanups if chain is large

* eth/downloader: linter != heart

* build: upgrade -dlgo version to Go 1.18.1 (ethereum#24689)

* build: upgrade -dlgo version to Go 1.18.1

* build: upgrade -dlgo version for macOS to Go 1.18.1

* eth/downloader: resolve local header by hash for beacon sync (ethereum#24691)

* eth/downlaoder: resolve local header by hash for beacon sync

* eth/downloader: fix error message

* eth/downloader: cap the reverse header resolving

* eth/downloader: re-enable tests

* eth/downloader: add warning logs

* go.mod: upgrade btcec and add 'chainhash' module requirement (ethereum#24700)

See ethereum#24554 and btcsuite/btcd#1839

This is an attempt to resolve a Go module dependency issue that arises
when both 'github.com/btcsuite/btcd/btcec/v2' and the older, non-v2
btcd module are required as dependencies.

* trie: remove unused makeHashNode (ethereum#24702)

* core/vm: fix typo (ethereum#24714)

Was just browsing the code and found this.

* eth/downloader: fix typo in downloader.go (ethereum#24704)

synchornization -> synchronization

* eth/tracers/logger: remove unnecessary comparisons in accessList.equal (ethereum#24663)

This change removes extraneous/unnecessary checks for equality
when comparing 2 accessList values A and B. Given that we validate that
their lengths of A and B are equal, if so and if every element in A is
in B, reflexively every element in B is already in A. If that weren't
the case and an element g existed in A but not in B, that would mean
that there is an extra element and hence a mathematical contradiction.

Fixes ethereum#24658

* README.md: update Go min required version to 1.16 (ethereum#24713)

* .github: update CODEOWNERS (ethereum#24743)

* internal/flags: fix godoc (ethereum#24734)

* cmd/faucet: fix genesis flag and improve documentation (ethereum#24735)

* cmd/evm: ensure input length is even (ethereum#24721)

* cmd/evm: ensure input length is even

* cmd/evm: minor nit + lintfix

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

* fix typo (ethereum#24731)

* mobile: fix receipt encoding to json (ethereum#24701)

* p2p: fix type of DiscSubprotocolError (ethereum#24747)

It was 'int' accidentally, should be DiscReason instead.

* all: use 'embed' instead of go-bindata (ethereum#24744)

* cmd/geth, core/state/snapshot: fix flaw in dangling-storage check + inspect difflayers (ethereum#24677)

This PR fixes the flaw that @rjl493456442 found in https://github.com/ethereum/go-ethereum/pull/#issuecomment-1093817551 , namely, that the snapshot iterator uses the combined (disk + difflayers) 'view', wheres the raw iterator uses only the disk 'view'.

This PR instead splits up the work: one phase is iterating the disk layer data, another phase is loading the journalled difflayers and performing the same check there.

* cmd/*: refactor get flag value (ethereum#24761)

* consensus/ethash: fix typos in var names (ethereum#24745)

* internal/ethapi: add db operations to api (ethereum#24739)

Adds `debug_dbGet` method to rpc api

* core/types: fix unhandled errors in TestTransactionCoding (ethereum#24692)

* cmd/utils: utilize beacon wrapper in makechain (ethereum#24620)

* cmd/utils: utilize beacon wrapper in makechain

* cmd/utils: fix fake-pow to also be wrapped in beacon

* consensus/misc: correct error message

* all: use common.FileExist for checking file existence (ethereum#24748)

* ethclient/gethclient: return storage proofs in GetProof (ethereum#24697)

Storage proofs were being unmarshalled from the RPC form to the go struct, but were not being included in the final returned struct.

* eth/filters: remove unused struct fields (ethereum#24782)

* cmd/clef: fixups to the python clef poc (ethereum#24440)

This PR fixes up the example python clef wrapper. The poc is intended to demonstrate how to wite a UI for clef, and had severely bitrotted.
With these changes, it "works" in the sense that all the built-in tests triggers the intended python callbacks (no errors about method not found). It does not "work" in the sense that the wrapper can be used as an actual UI. It will auto-reject any signing requests, for example.

* cmd/evm: make evm t8n handle post-merge transitions (ethereum#24546)

This adds the ability to run --state.fork=Merged, and have post-merge rules apply. When doing so, it also requires the input env to contain currentRandom, and enforces the currentDifficulty to be omitted or zero.

* cmd: group network and db path flags together (ethereum#24698)

This PR groups all built-in network flags together and list them in the command as a whole.

And all database path flags(datadir, ancient) are also grouped, since usually these two are
used together.

* accounts: fix typo in comments (ethereum#24805)

* docker: speed up docker image build (ethereum#24796)

This PR improves the docker build speed for repeated builds where go.mod and go.sum do no change, by placing the downloaded dependencies in a lower layer

* cmd/utils: double limit on free-disk monitor (ethereum#24781)

This PR doubles the limit on which to trigger automatic shutdown, and also changes the timer to run once every 30s instead of 60s.

* build: fix formatted logs (ethereum#24807)

Changed `log.Fatal` to `log.Fatalf()` as it has a parameter...

* build: ppa build for jammy (ubuntu 22.04)

* graphql: add rawReceipt field to transaction type (ethereum#24738)

* graphql: add tx receiptsRLP field

* use MarshalBinary

Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>

* update schema

Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>

* rename to rawReceipt

* indent fix

Co-authored-by: Ryan Schneider <ryanleeschneider@gmail.com>

* eth/filters: fix code comment (ethereum#24799)

* cmd/geth: fix init genesis for dev (ethereum#24693)

* cmd/geth: fix init genesis for dev

* use ancient flag for init genesis cmd

* cmd, eth: fix required blocks regression

* core: fix WriteBlockAndSetHead documentation (ethereum#24818)

* core: recover state when beacon sets canonical head if it's missing (ethereum#24613)

* core: recover the state in SetChainHead if the head state is missing

* core: disable test logging

* core: address comment from martin

* core: improve log level in case state is recovered

* core, eth, les, light: rename SetChainHead to SetCanonical

* eth/protocols/eth: fix godoc comments (ethereum#24810)


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

* eth/filters: remove explicit continue label in filterLogs (ethereum#24795)

The loop label can be removed because this 'continue' statement
is not in a nested loop.

* p2p/simulations: escape mockerType value from request (ethereum#24822)


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

* p2p/simulations: fix typo in network_test.go (ethereum#24824)

* miner: discard interrupted blocks (ethereum#24638)

During mining, when a new head arrives and interrupts the block building, the block being built should not be commited (but discarded). Committing the interrupted block introduces unnecessary delay, and possibly causes miner to mine on the previous head, which could result in higher uncle rate.

* core/rawdb: untie freezer and ancient chain data (ethereum#24684)

Previously freezer has only been used for storing ancient chain data, while obviously it can be used more. This PR unties the chain data and freezer, keep the minimal freezer structure and move all other logic (like incrementally freezing block data) into a separate structure called ChainFreezer.

This PR also extends the database interface by adding a new ancient store function AncientDatadir which can return the root directory of ancient store. The ancient root directory can be used when we want to open some other ancient-stores (e.g. reverse diff freezer).

* core/vm: implement EIP-3855: PUSH0 instruction (ethereum#24039)

* core/vm: Implement PUSH0

* Move PUSH0 to enable3855

* Add method doc

* eth/fetcher: avoid hang in tests (partial fix for ethereum#23331) (ethereum#23351)

* eth/fetcher: fix test to avoid hanging. Partial fix for ethereum#23331

* eth/filters: avoid dangling goroutines

* eth/fetcher: revert closing of proceed

* signer/fourbyte: import new signatures (ethereum#22865)

* abi: fix checks when all fields are indexed (ethereum#24792)

This PR fixes abi checks in the edge case where all arguments are indexed

* core/state/snapshot: fix race condition (ethereum#24685)

Fixes three race conditions found through fuzzing by David Theodore

* all: replace strings.Replace with string.ReplaceAll (ethereum#24835)

* internal: drop TestSignCliqueBlock (ethereum#24837)

* signer/fourbyte: remove offending signatures (ethereum#24842)

* core/vm: update benchmark to use Errorf instead of Sprintf (ethereum#24845)

* eth/protocols/snap: sort trienode heal requests by path (ethereum#24779)

* sort snap trienode heal requests

* eth/protocols/snap: remove debug code

* eth/protocols/snap: simplify sort, generate pathsets later

* eth/protocols/snap: review concern

* eth/protocols/snap: renamings

* eth/protocols/snap: add comments in Merge

* eth/protocols/snap: remove variable 'last' in Merge

* eth/protocols/snap: fix lint flaws in test

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

* cmd/geth: print info banner for --dev mode (ethereum#24759)


Co-authored-by: nedifi <nedifi@users.noreply.github.com>
Co-authored-by: Felix Lange <fjl@twurst.com>

* core/vm: clean up some dead functions (ethereum#24851)

* core/vm: separate opcode group for 0x20 range (ethereum#24850)

* ethclient: add PeerCount method (ethereum#24849)

* adding peer count function

* Update ethclient.go

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

* core/vm: optimize Memory.Set32 (ethereum#24847)

* core/vm: remove unnecessary memset for Memory.Set32

* core/vm: optimize Memory.Set32

* graphql: fix long literal passed in a variable (ethereum#24864)

* core/vm: for tracing, do not report post-op memory

* internal/ethapi: add debug_getRawReceipts RPC method (ethereum#24773)

Adds a method to retrieve all the binary encoded receipts from a block

* params: set ropsten TTD for TheMerge (ethereum#24876)

* cmd/utils: add deprecation warning for Rinkeby

* core/asm: use strings.Builder and fix godoc issues (ethereum#24861)

* all: replace uses of ioutil with io and os (ethereum#24869)

* cmd/geth: update vulnerabilities.json testdata (ethereum#24856)

* core/vm: reduce overhead in instructions-benchmark (ethereum#24860)

* core/vm: reduce footprint of OP benchmark

* core/vm: for opBenchmark, add code to detect inputs mutation

* Update core/vm/instructions_test.go

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

* core/vm: opBenchmark, stop timer before sanity-test code

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

* eth: fix flaky test, don't attach empty slots/proofs (ethereum#24885)

* eth/protocols/snap: don't include empty snapshot slot slice

This PR fixes the snapshot storage serving handler. In snap protocol
the response is capped by the response size. Server can cutdown the
response if the accumulated byte size exceeds the local hard limit.

It means we can meet a special scenario that there is no storage slot
included for a requested account, but we attach the proof for this
account by mistake.

So in the prover side, when it meets a empty storage response but with
a valid proof proves there are some more slots left in the trie, then
requestor will reject this response and disconnect with server.

In this PR, if there is no storage slot served for the requested account,
then no proof should be attached as well.

* eth/protocols/snap: loosen restrictions for flaky tests

* eth/catalyst: fix flaky test in catalyst

* graph