Libplanet 0.7.0
Released on November 8, 2019.
Backward-incompatible interface changes
- Renamed
minValue
/maxValue
parameters tolowerBound
/upperBound
ofIRandom.Next()
methods. [#555, #558] - Renamed
IStore.IterateIndex()
method toIterateIndexes()
. [#462, #560] Swarm<T>
class became to implementIDisposable
again and should be disposed to clean up its internal resources. [#485]IStore.IterateStateReferences()
method became to receivehighestIndex
,lowestIndex
, andlimit
parameters. [#447, #545]- Reworked
BlockChain<T>.GetStates()
intoGetState()
which takes only oneAddress
instead ofIEnumerable<Address>
. [#510, #563] - Types of
IAction.PlainValue
and states became restricted toBencodex.Types.IValue
. [#541, #552]IAction.LoadPlainValue(IImmutableDictionary<string, object>)
method became replaced byLoadPlainValue(IValue)
.AccountStateGetter
became to returnIValue
, notobject
.- Added
BencodexExtension
static class.
- Removed
BlockChain<T>.Blocks
. [#409, #583] - Removed
BlockChain<T>.Transactions
. [#409, #583] - Removed the
linger
parameter from theSwarm<T>()
constructor, and added thewaitFor
parameter toSwarm<T>.StopAsync()
method instead. [#581] - Removed the
dialTimeout
parameter from theSwarm<T>
() constructor, and added it toSwarm<T>.PreloadAsync()
&Swarm<T>.StartAsync()
methods. [#581] - Removed
broadcast
parameter fromBlockChain<T>.MakeTransaction()
method. [#609] BlockChain<T>
does not implementIReadOnlyList<T>
anymore. [#630]- Added
BlockChain<T>.Count
property. [#630] - Removed
BlockChain<T>.LongCount()
method. [#630] - Removed
BlockChain<T>.Validate()
method. [#630] - Removed
BlockChain<T>.GetEnumerate()
method. [#630] - Removed
BlockPolicyExtension.ValidateBlocks()
method. [#630] IBlockPolicy<T>.GetNextBlockDifficulty()
method became to receiveBlockChain<T>
instead ofIReadOnlyList<Block<<T>>
. [#630]IBlockPolicy<T>.ValidateNextBlock()
method became to receiveBlockChain<T>
instead ofIReadOnlyList<Block<<T>>
. [#630]
- Added
Added interfaces
- Added
ProtectedPrivateKey
class. [#577, #614] - Added
IncorrectPassphraseException
class. [#577, #614] - Added
MismatchedAddressException
class. [#577, #614] - Added
KeyJsonException
abstract class. [#577, #614] - Added
InvalidKeyJsonException
class. [#577, #614] - Added
UnsupportedKeyJsonException
class. [#577, #614] - Added
ICipher
interface. [#577, #614] - Added
Aes128Ctr
class. [#577, #614] - Added
IKdf
interface. [#577, #614] - Added
Pbkdf2
class. [#577, #614] - Added
Scrypt
class. [#642, #654] - Added
BlockChain<T>.LongCount()
method. [#575] - Added
BlockChain<T>[HashDigest<T>]
indexer. [#409, #583] - Added
BlockChain<T>.Contains(HashDigest<T>)
method. [#409, #583] - Added
BlockChain<T>.GetTransaction(TxId)
method. [#409, #583] - Added
BlockChain<T>.Contains(TxId)
method. [#409, #583] - Added
ByteUtil.Hex(ImmutableArray<byte>)
overloaded method. [#614] - Added
BlockChain<T>.Contains(Block<T>)
method. [#630] - Added
BlockDownloadState.SourcePeer
property. [#636]
Behavioral changes
- Changed to send
Pong
before updating the message sender to the routing table whenPing
is received. [#566] - Improved performance of
StoreExtension.LookupStateReference<T>()
method. [#447, #545] - Added .NET Core 2.2 as a targeted framework. [#209, #561]
TurnClient.AcceptRelayedStreamAsync()
became to ignore disconnected connections. [#469]Swarm<T>.PreloadAsync()
became to ignore peers with lower tip. [#592]Swarm<T>
became to validate only stale peers. [#568, #593]Swarm<T>
became not to check cached peers immediately after removing peers from its routing table. Instead, it checks cached peers periodically. [#608]- Marked
Address
andHashDigest
as readonly. [#610] IceServer.CreateTurnClient()
became to throwArgumentException
when received invalid url. [#622]Swarm<T>
became to update peer table when receiving messages that are not related with Kademlia protocol. [#594, #627]Swarm<T>
became not to check least recently used peer every time when new peer is fetched. [#627]IAction
became guaranteed that the givenIActionContext.PreviousStates.GetState()
never throwsIncompleteBlockStatesException
. Instead, now it may calculate the incomplete states from the beginning if necessary. [#645]IStore.PutBlock<T>()
became to do nothing when it takes theBlock<T>
more than once. [#647]Swarm<T>.PreloadAsync()
became to try downloading blocks from all neighbor peers, even if any peer among them is unavailable to send blocks. [#636]
Bug fixes
- Fixed a bug where
Swarm<T>
had tried to update a peer infinitely when the peer is evicted from its table. [#566] - Fixed a bug where
Swarm<T>.AppendBlocksAsync()
re-requests blocks that already received when blockchain is empty. [#550, #562] - Fixed a bug that
Swarm<T>
had thrownSocketException
with a messageOperation on non-blocking socket would block
. [#405, #485] - Fixed a bug that accessed all blocks from the genesis block when a swap occurred. [#575]
- Fixed a bug that
Swarm<T>
had thrownInvalidBlockIndexException
during synchronizing with other reorganized peer. [#528, #576] - Fixed a bug where
Swarm<T>
does not render actions in blocks which are filled from other peers. [#579] - Fixed a bug where
Swarm<T>
renders actions in same block multiple times when reorg happens. [#579] LiteDBStore
became to guarantee atomicity of storing blocks. [#584]- Fixed a bug that
BlockChain<T>
had appended a block even if fails to evaluate. [#591] - Fixed a bug where
Swarm<T>
hadn't removed stale peers. [#568, #593, #602] - Fixed a bug that
TurnClient
had thrownIOException
when accepting connection through a TURN relay server. [#453, #599] - Fixed a bug that
KeyNotFoundException
occurred when sending a message through the TurnClient. - Fixed a bug where
BlockChain<T>.GetNextTxNonce
only returned the same nonce when transactions with an old nonce were staged. [#637] - Fixed a bug that
BlockChain<T>
had reset whenSwarm<T>.PreloadAsync()
fails. [#644] - Fixed bug that whole processes could halt when received an invalid type of message. [#628, #641]
- Fixed a bug that received blocks could not be processed if a branch point is a stale block. [#655]