|
|
|
package blockif
|
|
|
|
|
|
|
|
import (
|
|
|
|
"math/big"
|
|
|
|
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
|
|
"github.com/ethereum/go-ethereum/core/types"
|
|
|
|
"github.com/rs/zerolog"
|
|
|
|
|
|
|
|
"github.com/harmony-one/harmony/shard"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Header defines the block header interface.
|
|
|
|
type Header interface {
|
|
|
|
// ParentHash is the header hash of the parent block. For the genesis block
|
|
|
|
// which has no parent by definition, this field is zeroed out.
|
|
|
|
ParentHash() common.Hash
|
|
|
|
|
|
|
|
// SetParentHash sets the parent hash field.
|
|
|
|
SetParentHash(newParentHash common.Hash)
|
|
|
|
|
|
|
|
// Coinbase is the address of the node that proposed this block and all
|
|
|
|
// transactions in it.
|
|
|
|
Coinbase() common.Address
|
|
|
|
|
|
|
|
// SetCoinbase sets the coinbase address field.
|
|
|
|
SetCoinbase(newCoinbase common.Address)
|
|
|
|
|
|
|
|
// Root is the state (account) trie root hash.
|
|
|
|
Root() common.Hash
|
|
|
|
|
|
|
|
// SetRoot sets the state trie root hash field.
|
|
|
|
SetRoot(newRoot common.Hash)
|
|
|
|
|
|
|
|
// TxHash is the transaction trie root hash.
|
|
|
|
TxHash() common.Hash
|
|
|
|
|
|
|
|
// SetTxHash sets the transaction trie root hash field.
|
|
|
|
SetTxHash(newTxHash common.Hash)
|
|
|
|
|
|
|
|
// ReceiptHash is the same-shard transaction receipt trie hash.
|
|
|
|
ReceiptHash() common.Hash
|
|
|
|
|
|
|
|
// SetReceiptHash sets the same-shard transaction receipt trie hash.
|
|
|
|
SetReceiptHash(newReceiptHash common.Hash)
|
|
|
|
|
|
|
|
// OutgoingReceiptHash is the egress transaction receipt trie hash.
|
|
|
|
OutgoingReceiptHash() common.Hash
|
|
|
|
|
|
|
|
// SetOutgoingReceiptHash sets the egress transaction receipt trie hash.
|
|
|
|
SetOutgoingReceiptHash(newOutgoingReceiptHash common.Hash)
|
|
|
|
|
|
|
|
// IncomingReceiptHash is the ingress transaction receipt trie hash.
|
|
|
|
IncomingReceiptHash() common.Hash
|
|
|
|
|
|
|
|
// SetIncomingReceiptHash sets the ingress transaction receipt trie hash.
|
|
|
|
SetIncomingReceiptHash(newIncomingReceiptHash common.Hash)
|
|
|
|
|
|
|
|
// Bloom is the Bloom filter that indexes accounts and topics logged by smart
|
|
|
|
// contract transactions (executions) in this block.
|
|
|
|
Bloom() types.Bloom
|
|
|
|
|
|
|
|
// SetBloom sets the smart contract log Bloom filter for this block.
|
|
|
|
SetBloom(newBloom types.Bloom)
|
|
|
|
|
|
|
|
// Number is the block number.
|
|
|
|
//
|
|
|
|
// The returned instance is a copy; the caller may do anything with it.
|
|
|
|
Number() *big.Int
|
|
|
|
|
|
|
|
// SetNumber sets the block number.
|
|
|
|
//
|
|
|
|
// It stores a copy; the caller may freely modify the original.
|
|
|
|
SetNumber(newNumber *big.Int)
|
|
|
|
|
|
|
|
// GasLimit is the gas limit for transactions in this block.
|
|
|
|
GasLimit() uint64
|
|
|
|
|
|
|
|
// SetGasLimit sets the gas limit for transactions in this block.
|
|
|
|
SetGasLimit(newGasLimit uint64)
|
|
|
|
|
|
|
|
// GasUsed is the amount of gas used by transactions in this block.
|
|
|
|
GasUsed() uint64
|
|
|
|
|
|
|
|
// SetGasUsed sets the amount of gas used by transactions in this block.
|
|
|
|
SetGasUsed(newGasUsed uint64)
|
|
|
|
|
|
|
|
// Time is the UNIX timestamp of this block.
|
|
|
|
//
|
|
|
|
// The returned instance is a copy; the caller may do anything with it.
|
|
|
|
Time() *big.Int
|
|
|
|
|
|
|
|
// SetTime sets the UNIX timestamp of this block.
|
|
|
|
//
|
|
|
|
// It stores a copy; the caller may freely modify the original.
|
|
|
|
SetTime(newTime *big.Int)
|
|
|
|
|
|
|
|
// Extra is the extra data field of this block.
|
|
|
|
//
|
|
|
|
// The returned slice is a copy; the caller may do anything with it.
|
|
|
|
Extra() []byte
|
|
|
|
|
|
|
|
// SetExtra sets the extra data field of this block.
|
|
|
|
//
|
|
|
|
// It stores a copy; the caller may freely modify the original.
|
|
|
|
SetExtra(newExtra []byte)
|
|
|
|
|
|
|
|
// MixDigest is the mixhash.
|
|
|
|
//
|
|
|
|
// This field is a remnant from Ethereum, and Harmony does not use it and always
|
|
|
|
// zeroes it out.
|
|
|
|
MixDigest() common.Hash
|
|
|
|
|
|
|
|
// SetMixDigest sets the mixhash of this block.
|
|
|
|
SetMixDigest(newMixDigest common.Hash)
|
|
|
|
|
|
|
|
// ViewID is the ID of the view in which this block was originally proposed.
|
|
|
|
//
|
|
|
|
// It normally increases by one for each subsequent block, or by more than one
|
|
|
|
// if one or more PBFT/FBFT view changes have occurred.
|
|
|
|
//
|
|
|
|
// The returned instance is a copy; the caller may do anything with it.
|
|
|
|
ViewID() *big.Int
|
|
|
|
|
|
|
|
// SetViewID sets the view ID in which the block was originally proposed.
|
|
|
|
//
|
|
|
|
// It stores a copy; the caller may freely modify the original.
|
|
|
|
SetViewID(newViewID *big.Int)
|
|
|
|
|
|
|
|
// Epoch is the epoch number of this block.
|
|
|
|
//
|
|
|
|
// The returned instance is a copy; the caller may do anything with it.
|
|
|
|
Epoch() *big.Int
|
|
|
|
|
|
|
|
// SetEpoch sets the epoch number of this block.
|
|
|
|
//
|
|
|
|
// It stores a copy; the caller may freely modify the original.
|
|
|
|
SetEpoch(newEpoch *big.Int)
|
|
|
|
|
|
|
|
// ShardID is the shard ID to which this block belongs.
|
|
|
|
ShardID() uint32
|
|
|
|
|
|
|
|
// SetShardID sets the shard ID to which this block belongs.
|
|
|
|
SetShardID(newShardID uint32)
|
|
|
|
|
|
|
|
// LastCommitSignature is the FBFT commit group signature for the last block.
|
|
|
|
LastCommitSignature() [96]byte
|
|
|
|
|
|
|
|
// SetLastCommitSignature sets the FBFT commit group signature for the last
|
|
|
|
// block.
|
|
|
|
SetLastCommitSignature(newLastCommitSignature [96]byte)
|
|
|
|
|
|
|
|
// LastCommitBitmap is the signatory bitmap of the previous block. Bit
|
|
|
|
// positions index into committee member array.
|
|
|
|
//
|
|
|
|
// The returned slice is a copy; the caller may do anything with it.
|
|
|
|
LastCommitBitmap() []byte
|
|
|
|
|
|
|
|
// SetLastCommitBitmap sets the signatory bitmap of the previous block.
|
|
|
|
//
|
|
|
|
// It stores a copy; the caller may freely modify the original.
|
|
|
|
SetLastCommitBitmap(newLastCommitBitmap []byte)
|
|
|
|
|
|
|
|
// ShardStateHash is the shard state hash.
|
|
|
|
ShardStateHash() common.Hash
|
|
|
|
|
|
|
|
// SetShardStateHash sets the shard state hash.
|
|
|
|
SetShardStateHash(newShardStateHash common.Hash)
|
|
|
|
|
|
|
|
// Vrf is the output of the VRF for the epoch.
|
|
|
|
//
|
|
|
|
// The returned slice is a copy; the caller may do anything with it.
|
|
|
|
Vrf() []byte
|
|
|
|
|
|
|
|
// SetVrf sets the output of the VRF for the epoch.
|
|
|
|
//
|
|
|
|
// It stores a copy; the caller may freely modify the original.
|
|
|
|
SetVrf(newVrf []byte)
|
|
|
|
|
|
|
|
// Vdf is the output of the VDF for the epoch.
|
|
|
|
//
|
|
|
|
// The returned slice is a copy; the caller may do anything with it.
|
|
|
|
Vdf() []byte
|
|
|
|
|
|
|
|
// SetVdf sets the output of the VDF for the epoch.
|
|
|
|
//
|
|
|
|
// It stores a copy; the caller may freely modify the original.
|
|
|
|
SetVdf(newVdf []byte)
|
|
|
|
|
|
|
|
// ShardState is the RLP-encoded form of shard state (list of committees) for
|
|
|
|
// the next epoch.
|
|
|
|
//
|
|
|
|
// The returned slice is a copy; the caller may do anything with it.
|
|
|
|
ShardState() []byte
|
|
|
|
|
|
|
|
// SetShardState sets the RLP-encoded form of shard state
|
|
|
|
//
|
|
|
|
// It stores a copy; the caller may freely modify the original.
|
|
|
|
SetShardState(newShardState []byte)
|
|
|
|
|
|
|
|
// CrossLinks is the RLP-encoded form of non-beacon block headers chosen to be
|
|
|
|
// canonical by the beacon committee. This field is present only on beacon
|
|
|
|
// chain block headers.
|
|
|
|
//
|
|
|
|
// The returned slice is a copy; the caller may do anything with it.
|
|
|
|
CrossLinks() []byte
|
|
|
|
|
|
|
|
// SetCrossLinks sets the RLP-encoded form of non-beacon block headers chosen to
|
|
|
|
// be canonical by the beacon committee.
|
|
|
|
//
|
|
|
|
// It stores a copy; the caller may freely modify the original.
|
|
|
|
SetCrossLinks(newCrossLinks []byte)
|
|
|
|
|
|
|
|
// Hash returns the block hash of the header, which is simply the legacy
|
|
|
|
// Keccak256 hash of its RLP encoding.
|
|
|
|
Hash() common.Hash
|
|
|
|
|
|
|
|
// Size returns the approximate memory used by all internal contents. It is
|
|
|
|
// used to approximate and limit the memory consumption of various caches.
|
|
|
|
Size() common.StorageSize
|
|
|
|
|
|
|
|
// Logger returns a sub-logger with block contexts added.
|
|
|
|
Logger(logger *zerolog.Logger) *zerolog.Logger
|
|
|
|
|
|
|
|
// GetShardState returns the deserialized shard state object.
|
|
|
|
// Note that header encoded shard state only exists in the last block of the previous epoch
|
|
|
|
GetShardState() (shard.State, error)
|
|
|
|
|
|
|
|
// Copy returns a copy of the header.
|
|
|
|
Copy() Header
|
|
|
|
|
|
|
|
// Slashes is the RLP-encoded form of []slash.Record,
|
|
|
|
// The returned slice is a copy; the caller may do anything with it
|
|
|
|
Slashes() []byte
|
|
|
|
|
|
|
|
// SetSlashes sets the RLP-encoded form of slashes
|
|
|
|
// It stores a copy; the caller may freely modify the original.
|
|
|
|
SetSlashes(newSlashes []byte)
|
|
|
|
}
|