An extensible open-source framework for creating private/permissioned blockchain applications
ApiManagerConfig
was made non-exhaustive. (#1834)ctrl + c
break (on Windows).
These signal handlers may be switched off by using NodeBuilder::disable_signals()
.
(#1834)run-dev
command. Previously, using the existing configuration
files in blockchain-path
led to an error. (#1827)create_patch
and commit
methods in BlockchainMut
have been generalized
to support block skipping (see New Features section for more details). (#1820)run-dev
command has been reworked. It now does not clear database files
after the launch. artifacts-dir
parameter has been renamed to
blockchain-path
. Configuration files are now stored inside config
subdirectory. (#1822)MigrationRequest
was made non-exhaustive. (#1823)
POST
endpoints now expect JSON-encoded input rather than
hex-encoded Protobuf. (#1823)
supervisor_name
method was removed. Use Supervisor::NAME
instead. (#1823)
command
module became public. (#1821)Exonum nodes can now customize how they create block proposals. This can be
used to whitelist / blacklist transaction authors or services, prioritize
transactions by advanced criteria, implement complex rate limiting, etc.
The functionality is available via proposer
module. (#1820)
Exonum nodes can now skip block generation at a certain epoch of the consensus algorithm. This can be used to keep a "heartbeat" when the network load is low without bloating the storage used by the nodes. (#1820)
ServiceApiScope::pb_endpoint_mut
allows to accept Protobuf-encoded messages
with the request content type set to application/octet-stream
in addition
to JSON-encoded messages. (#1829)DeployRequest
and MigrationRequest
now have cryptographic seeds
to retry the same request multiple times. (#1823)Error handling is now performed with the anyhow
crate instead of failure
.
(#1805)
APIs which previously used futures from the futures 0.1
crate are now
made async
, or are using Future
s from the standard library. (#1796, #1804)
The main affected APIs are as follows:
exonum-api
crate and their counterparts
in exonum-rust-runtime
ApiSender
from the exonum
crateNode::run
(exonum-node
crate) and NodeBuilder::run
(exonum-cli
crate), and shutdown with ShutdownHandle
(exonum-node
crate)TestKitApi
(exonum-testkit
crate)Testkit now does not include incorrect transactions into blocks or memory pool, similar to real Exonum nodes. (#1785)
Runtime::deploy_artifact
no longer returns Box<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
and Blockchain::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 general InvalidServiceTransition
error. (#1806)
NodeBuilder
was refactored to use a more intuitive set of interfaces
for adding built-in artifacts and services to the blockchain. (#1800)command
module were made private; the relevant data types
are now exported from the command
module directly. Similarly,
io
module was made private. (#1799)impl_binary_value_for_pb_message
macro was removed. Use the BinaryValue
derive macro from the exonum-derive
crate instead. (#1805)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)
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)
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)
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)
Rust services support freezing. (#1780)
HTTP API of Rust services is now switched on during data migrations. (#1780)
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 the mempool.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)
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)
This release marks the significant milestone in Exonum evolution – the minimum viable lifecycle for Exonum services. Besides dynamic deployment of services implemented in 0.13.0-rc.2 release, Exonum now supports stopping and upgrading service instances (including the possibility of data migrations). Like other lifecycle events, stopping and upgrades are implemented by the core and controlled by the supervisor service, providing flexibility and upgradeability of the control logic.
As a part of service upgrade workflow, Exonum now supports background (aka asynchronous) data migrations. This allows to migrate data from one schema to the other without stopping a node or the blockchain network; the whole process is performed in the background while the node continues processing transactions and other requests. Relevant migration support was added to the storage backend (MerkleDB) and can be used independently.
Other significant changes:
stubs
module in the Rust runtime crate for a literary code explainer.See more detailed list of changes in CHANGELOG.md.
No changes to the core functionality are expected between this release candidate and the 1.0.0 release. At the same time, there may be breaking changes to the APIs documented as unstable (for example, data migration). Another kind of potential breaking changes is related to updating core dependencies. Right now, Exonum core targets compatibility with Rust 1.36 due to the problems of compiling the Java runtime with the more recent versions. If this restriction is lifted, some core dependencies will be updated, which could result in breaking changes (at least technically).
Most important: new Dynamic Services feature was introduced. For details see the Dynamic Services section of the changelog.
Used rust
version is updated to 1.38.0. (#1481)
create_checkpoint
method has been implemented for the RocksDB
struct.
This method uses RocksDB checkpoints functionality under the hood.
NotFound
error message for explorer/v1/block
endpoint now includes
the actual blockchain height. (#1498)
system/v1/rebroadcast
endpoint has been removed. (#1445)
Added a possibility to specify compression algorithm for the database. (#1447)
Updated hex
dependency with changes in the methods signatures of the ToHex
trait. (#1468)
Validator keys are now derived from single master key. Master key is stored in encrypted file. (#1459)
Command line parameters --service-key-pass
and --consensus-key-pass
was
removed in favor of --master-key-pass
parameter. For example now you can
run the node with the command below. (#1459)
cargo run -- run -d 0/db/ -c 0/node.toml --master-key-pass pass:123
StoppedTestKit::resume
accepts list of runtimes instead of a list of services.
Removed obsolete TestKit::blockchain_mut
method and TestKit::blockchain
now returns value instead of reference.
Dot symbol is not allowed in service names anymore. (#1558)
Services can now use BlockchainData
and SnapshotExt
types to access data
from the blockchain in a more structured manner. (#1523)
GenesisConfig
is extracted into separate entity. BlockchainBuilder
, Node
and Testkit
explicitly accepts it during creation. (#1541)
Added DefaultInstance
trait for declaration of builtin services. (#1541)
Nested proofs for ProofListIndex
are replaced with a flat
(non-recursive) format. (#1450)
Differentiated (read-only / read-write) access to the database was introduced. (#1523)
It is now possible to have readonly access to indexes given a Fork
via a ReadonlyFork
wrapper. Readonly access works like RefCell::borrow
(vs RefCell::borrow_mut
for Fork
); it is possible to create an
unlimited number of indexes with readonly access based on the same fork.
(#1523)
Service schemas can now use a declarative layout, in which every field
corresponds to a separate index or a group of indexes. It is possible
to derive a constructor for such schemas via FromAccess
derive macro.
(#1523, #1562)
New index name restrictions has been added. (#1558)
Dot symbol is not allowed anymore in indexes with prefixed access.
Index names starting from __
and not containing a dot .
are reserved and
used only for system indexes.
exonum-proto
. Trait ProtobufConvert
is moved
to this crate. (#1496)Introduced a new crate exonum-protobuf-convert
. Derive macro
ProtobufConvert
is moved to this crate. (#1501)
Derive macro ProtobufConvert
now does not derive the BinaryValue
and
ObjectHash
traits. There are separate derive macros for them in
the exonum-derive
crate. (#1501)
Method protobuf_generate
is now private, use exonum_build::ProtobufGenerator
instead (#1496).
Method ProtobufGenerator::frequently_used
has been removed (#1581).
Methods read_keys_from_file
and generate_keys
are moved to new keys
module in the exonum
. (#1459)
Protobuf serialization for crypto types is now implemented in the exonum-crypto
crate. (#1496)
In exonum
0.13.0-rc.2, a new service workflow is introduced, named
"Dynamic Services".
Key points of this feature are the following:
exonum
now supports different environments of code execution (runtimes).
Only native rust
runtime is enabled by default, but support of
different programming languages can be added quite easily.
For details see the Runtime
trait docs and the
sample_runtime
example.
Services are not statically tied to the compiled binary anymore. There is support of adding new service types (aka artifacts) dynamically and starting new instances of services.
For details see runtime
module docs.
Services now can have initialization parameters, provided within service start procedure.
Services now support configuration changes via Configure
interface.
configuration
service was replaced with the supervisor
service, which is
capable of not only changing configuration, but of deploying and starting
services as well. For details see supervisor
service.
There are a lot of backward-incompatible changes introduced within 0.13.0-rc.2 release candidate.
So to make the changes apparent, compare the Cryptocurrency
example service versions
for 0.12.1 and 0.13.0 releases.
Key points:
Merkledb schema is now declarative and can contain indices as fields.
Access to the database is now isolated for services. A service cannot get the write access to another service or the blockchain schema.
Transactions do not have the execute
method anymore. Instead, a service defines
and implements an interface trait which contains all the business logic.
Services do not launch at the node start by default. For launching a
service, use an exonum-launcher
tool.
#1253: Interface mocks for dynamic services
#1263: Add new rust services interface
#1261: Basic dispatcher functionality
#1275: Dynamic services integration
#1345: Implement a new Transaction
trait [ECR-3222]
#1361: FIrst step of persistent dynamic services implementation [ECR-3276]
#1371: Basic supervisor service implementation [ECR-3291], [ECR-3298]
#1376: Restore system API endpoints
#1389: Check and improve messages verification procedure [ECR-3272]
#1446: Service interfaces MVP. [ECR-3474], [ECR-3484]
#1467: Implement Configure interface [ECR-3306]
#1473: Extract supervisor service from core
#1482: Add shutdown method into runtime trait
#1484: Implement configuration update logic in Supervisor [ECR-3583]
#1492: Do start and initialize service at single step [ECR-3222]
#1537: Finalize Exonum-derive macros [ECR-3800]
#1538: Supervisor modes [ECR-3794] [ECR-3771]
#1243: Old behavior dispatcher
#1509: Make dispatcher mostly synchronous
#1245: Add basic runtime env interface + rust implementation
#1253: Interface mocks for dynamic services
#1261: Basic dispatcher functionality
#1263: Add new rust services interface
#1267: Move configuration service to the core
#1269: Rust artifact and additional functionality for rust runtime.
#1270: Dynamic configuration service
#1275: Dynamic services integration
#1287: Remove macro from service interface trait definition
#1290: Add support of state hash calculation into runtimes & services
#1291: Change service builder and web api.
#1325: Dynamic services: fix time service compilation
#1326: Remove genesis_init from dynamic services [ECR-3226]
#1327: Remove unsafe code from runtimes
#1330: A small amount of code improvements. [ECR-3222]
#1331: Rename dispatch to call_info
#1332: Fix tests in blockchain module
#1334: Fix sandbox tests in dynamic services [ECR-3230]
#1336: Rename traits methods in dynamic services [ECR-3222]
#1337: Fix a lot of tests in dynamic services
#1338: Refine start_service
logic [ECR-3222, ECR-3235]
#1340: Fix testkit [ECR-3229]
#1343: Add service name and id to Service
trait methods. [ECR-3235]
#1345: Implement a new Transaction
trait [ECR-3222]
#1346: Fix transactions benchmarks in dynamic services
#1348: Fix big performance regression in dynamic services
#1349: Don't verify SignedMessage during the deserialization
#1350: Refactor signature verification code [ECR-3222]
#1353: Rework blockchain explorer [ECR-3259]
#1354: Fix cargo test --all
compilation
#1357: Some refactoring by clippy suggestion
#1361: FIrst step of persistent dynamic services implementation [ECR-3276]
#1367: Rename ArtifactSpec to ArtifactId [ECR-3291]
#1371: Basic supervisor service implementation [ECR-3291], [ECR-3298]
#1374: Polish code and make travis almost happy
#1375: Add deadline_height to StartService transaction [ECR-3298]
#1376: Restore system API endpoints
#1378: Finalize artifact deployment logic [ECR-3291]
#1379: Implement state_hash computation for dispatcher.
#1380: Make tests green again.
#1381: Include proto file sources in artifact information. [ECR-3309]
#1382: Replace impl_service_dispatcher by the attribute in service_interface [ECR-3222]
#1387: Improve execution error handling for dynamic services [ECR-3236]
#1389: Check and improve messages verification procedure [ECR-3272]
#1392: Implement verification for ArtifactId and InstanceSpec with the unit tests [ECR-3360]
#1393: Add macro to implement hex serde representation for the BinaryValue types [ECR-3222]
#1394: Update documentation of the messages module [ECR-3275]
#1396: Document runtime life cycle [ECR-3275]
#1405: Dynamic services supervisor tests [ECR-3266]
#1411: Refine Runtime trait [ECR-3412]
#1427: Try to re deploy artifact before registration.
#1429: Review unwraps in dynamic services [ECR-3419]
#1430: Expand documentation on configuration parameters usage [ECR-3463]
#1431: Update dispatcher info to show changes in list of deployed artifacts
#1432: Refine exonum-derive crate on top of darling [ECR-3343]
#1434: Replace dispatcher
attribute in exonum_service
by the service_interface
in ServiceFactory
[ECR-3474]
#1438: Remove dispatcher reference from Runtime trait
#1443: Replace fabric module with exonum-cli crate [ECR-3457]
#1446: Service interfaces MVP. [ECR-3474], [ECR-3484]
#1451: Add the service interface name option to the proto files
#1452: Remove default state_hash implementation
#1454: Simplify blockchain configuration [ECR-3357]
#1462: Fix API Freeze on startup
#1465: Improve ProtobufConvert for enum variants
#1467: Implement Configure interface [ECR-3306]
#1472: Fix some of the testkit ignored doctests
#1473: Extract supervisor service from core
#1476: Improve support for additional runtimes in TestKit [ECR-3444]
#1482: Add shutdown method into runtime trait
#1483: Use strings for protobuf files
#1484: Implement configuration update logic in Supervisor [ECR-3583]
#1488: Add support of external runtimes to exonum-cli
#1489: Avoid waiting in the add_transaction
endpoint [ECR-3222]
#1490: Fix supervisor creation
#1491: Polish testkit [ECR-3222]
#1492: Do start and initialize service at single step [ECR-3222]
#1493: Document Rust runtime services traits [ECR-3275]
#1494: Enhancements in Testkit
#1495: Implement API endpoints that shows config proposals in Supervisor [ECR-3610]
#1504: Clarify runtime shutdown method [ECR-3696]
#1505: Proto optimization [ECR-3472]
#1508: Remove validator_id method from AfterCommitContext
#1509: Make dispatcher mostly synchronous
#1511: Add includes to proto-sources
#1514: Use enum to represent ErrorKind [ECR-3717]
#1515: Introduce test-suite directory
#1517: Clarify SignedMessage documentation [ECR-3478]
#1518: Remove data duplication from DeployConfirmation [ECR-3770]
#1519: Add anonymous lifetimes [ECR-3757]
#1520: SimpleSupervisor: Verify that config proposal is sent by validator [ECR-3742]
#1521: Implement ObjectHash for SignedMessage
#1522: Remove ApiContext structure [ECR-3745]
#1525: Make protobuf artifacts implementation detail
of Rust runtime [ECR-3776]
#1526: Sending an empty POST request to /shutdown endpoint doesn't work [ECR-3756]
#1528: Document parts of Rust runtime [ECR-3285]
#1530: Improve Runtime
docs
#1531: ProofMapIndex variants for hashed and raw keys [ECR-3777]
#1537: Finalize Exonum-derive macros [ECR-3800]
#1538: Supervisor modes [ECR-3794] [ECR-3771]
#1539: Restore warn(missing_docs) in the Exonum crate [ECR-3821]
#1540: Deploy workflow
#1542: Write proper examples for the Exonum traits derivation [ECR-3822]
#1544: Remove atty dependency
#1546: Move multisig module to the supervisor crate [ECR-3823]
#1547: Remove metrics module
#1548: Remove TransactionMessage alias [ECR-3222]
#1549: Encapsulate Blockchain fields [ECR-3222]
#1550: Remove isolate method [ECR-3820]
#1552: Assign instance IDs in the Supervisor [ECR-3746]
#1555: Update MerkleDB docs
#1568: Make DispatcherSchema merkelized again [ECR-3810]
#1592: Fix node freeze after re-enabling consensus [ERC-3111]
New config params http_backend_config.server_restart_max_retries
and
http_backend_config.server_restart_retry_timeout
added into NetworkConfiguration
.
They are intended to configure restart settings of the HTTP-server (#1536).
exonum
now has a python
library for implementing integration tests. (#1516)
BlockchainMut
now has a check_tx
method used to verify transactions before
adding them to the transactions pool. Transactions for which check_tx
fails
are considered invalid and can't be included to the block. (#1579)
ProofListIndex
now implements truncate()
and pop()
methods, allowing
to eject elements from the list. (#1455)
IndexAccess
trait is implemented for several new types, notably,
Rc<dyn Snapshot>
, Arc<dyn Snapshot>
and Rc<Fork>
. (#1455)
HashTag::hash_list()
was extended to support values of any appropriate type,
not only Hash
. (#1455)
ProtobufConvert
has been implemented for MapProof
(#1512) and ListProof
(#1513).
New variant of the ProofMapIndex
have been introduced - RawProofMapIndex
.
It is used for keys that maps directly to ProofPath
, for example Hash
and
PublicKey
. (#1531)
By default ProofMapIndex
is used for keys that implement ObjectHash
.
For Hash
keys both map variants works the same, because ObjectHash
implementation for Hash
returns the hash itself.
Old fabric
module is replaced with new exonum-cli
crate. (#1443)
exonum-cli
provides a public reexport of structopt
crate. (#1461)
system/v1/shutdown
endpoint has been modified and now accepts empty POST
requests. (#1526)
exonum-protobuf-convert
has been replaced with external protobuf-convert
crate. (#1561)
keys
module has been moved into exonum-keys
crate. (#1497)
ProofListIndex::extend()
method has been refactored, leading to up to 10x
performance improvements for large lists. (#1455)
Proofs building mechanisms have been heavily refactored. (#1460)
exonum-supervisor
crate. (#1582)run-dev
mode. (#1415)index_metadata
now correctly loads the provided index address name (#1478).Signatures of methods Service::initialize
and Service::before_commit
has been
changed. Now they take immutable reference to Fork
instead of mutable. (#1293)
Trait BinaryForm
has been replaced by BinaryValue
. (#1298)
To implement BinaryValue
for types that implements Protobuf::Message
use
impl_binary_value_for_pb_message
macros.
Module storage
has been replaced by exonum-merkledb
crate. See related section
in changelog for details. (#1293)
Bootstrapping workflow has been simplified (#1292)
generate-config
subcommand now uses single OUTPUT_DIR
instead of set of options.
So to generate node config you should write something like example bellow.
cargo run --bin exonum-timestamping -- \
generate-template /tmp/exonum/template.toml --validators-count 4
cargo run --bin exonum-timestamping -- \
generate-config /tmp/exonum/template.toml /tmp/exonum/cfg/0 \
--peer-address 0.0.0.0:8000
cargo run --bin exonum-timestamping -- \
generate-config /tmp/exonum/template.toml /tmp/exonum/cfg/1 \
--peer-address 0.0.0.0:8001
cargo run --bin exonum-timestamping -- \
generate-config /tmp/exonum/template.toml /tmp/exonum/cfg/2 \
--peer-address 0.0.0.0:8002
cargo run --bin exonum-timestamping -- \
generate-config /tmp/exonum/template.toml /tmp/exonum/cfg/3 \
--peer-address 0.0.0.0:8003
cargo run --bin exonum-timestamping -- \
finalize /tmp/exonum/nodes/0/sec.toml /tmp/exonum/nodes/0/node.toml \
--public-configs /tmp/exonum/cfg/{0,1,2,3}/pub.toml
cargo run --bin exonum-timestamping -- \
run -d /tmp/exonum/db/0 -c /tmp/exonum/nodes/0/node.toml
explorer/v1/blocks
endpoint with add_blocks_time
param switched on now returns
median precommit times in the time
field within each returned block,
rather than in a separate array. (#1278)
system/v1/mempool
endpoint has been renamed into system/v1/stats
.
An additional field in the response of the endpoint was added. The field
corresponds to the total number of transactions in the blockchain. (#1289)
Added restrictions to index names. Allowable characters in index name: ASCII characters, digits, underscores and dashes. (#1388)
Added Debug
implementation for Database
, Snapshot
, Iterator
dynamic
traits (#1363)
Changed storage layout (#1293)
Changed indexes metadata layout in the database.
Introduced a generic IndexState
structure that can be used to store global
index properties like total number of items.
Changed ProofMapIndex
hashing rules for branch nodes and root node.
Branch nodes is hashing now with 0x04 prefix, root node with 0x03 (#1293).
Renamed method merkle_root
of ProofMapIndex
and ProofListIndex
to
object_hash
(#1293).
Several mutable indexes now can be create from immutable reference to Fork
(#1293)
Relaxed trait bounds for the ProofMapIndex
keys (#1293)
Now keys should just implement BinaryKey
trait instead of the
ProofMapKey
, which will be ordered according to their binary
representation, as in the MapIndex
.
Changed ProofListIndex
hashing rules for leaf nodes and branch nodes according
to the certificate transparency
specification. Leaf nodes contain hashes with 0x00 prefix, branch nodes - with
0x01. (#1293)
StorageValue
and StorageKey
have been renamed to the BinaryValue
and BinaryKey
. (#1293)
to_bytes
method to the BinaryValue
trait which doesn't consume
original value instead of the into_bytes
.BinaryKey::write
now returns total number of written bytes.CryptoHash
has been replaced by the ObjectHash
.Changed the hash algorithm of the intermediate nodes in ProofMapIndex
. (#1293)
ProofPath
now uses compact binary representation in the BranchNode
hash calculation.
Binary representation is |bits_len|bytes|
, where:
ProofPath
in bits compressed
by the leb128
algorithmProofPath
, i.e. the first
(bits_len + 7) / 8
bytes.New endpoint: v1/transactions/subscribe
, which subscribe to new transaction events.
This endpoint accept optional parameters: service_id
and message_id
(message_id
as in derive macro TransactionSet
). (#1335)
New endpoint: v1/ws
, which open websocket connection and allow to set multiple
subscription (for blocks and transaction, filtered by service and transaction id)
and send transactions (in hex, like in explorer) to blockchain
(examples can be found in related pull request). (#1335)
TestKit::add_tx()
method, which previously did not persist
transactions. (#1278)explorer/v1/blocks
endpoint supports add_precommits
param, which supplies
each returned block with the precommits
field. (#1278)
explorer/v1/blocks
endpoint allows to specify the lower bound on the returned
block height with the earliest
query param. (#1278)
Added ProtobufConvert
implementation for byte array with fixed sizes (#1279)
Added service_name
getter to the TransactionContext
. (#1274)
Allowed to use symbol -
in index names. (#1277)
rocksdb
crate is now used instead of exonum_rocksdb
. (#1286)
Added a new endpoint system/v1/services
for displaying information
about available services. (#1288)
Endpoints explorer/v1/block
and explorer/v1/transactions
were extended
with adding additional fields service_id
and time
. (#1386)
Added tx_cache
field to State
to cache incoming transactions before
adding them to persistent pool. (#1398)
Added new request message PoolTransactionsRequest
to obtain pool transactions
from another peers. (#1404)
Updated ProofMapIndex
data layout. (#1293)
Path to the root node in merkle patricia tree now has been stored in the index state.
New API for getting and creating indexes. (#1293)
Now indexes can be accessed via immutable references from Snapshot
and
mutable/immutable references from Fork
.
Introduced method fork::get_object
to get or create object by address.
get_object_existed
and get_object_existed_mut
methods of Fork
and Snapshot
returns optional references to index.
rocksdb
crate is now used instead of exonum_rocksdb
. (#1286)
Added From<Patch>
trait implementation to Fork
. (#1403)
TestKit
, allowing to emulate node
restarts. (#1278)Node secret keys are now stored in separate files in a secure way. CLI for generating node configs and starting nodes has been extended in order to reflect these changes. (#1222, #1096, #1235)
Changed a response for /healthcheck
endpoint. (#1252)
Changed a response code for the /block
endpoint for the case when
the requested block doesn't exist. (#1262)
Removed a sub-command generate-testnet
from CLI. (#1264)
create_keys_file
function to generate_keys_file
in utils
module. (#1222, #1096)Added allow-origin
for localhost
for public and private api in
development mode by default. (#1234)
Added ProtobufConvert
implementation for Signature
. (#1241)