Skip to content
This repository has been archived by the owner on Apr 17, 2019. It is now read-only.

Hyperledger Iroha v1.0 Release Candidate 1

Compare
Choose a tag to compare
@kamilsa kamilsa released this 12 Dec 15:47
· 198 commits to master since this release
8677175

We are happy to introduce the first release candidate for Hyperledger Iroha!
There were several major features implemented for the first production version of Iroha:

Multi-signature Transaction (MST) is ready for use!

Now you can request several signatures to verify the transaction. And transactions can receive 2 more statuses: MST_PENDING for transactions waiting for more signatures and ENOUGH_SIGNATURES_COLLECTED for transactions that have already received the number of signatures requested ( #1649).

We have made MST possible with the following changes:


  • adding Storage for Pending Transactions: #1598
  • fixed sending batches to the Storage and retrieving them:  #1661
  • fixed retrieval of pending MST transactions: #1661
  • MST, reworked with batches: #1642 and client tests for MST: #1652
 and other improvements.

Here is the example of MST use case: Alice and Bob are performing exchange between bitcoin and dogecoin using MST to perform exchange only when both participants agreed on the transfer #1761

Important note: MST is functional. However, there is a known issue: when user sends a completed MST transaction it's version without all signatures is not removed from MST storage, so when one asks for his pending transactions he will still see it. As a temporary workaround, you can remove all signatures after getting pending transactions and then sign them with your signature and send to Iroha.

New fully BFT On-Demand Ordering Service is here!

Impressive preparations were made for the assembly of fully BFT (Byzantine-fault tolerant) Ordering service:

  • BFT OS algorithm and interfaces: #1670
  • on-demand ordering gate: #1675
  • the transport: #1635 and on-demand connection manager: #1645
  • the synchroniser: #1647
  • BFT OS components: #1703
  • Consensus Round as Key in YacStorages: #1729
  • BFT YacGate: #1731
  • BFT YaC: #1831

And, finally, we merged the new BFT Ordering Service: #1923

There were some serious API changes, so please make sure that your code is compatible with:

  • Iroha versions in the block: #1893
  • GetAccountTransactions query pagination: #1903
  • Renamed client services: #1881
  • Storing rejected transactions' hashes in the block: #1815

Replaced builders with factories

Now the code runs faster with changed design of its components.
Here are our new factories within the code:

  • factory for a block: #1622
  • factory for transaction status creation: #1717
  • factory for query responses and tests: #1724
  • abstract factory for creating batches from transactions: #1743
  • transport factory: #1750

Error Responses

Real error reasons for real people using Iroha - introducing Query Error Responses so you could know why the query failed: #1770
Stateful Error Codes in Postgres Command Executor, Endpoint and to SFV: #1813, #1817, #1821
Stateful Response Error Codes: #1837

Replay prevention:

In different Iroha components: #1857, #1868, #1865, #1868
Feature of storing rejected transactions' hashes in blockchain: #1815
Rejected txs index: #1846

Preparations for backward compatibility:

Added Iroha version into the block: #1893. Then we updated proto block validator for the new structure of the block: #1905.

And some of the smaller though very important ones…

Optimised command and query SQL

A complex work was done to optimise the work of SQL for both commands and queries: #1605

Consensus Cache in Block Loader and YAC Gate

We constantly move towards faster Iroha.

Now there is no need for a node to wait time to ask another node for synchronisation thanks to the consensus cache. So let us say good-bye to load_delay: #1627

SWIG-free Iroha library for Python

Platform independent. Lighter.
Better solution if you want to use Python with Iroha: #1761

SubtractAssetQuantity command

Was not previously implemented in Iroha-cli but now works correctly with AddAssetQuantity: #1713

Domain asset permissions

Now it is possible to restrict ability to add or subtract assets within domain: #1924

Benchmarks to measure performance

We are introducing a benchmark that executes GetAccount query and a benchmark that executes AddAssetQuantity command to have more information on the performance: #1651  and #1648

Empty Roles

The purpose of append role command is to promote an account to some created role in the system, where a role is a set of permissions account has to perform an action (command or query). It was impossible to add a role without permissions to account. Now it is possible: #1654

reducedHash

reducedHash wrapper is now visible to libraries and can be called by clients: #1659

TransactionBatchParser

Splits a list of transactions by possible adjacent batches: #1750

Genesis Parser

It will generate a nice md file with tables of accounts, permissions and other parameters of the genesis block: #1775

Query pagination:

Now you can get transaction query results using pagination: #1903, #1927
Introduce queries pagination by @nickaleks · Pull Request #1927 ·...

Improved tests

Here are some of the most influential results:

  • the ability to send transaction sequences to the ITF and check stateless valid/invalid status: #1660
ITF feature of checking all the specified statuses: #1720
  • Fuzzing targets for ordering service endpoints, consensus, MST and for BlockLoader endpoints: #1829, #1839, #1845, #1840

Fixes

Please also make sure to check out some important fixes and see if your Iroha is not affected by them:

  • freeConnections method, which disposes all currently used connections was fixed: #1727
  • send tx sequence method: #1685
  • Consensus VoteOther case: #1834
  • ITF bugs related to BFT OS: #1826
  • tx-example.py and blocks-query.py: #1844
  • verbosit flag is now working: #1942

DevOps news

  • CMake version
Minimum CMake version requirement is now 3.11.2 to use cool new features of it in Iroha: #1667
  • Iroha on Kubernetes cluster

  • Now Iroha can be run on Kubernetes: #1697

Please provide us with your feedback so we could have a great stable version for Hyperledger Iroha 1.0
Contact us via mailing list: [email protected]
Or in chat: https://chat.hyperledger.org/channel/iroha (for general discussions), https://chat.hyperledger.org/channel/iroha-contributors (for contributors).