Class BlockHeader
Block header containing information about Blocks except transactions.
Inheritance
Namespace: Libplanet.Types.Blocks
Assembly: Libplanet.Types.dll
Syntax
public sealed class BlockHeader : object, IBlockHeader, IPreEvaluationBlockHeader, IBlockMetadata, IBlockExcerpt
Constructors
| Improve this Doc View SourceBlockHeader(IBlockHeader)
Creates a BlockHeader by copying the fields of another
block header.
Declaration
public BlockHeader(IBlockHeader header)
Parameters
| Type | Name | Description |
|---|---|---|
| IBlockHeader | header | The block header to copy. |
Remarks
As header needn't be an actual BlockHeader
instance, but simply any object implementing IBlockHeader
interface, it can't be trusted to satisfy all the constraints for a valid
BlockHeader instance. As such, conditions are checked again
whilst creating a copy. This is a relatively heavy operation, so must be used
sparingly.
In particular, this creates a new instance of
PreEvaluationBlockHeader with data extracted from
header. Thus any
Exceptions
| Type | Condition |
|---|---|
| InvalidBlockSignatureException | Thrown if
|
| InvalidBlockHashException | Thrown when |
See Also
| Improve this Doc View SourceBlockHeader(PreEvaluationBlockHeader, HashDigest<SHA256>, Nullable<ImmutableArray<Byte>>, BlockHash)
Creates a BlockHeader instance from the given
preEvaluationBlockHeader and stateRootHash.
It also checks the sanity of the given hash.
Declaration
public BlockHeader(PreEvaluationBlockHeader preEvaluationBlockHeader, HashDigest<SHA256> stateRootHash, ImmutableArray<byte>? signature, BlockHash hash)
Parameters
| Type | Name | Description |
|---|---|---|
| PreEvaluationBlockHeader | preEvaluationBlockHeader | The pre-evaluation block header. |
| HashDigest<SHA256> | stateRootHash | The state root hash. |
| System.Nullable<ImmutableArray<System.Byte>> | signature | The block signature. |
| BlockHash | hash | The block hash to check. |
Exceptions
| Type | Condition |
|---|---|
| InvalidBlockSignatureException | Thrown when
the |
| InvalidBlockHashException | Thrown when the given block
|
BlockHeader(PreEvaluationBlockHeader, (HashDigest<SHA256> StateRootHash, Nullable<ImmutableArray<Byte>> Signature, BlockHash Hash))
Creates a BlockHeader instance with its
preEvaluationBlockHeader and proof.
Declaration
public BlockHeader(PreEvaluationBlockHeader preEvaluationBlockHeader, (HashDigest<SHA256> StateRootHash, ImmutableArray<byte>? Signature, BlockHash Hash) proof)
Parameters
| Type | Name | Description |
|---|---|---|
| PreEvaluationBlockHeader | preEvaluationBlockHeader | The pre-evaluation block header. |
| System.ValueTuple<HashDigest<SHA256>, System.Nullable<ImmutableArray<System.Byte>>, BlockHash> | proof | A triple of the state root hash, the block signature, and the block
hash which is probably considered as to be derived from
the |
Exceptions
| Type | Condition |
|---|---|
| InvalidBlockSignatureException | Thrown if
|
| InvalidBlockHashException | Thrown when |
Properties
| Improve this Doc View SourceEvidenceHash
Committing EvidenceIds of vote infraction that has been made on previous blocks.
Declaration
public HashDigest<SHA256>? EvidenceHash { get; }
Property Value
| Type | Description |
|---|---|
| System.Nullable<HashDigest<SHA256>> |
Hash
A block's hash.
Declaration
public BlockHash Hash { get; }
Property Value
| Type | Description |
|---|---|
| BlockHash |
See Also
| Improve this Doc View SourceHeader
Internal PreEvaluationBlockHeader.
Declaration
public PreEvaluationBlockHeader Header { get; }
Property Value
| Type | Description |
|---|---|
| PreEvaluationBlockHeader |
Index
The height of the block.
Declaration
public long Index { get; }
Property Value
| Type | Description |
|---|---|
| System.Int64 |
Remarks
Zero means it is a genesis block. Not allowed to be negative.
See Also
| Improve this Doc View SourceLastCommit
The BlockCommit about previous block's vote information.
Declaration
public BlockCommit LastCommit { get; }
Property Value
| Type | Description |
|---|---|
| BlockCommit |
Miner
The address of the miner.
Declaration
public Address Miner { get; }
Property Value
| Type | Description |
|---|---|
| Address |
PreEvaluationHash
The hash derived from the block except of its state root hash (i.e., without action evaluation).
Declaration
public HashDigest<SHA256> PreEvaluationHash { get; }
Property Value
| Type | Description |
|---|---|
| HashDigest<SHA256> |
PreviousHash
The previous block's hash. If it's a genesis block (i.e., its Index is 0) this must be null.
Declaration
public BlockHash? PreviousHash { get; }
Property Value
| Type | Description |
|---|---|
| System.Nullable<BlockHash> |
ProtocolVersion
The protocol version number. For the latest protocol version, see CurrentProtocolVersion. We have the following version info:
- 0: The initial block protocol version number. This is not actually recorded in storage. That is, the lack of block protocol version in a stored block means it is of version 0.
- 1: Introduced to be stored with the block data. Validation for PreEvaluationHash was added.
- 2: Updated to include Signature to blocks. As a result, the miner's identity is provided as a PublicKey instead of a Address. Additionally, total difficulty was added.
- 3: Updated to fix an issue with the internal execution ordering of Transactions in blocks.
- 4: Updated to introduce a PBFT scheme. LastCommit was added and total difficulty was removed.
- 5: Updated to introduce a world model. No structural changes were made to blocks. This is used as a marker indicating when the data model should be migrated.
Declaration
public int ProtocolVersion { get; }
Property Value
| Type | Description |
|---|---|
| System.Int32 |
See Also
| Improve this Doc View SourcePublicKey
The public key of the Miner. This is used for verifying the signature.
Although this is nullable type-wise, it is mandatory where ProtocolVersion is 2 or later. As blocks had not been signed in the previous protocol versions, the type of this is nullable.
Declaration
public PublicKey PublicKey { get; }
Property Value
| Type | Description |
|---|---|
| PublicKey |
Signature
The digital signature of the whole block content (except for Hash, which is derived from the signature and other contents). This is made by the Miner's PrivateKey.
As the block signature is introduced since SignatureProtocolVersion, it is null for blocks with earlier protocol versions than SignatureProtocolVersion. Although the property is type-wise, the block signature is mandatory since SignatureProtocolVersion.
Declaration
public ImmutableArray<byte>? Signature { get; }
Property Value
| Type | Description |
|---|---|
| System.Nullable<ImmutableArray<System.Byte>> |
StateRootHash
The
Declaration
public HashDigest<SHA256> StateRootHash { get; }
Property Value
| Type | Description |
|---|---|
| HashDigest<SHA256> |
Timestamp
The time the block is created.
Declaration
public DateTimeOffset Timestamp { get; }
Property Value
| Type | Description |
|---|---|
| DateTimeOffset |
Remarks
This is always UTC.
TxHash
The hash of all transactions in the block. This is null if the block has no transactions.
Declaration
public HashDigest<SHA256>? TxHash { get; }
Property Value
| Type | Description |
|---|---|
| System.Nullable<HashDigest<SHA256>> |
Methods
| Improve this Doc View SourceToString()
Block header containing information about Blocks except transactions.
Declaration
public override string ToString()
Returns
| Type | Description |
|---|---|
| System.String |