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 |