stateless

package
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 11, 2024 License: GPL-3.0 Imports: 11 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type HeaderReader

type HeaderReader interface {
	// GetHeader retrieves a block header from the database by hash and number,
	GetHeader(hash common.Hash, number uint64) *types.Header
}

HeaderReader is an interface to pull in headers in place of block hashes for the witness.

type Witness

type Witness struct {
	Headers []*types.Header     // Past headers in reverse order (0=parent, 1=parent's-parent, etc). First *must* be set.
	Codes   map[string]struct{} // Set of bytecodes ran or accessed
	State   map[string]struct{} // Set of MPT state trie nodes (account and storage together)
	// contains filtered or unexported fields
}

Witness encompasses the state required to apply a set of transactions and derive a post state/receipt root.

func NewWitness

func NewWitness(context *types.Header, chain HeaderReader) (*Witness, error)

NewWitness creates an empty witness ready for population.

func (*Witness) AddBlockHash

func (w *Witness) AddBlockHash(number uint64)

AddBlockHash adds a "blockhash" to the witness with the designated offset from chain head. Under the hood, this method actually pulls in enough headers from the chain to cover the block being added.

func (*Witness) AddCode

func (w *Witness) AddCode(code []byte)

AddCode adds a bytecode blob to the witness.

func (*Witness) AddState

func (w *Witness) AddState(nodes map[string]struct{})

AddState inserts a batch of MPT trie nodes into the witness.

func (*Witness) Copy

func (w *Witness) Copy() *Witness

Copy deep-copies the witness object. Witness.Block isn't deep-copied as it is never mutated by Witness

func (*Witness) DecodeRLP

func (w *Witness) DecodeRLP(s *rlp.Stream) error

DecodeRLP decodes a witness from RLP.

func (*Witness) EncodeRLP

func (w *Witness) EncodeRLP(wr io.Writer) error

EncodeRLP serializes a witness as RLP.

func (*Witness) MakeHashDB

func (w *Witness) MakeHashDB() ethdb.Database

MakeHashDB imports tries, codes and block hashes from a witness into a new hash-based memory db. We could eventually rewrite this into a pathdb, but simple is better for now.

Note, this hashdb approach is quite strictly self-validating:

  • Headers are persisted keyed by hash, so blockhash will error on junk
  • Codes are persisted keyed by hash, so bytecode lookup will error on junk
  • Trie nodes are persisted keyed by hash, so trie expansion will error on junk

Acceleration structures built would need to explicitly validate the witness.

func (*Witness) Root

func (w *Witness) Root() common.Hash

Root returns the pre-state root from the first header.

Note, this method will panic in case of a bad witness (but RLP decoding will sanitize it and fail before that).

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL