Documentation ¶
Overview ¶
Package block implements the roothash block and header.
Index ¶
- Variables
- type Block
- type Header
- func (h *Header) EncodedHash() hash.Hash
- func (h *Header) IsParentOf(child *Header) bool
- func (h *Header) MostlyEqual(cmp *Header) bool
- func (h *Header) RootsForStorageReceipt() []hash.Hash
- func (h *Header) StorageRoots() (roots []storage.Root)
- func (h *Header) VerifyStorageReceipt(receipt *storage.ReceiptBody) error
- func (h *Header) VerifyStorageReceiptSignatures() error
- type HeaderType
- type Message
Constants ¶
This section is empty.
Variables ¶
var ErrInvalidVersion = errors.New("roothash: invalid version")
ErrInvalidVersion is the error returned when a version is invalid.
Functions ¶
This section is empty.
Types ¶
type Block ¶
type Block struct { // Header is the block header. Header Header `json:"header"` }
Block is an Oasis block.
Keep this in sync with /runtime/src/common/roothash.rs.
func NewEmptyBlock ¶
func NewEmptyBlock(child *Block, timestamp uint64, htype HeaderType) *Block
NewEmptyBlock creates a new empty block with a specific type.
type Header ¶
type Header struct { // Version is the protocol version number. Version uint16 `json:"version"` // Namespace is the header's chain namespace. Namespace common.Namespace `json:"namespace"` // Round is the block round. Round uint64 `json:"round"` // Timestamp is the block timestamp (POSIX time). Timestamp uint64 `json:"timestamp"` // HeaderType is the header type. HeaderType HeaderType `json:"header_type"` // PreviousHash is the previous block hash. PreviousHash hash.Hash `json:"previous_hash"` // IORoot is the I/O merkle root. IORoot hash.Hash `json:"io_root"` // StateRoot is the state merkle root. StateRoot hash.Hash `json:"state_root"` // Messages are the roothash messages sent in this round. Messages []*Message `json:"messages"` // StorageSignatures are the storage receipt signatures for the merkle // roots. StorageSignatures []signature.Signature `json:"storage_signatures"` }
Header is a block header.
Keep this in sync with /runtime/src/common/roothash.rs.
func (*Header) EncodedHash ¶
EncodedHash returns the encoded cryptographic hash of the header.
func (*Header) IsParentOf ¶
IsParentOf returns true iff the header is the parent of a child header.
func (*Header) MostlyEqual ¶
MostlyEqual compares vs another header for equality, omitting the StorageSignatures field as it is not universally guaranteed to be present.
Locations where this matter should do the comparison manually.
func (*Header) RootsForStorageReceipt ¶
RootsForStorageReceipt gets the merkle roots that must be part of a storage receipt.
func (*Header) StorageRoots ¶
StorageRoots returns the storage roots contained in this header.
func (*Header) VerifyStorageReceipt ¶
func (h *Header) VerifyStorageReceipt(receipt *storage.ReceiptBody) error
VerifyStorageReceipt validates that the provided storage receipt matches the header.
func (*Header) VerifyStorageReceiptSignatures ¶
VerifyStorageReceiptSignatures validates that the storage receipt signatures match the signatures for the current merkle roots.
Note: Ensuring that the signatures are signed by keypair(s) that are expected is the responsibility of the caller.
type HeaderType ¶
type HeaderType uint8
HeaderType is the type of header.
const ( // Invalid is an invalid header type and should never be stored. Invalid HeaderType = 0 // Normal is a normal header. Normal HeaderType = 1 // RoundFailed is a header resulting from a failed round. Such a // header contains no transactions but advances the round as normal // to prevent replays of old commitments. RoundFailed HeaderType = 2 // EpochTransition is a header resulting from an epoch transition. // // Such a header contains no transactions but advances the round as // normal. // TODO: Consider renaming this to CommitteeTransition. EpochTransition HeaderType = 3 // Suspended is a header resulting from the runtime being suspended. // // Such a header contains no transactions but advances the round as // normal. Suspended HeaderType = 4 )