Add documentation on IBFT parameters (#835)

* Include documentation on IBFT parameters
* Update links from other pages
This commit is contained in:
Peter Fox 2019-10-14 18:42:23 +01:00 committed by fixanoid
parent 99f7fd6733
commit 7d773ae432
5 changed files with 74 additions and 3 deletions

View File

@ -44,7 +44,7 @@ The official docker containers can be found under https://hub.docker.com/u/quoru
* [Tessera](https://github.com/jpmorganchase/tessera): Java implementation of peer-to-peer encrypted message exchange for transaction privacy
* Quorum supported consensuses
* [Raft Consensus Documentation](https://docs.goquorum.com/en/latest/Consensus/raft/)
* [Istanbul BFT Consensus Documentation](https://github.com/ethereum/EIPs/issues/650): [RPC API](https://docs.goquorum.com/en/latest/Consensus/istanbul-rpc-api/) and [technical article](https://medium.com/getamis/istanbul-bft-ibft-c2758b7fe6ff). __Please note__ that updated istanbul-tools is now hosted in [this](https://github.com/jpmorganchase/istanbul-tools/) repository
* [Istanbul BFT Consensus Documentation](https://github.com/ethereum/EIPs/issues/650): [RPC API](https://docs.goquorum.com/en/latest/Consensus/ibft/istanbul-rpc-api.md) and [technical article](https://medium.com/getamis/istanbul-bft-ibft-c2758b7fe6ff). __Please note__ that updated istanbul-tools is now hosted in [this](https://github.com/jpmorganchase/istanbul-tools/) repository
* [Clique POA Consensus Documentation](https://github.com/ethereum/EIPs/issues/225) and a [guide to setup clique json](https://modalduality.org/posts/puppeth/) with [puppeth](https://blog.ethereum.org/2017/04/14/geth-1-6-puppeth-master/)
* Zero Knowledge on Quorum
* [ZSL](https://github.com/jpmorganchase/quorum/wiki/ZSL) wiki page and [documentation](https://github.com/jpmorganchase/zsl-q/blob/master/README.md)

View File

@ -5,7 +5,7 @@ With no need for POW/POS in a permissioned network, Quorum instead offers multip
* __Raft-based Consensus__: A consensus model for faster blocktimes, transaction finality, and on-demand block creation. See [Raft-based consensus for Ethereum/Quorum](../raft) for more information
* __Istanbul BFT (Byzantine Fault Tolerance) Consensus__: A PBFT-inspired consensus algorithm with transaction finality, by AMIS. See [Istanbul BFT Consensus documentation](https://github.com/ethereum/EIPs/issues/650), the [RPC API](../istanbul-rpc-api), and this [technical web article](https://medium.com/getamis/istanbul-bft-ibft-c2758b7fe6ff) for more information
* __Istanbul BFT (Byzantine Fault Tolerance) Consensus__: A PBFT-inspired consensus algorithm with transaction finality, by AMIS. See [Istanbul BFT Consensus documentation](https://github.com/ethereum/EIPs/issues/650), the [RPC API](../ibft/istanbul-rpc-api.md), and this [technical web article](https://medium.com/getamis/istanbul-bft-ibft-c2758b7fe6ff) for more information
* __Clique POA Consensus__: a default POA consensus algorithm bundled with Go Ethereum. See [Clique POA Consensus Documentation](https://github.com/ethereum/EIPs/issues/225) and a [guide to setup clique json](https://hackernoon.com/hands-on-creating-your-own-local-private-geth-node-beginner-friendly-3d45902cc612) with [puppeth](https://blog.ethereum.org/2017/04/14/geth-1-6-puppeth-master/)

View File

@ -0,0 +1,69 @@
# IBFT parameters
## CLI options
### Block period
`--istanbul.blockperiod 1`
Setting the block period is used for how long blocks should be minted by the validators. It is also used for validation
of block times by all nodes, so should not be changed after deciding a value for the network.
The setting is a positive integer, and measures the minimum numbers of seconds before the next block is considered
valid.
The default value is `1`.
### Request timeout
`--istanbul.requesttimeout 10000`
The request timeout is the timeout at which IBFT will seek to trigger a new round if the previous one did not complete.
This period increases are the timeout is hit more often. This parameter sets the minimum timeout in the case of normal
operation and is measured in milliseconds.
The default value is `10000`.
## Genesis file options
Within the `genesis.json` file, there is an area for IBFT specific configuration, much like a Clique network
configuration.
The options are as follows:
```
{
"config": {
"istanbul": {
"epoch": 30000,
"policy": 0,
"ceil2Nby3Block": 0
},
...
},
...
}
```
### Epoch
The epoch specifies the number of blocks that should pass before pending validator votes are reset. When the
`blocknumber%EPOCH == 0`, the votes are reset in order to prevent a single vote from becoming stale. If the existing
vote was still due to take place, then it must be resubmitted, along with all its votes.
### Policy
The policy refers to the proposer selection policy, which is either `ROUND_ROBIN` or `STICKY`.
A value of `0` denotes a `ROUND_ROBIN` policy, where the next expected proposer is the next in queue. Once a proposer
has submitted a valid block, they join the back of the queue and must wait their turn again.
A value of `1` denotes a `STICKY` proposer policy, where a single proposer is selected to mint blocks and does so until
such a time as they go offline or are otherwise unreachable.
### ceil2Nby3Block
The `ceil2Nby3Block` sets the block number from which to use an updated formula for calculating the number of faulty
nodes. This was introduced to enable existing network the ability to upgrade at a point in the future of the network, as
it is incompatible with the existing formula. For new networks, it is recommended to set this value to `0` to use the
updated formula immediately.
To update this value, the same process can be followed as other hard-forks.

View File

@ -21,7 +21,9 @@ nav:
- Consensus:
- Consensus: Consensus/Consensus.md
- Raft: Consensus/raft.md
- Istanbul: Consensus/istanbul-rpc-api.md
- Istanbul BFT:
- Consensus/ibft/istanbul-rpc-api.md
- Consensus/ibft/ibft-parameters.md
- Transaction Processing: Transaction Processing/Transaction Processing.md
- Security Framework:
- Overview: Security/Framework/Overview.md