Documentation ¶
Index ¶
- type HeaderReader
- type Witness
- func (w *Witness) AddBlockHash(number uint64)
- func (w *Witness) AddCode(code []byte)
- func (w *Witness) AddState(nodes map[string]struct{})
- func (w *Witness) Copy() *Witness
- func (w *Witness) DecodeRLP(s *rlp.Stream) error
- func (w *Witness) EncodeRLP(wr io.Writer) error
- func (w *Witness) MakeHashDB() ethdb.Database
- func (w *Witness) MarshalJSON() ([]byte, error)
- func (w *Witness) Root() common.Hash
- func (w *Witness) String() string
- func (w *Witness) UnmarshalJSON(input []byte) error
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 { Block *types.Block // Current block with rootHash and receiptHash zeroed out 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 a block, state and any other chain data required to apply a set of transactions and derive a post state/receipt root.
func NewWitness ¶
func NewWitness(chain HeaderReader, block *types.Block) (*Witness, error)
NewWitness creates an empty witness ready for population.
func (*Witness) AddBlockHash ¶
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) Copy ¶
Copy deep-copies the witness object. Witness.Block isn't deep-copied as it is never mutated by Witness
func (*Witness) MakeHashDB ¶
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.
func (*Witness) MarshalJSON ¶
MarshalJSON marshals a witness as JSON.
func (*Witness) Root ¶
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).
func (*Witness) String ¶
String prints a human-readable summary containing the total size of the witness and the sizes of the underlying components
func (*Witness) UnmarshalJSON ¶
UnmarshalJSON unmarshals from JSON.