Libplanet 0.3.0
Released on May 31, 2019.
Backward-incompatible interface changes
- Added
IAction.Render(IActionContext, IAccountStateDelta)
method. [#31, #212] - Added
IAction.Unrender(IActionContext, IAccountStateDelta)
method. [#31, #212] BlockChain<T>.Validate()
method became to receive
IReadOnlyList<Block<<T>>
instead ofIEnumerable<Block<T>>
. [#205]IBlockPolicy<T>.GetNextBlockDifficulty()
method became to receiveIReadOnlyList<Block<<T>>
instead ofIEnumerable<Block<T>>
. [#205]- Added
IBlockPolicy<T>.ValidateNextBlock(IReadOnlyList<Block<T>>, Block<T>)
method. [#210] - Removed
IBlockPolicy<T>.ValidateBlocks()
method. [#210] BlockChain<T>[int]
became to throwArgumentOutOfRangeException
instead ofIndexOutOfRangeException
. [#210]- Removed
KeyEquals()
methods from all classes and structs. [#216] Swarm
class now does not implementIEquatable<Swarm>
anymore and itsEquals(object)
method andGetHashCode()
method became to have default behavior ofobject
class. [#216]- Also,
Swarm
class now does not implementIDisposable
too. ThusSwarm.Dispose()
was removed too. [#218] Swarm
became to use a queue to maintain internal messages. [#218]- The broadcasting methods are no more
async
, so they are renamed as below.Swarm.BroadcastBlocksAsync()
→Swarm.BroadcastBlocks()
Swarm.BroadcastTxsAsync()
→Swarm.BroadcastTxs()
- The broadcasting methods are no more
- The type of
Block<T>.Difficulty
is changed tolong
instead ofint
, and related classes method parameters and field types have changed accordingly. - Removed
HashDigest.HasLeadingZeroBits()
method. [#213] - The signature of
IStore.PutBlock<T>(Block<T>)
method was changed toPutBlock<T>(Block<T>, Address)
. [[#189], #197] Block<T>.Hash
is no longer calculated using the full data of theTransaction<T>
, but is calculated using only theTransaction<T>.Id
. [#234]- Added
IStore.LookupStateReference<T>(string, Address, Block<T>)
method. [#232] - Added
IStore.StoreStateReference<T>(string, Block<T>)
method. [#232] - Added
IStore.ForkStateReferences<T>(string, string, Block<T>, IImmutableSet<Address>
method. [#232] - Removed
Block<T>.Validate()
andBlock<T>.EvaluateActions()
method. [#243] - Added
Transaction<T>.Nonce
andRawTransaction.Nonce
properties. [#246] - Added
IStore.GetTxNonce(string, Address)
method. [#246] - Added
IStore.IncreaseTxNonce<T>(string, Block<T>)
method. [#246] - Added
IStore.ForkTxNonce<T>(string, string, Block<T>, IImmutableSet<Address>
method. [#246]
Added interfaces
BlockChain<T>
became to implementIReadOnlyList<Block<T>>
. [#205]- Added
Swarm.DifferentVersionPeerEncountered
event handler that can handle events when a different version of a peer is discovered. [[#167]], [#185] - Added
Peer.AppProtocolVersion
property. [#185] - Added
Swarm.PreloadAsync()
method to explicitly and preemptively download initial blocks beforeSwarm.StartAsync<T>()
being called. [#204], [#206] - Added
BlockDownloadState
class to represent a block downloading state. [#204], [#206] - Added
BlockPolicyExtension.ValidateBlocks<T>(IBlockPolicy<T>, IReadOnlyList<Block<T>>, DateTimeOffset)
method. [#210] - Added
Transaction<T>.EvaluateActionsGradually(HashDigest<SHA256>, long, IAccountStateDelta, Address, bool)
method. [#31, #212] - Added
Block<T>.EvaluateActionsPerTx(AccountStateGetter)
method. [#31, #212] - Added
HashDigest.Satisfies()
method. [#213] BlockPolicy<T>
constructor became to receive theminimumDifficulty
and the miningdifficultyBoundDivisor
. [#213]- Added
BlockChain<T>.UnstageTransactions()
method. [#223] Swarm
constructor became to receive alinger
(ormillisecondsLinger
) parameter. This purposes to determine how long to wait for pending messages when aSwarm
instance is requested to terminate.- Added
NamespaceNotFoundException
class. [#232] - Added
Block<T>.Evaluate()
method. [#243] - Made
InvalidBlockTimestampException
classpublic
so that it can be caught. [#133, #251] - Added
InvalidTxNonceException
class. [#246]
Behavioral changes
Swarm.StartAsync()
now receives the height of blocks (tipIndex
) from other known peers and synchronizes the blocks if necessary before propagating/receiving pinpointed recent blocks to prevent inefficient round-trips. [#187, #190]- The calculation algorithm of
BlockPolicy<T>.GetNextBlockDifficulty()
method was changed to the Ethereum Homestead algorithm except for the difficulty bomb. [#213] - The difficulty was changed from representing the number of leading zeros of target number to representing a divisor to obtain the target number. [#213]
BlockSet<T>[int]
changed so as not to validate a block. [#231]- Improved read performance of
Block<T>.Hash
andTransaction<T>.Id
. [#228, #234] Swarm.StartAsync()
now does not callSwarm.StopAsync()
anymore, thereforeSwarm.StopAsync()
should be explicitly called. [#236]Transaction<T>.EvaluateActionsGradually()
became to recordIAccountStateDelta.SetState()
calls even if its argument is the same to the previous state. [#241]Block<T>.Validate()
andBlock<T>.EvaluateActions()
are integrated intoBlock<T>.Evaluate()
. [#243]BlockChain<T>.Append()
became to executeAction.Execute()
only once per action in theBlock<T>
. [#243]BlockChain<T>.Append()
method became to throwInvalidTxNonceException
when theTransaction<T>.Nonce
does not correspond to itsSigner
's current nonce. [#246]Swarm
became to enforceForceDotNet.Force()
in AsyncIO while it's running on Mono runtime. [#247]
Bug fixes
- Fixed a bug that TURN relay had been disconnected when being connected for longer than 5 minutes. [#198]
- Fixed a bug that
Swarm
had attempted to use TURN relay even if thehost
argument was given. [#198] - Improved the read throughput of
BlockChain<T>.Append()
. - Improved overall read throughput of
BlockChain<T>
while blocks are being mined byBlockChain<T>.MineBlock()
. [#191] - Fixed a bug that
TurnClientException
had been thrown by Swarm when a STUN nonce is stale. [#193] - Fixed
BlockChain<T>.GetStates()
had descended to the bottom (i.e., the genesis block) where a givenAddress
refers to a nonexistent account (i.e., never used before). [[#189], #192] - Fixed a bug that a TURN connection had turned unavailable after it once failed to parse a message (due to a corrupted packet). [#215]
- Instead of validating the entire blocks,
BlockChain<T>.Append()
method became to validate only the next block to be appended. [#210] - Improved
BlockChain<T>.Fork()
performance by avoiding double validation of already validated blocks. [#215] - Removed unnecessary writer locks on
BlockChain<T>.StageTransactions()
. [#217] - Improved concurrency of
BlockChain<T>.Append()
method by removing unnecessary race conditions. [#217] - Fixed a bug that
Swarm
could not properly communicate withPeer
behind NAT. [#240] - Fixed a bug that
BlockChain<T>.FindNextHashes()
throwsArgumentOutOfRangeException
when chain is empty. - Fixed a bug that
TurnClient.AcceptRelayedStreamAsync()
didn't handle concurrent connections correctly. [#256]