Class BlockChain<T>
Inherited Members
Namespace: Libplanet.Blockchain
Assembly: Libplanet.dll
Syntax
public class BlockChain<T> : IReadOnlyList<Block<T>>, IReadOnlyCollection<Block<T>>, IEnumerable<Block<T>>, IEnumerable where T : IAction, new()
Type Parameters
| Name | Description |
|---|---|
| T |
Constructors
| Improve this Doc View SourceBlockChain(IBlockPolicy<T>, IStore)
Declaration
public BlockChain(IBlockPolicy<T> policy, IStore store)
Parameters
| Type | Name | Description |
|---|---|---|
| IBlockPolicy<T> | policy | |
| IStore | store |
Properties
| Improve this Doc View SourceBlocks
All Block<T>s in the BlockChain<T> storage, including orphan Block<T>s. Keys are Hashes and values are their corresponding Block<T>s.
Declaration
public IDictionary<HashDigest<SHA256>, Block<T>> Blocks { get; }
Property Value
| Type | Description |
|---|---|
| IDictionary<HashDigest<SHA256>, Block<T>> |
Id
Declaration
public Guid Id { get; }
Property Value
| Type | Description |
|---|---|
| Guid |
Item[Int32]
Declaration
public Block<T> this[int index] { get; }
Parameters
| Type | Name | Description |
|---|---|---|
| Int32 | index |
Property Value
| Type | Description |
|---|---|
| Block<T> |
Item[Int64]
Declaration
public Block<T> this[long index] { get; }
Parameters
| Type | Name | Description |
|---|---|---|
| Int64 | index |
Property Value
| Type | Description |
|---|---|
| Block<T> |
Policy
Declaration
public IBlockPolicy<T> Policy { get; }
Property Value
| Type | Description |
|---|---|
| IBlockPolicy<T> |
Tip
Declaration
public Block<T> Tip { get; }
Property Value
| Type | Description |
|---|---|
| Block<T> |
Transactions
All Transaction<T>s in the BlockChain<T> storage, including orphan Transaction<T>s. Keys are Ids and values are their corresponding Transaction<T>s.
Declaration
public IDictionary<TxId, Transaction<T>> Transactions { get; }
Property Value
| Type | Description |
|---|---|
| IDictionary<TxId, Transaction<T>> |
Methods
| Improve this Doc View SourceAppend(Block<T>)
Adds a block to the end of this chain.
Note that Render(IActionContext, IAccountStateDelta) methods of
all IAction objects that belong
to the block are called right after
the block is confirmed (and thus all states
reflect changes in the block).
Declaration
public void Append(Block<T> block)
Parameters
| Type | Name | Description |
|---|---|---|
| Block<T> | block | A next Block<T>, which is mined, to add. |
Exceptions
| Type | Condition |
|---|---|
| InvalidBlockException | Thrown when the given
|
| InvalidTxNonceException | Thrown when the Nonce is different from GetNextTxNonce(Address) result of the Signer. |
Append(Block<T>, DateTimeOffset)
Adds a block to the end of this chain.
Note that Render(IActionContext, IAccountStateDelta) methods of
all IAction objects that belong
to the block are called right after
the block is confirmed (and thus all states
reflect changes in the block).
Declaration
public void Append(Block<T> block, DateTimeOffset currentTime)
Parameters
| Type | Name | Description |
|---|---|---|
| Block<T> | block | A next Block<T>, which is mined, to add. |
| DateTimeOffset | currentTime | The current time. |
Exceptions
| Type | Condition |
|---|---|
| InvalidBlockException | Thrown when the given
|
| InvalidTxNonceException | Thrown when the Nonce is different from GetNextTxNonce(Address) result of the Signer. |
Finalize()
Declaration
protected void Finalize()
GetEnumerator()
Declaration
public IEnumerator<Block<T>> GetEnumerator()
Returns
| Type | Description |
|---|---|
| IEnumerator<Block<T>> |
GetNextTxNonce(Address)
Gets next Nonce of the address.
Declaration
public long GetNextTxNonce(Address address)
Parameters
| Type | Name | Description |
|---|---|---|
| Address | address |
Returns
| Type | Description |
|---|---|
| Int64 | The next Nonce value of the
|
GetStates(IEnumerable<Address>, Nullable<HashDigest<SHA256>>, Boolean)
Gets the state of the given addresses in the
BlockChain<T> from offset.
Declaration
public AddressStateMap GetStates(IEnumerable<Address> addresses, HashDigest<SHA256>? offset = default(HashDigest<SHA256>? ), bool completeStates = false)
Parameters
| Type | Name | Description |
|---|---|---|
| IEnumerable<Address> | addresses | The list of Addresses to get their states. |
| Nullable<HashDigest<SHA256>> | offset | The HashDigest<T> of the block to
start finding the state. It will be The tip of the
BlockChain<T> if it is |
| Boolean | completeStates | When the BlockChain<T> instance does not contain states dirty of the block which lastly updated states of a requested address, this option makes the incomplete states calculated and filled on the fly. If this option is turned off (which is default) this method throws IncompleteBlockStatesException instead for the same situation. Just-in-time calculation of states could take a long time so that the overall latency of an application may rise. |
Returns
| Type | Description |
|---|---|
| AddressStateMap | The AddressStateMap of given
|
Exceptions
| Type | Condition |
|---|---|
| IncompleteBlockStatesException | Thrown when
the BlockChain<T> instance does not contain
states dirty of the block which lastly updated states of a requested
address, because actions in the block have never been executed.
If |
MakeTransaction(PrivateKey, IEnumerable<T>, IImmutableSet<Address>, Nullable<DateTimeOffset>, Boolean)
Creates a new Transaction<T> and stage the transaction.
Declaration
public Transaction<T> MakeTransaction(PrivateKey privateKey, IEnumerable<T> actions, IImmutableSet<Address> updatedAddresses = null, DateTimeOffset? timestamp = default(DateTimeOffset? ), bool broadcast = true)
Parameters
| Type | Name | Description |
|---|---|---|
| PrivateKey | privateKey | A PrivateKey of the account who creates and signs a new transaction. |
| IEnumerable<T> | actions | A list of IActions to include to a new transaction. |
| IImmutableSet<Address> | updatedAddresses | Addresses whose states affected by
|
| Nullable<DateTimeOffset> | timestamp | The time this Transaction<T> is created and signed. |
| Boolean | broadcast | Whether to broadcast created transaction. |
Returns
| Type | Description |
|---|---|
| Transaction<T> | A created new Transaction<T> signed by the given
|
See Also
| Improve this Doc View SourceMineBlock(Address)
Declaration
public Block<T> MineBlock(Address miner)
Parameters
| Type | Name | Description |
|---|---|---|
| Address | miner |
Returns
| Type | Description |
|---|---|
| Block<T> |
MineBlock(Address, DateTimeOffset)
Declaration
public Block<T> MineBlock(Address miner, DateTimeOffset currentTime)
Parameters
| Type | Name | Description |
|---|---|---|
| Address | miner | |
| DateTimeOffset | currentTime |
Returns
| Type | Description |
|---|---|
| Block<T> |
StageTransactions(IDictionary<Transaction<T>, Boolean>)
Adds transactions to the pending list so that
a next Block<T> to be mined contains these
transactions.
Declaration
public void StageTransactions(IDictionary<Transaction<T>, bool> transactions)
Parameters
| Type | Name | Description |
|---|---|---|
| IDictionary<Transaction<T>, Boolean> | transactions | Transaction<T>s to add to the pending list. Keys are Transactionss and values are whether to broadcast. |
UnstageTransactions(ISet<Transaction<T>>)
Removes transactions from the pending list.
Declaration
public void UnstageTransactions(ISet<Transaction<T>> transactions)
Parameters
| Type | Name | Description |
|---|---|---|
| ISet<Transaction<T>> | transactions | Transaction<T>s to remove from the pending list. |
See Also
| Improve this Doc View SourceValidate(IReadOnlyList<Block<T>>, DateTimeOffset)
Declaration
public void Validate(IReadOnlyList<Block<T>> blocks, DateTimeOffset currentTime)
Parameters
| Type | Name | Description |
|---|---|---|
| IReadOnlyList<Block<T>> | blocks | |
| DateTimeOffset | currentTime |
Explicit Interface Implementations
| Improve this Doc View SourceIReadOnlyCollection<Block<T>>.Count
Declaration
int IReadOnlyCollection<Block<T>>.Count { get; }
Returns
| Type | Description |
|---|---|
| Int32 |
IEnumerable.GetEnumerator()
Declaration
IEnumerator IEnumerable.GetEnumerator()
Returns
| Type | Description |
|---|---|
| IEnumerator |