-
Notifications
You must be signed in to change notification settings - Fork 20.4k
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: use block difficulty for genesis #23793
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
The ToBlock method applies a default value for an empty difficulty value. This default is not carried over through the Commit method because the TotalDifficulty database write writes the original difficulty value (nil) instead of the defaulty value present on the genesis Block. Date: 2021-10-22 08:25:32-07:00 Signed-off-by: meows <[email protected]>
This an issue where a default TD value was not written to the database, resulting in a 0 value TD at genesis. A test for this issue was provided at 90e3ffd Date: 2021-10-22 08:28:00-07:00 Signed-off-by: meows <[email protected]>
See prior two commits. Date: 2021-10-22 09:16:01-07:00 Signed-off-by: meows <[email protected]>
meowsbits
requested review from
holiman,
karalabe and
rjl493456442
as code owners
October 22, 2021 16:24
holiman
approved these changes
Oct 25, 2021
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
holiman
changed the title
Fix stored TD for genesis block when using defaults
core: use block difficulty for genesis
Oct 25, 2021
sidhujag
pushed a commit
to syscoin/go-ethereum
that referenced
this pull request
Oct 26, 2021
* core: write test showing that TD is not stored properly at genesis The ToBlock method applies a default value for an empty difficulty value. This default is not carried over through the Commit method because the TotalDifficulty database write writes the original difficulty value (nil) instead of the defaulty value present on the genesis Block. Date: 2021-10-22 08:25:32-07:00 Signed-off-by: meows <[email protected]> * core: write TD value from Block, not original genesis value This an issue where a default TD value was not written to the database, resulting in a 0 value TD at genesis. A test for this issue was provided at 90e3ffd Date: 2021-10-22 08:28:00-07:00 Signed-off-by: meows <[email protected]> * core: fix tests by adding GenesisDifficulty to expected result See prior two commits. Date: 2021-10-22 09:16:01-07:00 Signed-off-by: meows <[email protected]> * les: fix test with genesis change Co-authored-by: Martin Holst Swende <[email protected]>
meowsbits
added a commit
to etclabscore/core-geth
that referenced
this pull request
Oct 27, 2021
ethereum/go-ethereum uses, as of 1.10.9, a new API for writing ancient blocks to the freezer. This change required corresponding changes in the core-geth featured Remote Freezer implementation. Along the way, a bug was uncovered that cause the difficulty value to be miswritten for genesis blocks, although its practical effect was limited mostly to test scenarios. See ethereum/go-ethereum#23793 Squashed commit messages are preserved below. core/rawdb: REVERTME: notes on ancient ModifyAncients interface Date: 2021-10-13 11:14:53-07:00 Signed-off-by: meows <[email protected]> core/rawdb,ethdb: rename AncientWriteOp -> AncientWriteOperator Interfaces are do-ers. This interfaces defines an operator, not an operation. Date: 2021-10-14 05:58:35-07:00 Signed-off-by: meows <[email protected]> core/rawdb: add init impl for ModifyAncients method for client RemoteFreezer Date: 2021-10-14 06:51:40-07:00 Signed-off-by: meows <[email protected]> cmd/ancient-store-mem/lib,core/rawdb: implement Append and AppendRaw for test freezer store mock Date: 2021-10-14 08:30:09-07:00 Signed-off-by: meows <[email protected]> core: REVERTME: debug 'hereX' statements Date: 2021-10-14 08:44:27-07:00 Signed-off-by: meows <[email protected]> core/rawdb: Append should encode to RLP before sending to server Date: 2021-10-14 09:23:33-07:00 Signed-off-by: meows <[email protected]> cmd/ancient-store-mem/lib: same as previous commit Date: 2021-10-14 09:23:55-07:00 Signed-off-by: meows <[email protected]> core: REVERTME: debugging lines for SetHead Date: 2021-10-14 09:24:11-07:00 Signed-off-by: meows <[email protected]> :hammer: Signed-off-by: meows <[email protected]> wip/debug: log lines, another non-freezer test for comparison Signed-off-by: meows <[email protected]> cmd/ancient-store-mem/lib,core/rawdb: unit test for mock freezer (in mem) Append method Date: 2021-10-15 07:43:33-07:00 Signed-off-by: meows <[email protected]> cmd/ancient-store-mem/lib,core,core/rawdb: wip/debug: TestFreezerRemoteConcise passes Date: 2021-10-15 08:18:14-07:00 Signed-off-by: meows <[email protected]> core: set difficulty for genesis block; fixes mismatch difficulty vals Error Date: 2021-10-18 09:24:46-07:00 Signed-off-by: meows <[email protected]> core: change difficulty assignment for genesis Date: 2021-10-18 09:29:05-07:00 Signed-off-by: meows <[email protected]> :hammer: Signed-off-by: meows <[email protected]> core/rawdb,test.out.difficulty: turn off logging at db accessor Date: 2021-10-21 09:11:03-07:00 Signed-off-by: meows <[email protected]> core: set genesis.difficutly at remotefreezer_test, rest difficulty assignment at CommitGenesis This fixes most tests. I'm not sure yet exactly why. One remaining failing test: TestIncompleteAncientReceiptChainInsertion_RemoteFreezer Date: 2021-10-21 09:14:10-07:00 Signed-off-by: meows <[email protected]> core: remove useless test now InsertReceiptChain calls the db accessor directly, and the terminateInsert function got ill-formed for the job. We're going to limit our responsibility for the remote freezer (client) implementations; other tests show that the server side of the API is functioning correctly. Date: 2021-10-21 09:54:12-07:00 Signed-off-by: meows <[email protected]> test.out.difficulty: remove test log Date: 2021-10-21 10:39:36-07:00 Signed-off-by: meows <[email protected]> cmd/ancient-store-mem/lib,core: clean up debugging Date: 2021-10-21 10:51:17-07:00 Signed-off-by: meows <[email protected]> core: more cleanup Date: 2021-10-21 10:56:20-07:00 Signed-off-by: meows <[email protected]> core,core/rawdb: cleaup time Date: 2021-10-21 11:03:37-07:00 Signed-off-by: meows <[email protected]> core: fix total difficulty assignment to block from genesis In core/genesis.go a default value for difficulty is provided in GenesisToBlock, the vars.GenesisDifficulty value. This value was not used in CommitGenesis, where instead genesis.Difficulty (instead of block.Difficulty()) was used. As you can see in the diff, the vars.GenesisDifficulty.Int64() value is added to the preexisting expected TD outcomes for Short and Long reorg tests. Date: 2021-10-21 13:00:04-07:00 Signed-off-by: meows <[email protected]> cmd/ancient-store-mem/lib,core: fix freezer count record and associated errOutOfOrder conditions Date: 2021-10-26 08:43:53-07:00 Signed-off-by: meows <[email protected]> les: fix LES test by using fixed total difficulty for announce Date: 2021-10-26 10:31:24-07:00 Signed-off-by: meows <[email protected]> core: (lint) and small touch ups Date: 2021-10-27 08:48:50-07:00 Signed-off-by: meows <[email protected]>
This was referenced Sep 23, 2022
yongjun925
pushed a commit
to DODOEX/go-ethereum
that referenced
this pull request
Dec 3, 2022
* core: write test showing that TD is not stored properly at genesis The ToBlock method applies a default value for an empty difficulty value. This default is not carried over through the Commit method because the TotalDifficulty database write writes the original difficulty value (nil) instead of the defaulty value present on the genesis Block. Date: 2021-10-22 08:25:32-07:00 Signed-off-by: meows <[email protected]> * core: write TD value from Block, not original genesis value This an issue where a default TD value was not written to the database, resulting in a 0 value TD at genesis. A test for this issue was provided at 90e3ffd Date: 2021-10-22 08:28:00-07:00 Signed-off-by: meows <[email protected]> * core: fix tests by adding GenesisDifficulty to expected result See prior two commits. Date: 2021-10-22 09:16:01-07:00 Signed-off-by: meows <[email protected]> * les: fix test with genesis change Co-authored-by: Martin Holst Swende <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Genesis values not having an assigned
Difficulty
would result in storingTD=0
to the database instead of the default valueparams.GenesisDifficulty
, which is assigned in theToBlock
method (and returned asgenesisBlock
with that function).This provides a test to demonstrate the problem, a fix for the problem, and a few follow up fixes to pre-existing tests that used wrong hardcoded data.
See commit messages for more detail.