Releases: limebell/libplanet
Releases · limebell/libplanet
Libplanet 0.10.0
Released on October 27, 2020.
Backward-incompatible API changes
- Extracted rendering methods from
IActiontoIRenderer<T>, which is introduced in this version. From now on, rendering logic needs to be injected from outside throughBlockChain<T>.Renderers, rather thanIActions knowing how to render themselves.IRenderer<T>also unifiedBlockChain<T>.TipChangedevent, and introduced new events likeIActionRenderer<T>.RenderActionError(),IActionRenderer<T>.RenderBlockEnd(),IRenderer<T>.RenderReorg(), andIRenderer<T>.RenderReorgEnd(). [#860, #875, #959, #963]- Removed
IAction.Render()method, which was replaced byIActionRenderer<T>.RenderAction(). - Removed
IAction.Unrender()method, which was replaced byIActionRenderer<T>.UnrenderAction(). - Removed
BlockChain<T>.TipChangedevent, which was replaced byIRenderer<T>.RenderBlock(). - Removed
PolymorphicAction<T>.Render()andUnrender()methods. - Removed
BlockChain<T>.TipChangedEventArgsclass.
- Removed
- Added methods related fungible asset states to
IAccountStateDelta: [#861, #900, #954]UpdatedFungibleAssetsAccountspropertyMintAsset(Address, Currency, BigInteger)methodTransferAsset(Address, Address, Currency, BigInteger)methodBurnAsset(Address, Currency, BigInteger)methodGetBalance(Address, Currency)method
- Added
IAccountStateDelta.StateUpdatedAddressesproperty in order to distinguish state updates from asset states. [#861, #900] - Added an optional parameter
AccountBalanceGetter accountBalanceGettertoBlock<T>.EvaluateActionsPerTx()method. [#861, #900] BlockChain<T>.StageTransaction()became to throwInvalidTxGenesisHashExceptionwhen it takes aTransaction<T>from a heterogeneousBlockChain<T>with a different genesis block. [#796, #878]- Added
renderersoptional parameter toBlockChain<T>()constructor. [#883, #959, #963] - Added
BigInteger-typedtotalDifficultyparameter toBlock<T>()constructor. [#666, #917] - Added
BigInteger-typedpreviousTotalDifficultyparameter toBlock<T>.Mine()static method. [#666, #917] - Added
optionsoptional parameter toSwarm<T>()constructor. [#926] ICryptoBackendbecame toICryptoBackend<T>. [#932]ICryptoBackend.Verify(HashDigest<SHA256>, byte[], PublicKey)became toICryptoBackend<T>.Verify(HashDigest<T>, byte[], PublicKey)[#932]- Added
ICryptoBackend<T>.Sign(HashDigest<T>, PrivateKey)method. [#932] DefaultCryptoBackendbecame toDefaultCryptoBackend<T>. [#932]- Added
ImmutableArray<byte>-typedpreEvaluationHashparameter toBlockHeaderconstructor. [#931, #935] - Added
HashDigest<SHA256>-typedpreEvaluationHashparameter toBlock<T>()constructor. [#931, #935] - Replaced
SerializationInfoExtensions.GetValueOrDefault<T>()toSerializationInfoExtensions.TryGetValue<T>(). [#940] - Added
bool append = trueoption to bothBlockChain<T>.MineBlock()overloaded methods. Although this breaks ABI-level backward compatibility (i.e., you need to rebuild your assemblies), still is backward-compatible at API-level as the option is turned on by default. [#946] - Added
int? maxTransactionsoption to bothBlockChain<T>.MineBlock()overloaded methods. Although this breaks ABI-level backward compatibility (i.e., you need to rebuild your assemblies), still is backward-compatible at API-level as the option is turned on by default. [#1037, #1039, #1050] - Added
StateCompleterSet<T>? stateCompletersoption to twoBlockChain<T>.Append()overloaded methods. Although this breaks ABI-level backward compatibility (i.e., you need to rebuild your assemblies), still is backward-compatible at API-level as the option has the default value (StateCompleterSet<T>.Recalculate). [#946] - Added
CancellationToken cancellationToken = default(CancellationToken)option toBlockChain<T>.MineBlock(Address miner)overloaded method. Although this breaks ABI-level backward compatibility (i.e., you need to rebuild your assemblies), still is backward-compatible at API-level as the option has the default value. [#946] - Added
IImmutableSet<Address> trustedStateValidators = nulloption to bothSwarm<T>.StartAsync()overloaded methods. Although this breaks ABI-level backward compatibility (i.e., you need to rebuild your assemblies), still is backward-compatible at API-level as the option is turned on by default. [#946] - Removed
Peer.AppProtocolVersionproperty. [#949] - Removed
Peer.IsCompatibleWith()method. [#949] - Replaced
Peer(PublicKey, AppProtocolVersion)constructor withPeer(PublicKey)constructor. [#949] - Replaced
BoundPeer(PublicKey, DnsEndPoint, AppProtocolVersion)constructor withPeer(PublicKey, DnsEndPoint)constructor. [#949] - Extracted
IStore's some methods dedicated to block states intoIBlockStatesStore. [#950]ListStateKeys()method.ListAllStateReferences()method.LookupStateReference()method.IterateStateReferences()method.StoreStateReference()method.ForkStateReferences()method.GetBlockStates()method.SetBlockStates()method.PruneBlockStates()method.
- The signature of
IStore.LookupStateReference<T>(Guid, string, Block<T>)method was changed toLookupStateReference(Guid, string, long). [#950] - Added
IStateStore-typedstateStoretoBlockChain<T>constructor. [#950] - Replaced
Swarm<T>.FindSpecificPeerAsync(Address, Address, int, BoundPeer, TimeSpan?, CancellationToken)method withSwarm<T>.FindSpecificPeerAsync(Address, int, TimeSpan?, CancellationToken). [#981] - Added
IActionContext.GetUnconsumedContext()method. [#980] - Added
ImmutableArray<byte>-typedstateRootHashparameter toBlockHeaderconstructor. [#986] - Added
HashDigest<SHA256>-typedstateRootHashparameter toBlock<T>()constructor. [#986] - Added
IBlockPolicy<T>.MaxTransactionsPerBlockproperty. [#1037, #1050] - Added
IBlockPolicy<T>.GetMaxBlockBytes()method. [#201, #1050] IBlockPolicy<T>.DoesTransactionFollowPolicy()method became to take additionalBlockChain<T>parameter as its context. [#1012]- Methods in
BlockPolicy<T>class becamevirtual. [#1010] - Added
int maxTransactionsPerBlockoption to bothBlockPolicy<T>()overloaded constructors. [#1037, #1050] - Added
int maxBlockBytesandint maxGenesisBytesoptions to bothBlockPolicy<T>()overloaded constructors. [#201, #1050] BlockPolicy<T>()constructor'sdoesTransactionFollowPolicyparameter became `Func<Transaction, BlockChain...
Libplanet 0.9.5
Libplanet 0.9.4
Released on June 2, 2020.
- (Libplanet.RocksDBStore) Fixed a bug that
RocksDBStore.DeleteChainId()method had thrownKeyNotFoundExceptionwhen there's no such chain ID. [#891] - (Libplanet.RocksDBStore) Fixed a bug that
RocksDBStorehad written logs into the incorrect contextDefaultContext, notRocksDBStorethe correct one. [#891]
Libplanet 0.9.3
Libplanet 0.9.2
Released on May 20, 2020.
- (Libplanet.RocksDBStore) Fixed a memory leak bug in
RocksDBStore. [#870]
Libplanet 0.9.1
Libplanet 0.9.0
Released on April 27, 2020.
Backward-incompatible API changes
BaseStoreclass became to implementIDisposable. [#789]- Removed
IStore.DeleteIndex(Guid, HashDigest<SHA256>)method. [#802] - Extension classes was renamed. However, it would not be affected if you have called it by using instance method syntax. [#803]
- Renamed
StunAddressExtensionclass toStunAddressExtensions. - Renamed
BytesConvertExtensionclass toBytesConvertExtensions. - Renamed
RandomExtensionclass toRandomExtensions. - Renamed
AddressExtensionclass toAddressExtensions. - Renamed
HashDigestExtensionclass toHashDigestExtensions. - Renamed
NetMQFrameExtensionclass toNetMQFrameExtensions. - Renamed
NetMQSocketExtensionclass toNetMQSocketExtensions. - Renamed
SerializationInfoExtensionclass toSerializationInfoExtensions. - Renamed
StoreExtensionclass toStoreExtensions.
- Renamed
- All parameters, fields, property, and method return values that had been represented as an
Int32became retyped toAppProtocolVersion. [#266, #815]Swarm()constructor's parameterappProtocolVersionbecameAppProtocolVersion(wasInt32).Peer()andBoundPeer()constructors' parameterappProtocolVersionbecameAppProtocolVersion(wasInt32).Peer.AppProtocolVersionproperty becameAppProtocolVersion(wasInt32).DifferentProtocolVersionEventArgs.ExpectedVersionandDifferentProtocolVersionEventArgs.ActualVersionproperties becameAppProtocolVersion(wasInt32).- Removed
DifferentAppProtocolVersionExceptionclass.
Swarm()constructor'sEventHandler<DifferentProtocolVersionEventArgs> differentVersionPeerEncountered = nullparameter became replaced byDifferentAppProtocolVersionEncountered differentAppProtocolVersionEncountered = nullparameter. [#266, #815]- Added
IEnumerable<PublicKey> trustedAppProtocolVersionSigners = nullparameter toSwarm()constructor. [#266, #815] - Removed
DifferentProtocolVersionEventArgsclass. [#266, #815] - Removed
createdAtparameter fromSwarm()constructor. [#838] - Replaced
BlockChain<T>.StageTransactions()with.StageTransaction()that receives only one transaction. [#820] - Replaced
BlockChain<T>.UnstageTransactions()with.UnstageTransaction()that receives only one transaction. [#820] - Added
IBlockPolicy.DoesTransactionFollowPolicy()method which is a method to determine if a transaction follows the block policy. [#827]
Backward-incompatible network protocol changes
- The existing
BlockHashesmessage type (with the type number0x05) was replaced by a newBlockHashesmessage type (with type number0x0e) in order to include an offset block index besides block hashes so that a receiver is able to determine their block indices too. [#707, #798] Peerbecame to have 3 more fields to represent the whole fields ofAppProtocolVersion, which is newly introduced. [#266, #815]- The existing
RecentStatesmessage type (with the type number0x0c) was replaced by a newRecentStatesmessage type (with type number0x0f) in order to compress its states. [#700, #850]
Backward-incompatible storage format changes
Added APIs
- Added
AddressExtensions.ToAddress(this PrivateKey)overloaded extension method. [#825] - Added
BlockHashDownloadStateclass, a subclass ofPreloadState. [#707, #798] - Added
BlockVerificationStateclass, a subclass ofPreloadState. [#798] - Added
AppProtocolVersionstruct. [#266, #815] - Added
IKeyStoreinterface. [#831] - Added
Web3KeyStoreclass. [#831] - Added
BlockDigeststruct. [#785] - Added
BlockHeaderstruct. [#785] - Added
IStore.GetBlockDigest(HashDigest<SHA256>)method. [#785] - Added
Block<T>.ToBlockDigest()method. [#785] - Added
ByteArrayExtensionsclass. [#803] - Added
IStore.PruneBlockStates<T>(Guid, Block<T>)method. [#790] - Added
DifferentAppProtocolVersionEncountereddelegate. [#266, #815] - Added
Swarm<T>.TrustedAppProtocolVersionSignersproperty. [#266, #815] - Added
Peer.IsCompatibleWith()method. [#266, #815] - Added
TxViolatingBlockPolicyExceptionclass. [#827] - Added
KeyStoreExceptionclass. [#831] - Added
NoKeyExceptionclass. [#831]
Behavioral changes
BlockChain.MineBlock()method became to ignore transactions having lower nonce than the expected nonce in the chain. [#791]Swarm<T>.PreloadAsync()andSwarm<T>.StartAsync()became to download only a list of block hashes first and then download blocks from simultaneously multiple peers. [#707, #798]- Improved performance of
Swarm<T>by preventing unnecessary task creation. [#817, #837] - Improved performance of
Swarm<T>.PreloadAsync()by parallelizing connections. [#846] - Improved response throughput of
Swarm<T>. [#849]
Bug fixes
Swarm<T>became not to sync the sameBlock<T>s orTransaction<T>s multiple times. [#784]- Fixed a
Swarm<T>'s bug that had broadcasted a message to its source peer when the number of peers is not enough (less than the minimum number). [#788] - Fixed a bug where
BlockChain.MineBlock()had produced an invalid block when there is any staged transaction which has lower nonce than the expected nonce, that means, shares an already taken nonce by the same signer. [#791] - Fixed a
Swarm<T>.PreloadAsync()method's bug that temporary chain IDs in the store had been completely cleaned up in some corner cases ifcancellationTokenwas requested. [#798] - Fixed a bug where
Swarm<T>had crashed if it received invalidTransaction<T>from the nodes. [#820] - Fixed a bug where
Swarm<T>hadn't reportedIProgress<PreloadState>s correctly.[#839] - Fixed a
Swarm<T>.PreloadAsync()method's bug that it had hung forever when a block failed to be fetched due to an unexpected inner exception. [#839] - Fixed a bug where actions had been evaluated twice when receiving blocks. [#843, #844]
- Fixed
OverflowExceptionbeing thrown when apassphrasecontaining any non-ASCII characters was passed toPbkdf2.Derive()method orProtectedPrivateKey.Protect()method. [#845]
CLI tools
- Added the
planetcommand and its aliasdotnet planet.
Libplanet 0.8.0
Released on February 4, 2020.
Backward-incompatible API changes
- The internal representation for state keys became
string(wasAddress). [#368, #774]- The return type of
IStore.GetBlockStates()method becameIImmutableDictionary<string, IValue>(wasAddressStateMap, which was removed too). [#368, #774] - The type of the second parameter of
IStore.SetBlockStates()method becameIImmutableDictionary<string, IValue>(wasAddressStateMap, which was removed too). [#368, #774] - The second parameter of
IStore.IterateStateReferences()method becamestring key(wasAddress address). [#368, #774] - The second parameter of
IStore.StoreStateReference()method becameIImmutableSet<string> keys(wasIImmutableSet<Address> addresses). [#368, #774] IStore.ListAddresses()method was replaced byIStore.ListStateKeys()method. [#368, #774]
- The return type of
- Added
Swarm<T>.FindSpecificPeer()method to find a specific peer given the address. [#570, #580] - Removed
LiteDBStoreclass. UseDefaultStoreinstead. [#662] - Removed
BlockChain<T>.Contains(TxId)method. UseIStore.ContainsTransaction(TxId)instead. [#676] - Renamed
BlockChain<T>.Contains(HashDigest<SHA256>)method toBlockChain<T>.ContainsBlock(HashDigest<SHA256>). [#678] - Removed
BlockChain<T>.Contains(Block<T>)method. [#678] - Changed semantics of
BlockChain<T>.ContainsBlock(HashDigest<SHA256>)method andBlockChain<T>[HashDigest<SHA256>]indexer as lookups only the current chain, not entire storage. [#678] - Added
IStore.ContainsBlock(HashDigest<SHA256>)method. [#678] - Removed
AddressStateMapclass. [#98, #368, #692, #774]- The return type of
BlockChain<T>.GetState()method becameIValue(wasAddressStateMap). - The return type of
IStore.GetBlockStates()method becameIImmutableDictionary<string, IValue>(wasAddressStateMap). IStore.SetBlockStates()method became to takeIImmutableDictionary<string, IValue>instead ofAddressStateMap.
- The return type of
Swarm<T>.PreloadAsync()method andSwarm<T>.StartAsync()method became to takepreloadBlockDownloadFailedevent handler as an argument. [#694]- Added the
genesisBlockparameter toBlockChain<T>()constructor. [#688] - Removed
StateReferenceDownloadStateclass. [#703] - Removed
BlockStateDownloadStateclass. [#703] - Removed
TxReceivedandBlockReceivedAsyncAutoResetEvents fromSwarm<T>. [#705, #725] - Added
workersoptional parameter intoSwarm<T>()constructor. [#613, #727] Block<T>class became not to implementISerializable. [#751]Transaction<T>class became not to implementISerializable. [#751]Block<T>.ToBencodex()became to returnBencodex.Types.Dictionary. [#751]Transaction<T>.ToBencodex()became to returnBencodex.Types.Dictionary. [#751]- Removed
Block<T>.FromBencodex(byte[])method. [#751] - Removed
Transaction<T>.FromBencodex(byte[])method. [#751] Block<T>.ToBencodex()became to take no arguments. [#749, #757]- Removed
Swarm<T>.BroadcastBlocks(IEnumerable<Block<T>>)method. [#764] StoreExtension.LookupStateReference<T>()method was replaced byIStore.LookupStateReference<T>()method. [#722, #774]
Backward-incompatible network protocol changes
- Added
long-typedoffsetparameter toRecentStatesandGetRecentStatesmessages. [#703] - Added
int-typediterationparameter toRecentStatesmessage. [#703] - Added
BlockHeaderMessagemessage. [#764]
Backward-incompatible storage format changes
- The introduced
DefaultStoreis incompatible at the file-level with theLiteDBStorewhich had existed.DefaultStorebecame to take a directory instead of a single file, and it consists of multiple subdirectories and a LiteDB file for indices. [#662, #680]
Added APIs
- Added
DefaultStoreclass to replaceLiteDBStore. [#662] - Added
IStore.ListAllStateReferences<T>()method. [#701, #703] - Added
IStore.ListStateKeys()method to replaceIStore.ListAddresses()method. [#368, #774] - Added
IStore.LookupStateReference<T>()method to replaceStoreExtension.LookupStateReference<T>()method. [#368, #722, #774] - Added
BlockChain<T>.Genesisproperty. [#688] - Added
BlockChain<T>.MakeGenesisBlock()static method. [#688] - Added
InvalidGenesisBlockExceptionclass. [#688] - Added
StateDownloadStateclass which reports state preloading iteration progress. [#703] - Added
PeerDiscoveryExceptionclass which inheritsSwarmExceptionclass. [#604, #726] - Added
Swarm<T>.Peersproperty which returns an enumerable of peers inSwarm<T>'s routing table. [#739] - Added
Block<T>.Serialize()method which returnsbyte[]. [#751] - Added
Transaction<T>.Serialize()method which returnsbyte[]. [#751] - Added
Block<T>(Bencodex.Types.Dictionary)constructor. [#751] - Added
Transaction<T>(Bencodex.Types.Dictionary)constructor. [#751] - Added
Block<T>.Deserialize(byte[])method. [#751] - Added
Transaction<T>.Deserialize(byte[])method. [#751] - Added
StoreExtension.Copy(this IStore, IStore)extension method. [#753] - Added a
HashDigest<SHA256>?-typedTxHashproperty which digests all transactions in the block toBlock<T>class. [#749, #757] - Added
CryptoConfigclass. [#758] - Added
ICryptoBackendclass. [#758] - Added
DefaultCryptoBackendclass. [#758] - Added
Swarm<T>.BroadcastBlock(Block<T>)method. [#764] - Added
Swarm<T>.PeerStatesproperty. [#772] - Added
PeerStateclass which represents aPeers stat...
Libplanet 0.7.0
Released on November 8, 2019.
Backward-incompatible interface changes
- Renamed
minValue/maxValueparameters tolowerBound/upperBoundofIRandom.Next()methods. [#555, #558] - Renamed
IStore.IterateIndex()method toIterateIndexes(). [#462, #560] Swarm<T>class became to implementIDisposableagain and should be disposed to clean up its internal resources. [#485]IStore.IterateStateReferences()method became to receivehighestIndex,lowestIndex, andlimitparameters. [#447, #545]- Reworked
BlockChain<T>.GetStates()intoGetState()which takes only oneAddressinstead ofIEnumerable<Address>. [#510, #563] - Types of
IAction.PlainValueand states became restricted toBencodex.Types.IValue. [#541, #552]IAction.LoadPlainValue(IImmutableDictionary<string, object>)method became replaced byLoadPlainValue(IValue).AccountStateGetterbecame to returnIValue, notobject.- Added
BencodexExtensionstatic class.
- Removed
BlockChain<T>.Blocks. [#409, #583] - Removed
BlockChain<T>.Transactions. [#409, #583] - Removed the
lingerparameter from theSwarm<T>()constructor, and added thewaitForparameter toSwarm<T>.StopAsync()method instead. [#581] - Removed the
dialTimeoutparameter from theSwarm<T>() constructor, and added it toSwarm<T>.PreloadAsync()&Swarm<T>.StartAsync()methods. [#581] - Removed
broadcastparameter fromBlockChain<T>.MakeTransaction()method. [#609] BlockChain<T>does not implementIReadOnlyList<T>anymore. [#630]- Added
BlockChain<T>.Countproperty. [#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
ProtectedPrivateKeyclass. [#577, #614] - Added
IncorrectPassphraseExceptionclass. [#577, #614] - Added
MismatchedAddressExceptionclass. [#577, #614] - Added
KeyJsonExceptionabstract class. [#577, #614] - Added
InvalidKeyJsonExceptionclass. [#577, #614] - Added
UnsupportedKeyJsonExceptionclass. [#577, #614] - Added
ICipherinterface. [#577, #614] - Added
Aes128Ctrclass. [#577, #614] - Added
IKdfinterface. [#577, #614] - Added
Pbkdf2class. [#577, #614] - Added
Scryptclass. [#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.SourcePeerproperty. [#636]
Behavioral changes
- Changed to send
Pongbefore updating the message sender to the routing table whenPingis 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
AddressandHashDigestas readonly. [#610] IceServer.CreateTurnClient()became to throwArgumentExceptionwhen 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]IActionbecame 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 thrownSocketExceptionwith a messageOperation on non-blocking socket would block. [#405, #485] - Fixed a bug that accessed all blocks fr...