Commit graph

15240 commits

Author SHA1 Message Date
Delweng
c4ef468644 core/rawdb: use readonly file lock in readonly mode (#28180)
This allows using the freezer from multiple processes at once
in read-only mode.

Co-authored-by: Martin Holst Swende <martin@swende.se>
2023-11-10 11:09:46 -06:00
Péter Szilágyi
d19fe8e4fe cmd/geth: print progress logs when iterating large contracts too (#28179) 2023-11-10 11:09:46 -06:00
Péter Szilágyi
7cd6ef9ae7 core/state/snapshot: be very noisy if the generator hits a trie error (#28178) 2023-11-10 11:09:46 -06:00
rjl493456442
cdfae85ae2 trie/triedb/pathdb: improve error log (#28177) 2023-11-10 11:09:46 -06:00
rjl493456442
f881c71814 trie: remove internal nodes between shortNode and child in path mode (#28163)
* trie: remove internal nodes between shortNode and child in path mode

* trie: address comments

* core/rawdb, trie: address comments

* core/rawdb: delete unused func

* trie: change comments

* trie: add missing tests

* trie: fix lint
2023-11-10 11:09:46 -06:00
Delweng
8fc3449da2 core/rawdb: no need to run truncateFile for readonly mode (#28145)
Avoid truncating files, if ancients are opened in readonly mode. With this change, we return error instead of trying (and failing)  to repair
2023-11-10 11:09:46 -06:00
Delweng
6e0c4dea27 cmd/clef: suppress fsnotify error if keydir not exists (#28160)
As the keydir will be automatically created after an account is created, no error message if the watcher is failed.
2023-11-10 11:09:46 -06:00
phenix3443
552517f260 cmd/utils: fix typo in comment (#28159) 2023-11-10 11:09:46 -06:00
Guillaume Ballet
9a178056b8 trie: add getter for preimage store in trie.Database (#28155) 2023-11-10 11:09:46 -06:00
Martin Holst Swende
1b3f8f1c56 go.mod: use existing version of karalabe/usb (#28127)
There is no 0.0.3 release of karalabe/usb.
2023-11-10 11:09:46 -06:00
Delweng
a7205347fb cmd/devp2p: use bootnodes as crawl input (#28139)
This PR makes the tool use the --bootnodes list as the input to devp2p crawl.
The flag will take effect if the input/output.json file is missing or empty.
2023-11-10 11:09:46 -06:00
bnovil
9f39b08c14 eth: fix typo in comment (#28146) 2023-11-10 11:09:46 -06:00
Delweng
b87a0ced95 core/rawdb: fix typo in comment (#28140) 2023-11-10 11:09:46 -06:00
Felix Lange
0264a9ad74 cmd/evm: fix some issues with the evm run command (#28109)
* cmd/evm: improve flags handling

This fixes some issues with flags in cmd/evm. The supported flags did not
actually show up in help output because they weren't categorized. I'm also
adding the VM-related flags to the run command here so they can be given
after the subcommand name. So it can be run like this now:

   ./evm run --code 6001 --debug

* cmd/evm: enable all forks by default in run command

The default genesis was just empty with no forks at all, which is annoying because
contracts will be relying on opcodes introduced in a fork. So this changes the default to
have all forks enabled.

* core/asm: fix some issues in the assembler

This fixes minor bugs in the old assembler:

- It is now possible to have comments on the same line as an instruction.
- Errors for invalid numbers in the jump instruction are reported better
- Line numbers in errors were off by one
2023-11-10 11:09:46 -06:00
Péter Szilágyi
0fc9fb6954 params: begin Geth v1.13.2 release cycle 2023-11-10 11:09:46 -06:00
Péter Szilágyi
1e16a11667 params: release Geth v1.13.1 2023-11-10 11:09:46 -06:00
rjl493456442
5a51327bc5 core, eth/downloader: fix genesis state missing due to state sync (#28124)
* core: fix chain repair corner case in path-based scheme

* eth/downloader: disable trie database whenever state sync is launched
2023-11-10 11:09:46 -06:00
phenix3443
6ddfb7609f params: fix typo in comment (#28129)
fix: typo
2023-11-10 11:09:46 -06:00
phenix3443
5d5f12f179 internal/flags: fix typo (#28133)
fix(flag): one typo
2023-11-10 11:09:46 -06:00
cam-schultz
664137285f internal/ethapi: correctly calculate effective gas price (#28130)
correctly calculate effective gas price
2023-11-10 11:09:46 -06:00
rjl493456442
15b7c0b384 eth/catalyst: fix engine API (#28135) 2023-11-10 11:09:46 -06:00
Péter Szilágyi
c59e4a47dc cmd/geth, internal/flags: print envvar config source and bad names (#28119) 2023-11-10 11:09:46 -06:00
Péter Szilágyi
7b8e28d719 eth/downloader: prevent pivot moves after state commit (#28126) 2023-11-10 11:09:46 -06:00
Darioush Jalali
815cd64d80 core/state: check err for iter.Error in fastDeleteStorage (#28122)
core/state: check err for iter.Error
2023-11-10 11:09:46 -06:00
Péter Szilágyi
e284083697 metrics: add support for enabling metrics from env vars (#28118) 2023-11-10 11:09:46 -06:00
Felix Lange
ec2a2276b2 rlp/rlpgen: remove build tag (#28106)
* rlp/rlpgen: remove build tag

This tag was supposed to prevent unstable output when types reference each other. Imagine
there are two struct types A and B, where a reference to type B is in A. If I run rlpgen
on type B first, and then on type A, the generator will see the B.EncodeRLP method and
call it. However, if I run rlpgen on type A first, it will inline the encoding of B.

The solution I chose for the initial release of rlpgen was to just ignore methods
generated by rlpgen using a build tag. But there is a problem with this: if any code in
the package calls EncodeRLP explicitly, the package can't be loaded without errors anymore
in rlpgen, because the loader ignores it. Would be nice if there was a way to just make it
ignore invalid functions during type checking (they're not necessary for rlpgen), but
golang.org/x/tools/go/packages does not provide a way of ignoring them.

Luckily, the types we use rlpgen with do not reference each other right now, so we can
just remove the build tags for now.
2023-11-10 11:09:46 -06:00
Péter Szilágyi
cd0e8a5ec9 internal/flags: fix loading env vars for custom flags (#28117) 2023-11-10 11:09:46 -06:00
Delweng
92902c3520 graphql: add 4844 blob fields (#27963)
This adds block and receipt fields for EIP-4844.

---------

Signed-off-by: jsvisa <delweng@gmail.com>
Co-authored-by: Sina Mahmoodi <itz.s1na@gmail.com>
2023-11-10 11:09:46 -06:00
Péter Szilágyi
3137a74a46 internal/flags: fix linter 2023-11-10 11:09:46 -06:00
Marius Kjærstad
31263a6119 build: upgrade -dlgo version to Go 1.21.1 (#28113) 2023-11-10 11:09:46 -06:00
Péter Szilágyi
953f7964db cmd/geth, internal/flags, go.mod: colorize cli help, support env vars (#28103)
* cmd/geth, internal/flags, go.mod: colorize cli help, support env vars

* internal/flags: use stdout, not stderr for terminal detection
2023-11-10 11:09:46 -06:00
Sina Mahmoodi
8ac50731c8 eth: abort on api operations not available in pbss-mode (#28104)
eth: abort on api calls not supporting pbss
2023-11-10 11:09:46 -06:00
Péter Szilágyi
c28d7e1b8e cmd/geth: rename the protocols field in the metrics gague (#28102) 2023-11-10 11:09:46 -06:00
Martin Holst Swende
135d2d15e3 metrics: refactor metrics (#28035)
This change includes a lot of things, listed below. 

### Split up interfaces, write vs read

The interfaces have been split up into one write-interface and one read-interface, with `Snapshot` being the gateway from write to read. This simplifies the semantics _a lot_. 

Example of splitting up an interface into one readonly 'snapshot' part, and one updatable writeonly part: 

```golang
type MeterSnapshot interface {
	Count() int64
	Rate1() float64
	Rate5() float64
	Rate15() float64
	RateMean() float64
}

// Meters count events to produce exponentially-weighted moving average rates
// at one-, five-, and fifteen-minutes and a mean rate.
type Meter interface {
	Mark(int64)
	Snapshot() MeterSnapshot
	Stop()
}
```

### A note about concurrency

This PR makes the concurrency model clearer. We have actual meters and snapshot of meters. The `meter` is the thing which can be accessed from the registry, and updates can be made to it. 

- For all `meters`, (`Gauge`, `Timer` etc), it is assumed that they are accessed by different threads, making updates. Therefore, all `meters` update-methods (`Inc`, `Add`, `Update`, `Clear` etc) need to be concurrency-safe. 
- All `meters` have a `Snapshot()` method. This method is _usually_ called from one thread, a backend-exporter. But it's fully possible to have several exporters simultaneously: therefore this method should also be concurrency-safe. 

TLDR: `meter`s are accessible via registry, all their methods must be concurrency-safe. 

For all `Snapshot`s, it is assumed that an individual exporter-thread has obtained a `meter` from the registry, and called the `Snapshot` method to obtain a readonly snapshot. This snapshot is _not_ guaranteed to be concurrency-safe. There's no need for a snapshot to be concurrency-safe, since exporters should not share snapshots. 

Note, though: that by happenstance a lot of the snapshots _are_ concurrency-safe, being unmutable minimal representations of a value. Only the more complex ones are _not_ threadsafe, those that lazily calculate things like `Variance()`, `Mean()`.

Example of how a background exporter typically works, obtaining the snapshot and sequentially accessing the non-threadsafe methods in it: 
```golang
		ms := metric.Snapshot()
                ...
		fields := map[string]interface{}{
			"count":    ms.Count(),
			"max":      ms.Max(),
			"mean":     ms.Mean(),
			"min":      ms.Min(),
			"stddev":   ms.StdDev(),
			"variance": ms.Variance(),
```

TLDR: `snapshots` are not guaranteed to be concurrency-safe (but often are).

### Sample changes

I also changed the `Sample` type: previously, it iterated the samples fully every time `Mean()`,`Sum()`, `Min()` or `Max()` was invoked. Since we now have readonly base data, we can just iterate it once, in the constructor, and set all four values at once. 

The same thing has been done for runtimehistogram. 

### ResettingTimer API

Back when ResettingTImer was implemented, as part of https://github.com/ethereum/go-ethereum/pull/15910, Anton implemented a `Percentiles` on the new type. However, the method did not conform to the other existing types which also had a `Percentiles`. 

1. The existing ones, on input, took `0.5` to mean `50%`. Anton used `50` to mean `50%`. 
2. The existing ones returned `float64` outputs, thus interpolating between values. A value-set of `0, 10`, at `50%` would return `5`, whereas Anton's would return either `0` or `10`. 

This PR removes the 'new' version, and uses only the 'legacy' percentiles, also for the ResettingTimer type. 

The resetting timer snapshot was also defined so that it would expose the internal values. This has been removed, and getters for `Max, Min, Mean` have been added instead. 

### Unexport types

A lot of types were exported, but do not need to be. This PR unexports quite a lot of them.
2023-11-10 11:09:46 -06:00
Péter Szilágyi
02701029b3 core/rawdb: skip pathdb state inspection in hashdb mode (#28108) 2023-11-10 11:09:46 -06:00
Martin Holst Swende
4a7485885b internal, log: remove code for old unsupported go-versions (#28090) 2023-11-10 11:09:46 -06:00
Péter Szilágyi
1c477e5d89 params: begin v1.13.1 release cycle 2023-11-10 11:09:46 -06:00
Péter Szilágyi
36032a0f9b params: release Geth v1.13.0 2023-11-10 11:09:46 -06:00
Bala Murali Krishna Komatireddy
804db3128a consensus/misc: fix min gas limit error message (#28085) 2023-11-10 11:09:46 -06:00
lightclient
7cf8bf905e core: fix calculation of blob gasprice in tx receipt (#28082)
This fixes the derived value BlobGasPrice on the receipt of EIP-4844 transactions, which was previously erroneously set to the price cap.
2023-11-10 11:09:46 -06:00
Martin Holst Swende
6a22e29d27 ethclient: use 'input', not 'data' as field for transaction input (#28078) 2023-11-10 11:09:46 -06:00
Péter Szilágyi
fce8323197 go.mod: pull in a fix from pebble crl-release-23.1 (#28081) 2023-11-10 11:09:46 -06:00
rjl493456442
ef485b7254 core, trie: cleanup trie database (#28062) 2023-11-10 11:09:46 -06:00
Martin Holst Swende
f32ea1a1c6 log: avoid stack lookups when not needed/used (#28069)
Avoids the somewhat expensive stack.Caller invocation by checking if it is needed
2023-11-10 11:09:46 -06:00
Martin Holst Swende
ebad10b3af deps: update minisign (#28066)
This updates minisign to the latest version. One new thing is that minisign (not go-minisign) has started to prehash the file, and in order to make geth pass the version-check, we need to sign the file in legacy-mode.
2023-11-10 11:09:46 -06:00
Delweng
f3d494593f core/rawdb: don't warn for missing "unclean shutdown markers" (#28014)
This changes removes the warn-printout about not finding unclean shutdown markers, which always happens on fresh installs / wiped databases.
2023-11-10 11:09:46 -06:00
ucwong
46d7fb2548 go.mod: goupnp 1.3.0 (#28053) 2023-11-10 11:09:46 -06:00
lightclient
d629692cbf params: update 4844 parameters (#28026)
On ACD 163, it was agreed to bump the target and max blob values from `2/4` to `3/6` for future devnets until we could decide on final mainnet number. This change contains said update, making master pass all the hive tests. The final decision for mainnet cancun is still to be made.
---------

Co-authored-by: Felix Lange <fjl@twurst.com>
2023-11-10 11:09:46 -06:00
lightclient
cfdfeea6ad core/forkid: skip genesis forks by time (#28034)
* core/forkid: skip genesis forks by time

* core/forkid: add comment about skipping non-zero fork times

* core/forkid: skip all time based forks in genesis using loop

* core/forkid: simplify logic for dropping time-based forks
2023-11-10 11:09:46 -06:00
lightclient
73b70b7870 beacon/engine: add shouldOverrideBuilder to payload envelope (#28029)
beacon/engine: add shouldOverrideBuilder to payload envelope
2023-11-10 11:09:46 -06:00