-
Notifications
You must be signed in to change notification settings - Fork 778
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
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files
Flags with carried forward coverage won't be shown. Click here to find out more. |
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.
This looks great. Makes so much more sense now.
packages/trie/src/types.ts
Outdated
@@ -8,9 +8,17 @@ export type TrieNode = BranchNode | ExtensionNode | LeafNode | |||
|
|||
export type Nibbles = number[] | |||
|
|||
// [ encodedPath, key ] |
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.
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
?
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.
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.
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.
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)?
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.
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
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
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
This PR resolves #3704 by:
ExtensionAndLeafNodeBase
class and making it abstract.encodeKey
method from the extension and leaf node classes as they were not usedNodeReferenceOrRawNode
typeBranchNodeBranchValue
type that fits the types of the values of the _branches of the branch node class.