Releases: planetarium/libplanet
Releases · planetarium/libplanet
Libplanet 0.18.0
Released on October 13, 2021.
Backward-incompatible API changes
Hashcash.Stamp(Nonce)
delegate's return type becameIEnumerable<byte[]>
(wasbyte[]
). [#1492]- Moved
BlockDigest
struct toLibplanet.Store
namespace (fromLibplanet.Blocks
namespace). [#1492] - Removed
Block<T>.ToBlockDigest()
method. UseBlockDigest.FromBlock<T>()
static method instead. [#1492] ActionEvaluator<T>.Evaluate()
method'sblock
parameter became to takeIPreEvaluationBlock<T>
(wasIBlock<T>
). [#1146, #1164, #1492]Block<T>
andBlockHeader
now guarantees that their every instance has integrity. [#1164, #1492]Block<T>
became unable to be subclassed.- Remove
Block<T>(long, long, BigInteger, Nonce, Address, BlockHash?, DateTimeOffset, IReadOnlyList<Transaction<T>>, HashAlgorithmType, HashDigest<SHA256>, ImmutableArray<byte>?, int)
overloaded constructor. Use other overloaded constructors instead. - Added
Block<T>(IBlockHeader header, IEnumerable<Transaction<T>>)
overloaded constructor. - Added
Block<T>(PreEvaluationBlock<T>, HashDigest<SHA256>, ImmutableArray<byte>?)
overloaded constructor. [#1457, #1507] BlockHeader
is no more readonly struct, but a sealed class.- Removed
BlockHeader(int, long, string, ImmutableArray<byte>, ImmutableArray<byte>, long, BigInteger, ImmutableArray<byte>, ImmutableArray<byte>, ImmutableArray<byte>, ImmutableArray<byte>, ImmutableArray<byte>)
constructor. Use other overloaded constructors instead. - Added
BlockHeader(PreEvaluationBlockHeader, HashDigest<SHA256>, ImmutableArray<byte>?)
overloaded constructor. [#1457, #1507] - Added
BlockHeader(PreEvaluationBlockHeader, HashDigest<SHA256>, ImmutableArray<byte>?, BlockHash)
overloaded constructor. [#1457, #1507]
Block<T>
andBlockHeader
have no more marshaling/unmarshaling methods.- Removed
Block<T>(Bencodex.Types.Dictionary)
overloaded constructor. UseBlockMarshaler.UnmarshalBlock()
static method instead. - Removed
Block<T>.Deserialize()
static method. Instead, useBlockMarshaler.UnmarshalBlock()
static method andBencodex.Codec
together. - Removed
Block<T>.ToBencodex()
method. UseBlockMarshaler.MarshalBlock()
static method instead. - Removed
Block<T>.Serialize()
method. Instead, useBlockMarshaler.MarshalBlock()
static method andBencodex.Codec
together. - Removed
BlockHeader(Bencodex.Types.Dictionary)
overloaded constructor. UseBlockMarshaler.UnmarshalBlockHeader()
static method instead. - Removed
BlockHeader.Deserialize()
static method. Instead, useBlockMarshaler.UnmarshalBlockHeader()
static method andBencodex.Codec
together. - Removed
BlockHeader.ToBencodex()
method. UseBlockMarshaler.MarshalBlockHeader()
static method instead. - Removed
BlockHeader.Serialize()
method. Instead, useBlockMarshaler.MarshalBlockHeader()
static method andBencodex.Codec
together.
- Removed
Block<T>
andBlockHeader
now guarantee that their every instance has itsStateRootHash
. [#1128, #1146, #1492]Block<T>.StateRootHash
property's type becameHashDigest<SHA256>
(wasHashDigest<SHA256>?
).- Removed
Block<T>(Block<T>, HashDigest<SHA256>)
overloaded constructor. UseBlock<T>(PreEvaluationBlock<T>, HashDigest<SHA256>)
overloaded constructor instead. - Removed
Block<T>.Mine()
static method. UseBlockContent<T>.Mine()
andPreEvaluationBlock<T>.Evaluate()
methods instead. BlockHeader.StateRootHash
property's type becameHashDigest<SHA256>
(wasHashDigest<SHA256>?
).- The type of
InvalidBlockStateRootHashException()
constructor'sexpectedStateRootHash
parameter becameHashDigest<SHA256>
(wasHashDigest<SHA256>?
). [#1507] InvalidBlockStateRootHashException.ExpectedStateRootHash
property's type becameHashDigest<SHA256>
(wasHashDigest<SHA256>?
). [#1507]
Block<T>
andBlockHeader
became aware ofHashAlgorithmType
used for proof-of-work mining. [#1492]- Added
Block<T>.HashAlgorithm
property. - Added
BlockHeader.HashAlgorithm
property. - Removed
BlockHeader(int, long, DateTimeOffset, Nonce, Address, long, BigInteger, BlockHash?, HashDigest<SHA256>?, BlockHash, ImmutableArray<byte>, HashDigest<SHA256>?)
constructor. UseBlockHeader(int, long, DateTimeOffset, Nonce, Address, long, BigInteger, BlockHash?, HashDigest<SHA256>?, BlockHash, ImmutableArray<byte>, HashDigest<SHA256>, HashAlgorithmType)
constructor instead. - Added
HashAlgorithmGetter hashAlgorithmGetter
parameter toIStore.GetBlock<T>()
method. - Removed
BlockDigest.Header
property. UseBlockDigest.GetHeader()
method instead. - Added
BlockDigest.GetHeader()
method. - Added
HashAlgorithmGetter hashAlgorithmGetter
parameter toDelayedRenderer<T>()
constructor. - Added
HashAlgorithmGetter hashAlgorithmGetter
parameter toDelayedActionRenderer<T>()
constructor. - Added
DelayedRenderer<T>.HashAlgorithmGetter
property.
- Added
- Blocks became signed by the miner since the protocol version 2. [#1457, #1507]
- Added
Block<T>(PreEvaluationBlock<T>, HashDigest<SHA256>, ImmutableArray<byte>?)
overloaded constructor. [#1164, #1492] - Added
BlockHeader(PreEvaluationBlockHeader, HashDigest<SHA256>, ImmutableArray<byte>?)
overloaded constructor. [#1164, #1492] - Added
BlockHeader(PreEvaluationBlockHeader, HashDigest<SHA256>, ImmutableArray<byte>?, BlockHash)
overloaded constructor. [#1164, #1492] - Added
Block<T>.Signature
property. - Added
Block<T>.PublicKey
property. - Added
BlockHeader.Signature
property. - Added
BlockHeader.PublicKey
property. - Added
InvalidBlockPublicKeyException
class. - Added
InvalidBlockSignatureException
class.
- Added
IStateStore
now requires implementations to be trie. [#1128, #1146, #1492]- Added
IStateStore.GetStateRoot()
method. - Added
IStateStore.PruneStates()
method. - Removed
IStateStore.SetStates<T>()
method. - Removed
IStateStore.GetState()
method. - Removed
IStateStore.ContainsBlockStates()
method. - Removed
IStateStore.ForkStates<T>()
method.
- Added
TrieStateStore
no more stores associations betweenBlock<T>.Hash
/Block<T>.PreEvaluationHash
andBlock<T>.StateRootHash
, becauseBlock<T>.StateRootHash
became mandatory. [#1128, #1146, #1492]- Added
ITrie.Recorded
property. - Removed
IKeyValueStore stateHashKeyValueStore
parameter fromTrieStateStore()
constructor. - Removed
TrieStateStore.GetTrie()
method. - Removed
TrieStateStore.GetRootHash()
method. - Replaced
TrieStateStore.PruneStates(IImmutableSet<BlockHash>)
method withTrieStateStore.PruneStates(IImmutableSet<HashDigest<SHA256>>)
method.
- Added
- The types of
BlockChain<T>.MineBlock()
overloaded methods'miner
parameter becamePrivateKey
(wereAddress
). [#1457, #1507]
Backward-incompatible network protocol changes
- The
Block<T>.CurrentProtocolVersion
is bumped from 1 to 2: [#1507]- Block's total difficulty value became included to the input of block hashes and pre-evaluation hashes since the protocol version 2.
- Blocks became to have miner's public key as well since the protocol version 2. [#1457]
- Blocks became to have no miner's address since the protocol version 2, because it can be derived from miner's public key. [#1457]
- Blocks became to have a signature made using miner's private key since the protocol version 2. Block signatures affect block hashes. [#1457]
Added APIs
- Added `Bl...
Libplanet 0.17.0
Released on September 28, 2021.
Backward-incompatible API changes
- Added
StateCompleterSet<T>.ComplementAll
property. [#1358, #1386] - Added
StateCompleterSet<T>.ComplementLatest
property. [#1358, #1386] BlockPerception
now implementsIBlockExcerpt
interface. [#1440]BlockPerception.Excerpt
property removed.
TotalDifficultyComparer
now implementsIComparer<IBlockExcerpt>
interface. [#1442]- Return type for
BlockDemandTable.Add()
is nowvoid
. [#1435, #1443] - Added
BlockInsufficientTxsException
. [#1445] PrivateKey()
constructor's parameter type becameIReadOnlyList<byte>
(wasbyte[]
). [#1464]PrivateKey.ByteArray
property's type becameImmutableArray<byte>
(wasbyte[]
). To get a mutable one, usePrivateKey.ToByteArray()
method instead. [#1464]PublicKey()
constructor's parameter type becameIReadOnlyList<byte>
(wasbyte[]
). [#1464]PublicKey.Verify()
method's both parameter types becameIReadOnlyList<byte>
(were bothbyte[]
). [#1464]HashDigest<T>.DeriveFrom()
method's parameter type becameIReadOnlyList<byte>
(wasbyte[]
). [#1464]IBlockPolicy<T>.GetMaxBlockBytes()
description changed for0
and negative values. [#1449, #1463]- Returned values from these will now be taken literally by
BlockChain<T>
.
- Returned values from these will now be taken literally by
- Removed
IBlockPolicy<T>.MaxTransactionsPerBlock
property. It is replaced byIBlockPolicy<T>.GetMaxTransactionsPerBlock(long index)
method. [#1447] - Added
IBlockPolicy<T>.GetMaxTransactionsPerBlock(long index)
method. [#1447] - Added
IBlockPolicy<T>.GetMinTransactionsPerBlock(long index)
method. [#1479] - Added
IBlockPolicy<T>.GetMaxTransactionsPerSignerPerBlock(long index)
method. [#1449, #1463] - Unused parameter
currentTime
removed fromBlockChain<T>.Append()
. [#1462, #1465] - Added an optional
maxTransactionsPerSigner
parameter toBlockChain<T>.MineBlock()
method. [#1449, #1463] - Added an optional
txPriority
parameter toBlockChain<T>.MineBlock()
method. [#1477] BlockHeader
's properties are now represented as richer types than before. [#1470]BlockHeader.Timestamp
property's type becameDateTimeOffset
(wasstring
).BlockHeader.Nonce
property's type becameNonce
(wasImmutableArray<byte>
).BlockHeader.Miner
property's type becameAddress
(wasImmutableArray<byte>
).BlockHeader.PreviousHash
property's type becameBlockHash?
(wasImmutableArray<byte>
).BlockHeader.TxHash
property's type becameHashDigest<SHA256>?
(wasImmutableArray<byte>
).BlockHeader.Hash
property's type becameBlockHash
(wasImmutableArray<byte>
).BlockHeader.StateRootHash
property's type becameHashDigest<SHA256>?
(wasImmutableArray<byte>
).- Removed
BlockHeader(int, long, string, ImmutableArray<byte>, ImmutableArray<byte>, long, BigInteger, ImmutableArray<byte>, ImmutableArray<byte>, ImmutableArray<byte>, ImmutableArray<byte>, ImmutableArray<byte>)
constructor. UseBlockHeader(int, long, DateTimeOffset, Nonce, Address, long, BigInteger, BlockHash?, HashDigest<SHA256>?, BlockHash, ImmutableArray<byte>, HashDigest<SHA256>?)
constructor instead.
IStore
,IStateStore
, andIKeyValueStore
interfaces now inheritIDisposable
. [#1448, #1474]- Multiple changes for
IBlockPolicy<T>
interface. [#1485]bool DoesTransactionFollowsPolicy(BlockChain<T>, Transaction<T>)
changed toTxPolicyViolationException? ValidateNextBlockTx( BlockChain<T>, Transaction<T>)
.InvalidBlockException ValidateNextBlock(BlockChain<T>, Block<T>)
changed toBlockPolicyViolationException? ValidateNextBlock( BlockChain<T>, Block<T>)
.BlockPolicy<T>
, the default implementation forIBlockPolicy<T>
, has been updated accordingly.
- Removed
BlockPolicy<T>()
constructor withint blockIntervalMilliseconds
parameter. Use the one withTimeSpan? blockInterval
instead. [#1485] - Replaced
int maxBlockBytes
andint maxGenesisBytes
parameters fromBlockPolicy<T>()
constructor withFunc<long, int>? getMaxBlockBytes
. [#1485] - Removed
TxViolatingBlockPolicyException
class. [#1485] - Optional parameter name
difficultyBoundDivisor
forBlockPolicy<T>()
constructor changed todifficultyStability
. [#1495] - Type for optional parameter
difficultyStability
forBlockPolicy<T>()
constructor changed tolong?
fromint?
. [#1495]
Backward-incompatible network protocol changes
Message
became to serialize peer with Bencodex instead ofBinaryFormatter
. [#1455]
Added APIs
IBlockExcerpt.ExcerptEquals
extension method added. [#1440]- Added
PrivateKey.FromString()
method. [#1475] - Added
PrivateKey.Sign(ImmutableArray<byte>)
overloaded method. [#1464] - Added
PrivateKey.Decrypt(ImmutableArray<byte>)
overloaded method. [#1464] - Added
PrivateKey.ToByteArray()
method. [#1464] - Added
PublicKey.Encrypt(ImmutableArray<byte>)
overloaded method. [#1464] - Added
PublicKey.ToImmutableArray()
method. [#1464] - Added
Nonce(ImmutableArray<byte>)
overloaded constructor. [#1464] - Added
HashAlgorithmType.Digest(IEnumerable<byte[]>)
overloaded method. [#1480] - Added
HashAlgorithmType.Digest(IEnumerable<ImmutableArray<byte>>)
overloaded method. [#1480] - Added
BlockHeader(int, long, DateTimeOffset, Nonce, Address, long, BigInteger, BlockHash?, HashDigest<SHA256>?, BlockHash, ImmutableArray<byte>, HashDigest<SHA256>?)
constructor. [#1470] - Added
TxCompletion<TPeer, TAction>
class. [#1420, #1478] - Added
BlockPolicyViolationException
andTxPolicyViolationException
classes. [#1485] - Added
DifficultyAdjustment
static class. [#1495] - Added
BlockPolicy<T>.DifficultyStability
andBlockPolicy<T>.MinimumDifficulty
properties. [#1495]
Behavioral changes
StateCompleterSet<T>.Recalculate
now evaluates states even for those already inIStateStore
. Moreover, it also terminates early if possible after reaching theBlockHash
provided with a call. [#1358, #1386]TotalDifficultyComparer
no longer considers perceived time when comparingIBlockExcerpt
s. [#1442]- General logic for determining the canonical chain has been updated. [#1435, #1443]
- Perceived time is only used for marking a received header in
BlockDemandTable
in order to decide whetherBlockDemand
is stale or not. This should prevent a tip regression for a local node, as the tip of a chain is never considered as stale.
- Perceived time is only used for marking a received header in
- Block sync using
BlockDemand
became not to fill blocks from multiple peers. [#1459] - `BlockCha...
Libplanet 0.15.4
Released on September 14, 2021.
- Fixed a bug where
BlockChain<T>.MineBlock()
had created a block that includes both transactions when there are two or more transactions with the same nonce on the stage. [#1491]
Libplanet 0.15.3
Released on September 10, 2021.
- Fixed a bug where
Swarm<T>
fails to reply transaction when any of the requested transactions id inGetTxs
message does not exist in the storage. [#1481]
Libplanet 0.15.1
Released on August 28, 2021.
NetMQTransport
became to process message in non blocking way. [#1451]
Libplanet 0.16.0
Released on August 25, 2021.
Backward-incompatible API changes
- Removed
Swarm<T>.BlockDemand
property. [#1419, #1425] BlockChain<T>.Tip
property is now non-nullable. [#1430]
Added APIs
- Added
BlockDemandTable<T>
class. [#1419, #1425] - Added
Swarm<T>.BlockDemandTable
property. [#1419, #1425] - Added
SwarmOptions.PollInterval
property. [#1419, #1425] - Added
SwarmOptions.MaximumPollPeers
property. [#1419, #1425]
Behavioral changes
Bug fixes
- Fixed a bug where
Swarm<T>.PreloadAsync()
failed to sync blocks from the peer that has chain with higher difficulty, but lower index. [#1419, #1425]
CLI tools
Libplanet 0.15.0
Libplanet 0.14.1
Released on Aug 18, 2021.
- Added additional tags to logging. [#1433]