exonum v1.0.0-rc.2 Release Notes
Release Date: 2020-03-13 // about 4 years ago-
๐ฅ Breaking changes
General
Error handling is now performed with the
anyhow
crate instead offailure
.
(#1805)APIs which previously used futures from the
futures 0.1
crate are now
madeasync
, or are usingFuture
s from the standard library. (#1796, #1804)
The main affected APIs are as follows:- Endpoint definitions in the
exonum-api
crate and their counterparts
inexonum-rust-runtime
- Transaction sending with
ApiSender
from theexonum
crate - Node start-up with
Node::run
(exonum-node
crate) andNodeBuilder::run
(exonum-cli
crate), and shutdown withShutdownHandle
(exonum-node
crate) - HTTP API testing with
TestKitApi
(exonum-testkit
crate)
exonum
โ Testkit now does not include incorrect transactions into blocks or memory pool,
similar to real Exonum nodes. (#1785)๐
Runtime::deploy_artifact
no longer returnsBox<dyn Future<...>>
. Instead a
๐ special communication channel is used to send deployment status from the
โ runtime to the dispatcher. (#1788)๐
Schema::call_errors
was removed in favor of more comprehensive
call_records
method. (#1792)Blockchain::create_patch
andBlockchain::commit
signatures were changed
๐ due to unsoundness of the previous implementation; see "Bug Fixes" section
for more details. (#1809)Replaced
CoreError::ServiceNotStopped
with the more generalInvalidServiceTransition
error. (#1806)exonum-api
- Data types were made non-exhaustive where appropriate. (#1799)
exonum-cli
- ๐จ
NodeBuilder
was refactored to use a more intuitive set of interfaces
for adding built-in artifacts and services to the blockchain. (#1800) - Submodules of the
command
module were made private; the relevant data types
are now exported from thecommand
module directly. Similarly,
io
module was made private. (#1799)
exonum-explorer
- Data types were made non-exhaustive where appropriate. (#1799)
exonum-proto
impl_binary_value_for_pb_message
macro was removed. Use theBinaryValue
derive macro from theexonum-derive
crate instead. (#1805)
exonum-rust-runtime
- Data types were made non-exhaustive where appropriate. (#1799)
exonum-supervisor
- Data types were made non-exhaustive where appropriate. (#1799)
exonum-system-api
๐ Public api module has been removed. List of endpoints from private api has
been changed. (#1790) Current list of the endpoints:v1/info
- obtains information about the node;v1/stats
- obtains statistics of the node;v1/peers
- adds a peer to the Exonum node;v1/consensus_status
- enables or disables consensus on the node;
-
v1/shutdown
- shuts down the node.API data types were made non-exhaustive where appropriate. (#1799)
โ exonum-testkit
๐จ
TestKitBuilder
was refactored to use a more intuitive set of interfaces
for adding built-in artifacts and services to the blockchain. (#1800)Data types were made non-exhaustive where appropriate. (#1799)
๐ New Features
exonum
๐ Exonum now supports service freezing. A frozen service has fixed state (i.e.,
does not process transactions and service hooks), but, unlike stopped services,
the service HTTP API remains active. (#1780)๐ Core and the explorer service now support retrieving call status with
a cryptographic proof of authenticity. (#1792)๐ Exonum now supports unloading of unused service artifacts. This operation
๐ may be used to free resources associated with artifacts in the runtime
hosting them. (#1794)exonum-supervisor
๐ Supervisor service supports service freezing. (#1781)
supervisor/services
endpoint has been added which obtains information
๐ about deployed artifacts and available services. (#1790)๐ Supervisor service supports artifact unloading. (#1798)
exonum-rust-runtime
๐ Rust services support freezing. (#1780)
HTTP API of Rust services is now switched on during data migrations. (#1780)
โ exonum-testkit
- โ Testkit server now returns info on emulated nodes. (#1799)
Internal Improvements
exonum
- Core now provides more thorough / context-dependent error descriptions
related to service lifecycle. (#1806)
exonum-merkledb
- Index clearing now uses range deletions for RocksDB, providing
๐ a significant performance boost for this operation. (#1791)
๐ Bug Fixes
exonum
- ๐ Fixed bug related to nodes forgetting transactions after executing
a block with them. Previously, nodes forgot all transactions
๐ in the executed blocks; such transactions were removed from
the ephemeral transaction cache, but were not flushed to the DB
or anywhere else. This could lead to consensus hang-up. (#1809)
exonum-node
๐ Fixed potential node hang-up if the node received a proposal and
a supermajority of transactions approving it before all transactions
in the proposal are known. (#1781)Switched off broadcasting of transactions which the node considers
incorrect. (#1781)๐ Fixed incorrect invalidation of block proposals. (#1782)
Provided clear coherence period for the transaction pool
by introducing themempool.flush_config_strategy
configuration parameter.
Previously, transactions were flushed to the persistent pool
only on block commit. This led to the unexpected behavior of some APIs,
such as the transaction getter endpoint in the explorer service. (#1809)๐ Fixed race condition when two nodes try to establish outgoing connections
to each other at the same time. (#1804)โ exonum-testkit
โ Testkit now does not include incorrect transactions into blocks or memory pool,
similar to real Exonum nodes. (#1785)โ Added a method to get reference to the underlying API client for the
TestKitApi
.
(#1811) - Endpoint definitions in the