Add README
This commit is contained in:
parent
5506e5d5a1
commit
f15dab0734
146
README.md
146
README.md
|
@ -1,2 +1,144 @@
|
|||
# quorum-testnet
|
||||
Specification and node configs to setup a node of a Quorum based testnet
|
||||
# Quorum-Ethereum AMB bridge
|
||||
|
||||
So far, the plan of Quuorum-Ethereum bridge is the following:
|
||||
* Create public quorum testnet using IBFT consensus.
|
||||
* Select existing etherum testnet (Kovan/Sokol).
|
||||
* Deploy AMB bridge between two testnets.
|
||||
* Deploy mediators/tokens in order to prove that everything works as expected.
|
||||
* Deploy chain explorer for quorum chain (cakeshop/blockscout or both)
|
||||
* Deploy faucet for quorum testnet. (Even though gasPrice is `0`, users may want to have native coins for other needs)
|
||||
|
||||
## Quorum testnet
|
||||
For quorum testnet, the following genesis block (or a similar one) is going to be used:
|
||||
```jsonld=
|
||||
{
|
||||
"config": {
|
||||
"chainId": 111,
|
||||
"eip150Block": 0,
|
||||
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"eip155Block": 0,
|
||||
"eip158Block": 0,
|
||||
"homesteadBlock": 0,
|
||||
"byzantiumBlock": 0,
|
||||
"constantinopleBlock": 0,
|
||||
"petersburgBlock": 0,
|
||||
"istanbulBlock": 0,
|
||||
"istanbul": {
|
||||
"epoch": 30000,
|
||||
"policy": 0,
|
||||
"ceil2Nby3Block": 0
|
||||
},
|
||||
"maxCodeSizeConfig": [
|
||||
{
|
||||
"block": 0,
|
||||
"size": 35
|
||||
}
|
||||
],
|
||||
"isQuorum": true
|
||||
},
|
||||
"nonce": "0x0",
|
||||
"timestamp": "0x5eda1803",
|
||||
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000f85ad5947de1cd14693fbe1240011afe8c68d61012e51babb8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0",
|
||||
"gasLimit": "0x989680",
|
||||
"difficulty": "0x1",
|
||||
"mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
|
||||
"coinbase": "0x0000000000000000000000000000000000000000",
|
||||
"alloc": {
|
||||
"7de1cd14693fbe1240011afe8c68d61012e51bab": {
|
||||
"balance": "0x446c3b15f9926687d2c40534fdb564000000000000"
|
||||
}
|
||||
},
|
||||
"number": "0x0",
|
||||
"gasUsed": "0x0",
|
||||
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
|
||||
}
|
||||
```
|
||||
|
||||
Exact geth parameters that are used for the quorum nodex configuration can be found in `configs/geth-config.toml`.
|
||||
Some important values are:
|
||||
```
|
||||
[Eth]
|
||||
NetworkId = 111 # chain id was selected to be 111, network id == chain id
|
||||
...
|
||||
|
||||
[Eth.Miner]
|
||||
GasFloor = 10000000 # block gas limit is set to be 10000000
|
||||
GasCeil = 10000000
|
||||
GasPrice = 0 # quorum transactions should have 0 gas price, therefore, miner should accept transactions with such gas price
|
||||
...
|
||||
|
||||
[Eth.TxPool]
|
||||
...
|
||||
PriceLimit = 0 # there are no price limits for accepted transactions, since transactions should have zero gas price
|
||||
PriceBump = 0
|
||||
AccountSlots = 16 # any account can have 16 guaranteed executable transactions in the queue
|
||||
GlobalSlots = 4096 # upper bound on the queue size for all pending executable transactions
|
||||
AccountQueue = 64 # any account can have 64 guaranteed non-executable transactions in the queue
|
||||
GlobalQueue = 1024 # upper bound on the queue size for all pending executable transactions
|
||||
Lifetime = 10800000000000 # maximum time, for which non-executable transaction can be hold, 3 hours
|
||||
TransactionSizeLimit = 64 # maximum transaction size if 64kb
|
||||
MaxCodeSize = 35 # maximum contract code size if 35kb
|
||||
|
||||
[Eth.GPO]
|
||||
Blocks = 0 # gas price oracle is not needed when gas price should be zero
|
||||
Percentile = 0
|
||||
|
||||
[Eth.Istanbul]
|
||||
RequestTimeout = 10000 # timeout for IBFT round, 10s
|
||||
BlockPeriod = 5 # target block period, 5s
|
||||
|
||||
[Node]
|
||||
...
|
||||
HTTPPort = 8545 # HTTP RPC listens on port 8545
|
||||
HTTPModules = ["eth", "net"] # the same modules are accessible on public Infura providers
|
||||
WSPort = 8645 # WS RPC listens on port 8545
|
||||
WSModules = ["eth", "net"] # the same modules are accessible on public Infura providers
|
||||
...
|
||||
```
|
||||
|
||||
Enhanced permissions contract-based model is not going to be used from the very beginning. If needed, it can be enabled later, by deploying required smart-contract and restarting the node.
|
||||
|
||||
## Deploy AMB
|
||||
|
||||
So far, after some tests in https://github.com/k1rill-fedoseev/quorum-bridge, no significant compatibility problems were found.
|
||||
AMB contracts should be slightly modified in order to allow set of `gasPrice=0`. Similar change should be applied to the deployment scripts.
|
||||
Quorum genesis block includes recent hardFork blocks (`istanbulBlock`), so there are no any invalid opcodes in the contracts.
|
||||
|
||||
Tests confirmed that, bridge successfully operates between these two chains. It is possible to send messages in both directions. Different mediator contracts work as well.
|
||||
|
||||
## Deploy chain explorer
|
||||
|
||||
For ease of interaction with the public Quorum testnet, the chain explorer will be also deployed. Blockscout is the primary option.
|
||||
|
||||
## Deploy faucet
|
||||
|
||||
We are planning to use either serverless faucet https://github.com/PhilippLgh/serverless-faucet with terminal-friendly UI as well https://github.com/PhilippLgh/create-eth-test-account. Backup plan is to setup POA-faucet (https://github.com/poanetwork/poa-faucet), that is used for Quorum and.
|
||||
|
||||
## Quorum node version remarks
|
||||
|
||||
The tests were performed on different versions of quorum's official docker image. The following bugs were noted:
|
||||
* `2.5.0` - one of the Permission contracts cannot be deployed for some reason.
|
||||
* `2.6.0` - estimateGas RPC method fails when transaction value is not specified. Corresponding PR was already merged, but no other release appeared yet.
|
||||
* `latest` - everything works as expected, some side-effects were found. Pending transactions, that were already processed, may be processed once again, https://github.com/jpmorganchase/quorum/issues/1008.
|
||||
|
||||
## Istanbul tools usage
|
||||
|
||||
Compiled binary from https://github.com/jpmorganchase/istanbul-tools is included into this repo.
|
||||
Example of usage:
|
||||
```bash
|
||||
# generate quorum genesis block, with 2 initial validators
|
||||
./istanbul setup --quorum --nodes --num 2 --verbose
|
||||
# this will print three important things:
|
||||
# validators, configs: address + nodekey + enode URL
|
||||
# static-nodes.json - file with enode URl for all validators
|
||||
# genesis.json - genesis block configuration, extraData field describes initial set of validators, make sure to regenerate it when using different nodekeys for validators
|
||||
|
||||
# decode extra data field to see initial set of validators
|
||||
./istanbul extra decode --extradata "0x00..."
|
||||
|
||||
# encode extra data for particular validators set
|
||||
./istanbul extra encode --validators "0x<validator 1>,0x<validator 2>,..."
|
||||
|
||||
# generate validator address, from its nodekey
|
||||
./istanbul address --nodekeyhex "<64 hex symbols>"
|
||||
```
|
||||
|
|
|
@ -21,7 +21,8 @@
|
|||
"size": 35
|
||||
}
|
||||
],
|
||||
"isQuorum": true
|
||||
"isQuorum": true,
|
||||
"txnSizeLimit": 64
|
||||
},
|
||||
"nonce": "0x0",
|
||||
"timestamp": "0x5eda1803",
|
||||
|
|
|
@ -15,9 +15,9 @@ EWASMInterpreter = ""
|
|||
EVMInterpreter = ""
|
||||
|
||||
[Eth.Miner]
|
||||
GasFloor = 700000000
|
||||
GasCeil = 800000000
|
||||
GasPrice = 1000000000
|
||||
GasFloor = 10000000
|
||||
GasCeil = 10000000
|
||||
GasPrice = 0
|
||||
Recommit = 3000000000
|
||||
Noverify = false
|
||||
|
||||
|
@ -35,28 +35,24 @@ Locals = []
|
|||
NoLocals = false
|
||||
Journal = "transactions.rlp"
|
||||
Rejournal = 3600000000000
|
||||
PriceLimit = 1
|
||||
PriceBump = 10
|
||||
PriceLimit = 0
|
||||
PriceBump = 0
|
||||
AccountSlots = 16
|
||||
GlobalSlots = 4096
|
||||
AccountQueue = 64
|
||||
GlobalQueue = 1024
|
||||
Lifetime = 10800000000000
|
||||
TransactionSizeLimit = 64
|
||||
MaxCodeSize = 24
|
||||
MaxCodeSize = 35
|
||||
|
||||
[Eth.GPO]
|
||||
Blocks = 20
|
||||
Percentile = 60
|
||||
Blocks = 0
|
||||
Percentile = 0
|
||||
|
||||
[Eth.Istanbul]
|
||||
RequestTimeout = 10000
|
||||
BlockPeriod = 5
|
||||
|
||||
[Shh]
|
||||
MaxMessageSize = 1048576
|
||||
MinimumAcceptedPOW = 2e-01
|
||||
RestrictConnectionBetweenLightClients = true
|
||||
|
||||
[Node]
|
||||
UserIdent = "node"
|
||||
DataDir = "/qdata/dd"
|
||||
|
@ -90,8 +86,3 @@ EnableMsgEvents = false
|
|||
ReadTimeout = 30000000000
|
||||
WriteTimeout = 30000000000
|
||||
IdleTimeout = 120000000000
|
||||
|
||||
[Dashboard]
|
||||
Host = "localhost"
|
||||
Port = 8080
|
||||
Refresh = 5000000000
|
||||
|
|
Loading…
Reference in New Issue