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

core/state: introduce stateupdate structure #29530

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

rjl493456442
Copy link
Member

@rjl493456442 rjl493456442 commented Apr 15, 2024

This pull request rewrites the statedb by introducing a state update struct.

A state update struct will be constructed once the statedb.Commit is invoked. It contains all the state
changes caused by previous state transition, e.g.

  • original state root and post-execute state root
  • deleted accounts along with their original value
  • updated accounts along with their original value
  • dirty contract codes
  • dirty trie nodes (state hasher)

Instead of committing the state change into state snapshot and trie database blindly, the state update
will be returned and then can be consumed by different state database implementation in different
ways. It gives more flexibilities to design database abstraction for different purposes.

What's more, the statedb has been simplified significantly, especially in state change construction.

@rjl493456442 rjl493456442 force-pushed the state-update branch 3 times, most recently from 8e190d8 to ea9d92e Compare April 18, 2024 07:05
@rjl493456442 rjl493456442 force-pushed the state-update branch 4 times, most recently from 005bb86 to 60746bb Compare April 29, 2024 07:50
@rjl493456442 rjl493456442 force-pushed the state-update branch 6 times, most recently from 354717c to bd6b20a Compare May 13, 2024 01:54
@rjl493456442 rjl493456442 force-pushed the state-update branch 2 times, most recently from 2fe48c1 to 2089fdb Compare May 14, 2024 03:04
Comment on lines 65 to 71
// Note, this map will be reset for each transaction before byzantium fork.
needCommit Storage
Copy link
Contributor

Choose a reason for hiding this comment

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

Modified but not yet committed, this sounds a lot like dirtyStorage. Please add some clarification so a reader understands what's different between those two things

@rjl493456442
Copy link
Member Author

This pull request has been deployed full sync for a few days, since the genesis. It can sync more than 16m blocks with no error.

type accountDelete struct {
address common.Address // address is the unique account identifier
origin []byte // origin is the original value of account data in slim-RLP encoding.
storagesOrigin map[common.Hash][]byte // storagesOrigin stores the original values of mutated slots in prefix-zero-trimmed RLP format.
Copy link
Member

Choose a reason for hiding this comment

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

Are these the original values of the mutated slots, or are these all the slots?

Copy link
Member Author

Choose a reason for hiding this comment

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

the original values of these all the slots

if prev.Root == types.EmptyRootHash {
continue
}
// Remove storage slots belong to the account.
// Remove storage slots belonging to the account.
slots, set, err := s.deleteStorage(addr, addrHash, prev.Root)
Copy link
Member

Choose a reason for hiding this comment

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

Nitpick but didn't have a better place to dump it, could you fix the doc of the deleteStorage method to get rid of

"// It could potentially be terminated if the storage size is excessively large, potentially leading to an out-of-memory panic."?

AFAIK since SELFDESTRUCT was dropped, there's no more OOM protection.

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.

None yet

4 participants