Skip to content

Libplanet 0.4.0

Choose a tag to compare
@github-actions github-actions released this 08 Jul 13:06
· 8594 commits to main since this release

Released on July 8, 2019.

Backward-incompatible interface changes

  • Peer.AppProtocolVersion became nullable to represent Peer whose version is unknown. [#280]
  • Added IStore.ListAddresses() method. [#272, #285]
  • Added IStore.ListTxNonces() method. [#272, #309, #310]
  • Removed BlockChain<T>.GetNonce() method. [#294]
  • BlockChain<T>.StageTransactions became to receive IDictionary<Transaction<T>, bool> instead of ISet<Transaction<T>>. [#274, #297]
  • IStore.StageTransactionIds() method became to receive IDictionary<TxId, bool> instead of ISet<TxId>. [#274, #297]
  • IStore.IterateStagedTransactionIds() method became to receive bool toBroadcast which is whether to iterate only the TxId set to broadcast. [#274, #297]
  • Swarm<T>.StartAsync() method became to receive broadcastTxInterval (or millisecondsBroadcastTxInterval) parameter. [#274, #297]
  • IStore became to treat a "tx nonce" mere a long integer instead of a stack of block hashes. [#272, #307, #309, #310]
    • IStore.IncreaseTxNonce<T>(string, Block<T>) method was replaced by IStore.IncreaseTxNonce(string, Address, long) method.
    • Removed IStore.ForkTxNonce() method.
    • FileStore became to occupy fewer bytes for storing tx nonces. This change broke file-level backward compatibility.
  • IStore became possible to look up multiple state references in a stack. [#272, #307]
    • Removed IStore.LookupStateReference<T>() method. Instead, a newly added static class StoreExtension provides an extension method of the same name.
    • Added IStore.IterateStateReferences() method.
  • Swarm became to have type parameter T to represent an action type as like as BlockChain<T>. [#324]
  • Swarm<T> constructor became to receive BlockChain<T>. [#324]
  • Methods in Swarm<T> that had taken a parameter of BlockChain<T> type became to neither longer take BlockChain<T> nor a generic method. Because the Swarm<T> constructor takes it instead. [#324]
  • Swarm<T> does not implement ICollection<Peer> anymore. [#326]
  • Added IStore.DeleteNamespace() method. [#329]
  • Removed the id parameter from the BlockChain<T> constructor, and it became to automatically detect an appropriate BlockChain<T>.Id. [#279, #332]

Added interfaces

  • Added LiteDBStore backend that uses LiteDB under the hood. [#269]
  • All *Async() methods belonging to TurnClient class became to have cancellationToken option. [#287]
  • Added a Peer constructor omitting appProtocolVersion parameter to create a Peer whose version is unknown. [#280]
  • Added IncompleteBlockStatesException class. [#272, #285]
  • Added completeStates option to BlockChain<T>.GetStates() method. [#272, #285]
  • Added BlockChain<T>.MakeTransaction(PrivateKey, IEnumerable<T>, IImmutableSet<Address>, DateTimeOffset?) method. [#294]
  • Added BlockChain<T>.GetNextTxNonce() method which counts staged transactions too during nonce computation. [#270, #294]
  • Added StoreExtension static class. [#272, #307]

Behavioral changes

  • BlockChain<T>.GetStates() method became to throw IncompleteBlockStatesException if its Store lacks the states of a block that a requested address lastly updated. [#272, #285]
  • A message Swarm<T> makes became to have multiple blocks within it, which means round trips on the network are now much reduced. [#273, #276]
  • Message.Block has been replaced by Message.Blocks and the magic number has been changed to 0x0a. [#276]
  • Improved performance of Swarm<T>'s response time to GetBlockHashes request messages. [#277]
  • Added IPv6 support to Libplanet.Stun.StunAddress. [#267, #271]
  • IStore.GetBlockStates() became able to return null to represent an absence of states (i.e., incomplete states). [#272, #285]
  • Swarm<T> became to broadcast staged Transactions periodically so that game apps no more need to maintain their own thread to broadcast staged transactions. [#274, #297]
  • Previously, Swarm<T> had sent an empty GetTxs message when it receives an empty TxIds from peers, and it had made the network waste bandwidth for unnecessary messages. Swam<T> became to no more send such empty GetTxs. [#297]
  • BlockChain<T>.Swap() became to delete an index, tx nonces, and state references in the replaced chain. [#329]
  • Reduced the memory footprint of BlockChain<T>.FindBranchPoint() method under the circumstances that the height of the BlockChain<T> object is high. [#282, #299]

Bug fixes

  • Fixed a bug that Swarm<T> reported TaskCanceledException as an unknown exception while stopping. [#275]
  • Fixed a bug that Swarm<T> didn't stop properly during Swarm<T>.PreloadAsync(). [#275]
  • Fixed a bug where the oldest TxNonce of an address is not invalidated when forking using FileStore.ForkTxNonce() method. [#281]
  • Fixed a bug where LiteDBStore.GetTxNonce() method throws a System.IO.IOException after forking. [#281]
  • Fixed a bug that TurnClient had not stopped properly. [#287]
  • Fixed a bug that TurnClient had been trying to use an already closed connection. [#303, #308]
  • Fixed a bug that KeyNotFoundException had been thrown instead of ArgumentOutOfRangeException when Blockchain<T>[int] called while the index of a block that does not exist locally. [#208, #317]
  • Fixed a bug that Swarm<T> had not dial to other peer after Swarm<T>.PreloadAsync(). [#311]
  • Fixed an issue where unknown exceptions occurred when Swarm<T> receiving a message. [#321, #327]