core: move RLP encoding of values to trie #25431
Closed
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.
Move the code that serializes an MPT leaf to the MPT tree code itself.
Rationale
The encoding of the leaf in RLP is very much dependent on the format of the tree, and performing the encoding in the state database is causing an abstraction leak: Verkle trees use a different format, and therefore a distinction as to the type of tree has to be made at the database level, which imo should be abstracted to the tree itself.
Consequence
Instead of writing the following in
state_object.go
'supdateTrie
:the code that supports both MPT and verkle trees become:
It should have no impact on the root hash of the tree (although there is still an issue with the light client, which is why this PR is still a draft)
Note that
rlp.EncodeToBytes
is now called twice (in the case of an MPT), in case it ends in the snapshot. This pertains to the snapshot format, which ideally should also be abstracted but doesn't belong in this PR.