All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog.
Type of changes
- Added: for new features.
- Changed: for changes in existing functionality.
- Deprecated: for soon-to-be removed features.
- Removed: for now removed features.
- Fixed: for any bug fixes.
- Security: in case of vulnerabilities.
This project adheres to Semantic Versioning.
Given a version number MAJOR.MINOR.PATCH
- MAJOR incremented for incompatible API changes
- MINOR incremented for new functionalities
- PATCH incremented for bug fixes
Additional labels for pre-release metadata:
- alpha.x: internal development stage.
- beta.x: shipped version under testing.
- rc.x: stable release candidate.
Added
- Indexer feature
- Now it is possible to get bootstrap and network informations from rest interface
- readonly-exec feature Fixed
- drand Removed
- Event "REMOVE_ASSET" removed, now 0.2.9 is retrocompatible with 0.2.8
Changed
- Bulk transaction is paid by the signer
Fixed
- Block time fixed (before was always zero) ### Breaking Change
- Seed update at each block
Changed
- BlockchainSettings structure
- Test/Production flag
- Improved
is_callable
host_function - Improved
p2p
module, introduced reqres layer and reduced gossip messages - Added message fields:
- GetTransactionRequest:
destination: Option<String>
- GetTransactionResponse:
origin: Option<String>
- GetBlockRequest:
destination: Option<String>
- GetBlockResponse:
origin: Option<String>
- GetTransactionRequest:
Added
secure_call
host functionremove_asset
host functionget_block_time
host function (returns the next block timestamp )- Call to Service
contract_updatable
- NFA Non-Fungible Account
- Added size limit on transaction that can be executed
- Fuel consumption
- is_callable direct wasm call
- Aligner module
- Message::Ack for reqres interaction
Removed
- Synchronizer removed, now replaced by aligner
Changed
- Removed wasm loader from closure
Added
- Drand implementation
- get_account_contract host function
- is_callable host function
- Offline mode for p2p module (prevent it from start)
Changed
- Transaction schema
- Signed blocks
- Introduction of fuel management structures
Added
- Bulk transaction
- Bootstrap from wasm or wasm+txs
- Config from bootstrap
- Network name from bootstrap hash
Changed
- Upgrade to Rust 2021
- Bump "wasmtime" from v0.30 to v0.31.
Added
- Added smartcontract events to tx receipt
- Added smartcontracts events subscription
- Added sha256 host function
- Added TPM2 signature
- Added Node Monitor support
Changed
- User can choose p2p listening port. Previously the port was forced to random.
- Always generate random ed25519 p2p keypair.
Added
- ECDSA digital signature backend can now optionally exploit TPM v2 hardware.
Added
- Support for ECDSA secp256r1 curve for transaction digital signature.
- Kademlia peer discovery mechanism.
Changed
- Exonum merkledb project has been forked to replace the original version. The new merkledb is a more lightweight, flexible and portable (see fixed issue below)
- Bump "wasmtime" from v0.29 to v0.30.
Fixed
- Binary portability issues due to an issue in exonum-merkledb dependencies. In particular the project was forcing max optimizations to libsodium build. This was causing the inclusion of non-portable cpu instructions within the binary.
Added
- Ed25519 keypair support. Nodes now are capable to use the same key for both transaction submission and p2p communication.
- AGPL v3 LICENSE file.
Fixed
- Account assets order shall be deterministic for a deterministic global state
hash. Replaced the assets
HashMap
with aBTreeMap
.
Added
- Blockchain bridge service. A convenient asynchronous tcp/ip interface to send/receive any type of blockchain message. This service allows the user to "hot-plug" new specialized blockchain services: for example a performance tracer or an account status indexer.
Changed
- Stabilized message pack data serialization to anonymous format. The map keys are dropped during serialization.
Added
- Nodes reliable synchronization. The procedure is "lazy" and generally triggered when a node sees a block that doesn't have yet. An exception is performed at boot time, in this case the node asks in the wild for the last available block.
- Defined a message format for blockchain interactions from external components. The messages allows both solicited (direct requests) and unsolicited (internal events pubsub) exchange of blockchain data structures such as transactions, receipts, blocks and accounts.
- New "verify" WM host function available for smart contracts development. The function allows to verify ecdsa-p384 digital signatures without adding any additional crate dependency to the contract sources.
Changed
- Bump "wasmtime" from v0.28 to v0.29.
Added
- Subscription to blockchain events using a pub/sub architecture. Events are sent to subscribers using internal channels.
- CLI application is now capable to submit a transactions batch specified within a configuration file. This feature allows to easily set up a node that is still in the "bootstrap" phase by using a set of well known transactions.
- CLI arbitrary transaction building capability.
- CLI now can be configured to use: http, stdio, or file channels.
Changed
- Removed all but one transactions submission from node boot sequence. The blockchain node now boots in vanilla state. The node wasm loader is set to the "bootstrap-loader" until the node has not produced the genesis block.
Added
- Digital signature verification for transactions without explicitly named fields (i.e. message pack compact representation).
- Internal pub/sub mechanism to internally propagate blockchain events.
- Forward transactions using p2p service via internal pub/sub mechanism.
- Using "libp2p" v0.39 as the p2p service backend.
Changed
- Fully asynchronous architecture.
- Node loads contract from the blockchain. Filesystem registry is now only used to optionally register new contracts during startup using transactions targeting the service contract.
- WmLocal machine loads wasm binaries using a user callback provided at initialization time. Previous implementation was loading the contracts code from the filesystem.
- WM and DB are now strictly owned by the blockchain service. REST service submits requests to the blockchain service via message passing using asynchronous channels.
- Switching from "rocket" to "tide" HTTP server. Reasons: async-std, less dependencies and stable Rust channel.
- Switching the CLI http client from "reqwest" to "ureq".
Added
- Smart contracts composability: capability to invoke smart contract methods from other smart contract methods.
- Definition of TRINCI Assets Interface (TAI) with locking capability.
- Basic asset smart contract using TAI interface.
- Flexible asset types controlled entirely from the smart contract.
- Time oracle smart contract.
- Service smart contract to manage global blockchain data.
- Default smart contract modified to allow arbitrary user data management.
Changed
- Use multihash format to keep a door open to future algorithms upgrades.
- Default hash algorithm set to Sha256.
- Default
Hash
set to zero lengthIdentity
. - Bump "wasmtime" from v0.27 to v0.28.
Added
- Implementation of core types: transaction, receipt, block, account.
- Unconfirmed transactions queue and block service for new blocks generation.
- Persistence of core structure using "rocksdb" with "exonum-merkledb" v1.0.0.
- REST web service for new transactions submission and read access to core structures using "rocket" v0.4.10.
- Sandboxed execution of arbitrary smart contracts using "wasmtime" v0.27.0.
- Project-specific error type with capability to propagate subsystems errors.
- Support for ecdsa secp384r1 digital signature using "ring" v0.16.20.
- Account id generation as a function of ecdsa public key.
- Rust smart contracts sdk for third-party developers.