Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Created by
brew bumpCreated with
brew bump-formula-pr.release notes
--history.stateflag.Notably, there is also one drawback with the new archive node:
eth_getProofis not supported for historical blocks. With--state.scheme path, Geth can only serve state proofs for the latest 128 blocks. We believe this is an acceptable tradeoff. If you need older proofs, you can still a hash-based archive node as before, but we'd also really like to hear about your use case. Please contact us via email atgeth@ethereum.orgso we can learn more, and possibly find a solution that can be implemented within Geth.How it works
With 'path-based' state storage, Geth keeps exactly one full state in the database. Specifically, the persistent state is 128 blocks in the past. For newer blocks up to the head, forward diffs are kept in memory. In order to support rolling back to blocks older than head-128, Geth also keeps 'state history' in the form of reverse key-value diffs. When the chain is reset to an old block, these diffs are applied to the persistent state, going backwards one diff at a time until the target block is reached.
A reverse state diff contains the previous values of all modified accounts and storage locations for a specific block. There is a reverse diff for each historical block. This makes reverse diffs suitable for storage into the 'freezer', i.e. they do not need to live within Pebble/LevelDB.
The new archive mode is built on the realization that reverse state diffs contain all necessary data to serve historical state queries. For example, in order to get the historical balance of an account X at block B, we can search forward through diffs starting at block B until we find a block where account X is modified. This diff will contain the balance of the account, since it stores the all modified pre-values.
To accelerate the search for a suitable diff, Geth creates a database index storing the block numbers in which an account was modified. This index is small compared to the overall state history, but it is crucial for correct operation of the archive node. The state index is stored in PebbleDB and will be generated automatically while geth is syncing the chain. It takes ~30h to build the archive state index for mainnet, and historical state will only be available when the index is fully built. Geth will report a syncing status through
eth_syncingwhile the indexing happens.Other state implementation changes
In v1.16.0, the implementation of the 'state snapshot' has been rewritten for improved integration with path-based state storage. As you may recall, Geth stores the state in two different ways:
When the implementation of the snapshot and its layer tree was introduced in Geth v1.10.0, it was built to be entirely separate from the trie database. We added path-based state storage in v1.13.0, and that system contains a layer tree as well, with slight differences in semantics and implementation.
As of this release, the layer trees of the state snapshot and trie database have been merged into a single implementation (#30661). In path-based mode, the trie database now holds a reference to the corresponding snapshot layer for each tree state. The new layer tree has also been enhanced with an additional index of layers in which an account was modified (#30971). Note this is similar in spirit to the historical state index. The new index will enable us to increase the number of in-memory state layers in the future.
Full list of changes in this release
Geth
geth download-erasubcommand for fetching era1 files. (#31823, #31951, #32081)Ready for fork activationmessages are now printed based on the current clock time. (#31800)geth --devnow shows a listing of pre-funded dev chain accounts and their keys. (#31898)geth --devnow always enables preimage recording. (#31821)Fusaka
We have started merging some EIP implementations for the upcoming Fusaka fork:
Core
RPC
eth_getLogsand similar requests will now return theblockTimestamp. (#31887)eth_getBlockReceiptswill now returnnullinstead of an error for blocks which are not found. (#31949)Networking
For a full rundown of the changes please consult the Geth 1.16.0 release milestone
As with all our previous releases, you can find the:
ethereum/client-go.View the full release notes at https://github.com/ethereum/go-ethereum/releases/tag/v1.16.0.