Class Block
The complete block including all block contents and action evaluation.
Inheritance
Implements
Namespace: Libplanet.Types.Blocks
Assembly: Libplanet.Types.dll
Syntax
public sealed class Block : object, IPreEvaluationBlock, IBlockContent, IBlockHeader, IPreEvaluationBlockHeader, IBlockMetadata, IBlockExcerpt
Constructors
| Improve this Doc View SourceBlock(IBlockHeader, IEnumerable<Transaction>, IEnumerable<EvidenceBase>)
Creates a Block instance by combining a block header
and transactions
.
Declaration
public Block(IBlockHeader header, IEnumerable<Transaction> transactions, IEnumerable<EvidenceBase> evidence)
Parameters
Type | Name | Description |
---|---|---|
IBlockHeader | header | The block header. |
IEnumerable<Transaction> | transactions | The transactions to include. |
IEnumerable<EvidenceBase> | evidence | The evidence to include. |
Exceptions
Type | Condition |
---|---|
InvalidBlockProtocolVersionException | Thrown when
the |
InvalidBlockIndexException | Thrown when the |
InvalidTxSignatureException | Thrown when any tx signature is invalid or not signed by its signer. |
InvalidTxNonceException | Thrown when the same tx nonce is used by
a signer twice or more, or a tx nonce is used without its previous nonce by a signer.
Note that this validates only a block's intrinsic integrity between its transactions,
but does not guarantee integrity between blocks. Such validation needs to be conducted
by |
InvalidTxGenesisHashException | Thrown when transactions to set have inconsistent genesis hashes. |
InvalidBlockTxHashException | Thrown when the given block
|
InvalidBlockPreEvaluationHashException | Thrown when the given
|
Block(PreEvaluationBlock, (HashDigest<SHA256> StateRootHash, Nullable<ImmutableArray<Byte>> Signature, BlockHash Hash))
Creates a Block instance by combining
a preEvaluationBlock
, its corresponding
proof.StateRootHash.StateRootHash
, valid proof.Signature.Signature
,
and correctly derived proof.Hash.Hash
.
Declaration
public Block(PreEvaluationBlock preEvaluationBlock, (HashDigest<SHA256> StateRootHash, ImmutableArray<byte>? Signature, BlockHash Hash) proof)
Parameters
Type | Name | Description |
---|---|---|
PreEvaluationBlock | preEvaluationBlock | A pre-evaluation block. |
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. |
Fields
| Improve this Doc View SourceCurrentProtocolVersion
The latest protocol version.
Declaration
public const int CurrentProtocolVersion = null
Field Value
Type | Description |
---|---|
System.Int32 |
Properties
| Improve this Doc View SourceEvidence
The complete block including all block contents and action evaluation.
Declaration
public IReadOnlyList<EvidenceBase> Evidence { get; }
Property Value
Type | Description |
---|---|
IReadOnlyList<EvidenceBase> |
EvidenceHash
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
The BlockHeader of the block.
Declaration
public BlockHeader Header { get; }
Property Value
Type | Description |
---|---|
BlockHeader |
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.
Transactions
Transactions belonging to the block.
Declaration
public IReadOnlyList<Transaction> Transactions { get; }
Property Value
Type | Description |
---|---|
IReadOnlyList<Transaction> |
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 SourceEquals(Block)
The complete block including all block contents and action evaluation.
Declaration
public bool Equals(Block other)
Parameters
Type | Name | Description |
---|---|---|
Block | other |
Returns
Type | Description |
---|---|
System.Boolean |
Equals(Nullable<Object>)
The complete block including all block contents and action evaluation.
Declaration
public override bool Equals(object? obj)
Parameters
Type | Name | Description |
---|---|---|
System.Nullable<System.Object> | obj |
Returns
Type | Description |
---|---|
System.Boolean |
GetHashCode()
The complete block including all block contents and action evaluation.
Declaration
public override int GetHashCode()
Returns
Type | Description |
---|---|
System.Int32 |
ToString()
The complete block including all block contents and action evaluation.
Declaration
public override string ToString()
Returns
Type | Description |
---|---|
System.String |
Operators
| Improve this Doc View SourceEquality(Block, Block)
Equivalent to
Declaration
public static bool operator ==(Block left, Block right)
Parameters
Type | Name | Description |
---|---|---|
Block | left | A block. |
Block | right | Another block. |
Returns
Type | Description |
---|---|
System.Boolean | true if two blocks are equal. Otherwise false. |
Inequality(Block, Block)
Negation of
Declaration
public static bool operator !=(Block left, Block right)
Parameters
Type | Name | Description |
---|---|---|
Block | left | A block. |
Block | right | Another block. |
Returns
Type | Description |
---|---|
System.Boolean | true if two blocks are different. Otherwise false. |
Explicit Interface Implementations
| Improve this Doc View SourceIBlockContent.Transactions
Transactions belonging to the block.
Declaration
IReadOnlyList<ITransaction> IBlockContent.Transactions { get; }
Returns
Type | Description |
---|---|
IReadOnlyList<ITransaction> |