Documentation ¶
Overview ¶
Package blockrecord - the structure of the block header
includes functions to pack/unpack []byte form
Index ¶
- Constants
- func AdjustDifficultyAtBlock(height uint64) (float64, float64, error)
- func ComputeHeaderHash(block []byte) (blockdigest.Digest, error)
- func DifficultyByPreviousTimespanAtBlock(height uint64) (float64, error)
- func DigestFromHashPool(pool storage.Handle, blockNumber []byte) blockdigest.Digest
- func Finalise()
- func FoundationTxId(blockNumber uint64, digest blockdigest.Digest) merkle.Digest
- func Initialise(handle storage.Handle)
- func IsBlockToAdjustDifficulty(height uint64, version uint16) bool
- func IsDifficultyAppliedVersion(version uint16) bool
- func ResetDifficulty()
- func ValidBlockLinkage(currentDigest blockdigest.Digest, ...) error
- func ValidBlockTimeSpacingAtVersion(version uint16, timeSpacing uint64) error
- func ValidHeaderVersion(currentVersion uint16, incomingVersion uint16) error
- func ValidIncomingDifficulty(header *Header, chainName string) error
- type Header
- type NonceType
- type PackedBlock
- type PackedHeader
- type Record
Constants ¶
const ( Version = 5 MinimumVersion = 1 MinimumBlockNumber = 2 // 1 => genesis block MinimumDifficultyBaseBlock = 3 )
currently supported block version (used by proofer)
const ( MinimumTransactions = 2 MaximumTransactions = 10000 )
maximum transactions in a block limited by uint16 field
const ( VersionSize = 2 // Block version number TransactionCountSize = 2 // Count of transactions NumberSize = 8 // This block's number PreviousBlockSize = blockdigest.Length // 256-bit Argon2d hash of the previous block header MerkleRootSize = merkle.DigestLength // 256-bit SHA3 hash based on all of the transactions in the block TimestampSize = 8 // Current timestamp as seconds since 1970-01-01T00:00 UTC DifficultySize = 8 // Current target difficulty in compact format NonceSize = 8 // 64-bit number (starts at 0) )
byte sizes for various fields
Variables ¶
This section is empty.
Functions ¶
func AdjustDifficultyAtBlock ¶ added in v0.11.0
AdjustDifficultyAtBlock - adjust difficulty at block, returns next difficulty, current difficulty, error make sure header version is correct before calling this function
func ComputeHeaderHash ¶ added in v0.11.0
func ComputeHeaderHash(block []byte) (blockdigest.Digest, error)
ComputeHeaderHash - return the hash of a block's header
func DifficultyByPreviousTimespanAtBlock ¶ added in v0.11.0
DifficultyByPreviousTimespanAtBlock - next difficulty value by previous timespan
func DigestFromHashPool ¶ added in v0.11.1
func DigestFromHashPool(pool storage.Handle, blockNumber []byte) blockdigest.Digest
DigestFromHashPool - get digest from hash pool
func FoundationTxId ¶ added in v0.7.0
func FoundationTxId(blockNumber uint64, digest blockdigest.Digest) merkle.Digest
FoundationTxId - create the transaction id for a foundation record its TxId is sha3-256 . concat blockDigest leBlockNumberUint64
func IsBlockToAdjustDifficulty ¶ added in v0.11.0
IsBlockToAdjustDifficulty - is block the one to adjust difficulty
func IsDifficultyAppliedVersion ¶ added in v0.11.0
IsDifficultyAppliedVersion - is difficulty rule applied at header version
func ResetDifficulty ¶ added in v0.11.0
func ResetDifficulty()
ResetDifficulty - reset difficulty to initial value
func ValidBlockLinkage ¶ added in v0.11.0
func ValidBlockLinkage(currentDigest blockdigest.Digest, incomingDigestOfPreviousBlock blockdigest.Digest) error
ValidBlockLinkage - valid incoming block linkage
func ValidBlockTimeSpacingAtVersion ¶ added in v0.11.0
ValidBlockTimeSpacingAtVersion - valid block time spacing based on different version
func ValidHeaderVersion ¶ added in v0.11.0
ValidHeaderVersion - valid incoming block version
func ValidIncomingDifficulty ¶ added in v0.13.0
ValidIncomingDifficulty - valid incoming difficulty
Types ¶
type Header ¶
type Header struct { Version uint16 `json:"version"` TransactionCount uint16 `json:"transactionCount"` Number uint64 `json:"number,string"` PreviousBlock blockdigest.Digest `json:"previousBlock"` MerkleRoot merkle.Digest `json:"merkleRoot"` Timestamp uint64 `json:"timestamp,string"` Difficulty *difficulty.Difficulty `json:"difficulty"` Nonce NonceType `json:"nonce"` }
Header - the unpacked header structure
func (*Header) Pack ¶
func (header *Header) Pack() PackedHeader
Pack - turn a record into an array of bytes
type NonceType ¶
type NonceType uint64
NonceType - for header nonce field
func (NonceType) MarshalText ¶
MarshalText - convert a nonce to little endian hex for JSON
func (*NonceType) UnmarshalText ¶
UnmarshalText - convert a nonce little endian hex string to nonce value
type PackedHeader ¶
type PackedHeader [totalBlockSize]byte
PackedHeader - use fixed size byte array for header to simplify validation
func (PackedHeader) Digest ¶
func (record PackedHeader) Digest() blockdigest.Digest
Digest - digest for a packed header make sure to truncate bytes to correct length
func (PackedHeader) Unpack ¶
func (record PackedHeader) Unpack() (*Header, error)
Unpack - turn a byte slice into a record