An extensible open-source framework for creating private/permissioned blockchain applications
Changed the message format, which, in turn, has led to changes in the byte representation of transactions and precommit messages. (#916)
Transaction::execute
now accepts TransactionContext
as the second parameter. TransactionContext
provides the public key of transaction author, ID of current service, and transaction hash. (#943)
Transaction::verify
method has been removed. (#1085)
Every transaction that contains the public key of the author was refactored to use the author indicated in TransactionContext
. (#984 #980 #979 #975 #971)
/transactions/
endpoint can now handle transaction messages in hex format. Services that used custom endpoints were refactored to use explorer/v1/transactions
. (#943 #984 #980 #979 #975 #971)
majority_count
parameter has been moved from StoredConfiguration
to ConfigurationService
configuration. (#828)
Removed obsolete enable_blockchain_explorer
option from NodeApiConfig
. (#891)
Consensus messages and inner structs are now serialized with protobuf. (#1028)
tx_pool_capacity
parameter has been removed from MemoryPoolConfig
. (#1036)
Trait TransactionSend
was removed. ApiSender
now contains broadcast_transaction
method. (#943)
api::Error::InternalError
now contains failure::Error
instead of Box<::std::error::Error>
. (#879)
TransactionSend::send
now returns Result<(), failure::Error>
instead of io::Result
. (#879)
ApiSender
methods send_external_message
and peer_add
now returns Result<(), failure::Error>
instead of io::Result
. (#879)
majority_count
parameter has been added to generate-template
and generate-testnet
commands (#828)
NodePrivateConfig
fields have been renamed: listen_addr
to listen_address
and external_addr
to external_address
. (#809)
NodePublicConfig
addr
field has been renamed to address
. (#809)
Config parameter external_address
is now a required value. (#826)
Config parameter round_timeout
has been renamed to first_round_timeout
. Now timeout for round r is first_round_timeout + (r-1)*round_timeout_increase
where round_timeout_increase
is determined as a certain percentage of first_round_timeout
. The value of this percentage is defined in ConsensusConfig::TIMEOUT_LINEAR_INCREASE_PERCENT` constant (10%). (#848)
missing_keys
, entries
, all_entries
methods of CheckedMapProof
and MapProof::missing_keys_unchecked
method now return impl Iterator
instead of Vec
. (#918)
Connect
message field addr
with SocketAddr
has been removed, pub_addr
with str
of unresolved external address of the peer is used instead. (#942)
Endpoint v1/peers
now returns ConnectInfo
in incoming connections instead of single IP-addresses. (#959)
Fork::remove_by_prefix()
method now specifies prefix as Option<&[u8]>
instead of Option<&Vec<u8>>
. (#1042)
exonum_derive
crate has been added with custom derives for ProtobufConvert
and TransactionSet
(#1055)
TransactionResult
is now serialized using protobuf. Empty description of the result is now the equivalent of there being no description of the result. (#1075)
The Vote
and VoteAgainst
now save the transaction hash instead of full transaction message. (#984)
Structures are serialized using protobuf now. (#1086)
Added possibility to use domain names instead of IP addresses as a peer's addresses. (#826)
Added v1/rebroadcast
endpoint that can be used to broadcast all transactions from the pool to other nodes. (#859)
Now each consecutive round is longer than previous by some constant percentage of first_round_timeout
. (#848)
Added /v1/blocks/subscribe
endpoint for following block commit events through WebSockets (#792).
Added MapProof::all_entries_unchecked
method. It is used for more efficient calculations in Exonum Java Bindings, but can be used for debug purposes as well. (#918)
Added listen-address
command line argument to specify different external address (peer-address
) and listen address when generating config files. (#942)
Peer address is resolved on connect instead of resolving on node startup. (#942)
Now peers require only one connection to exchange messages between them. (#945)
utils
module with functions create_keys_file
for creating and read_keys_from_file
for reading files that contain a public key and encrypted secret key. (#1056)exonum-build
crate has been added to simplify writing build.rs
files for services that use protobuf code generation. (#1076)Bug with pool size overflow has been fixed. (#853)
Bug in NoiseWrapper::decrypt_msg
caused by wrong calculation of encrypted and decrypted message sizes has been fixed. (#873)
Transactions (signature) verification benchmark has been fixed. (#673)
Node no longer panics when transaction pool has a lot of transactions and consensus is at round 0. (#673)
Node now works correctly after consensus re-enable via API. (#902)
Bug with incorrect EOF handling while decoding network messages has been fixed. (#917)
Bug leading to deletion of excessive data when clear
ing an index belonging to an index family has been fixed. (#1042)
new_in_family
index constructor introduced in #531 now accepts &str
and &[u8]
as an index_id
value.NodeHandler::run_handler
now returns Result<(), failure::Error>
instead of io::Result
. (#879)
Transactions (signature) verification benchmark has been added. (#808)
A new function storage::proof_list_index::root_hash()
has been added to efficiently compute Merkle root hash from a list of hashes without an intermediate ProofListIndex
. Verification of block root hashes has been optimized as well. (#802)
NoiseHandshake::finalize
now returns error if remote peer's public key is not in ConnectList
. (#811)
Now nodes will switch to min_propose_timeout
for block proposal timeout faster if they receive more than propose_timeout_threshold
transactions during max_propose_timeout
. (#844)
Custom log formatting (along with colored
and term
dependencies) has been removed in favor of env_logger
. (#857).
Several dependencies have been updated. (#861, #865, #871)
Transactions are now verified in a thread pool. Thread pool size is set to optimal value by default (CPU count) or can be configured manually. (#673)
The finalize
command now does not include the node itself as its own trusted peer in the generated configuration. (#892)
Added a possibility to create ServiceApiBuilder
with blockchain. (#929)
ConnectInfo
and ConnectList
now stores unresolved addresses as strings. (#942)
Now network
module uses PublicKeys
to identify peers. (#942)
system/v1/peers
endpoint now properly returns incoming and outgoing connections of the node. (#942)
external_address
is now a required value. (#826)ConnectList
configuration and addresses will be resolved once on startup. (#826)