You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 24 Next »

Target release2.0.0
Epic
Document status
DRAFT
Document owner
Designer
Developers
QA

Goals

Hyperledger Iroha v2 aims to be an even more simple, highly performant distributed ledger platform than Iroha v1. V2 carries on the tradition of putting on emphasis on having a library of pre-defined smart contracts in the core, so that developers do not have to write their own code to perform many tasks related to digital identity and asset management.

Background and strategic fit

https://github.com/hyperledger/iroha/blob/iroha2-dev/iroha_2_whitepaper.md#11-relationship-to-hyperledger-fabric-hyperledger-sawtooth-hyperledger-besu-and-others

Assumptions

Requirements

Functional

Peer to Peer Network

Blocks Storage

ItemEPICImportanceRFCNotes
World State View

MUST


In-memory, read fast data representation of the current World's State.
Kura

HI2-1

HI2-17

HI2-18

HI2-5

MUST


Kura is a decorator on top of Disk Block Storage and provides validation and World State View synchronization functionality. 
Blocks Synchronization

HI2-2

HI2-43

MUST

Block Synchronization
//TODO Egor Ivkov please add small note about the gossip design and concerns.
Merkle Tree

MUST

Merkle Tree

Consensus

ItemEPICImportanceRFCNotes
SumeragiHI2-3

MUST



Queries

ItemEPICImportanceRFCNotes
Iroha QueriesHI2-31

MUST


Iroha Queries provide information about World State View based on client permissions.

Smart Contracts

ItemEPICImportanceRFCNotes
Iroha Special Instructions mechanism

MUST



Out of the box set of Iroha Special Instructions

HI2-28

HI2-29

HI2-35

MUST


Several Tiers of Iroha Special Instructions provide:

  • Basic building blocks that can be used to build Custom Iroha Special Instructions
  • Maintenance related Iroha Special Instructions (Add Peer, Change Build Block Time, etc.)
  • Iroha Modules related Iroha Special Instructions (Bridge, DEX, etc.)
PermissionsHI2-36

MUST

Permissions and Event ListenersPermissions in Iroha implemented based on Assets and Iroha Special Instructions.
TriggersHI2-37

COULD

Permissions and Event ListenersTriggers in Iroha implemented based on Assets and Iroha Special Instructions.
Domain Specific Language

COULD

DSL StructureCustom Iroha Special Instructions and usage of the full set of Iroha Special Instructions should be easy for developers.
Advanced Permissions Model

COULD

Expand Iroha Permission modelFull-fledged rights model in Iroha will greatly reduce the amount of server development for Iroha-based applications.

Modules

ItemEPICImportanceADR/RFCNotes
Bridge

MUST

BridgesMechanism for communication between third-party blockchains.

Maintenance

ItemEPICImportanceRFCNotes
Maintenance Endpoint

HI2-26

HI2-27

HI2-46

MUST

Maintenance Endpoint

Clients

ItemEPICImportanceADR/RFCNotes
Rust Client LibraryHI2-32

MUST


Iroha Client encapsulates network related functionality and provides "local" Rust Interface for:

  • Submitting of Iroha Special Instructions to Iroha Peer
  • Querying Data from Iroha Peer
  • Maintenance Endpoint API
`no-std` client

MUST

Migration from Strings
Mobile SDK

HI2-33

HI2-9

HI2-8

MUST



Web SDK

HI2-34

HI2-10

MUST

Web API

Non Functional

Security

Target Platforms

Iroha deployment should support GNU/Linux, MacOS and Windows machines with x86 and Arm64 CPUs.

Transactions Processing

Iroha Peer should be able to process 20,000 transactions per second.

Blocks Processing

Iroha should be able to commit a new block every 3 seconds.

Development related

Benchmarks

Maintenance

  • Logging -  Unable to render Jira issues macro, execution error.

Continuous Delivery

Longevity Stand

Distributed testing

  • 10 servers, each on a different machine and in different geographies.
  • Run data through them for several minutes to really get some meaningful data.
  • Here is what each peer should do:
    - sync with peers about latest blocks
    - gossip about (forward) transactions that are pending that they have
    - propose or vote on a block (as part of consensus)
    - ping and verify peers as part of the Hijiri reputation system (basically something like eigentrust++)
    - share time information as part of a p2p network time service

User interaction and design

Iroha application crate

.
├── Cargo.toml
├── config.json
├── docs
│   └── references
└── src
    ├── account.rs
    ├── asset.rs
    ├── block.rs
    ├── config.rs
    ├── crypto.rs
    ├── domain.rs
    ├── isi.rs
    ├── kura.rs
    ├── lib.rs
    ├── main.rs
    ├── merkle.rs
    ├── peer.rs
    ├── query.rs
    ├── queue.rs
    ├── sumeragi.rs
    ├── torii.rs
    ├── tx.rs
    └── wsv.rs

Network crate

.
├── Cargo.toml
└── src
    └── lib.rs

Macroses

.
├── Cargo.toml
├── iroha_derive
│   ├── Cargo.toml
│   ├── src
│   │   └── lib.rs
│   └── tests
│       ├── log.rs
│       └── serialize.rs
└── src
    └── lib.rs

Iroha clients

Iroha Rust Client

.
├── benches
│   └── torii.rs
├── Cargo.toml
├── config.json
├── src
│   ├── client.rs
│   └── lib.rs
├── target
│   └── criterion
└── tests
    ├── add_asset.rs
    ├── high_load_transfer.rs
    └── transfer_asset.rs

Non functional requirements


Questions

Below is a list of questions to be addressed as a result of this requirements document:

QuestionOutcome

Not Doing

  • No labels