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

trie: improve node typings and class architecture #3708

Merged
merged 7 commits into from
Sep 29, 2024

Conversation

gabrocheleau
Copy link
Contributor

This PR resolves #3704 by:

  • Renaming the Node class to the more accurate ExtensionAndLeafNodeBase class and making it abstract.
  • Removing the encodeKey method from the extension and leaf node classes as they were not used
  • Adding RawExtensionNode and RawLeafNode types
  • Removing the EmbeddedNode type and replacing it with the NodeReferenceOrRawNode type
  • Adding a BranchNodeBranchValue type that fits the types of the values of the _branches of the branch node class.

Copy link

codecov bot commented Sep 28, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 27.89%. Comparing base (4470cc3) to head (14c7004).
Report is 81 commits behind head on master.

Additional details and impacted files

Impacted file tree graph

Flag Coverage Δ
block 67.45% <ø> (-6.00%) ⬇️
blockchain 83.49% <ø> (?)
client 0.00% <ø> (ø)
common 89.85% <ø> (?)
devp2p 0.00% <ø> (?)
evm 65.18% <ø> (?)
genesis 0.00% <ø> (?)
statemanager 67.40% <ø> (?)
trie 52.18% <100.00%> (?)
tx 76.70% <ø> (-1.08%) ⬇️
util 70.93% <ø> (?)
vm 58.18% <ø> (?)
wallet ?

Flags with carried forward coverage won't be shown. Click here to find out more.

acolytec3
acolytec3 previously approved these changes Sep 29, 2024
Copy link
Contributor

@acolytec3 acolytec3 left a comment

Choose a reason for hiding this comment

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

This looks great. Makes so much more sense now.

@@ -8,9 +8,17 @@ export type TrieNode = BranchNode | ExtensionNode | LeafNode

export type Nibbles = number[]

// [ encodedPath, key ]
Copy link
Member

Choose a reason for hiding this comment

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

Hmm, I find this documentation somewhat misleading. The key in this context would be the pointer to whatever hash this ExtensionNode points to. I think this is implied to by "key" but this might be confused with the MPT-keys (so the ones you use as get argument). Not sure what a better term here would be though. referencedHash? Or maybe pointerHash?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I've copied what is in the ethereum.org documentation. I agree that it is not immediately obvious what this represents. I will remove these two comments and instead add a link to the docs.

Copy link
Contributor

Choose a reason for hiding this comment

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

I dunno if I like the updated comment any better. The docs do explain what the extension node is, in that the key is the DB key for the next node.

Can we get rid of the "raw node" terminology and just have extension nodes, which are simply the encoded path to the node and then the DB key for the next lookup, and then lead nodes, which are the encoded path and then the leaf value (which is either an rlp encoded account or null, right)?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Yeah that's fair.

I'm not sure I get the idea behind getting rid of the "raw node" terminology. We could do a renaming, but then we would have to rework the classes since these are already called "ExensionNode" and "LeafNode". Additionally, in comments and various places (e.g. methods like decodeRawNode), we have been referring to "raw nodes" quite often, and I would tend not to make changes that are too intrusive.

I've updated the comment, let me know if that seems clear enough

Copy link
Contributor

@acolytec3 acolytec3 left a comment

Choose a reason for hiding this comment

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

LGTM

Copy link
Member

@jochem-brouwer jochem-brouwer left a comment

Choose a reason for hiding this comment

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

LGTM

@gabrocheleau gabrocheleau merged commit f1fda27 into master Sep 29, 2024
41 checks passed
@gabrocheleau gabrocheleau deleted the trie/improve-node-typings branch September 29, 2024 21:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Review and improve trie node typing
3 participants