...
- Public and Private keys of Iroha Peer
- Kura configuration:
- Kura Mode (strict or fast)
- Block Store Path
- Sumeragi configuration:
- Peer Id
- Block Time
- List of Trusted Peers
- Maximum Amount of Faulty Peers
- Commit Time
- Transaction Receipt Time
- Torii configuration
- Client-side URL
- Peer-side URL
- Maintenance URL
- Block synchronization configuration:
- Queue configuration:
- Maximum transactions in block
- Transactions time to live
- Logger configuration:
- Maximum Logging Level
- Terminal Color Enabled
- Date Time Format
- Initial configuration is out-of-scope because will be solved in Genesis Block and Network Setup
Documentation for configuration can be found here.
Now we can analyze each parameter with several criterias:
Parameter | Possible Values | Default Value | Should it be synchronized between Peers | Should it pass consensus | Can it be applied without restart | Will it affect clients |
---|
Key Pair | Valid Key Hash | No | block_sync.batch_size
| unsigned 32 bit integer | 4 | Yes? |
NoKura Mode | strict/fast | No | | No |
block_sync.gossip_period
| unsigned 128 bit integer | 10_000 | Yes | Yes |
NoBlock Store Pathkura.block_store_path
| Valid Unix path | "./blocks" | No | No | With additional development | No |
Peer Id | Valid URL + Key Hash | kura.init_mode
| strict/fast | strict | No |
Yes (Other Peers should update old Id to the new one) | No | With additional development | No |
logger.max_log_level
| TRACE/INFO/DEBUG/WARN/ERROR | DEBUG | No | No | Yes |
List of Trusted Peers URL + Key Hash |
| No | No | Yes | Yes |
queue.maximum_transactions_in_block
| unsigned 32 bit integer | 8192 | Yes | Yes | Yes | No |
Block Timequeue.maximum_transactions_in_queue
| unsigned 32 bit integer | 65536 |
|
| Yes |
|
queue.transaction_time_to_live
| unsigned 128 bit integer | 86400000(ms) | Yes | Yes | Yes | No |
Maximum amount of Faulty Peerssumeragi.block_time
| unsigned |
32 128 bit integer | 1000(ms) | Yes | Yes | Yes | No |
Commit Timesumeragi.commit_time
| unsigned 128 bit integer | 1000(ms) | Yes | Yes | Yes | No |
Transaction Receipt Timesumeragi.max_faulty_peers
| unsigned |
128 32 bit integer | 0 | Yes | Yes | Yes | No |
Client-side URL | Valid URL | No | sumeragi.max_instruction_number_per_tx
| unsigned 32 bit integer | 4096 | Yes |
| Yes |
|
sumeragi.n_topology_shifts_before_reshuffle
| unsigned 32 bit integer | 1 |
NoPeer-side URL
|
sumeragi.peer_id
| Valid URL + Key Hash |
| Yes (Other Peers should update old Id to the new one) | No | With additional development | Yes |
No | Maintenance URL | sumeragi.trusted_peers
| Valid URL + Key Hash |
NoNoGossip Period | No |
sumeragi.tx_receipt_time
| unsigned 128 bit integer | 200(ms) | Yes | Yes | Yes | No |
Batch Sizetorii.api_url
| Valid URL | "127.0.0.1:8080" | No | No |
| Yes |
torii.max_instruction_number
| unsigned 32 bit integer |
Yes?Yes | No | Maximum Transactions Block
|
torii.max_sumeragi_message_size
| unsigned 32 bit integer |
Yes?Yes | No | Transaction Time to Live |
|
torii.max_transaction_size
| unsigned 32 |
unsigned 128 Yes?32768 |
|
| Yes |
|
torii.p2p_url
| Valid URL | "127.0.0.1:1337" | Yes |
YesMaximum Logging Level | torii.Maintenance URL
| Valid URL |
TRACE/INFO/DEBUG/WARN/ERRORNo | Terminal Color Enabled | true/false | No | No | Yes | No |
Date Time Format | String | No | No | Yes | No |
Solution
Decisions
Alternatives
Concerns
Assumptions
Risks
...
| Byte size and UTF length | 4096, 1048576 |
|
| Yes |
|
| Byte size and UTF length | 4096, 1048576 |
|
| Yes |
|
wsv.length_limits
| Range | [1; 128] |
|
| Yes |
|
Solution
So solution may be to use Iroha Special Instructions for management consensus dependent parameters like "Gossip Period", storing set of parameters under a Peer entity in World State View and propagating these parameters and their updates into subsystems via Iroha channels.
Parameters that can be managed without consensus can avoid usage of Iroha Special Instructions and implemented separately as API for system administrators.
Decisions
- Split parameters into consensus dependent and maintenance related
- Use Iroha Special Instructions for consensus related
- Put management of other parameters under Maintenance Endpoint
- Implement "hot reload" mechanisms in Iroha subsystems
Alternatives
- Use Iroha Special Instructions for all parameters - brings additional set of instructions to maintain, increases load on blocks store and blocks synchronization, won't guarantee non-functional requirements from system administrators perspective (each update will take time needed to finalize block)
- Use Maintenance Endpoint for all parameters - brings additional complexity in terms of parameters synchronization and open security related issues (who can change "Batch Size" on all Peers?)
- Do not synchronize any parameters between Peers - may be a good option
Concerns
Lack of real use cases and strong opinions on topic from potential users gave no ability to make a really welcoming decision.
Assumptions
Maintenance Endpoint will be "unstable" during 2.0 release.
Risks
- Solution will not cover all needs `[4;6]`
- Requirements will be simpler than expected `[3;3]`
- "Hot reload" mechanisms will require a lot of work `[6;7]`
Additional Information
Image Added