Code Monkey home page Code Monkey logo

istanbul-tools's Introduction

istanbul-tools

Test Status

istanbul-tools contains tools for configuring Istanbul BFT (IBFT) network, integration tests for both IBFT Geth and Quorum, and load testing utilities for IBFT Geth.

Build istanbul command line interface

$ make
$ ./build/bin/istanbul --help

NAME:
   istanbul - the istanbul-tools command line interface

USAGE:
   istanbul [global options] command [command options] [arguments...]

COMMANDS:
     extra    Istanbul extraData manipulation
     setup    Setup your Istanbul network in seconds
     help, h  Print this message

GLOBAL OPTIONS:
   --help, -h  show help

COPYRIGHT:
   Copyright 2017 The AMIS Authors

extra subcommand

Click here to expand

extra helps generate RLP-encoded extra data in ExtraData field of the genesis block. Extra data is composed of signer vanity and IstanbulExtra. IstanbulExtra is defined as follows:

type IstanbulExtra struct {
    Validators    []common.Address  // Validator addresses
    Seal          []byte            // Proposer seal 65 bytes
    CommittedSeal [][]byte          // Committed seal, 65 * len(Validators) bytes
}

Note: Seal and CommittedSeal are not considered in genesis block.

$ ./build/bin/istanbul extra

NAME:
   istanbul extra - Istanbul extraData manipulation

USAGE:
   istanbul extra command [command options] [arguments...]

COMMANDS:
     decode  To decode an Istanbul extraData
     encode  To encode an Istanbul extraData

OPTIONS:
   --help, -h  show help

extra examples

encode subcommand

Encode the given file to extra data.

$ ./build/bin/istanbul extra encode --config ./cmd/istanbul/example/config.toml

OUTPUT:
Encoded Istanbul extra-data: 0x0000000000000000000000000000000000000000000000000000000000000000f89af85494475cc98b5521ab2a1335683e7567c8048bfe79ed9407d8299de61faed3686ba4c4e6c3b9083d7e2371944fe035ce99af680d89e2c4d73aca01dbfc1bd2fd94dc421209441a754f79c4a4ecd2b49c935aad0312b8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0
decode subcommand

Decode extra data from the given input.

$ ./build/bin/istanbul extra decode --extradata 0x0000000000000000000000000000000000000000000000000000000000000000f89af85494475cc98b5521ab2a1335683e7567c8048bfe79ed9407d8299de61faed3686ba4c4e6c3b9083d7e2371944fe035ce99af680d89e2c4d73aca01dbfc1bd2fd94dc421209441a754f79c4a4ecd2b49c935aad0312b8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0

OUTPUT:
vanity:  0x0000000000000000000000000000000000000000000000000000000000000000
validator:  0x475cc98b5521ab2a1335683e7567c8048bfe79ed
validator:  0x07d8299de61faed3686ba4c4e6c3b9083d7e2371
validator:  0x4fe035ce99af680d89e2c4d73aca01dbfc1bd2fd
validator:  0xdc421209441a754f79c4a4ecd2b49c935aad0312
seal: 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

setup subcommand

Click here to expand

When --nodes --verbose flags are given, a static-nodes.json template as well as the validators' node keys, public keys, and addresses are generated. When --docker-compose is given, a docker-compose.yml for the validators is generated. When --save flag is given, all generated configs will be saved. Use Quorum when --quorum flag is given.

Note: the generated static-nodes.json template are set with IP 0.0.0.0, please make according change to match your environment.

setup examples

$ ./build/bin/istanbul setup --num 4 --nodes --verbose
validators
{
    "Address": "0x5e5d0e2b80005a7e1f93044ddd64b2df0f8e488d",
    "Nodekey": "e5f9b868651ea8f4883744f2753ead9dfcdf7b1d8a96de0e733f406938dca1eb",
    "NodeInfo": "enode://8759a8a6921be78ec4e66ec77ae26ba9b3b1a51d1f83b16683c6f25e5a1d95a4de2c5bf4c2c05e1b984fae440236d96063efe933425df72659ee9de824cda6e1@0.0.0.0:30303?discport=0"
}
{
    "Address": "0x1b706dd850229813ee7c4002cd2fedc91380bb5a",
    "Nodekey": "2c13ee666b2ce617bf1e0d7fe7c8f058be27ea3a1aaabbfc63570a65f0bdae38",
    "NodeInfo": "enode://40dd1e7ba45e5bcd242420986d9d03133ce49399c6197e43254d523e94f547532d4c47c8aaba4b000c5a718568a48013b035c86f3ed8b13248888a15a76761c1@0.0.0.0:30303?discport=0"
}
{
    "Address": "0xdfdf27987b042bb3706d3a7c4b60e80a645744de",
    "Nodekey": "8bbf54eace8738f9d3ee90d5b949951f43d89acdb4b883d9188a141bdcd0153e",
    "NodeInfo": "enode://d188378b3eef56584b8ebd3da3ad579d39d23511943573cdeae5b8a37b5df22c369bf8900c4f42a9d4d5e55bc3cd357f319de8f833db3232295be22c8accc006@0.0.0.0:30303?discport=0"
}
{
    "Address": "0x5950b8f849daf1a78e119648c79111721353df59",
    "Nodekey": "9179c038483a2547c39f77f121065231d84a9c8d9bd044e1ddc19f653a23c751",
    "NodeInfo": "enode://d855be48593e6f2dd6201334e9381a2f01dac4a847385a393b1f664503b7b7020326e9f3f84f2d5713bf360d16566ed2b84d7df0b8b8313a7a4c4cf087ccfe27@0.0.0.0:30303?discport=0"
}



static-nodes.json
[
    "enode://8759a8a6921be78ec4e66ec77ae26ba9b3b1a51d1f83b16683c6f25e5a1d95a4de2c5bf4c2c05e1b984fae440236d96063efe933425df72659ee9de824cda6e1@0.0.0.0:30303?discport=0",
    "enode://40dd1e7ba45e5bcd242420986d9d03133ce49399c6197e43254d523e94f547532d4c47c8aaba4b000c5a718568a48013b035c86f3ed8b13248888a15a76761c1@0.0.0.0:30303?discport=0",
    "enode://d188378b3eef56584b8ebd3da3ad579d39d23511943573cdeae5b8a37b5df22c369bf8900c4f42a9d4d5e55bc3cd357f319de8f833db3232295be22c8accc006@0.0.0.0:30303?discport=0",
    "enode://d855be48593e6f2dd6201334e9381a2f01dac4a847385a393b1f664503b7b7020326e9f3f84f2d5713bf360d16566ed2b84d7df0b8b8313a7a4c4cf087ccfe27@0.0.0.0:30303?discport=0"
]



genesis.json
{
    "config": {
        "chainId": 2017,
        "homesteadBlock": 1,
        "eip150Block": 2,
        "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "eip155Block": 3,
        "eip158Block": 3,
        "istanbul": {
            "epoch": 30000,
            "policy": 0
        }
    },
    "nonce": "0x0",
    "timestamp": "0x5a093aac",
    "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000f89af854945e5d0e2b80005a7e1f93044ddd64b2df0f8e488d941b706dd850229813ee7c4002cd2fedc91380bb5a94dfdf27987b042bb3706d3a7c4b60e80a645744de945950b8f849daf1a78e119648c79111721353df59b8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0",
    "gasLimit": "0x47b760",
    "difficulty": "0x1",
    "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "alloc": {
        "1b706dd850229813ee7c4002cd2fedc91380bb5a": {
            "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"
        },
        "5950b8f849daf1a78e119648c79111721353df59": {
            "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"
        },
        "5e5d0e2b80005a7e1f93044ddd64b2df0f8e488d": {
            "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"
        },
        "dfdf27987b042bb3706d3a7c4b60e80a645744de": {
            "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"
        }
    },
    "number": "0x0",
    "gasUsed": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
$ ./build/bin/istanbul setup --help
NAME:
   istanbul setup - Setup your Istanbul network in seconds

USAGE:
   istanbul setup [command options] [arguments...]

DESCRIPTION:
   This tool helps generate:

    * Genesis block
    * Static nodes for all validators
    * Validator details

    for Istanbul consensus.


OPTIONS:
   --num value       Number of validators (default: 0)
   --nodes           Print static nodes template
   --verbose         Print validator details
   --quorum          Use quorum
   --docker-compose  Print docker compose file
   --save            Save to files

Testing

Click here to expand

Integration tests

Istanbul BFT Geth Integration tests

Istanbul BFT Quorum Integration tests

Load tests

Istanbul-BFT-Benchmarking

istanbul-tools's People

Contributors

alanchchen avatar bailantaotao avatar markya0616 avatar tailingchen avatar yurenju avatar yutelin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

istanbul-tools's Issues

Project build issues

There are these errors when trying to build the project with "make" command:

cmd/istanbul/main.go:37: cannot use extra.ExtraCommand (type "github.com/getamis/istanbul-tools/vendor/github.com/urfave/cli".Command) as type "github.com/urfave/cli".Command in array or slice literal
cmd/istanbul/main.go:38: cannot use setup.SetupCommand (type "github.com/getamis/istanbul-tools/vendor/github.com/urfave/cli".Command) as type "github.com/urfave/cli".Command in array or slice literal
cmd/istanbul/main.go:39: cannot use []"github.com/urfave/cli".Command literal (type []"github.com/urfave/cli".Command) as type []"github.com/getamis/istanbul-tools/vendor/github.com/urfave/cli".Command in assignment
make: *** [istanbul] Error 2

ERROR[07-12|19:36:03] not a valid address err="recovery failed"

Using the istanbul tool, I generated the following:

genesis.json

{
    "config": {
        "chainId": 2017,
        "homesteadBlock": 1,
        "eip150Block": 2,
        "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "eip155Block": 3,
        "eip158Block": 3,
        "istanbul": {
            "epoch": 30000,
            "policy": 0
        },
        "isQuorum": true
    },
    "nonce": "0x0",
    "timestamp": "0x5b47921d",
    "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000f89af85494403a286b2f3e897deae61774270bf932b6101f0894f6e5d9850e5bfdd9df0d971be7f8f12d7845a8db9466feeaaafc27c57b818e95c51865ca004385eebe94f5aefe121fa4f748037787cd56087b5c5c5c78ceb8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0",
    "gasLimit": "0x47b760",
    "difficulty": "0x1",
    "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "alloc": {
        "403a286b2f3e897deae61774270bf932b6101f08": {
            "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"
        },
        "66feeaaafc27c57b818e95c51865ca004385eebe": {
            "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"
        },
        "f5aefe121fa4f748037787cd56087b5c5c5c78ce": {
            "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"
        },
        "f6e5d9850e5bfdd9df0d971be7f8f12d7845a8db": {
            "balance": "0x446c3b15f9926687d2c40534fdb564000000000000"
        }
    },
    "number": "0x0",
    "gasUsed": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

static-nodes.json:

[
	"enode://3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da@0.0.0.0:30303?discport=0",
	"enode://d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca@0.0.0.0:30303?discport=0",
	"enode://0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440@0.0.0.0:30303?discport=0",
	"enode://8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233@0.0.0.0:30303?discport=0"
]

Node keys:

0: 22e31c03cd1aff9eb1534518c13ef410e2b0992b2a4f4bf55d369b04ef09c19b
1: 55ab6d8d42616402875fab0e2e2b55fab344f4eb3ef216202ce06ee4615456b1
2: 73f9851f3f2ee28ff8d07a634c2ae9dd0e1f3baf2bfbc276b03f1f4499f4cff8
3: 26003844a57dfd0e97e08407a49a1d964c424f83b694f9aeb11766d7f0697785

I'm starting quorum-geth using:

geth --datadir /qdata/dd --port 30303 --identity tblrc --mine --minerthreads 1 --istanbul.requesttimeout 10000 --istanbul.blockperiod 1 --emitcheckpoints --rpc --rpcport 8545 --rpcaddr 0.0.0.0 --rpcapi admin,db,eth,debug,miner,net,shh,txpool,personal,web3,quorum --networkid 2017 --permissioned --nodiscover --verbosity 5 --unlock 0 --password /k8s/secrets/accountPassword

However, istanbul (in Quorum) is crashing:

TRACE[07-12|19:34:45] Started watching keystore folder         path=/qdata/dd/keystore
DEBUG[07-12|19:34:45] FS scan times                            list=498.056µs set=6.386µs diff=6.673µs
TRACE[07-12|19:34:45] Handled keystore changes                 time=116.458µs
DEBUG[07-12|19:34:45] FS scan times                            list=55.512µs  set=5.333µs diff=47.191µs
TRACE[07-12|19:34:45] Handled keystore changes                 time=2.695µs
INFO [07-12|19:34:45] Starting peer-to-peer node               instance=Geth/tblrc/v1.7.2-stable/linux-amd64/go1.9.2
INFO [07-12|19:34:45] Allocated cache and file handles         database=/qdata/dd/geth/chaindata cache=128 handles=1024
INFO [07-12|19:34:45] Initialised chain configuration          config="{ChainID: 2017 Homestead: 1 DAO: <nil> DAOSupport: false EIP150: 2 EIP155: 3 EIP158: 3 Byzantium: <nil> IsQuorum: true Engine: istanbul}"
INFO [07-12|19:34:45] Initialising Ethereum protocol           versions="[63 62]" network=2017
INFO [07-12|19:34:45] Loaded most recent local header          number=0 hash=39ee97…249d9b td=1
INFO [07-12|19:34:45] Loaded most recent local full block      number=0 hash=39ee97…249d9b td=1
INFO [07-12|19:34:45] Loaded most recent local fast block      number=0 hash=39ee97…249d9b td=1
DEBUG[07-12|19:34:45] Reinjecting stale transactions           count=0
INFO [07-12|19:34:45] Loaded local transaction journal         transactions=0 dropped=0
INFO [07-12|19:34:45] Regenerated local transaction journal    transactions=0 accounts=0
DEBUG[07-12|19:34:45] Recalculated downloader QoS values       rtt=20s confidence=1.000 ttl=1m0s
TRACE[07-12|19:34:45] Loaded voting snapshot form disk         number=0 hash=39ee97…249d9b
INFO [07-12|19:34:45] Starting P2P networking 
DEBUG[07-12|19:34:45] InProc registered *node.PrivateAdminAPI under 'admin' 
DEBUG[07-12|19:34:45] InProc registered *node.PublicAdminAPI under 'admin' 
DEBUG[07-12|19:34:45] InProc registered *debug.HandlerT under 'debug' 
DEBUG[07-12|19:34:45] InProc registered *node.PublicDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] InProc registered *node.PublicWeb3API under 'web3' 
DEBUG[07-12|19:34:45] InProc registered *ethapi.PublicEthereumAPI under 'eth' 
DEBUG[07-12|19:34:45] InProc registered *ethapi.PublicBlockChainAPI under 'eth' 
DEBUG[07-12|19:34:45] InProc registered *ethapi.PublicTransactionPoolAPI under 'eth' 
DEBUG[07-12|19:34:45] InProc registered *ethapi.PublicTxPoolAPI under 'txpool' 
DEBUG[07-12|19:34:45] InProc registered *ethapi.PublicDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] InProc registered *ethapi.PrivateDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] InProc registered *ethapi.PublicAccountAPI under 'eth' 
DEBUG[07-12|19:34:45] InProc registered *ethapi.PrivateAccountAPI under 'personal' 
DEBUG[07-12|19:34:45] InProc registered *backend.API under 'istanbul' 
DEBUG[07-12|19:34:45] InProc registered *eth.PublicEthereumAPI under 'eth' 
DEBUG[07-12|19:34:45] InProc registered *eth.PublicMinerAPI under 'eth' 
DEBUG[07-12|19:34:45] InProc registered *downloader.PublicDownloaderAPI under 'eth' 
DEBUG[07-12|19:34:45] InProc registered *eth.PrivateMinerAPI under 'miner' 
INFO [07-12|19:34:45] RLPx listener up                         self="enode://3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da@[::]:30303?discport=0"
DEBUG[07-12|19:34:45] InProc registered *filters.PublicFilterAPI under 'eth' 
DEBUG[07-12|19:34:45] InProc registered *eth.PrivateAdminAPI under 'admin' 
DEBUG[07-12|19:34:45] InProc registered *eth.PublicDebugAPI under 'debug' 
TRACE[07-12|19:34:45] New dial task                            task="staticdial 3c1d6e1cbff5a9e5 100.68.165.149:30303"
TRACE[07-12|19:34:45] New dial task                            task="staticdial d25bf65162bfde47 100.67.134.175:30303"
TRACE[07-12|19:34:45] New dial task                            task="staticdial 0ea9aeb4becdce9b 100.64.19.101:30303"
TRACE[07-12|19:34:45] New dial task                            task="staticdial 8dd0af45bdbe0a3f 100.65.148.159:30303"
DEBUG[07-12|19:34:45] InProc registered *eth.PrivateDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] InProc registered *ethapi.PublicNetAPI under 'net' 
DEBUG[07-12|19:34:45] IPC registered *node.PrivateAdminAPI under 'admin' 
DEBUG[07-12|19:34:45] IPC registered *node.PublicAdminAPI under 'admin' 
DEBUG[07-12|19:34:45] IPC registered *debug.HandlerT under 'debug' 
DEBUG[07-12|19:34:45] IPC registered *node.PublicDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] IPC registered *node.PublicWeb3API under 'web3' 
DEBUG[07-12|19:34:45] IPC registered *ethapi.PublicEthereumAPI under 'eth' 
DEBUG[07-12|19:34:45] IPC registered *ethapi.PublicBlockChainAPI under 'eth' 
DEBUG[07-12|19:34:45] Executing EVM call finished              runtime=423.363µs
DEBUG[07-12|19:34:45] Release oracle not found                 contract=0xFA7B9770Ca4cb04296Cac84F37736d4041251CDF
DEBUG[07-12|19:34:45] IPC registered *ethapi.PublicTransactionPoolAPI under 'eth' 
DEBUG[07-12|19:34:45] IPC registered *ethapi.PublicTxPoolAPI under 'txpool' 
DEBUG[07-12|19:34:45] IPC registered *ethapi.PublicDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] IPC registered *ethapi.PrivateDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] IPC registered *ethapi.PublicAccountAPI under 'eth' 
DEBUG[07-12|19:34:45] IPC registered *ethapi.PrivateAccountAPI under 'personal' 
DEBUG[07-12|19:34:45] IPC registered *backend.API under 'istanbul' 
DEBUG[07-12|19:34:45] IPC registered *eth.PublicEthereumAPI under 'eth' 
DEBUG[07-12|19:34:45] IPC registered *eth.PublicMinerAPI under 'eth' 
DEBUG[07-12|19:34:45] IPC registered *downloader.PublicDownloaderAPI under 'eth' 
DEBUG[07-12|19:34:45] IPC registered *eth.PrivateMinerAPI under 'miner' 
DEBUG[07-12|19:34:45] IPC registered *filters.PublicFilterAPI under 'eth' 
DEBUG[07-12|19:34:45] IPC registered *eth.PrivateAdminAPI under 'admin' 
DEBUG[07-12|19:34:45] IPC registered *eth.PublicDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] IPC registered *eth.PrivateDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] IPC registered *ethapi.PublicNetAPI under 'net' 
DEBUG[07-12|19:34:45] HTTP registered *node.PrivateAdminAPI under 'admin' 
DEBUG[07-12|19:34:45] HTTP registered *node.PublicAdminAPI under 'admin' 
DEBUG[07-12|19:34:45] HTTP registered *debug.HandlerT under 'debug' 
DEBUG[07-12|19:34:45] HTTP registered *node.PublicDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] HTTP registered *node.PublicWeb3API under 'web3' 
INFO [07-12|19:34:45] IPC endpoint opened: /qdata/dd/geth.ipc 
DEBUG[07-12|19:34:45] HTTP registered *ethapi.PublicEthereumAPI under 'eth' 
DEBUG[07-12|19:34:45] HTTP registered *ethapi.PublicBlockChainAPI under 'eth' 
DEBUG[07-12|19:34:45] HTTP registered *ethapi.PublicTransactionPoolAPI under 'eth' 
DEBUG[07-12|19:34:45] HTTP registered *ethapi.PublicTxPoolAPI under 'txpool' 
DEBUG[07-12|19:34:45] HTTP registered *ethapi.PublicDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] HTTP registered *ethapi.PrivateDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] HTTP registered *ethapi.PublicAccountAPI under 'eth' 
DEBUG[07-12|19:34:45] HTTP registered *ethapi.PrivateAccountAPI under 'personal' 
DEBUG[07-12|19:34:45] HTTP registered *eth.PublicEthereumAPI under 'eth' 
DEBUG[07-12|19:34:45] HTTP registered *eth.PublicMinerAPI under 'eth' 
DEBUG[07-12|19:34:45] HTTP registered *downloader.PublicDownloaderAPI under 'eth' 
DEBUG[07-12|19:34:45] HTTP registered *eth.PrivateMinerAPI under 'miner' 
DEBUG[07-12|19:34:45] HTTP registered *filters.PublicFilterAPI under 'eth' 
DEBUG[07-12|19:34:45] HTTP registered *eth.PrivateAdminAPI under 'admin' 
DEBUG[07-12|19:34:45] HTTP registered *eth.PublicDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] HTTP registered *eth.PrivateDebugAPI under 'debug' 
DEBUG[07-12|19:34:45] HTTP registered *ethapi.PublicNetAPI under 'net' 
INFO [07-12|19:34:45] HTTP endpoint opened: http://0.0.0.0:8545 
TRACE[07-12|19:34:45] Quorum permissioning                     EnableNodePermission=true DataDir=/qdata/dd Current Node ID=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da Node Name=Geth/tblrc/v1.7.2-stable/linux-amd64/go1.9.2 Dialed Dest="enode://8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233@100.65.148.159:30303?discport=0" Connection ID=8dd0af45bdbe0a3f Connection String=8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233
TRACE[07-12|19:34:45] Node Permissioning is Enabled. 
TRACE[07-12|19:34:45] Node Permissioning                       Connection Direction=OUTGOING
DEBUG[07-12|19:34:45] parsePermissionedNodes                   DataDir=/qdata/dd file=permissioned-nodes.json
DEBUG[07-12|19:34:45] isNodePermissioned                       permissionedList="[3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca 0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440 8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233]"
DEBUG[07-12|19:34:45] isNodePermissioned                       connection=OUTGOING nodename=8dd0af45bdbe0a3f712a67c12cdfb18e DENIED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
DEBUG[07-12|19:34:45] isNodePermissioned                       connection=OUTGOING nodename=8dd0af45bdbe0a3f712a67c12cdfb18e DENIED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
DEBUG[07-12|19:34:45] isNodePermissioned                       connection=OUTGOING nodename=8dd0af45bdbe0a3f712a67c12cdfb18e DENIED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
DEBUG[07-12|19:34:45] isNodePermissioned                       connection=OUTGOING nodename=8dd0af45bdbe0a3f712a67c12cdfb18e ALLOWED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
DEBUG[07-12|19:34:45] Adding p2p peer                          id=8dd0af45bdbe0a3f name=Geth/hloej/v1.7.2-st... addr=100.65.148.159:30303 peers=1
TRACE[07-12|19:34:45] Dial task done                           task="staticdial 8dd0af45bdbe0a3f 100.65.148.159:30303"
TRACE[07-12|19:34:45] Quorum permissioning                     EnableNodePermission=true DataDir=/qdata/dd Current Node ID=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da Node Name=Geth/tblrc/v1.7.2-stable/linux-amd64/go1.9.2 Dialed Dest="enode://d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca@100.67.134.175:30303?discport=0" Connection ID=d25bf65162bfde47 Connection String=d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca
TRACE[07-12|19:34:45] Node Permissioning is Enabled. 
TRACE[07-12|19:34:45] Node Permissioning                       Connection Direction=OUTGOING
DEBUG[07-12|19:34:45] parsePermissionedNodes                   DataDir=/qdata/dd file=permissioned-nodes.json
DEBUG[07-12|19:34:45] isNodePermissioned                       permissionedList="[3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca 0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440 8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233]"
DEBUG[07-12|19:34:45] isNodePermissioned                       connection=OUTGOING nodename=d25bf65162bfde4753e58e82b1a20e9c DENIED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
DEBUG[07-12|19:34:45] isNodePermissioned                       connection=OUTGOING nodename=d25bf65162bfde4753e58e82b1a20e9c ALLOWED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
DEBUG[07-12|19:34:45] Adding p2p peer                          id=d25bf65162bfde47 name=Geth/rtvhf/v1.7.2-st... addr=100.67.134.175:30303 peers=2
TRACE[07-12|19:34:45] Dial task done                           task="staticdial d25bf65162bfde47 100.67.134.175:30303"
TRACE[07-12|19:34:45] Starting protocol istanbul/64            id=8dd0af45bdbe0a3f conn=staticdial
DEBUG[07-12|19:34:45] Ethereum peer connected                  id=8dd0af45bdbe0a3f conn=staticdial name=Geth/hloej/v1.7.2-stable/linux-amd64/go1.9.2
TRACE[07-12|19:34:45] Starting protocol istanbul/64            id=d25bf65162bfde47 conn=staticdial
DEBUG[07-12|19:34:45] Ethereum peer connected                  id=d25bf65162bfde47 conn=staticdial name=Geth/rtvhf/v1.7.2-stable/linux-amd64/go1.9.2
TRACE[07-12|19:34:45] Registering sync peer                    peer=d25bf65162bfde47
TRACE[07-12|19:34:45] Registering sync peer                    peer=8dd0af45bdbe0a3f
DEBUG[07-12|19:34:45] Relaxed downloader QoS values            rtt=20s confidence=0.500 ttl=1m0s
INFO [07-12|19:34:46] Unlocked account                         address=0x403A286b2F3E897dEAE61774270bf932B6101F08
INFO [07-12|19:34:46] Transaction pool price threshold updated price=18000000000
INFO [07-12|19:34:46] Starting mining operation 
TRACE[07-12|19:34:46] Start to the initial round               address=0x403A286b2F3E897dEAE61774270bf932B6101F08 old_round=-1 old_seq=0
DEBUG[07-12|19:34:46] New round                                address=0x403A286b2F3E897dEAE61774270bf932B6101F08 old_round=-1 old_seq=0 old_proposer=0x403A286b2F3E897dEAE61774270bf932B6101F08 new_round=0 new_seq=1 new_proposer=0x403A286b2F3E897dEAE61774270bf932B6101F08 valSet="[0x403A286b2F3E897dEAE61774270bf932B6101F08 0x66fEEaaAFc27c57B818e95c51865ca004385eEBe 0xf5aEFE121fA4F748037787cD56087b5c5c5C78Ce 0xf6e5d9850E5BfDd9df0D971BE7f8f12D7845A8db]" size=4 isProposer=true
INFO [07-12|19:34:46] Commit new mining work                   number=1 txs=0 uncles=0 elapsed=128.975µs
TRACE[07-12|19:34:46] handleRequest                            address=0x403A286b2F3E897dEAE61774270bf932B6101F08 state="Accept request" seq=1 number=1 hash=04eacd…e3dfe3
DEBUG[07-12|19:34:47] Couldn't add port mapping                proto=tcp extport=30303 intport=30303 interface="UPnP or NAT-PMP" err="no UPnP or NAT-PMP router discovered"
TRACE[07-12|19:34:53] Accepted connection                      addr=100.96.0.77:46378
TRACE[07-12|19:34:53] Quorum permissioning                     EnableNodePermission=true DataDir=/qdata/dd Current Node ID=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da Node Name=Geth/tblrc/v1.7.2-stable/linux-amd64/go1.9.2 Dialed Dest=nil                                                                                                                                                                        Connection ID=0ea9aeb4becdce9b Connection String=0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440
TRACE[07-12|19:34:53] Node Permissioning is Enabled. 
DEBUG[07-12|19:34:53] parsePermissionedNodes                   DataDir=/qdata/dd file=permissioned-nodes.json
DEBUG[07-12|19:34:53] isNodePermissioned                       permissionedList="[3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca 0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440 8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233]"
DEBUG[07-12|19:34:53] isNodePermissioned                       connection=INCOMING nodename=0ea9aeb4becdce9b971996a43c871e47 DENIED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
DEBUG[07-12|19:34:53] isNodePermissioned                       connection=INCOMING nodename=0ea9aeb4becdce9b971996a43c871e47 DENIED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
DEBUG[07-12|19:34:53] isNodePermissioned                       connection=INCOMING nodename=0ea9aeb4becdce9b971996a43c871e47 ALLOWED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
DEBUG[07-12|19:34:53] Adding p2p peer                          id=0ea9aeb4becdce9b name=Geth/hoikz/v1.7.2-st...                      addr=100.96.0.77:46378    peers=3
TRACE[07-12|19:34:53] Starting protocol istanbul/64            id=0ea9aeb4becdce9b conn=inbound
DEBUG[07-12|19:34:53] Ethereum peer connected                  id=0ea9aeb4becdce9b conn=inbound    name=Geth/hoikz/v1.7.2-stable/linux-amd64/go1.9.2
TRACE[07-12|19:34:53] Registering sync peer                    peer=0ea9aeb4becdce9b
DEBUG[07-12|19:34:53] Relaxed downloader QoS values            rtt=20s confidence=0.333 ttl=1m0s
TRACE[07-12|19:34:56] Catch up round                           address=0x403A286b2F3E897dEAE61774270bf932B6101F08 old_round=0  old_seq=1 old_proposer=0x403A286b2F3E897dEAE61774270bf932B6101F08 new_round=1 new_seq=1 new_proposer="&{validators:[0xc4201e1ae0 0xc4201e1b00 0xc4201e1b20 0xc4201e1b40] policy:0 proposer:0xc4201e1ae0 validatorMu:{w:{state:0 sema:0} writerSem:0 readerSem:0 readerCount:0 readerWait:0} selector:0xbbf1e0}"
TRACE[07-12|19:35:00] Dial error                               task="staticdial 3c1d6e1cbff5a9e5 100.68.165.149:30303" err="dial tcp 100.68.165.149:30303: i/o timeout"
DEBUG[07-12|19:35:00] Can't resolve node                       id=3c1d6e1cbff5a9e5 err="discovery is disabled"
TRACE[07-12|19:35:00] Dial task done                           task="staticdial 3c1d6e1cbff5a9e5 100.68.165.149:30303"
TRACE[07-12|19:35:00] Dial error                               task="staticdial 0ea9aeb4becdce9b 100.64.19.101:30303"  err="dial tcp 100.64.19.101:30303: i/o timeout"
DEBUG[07-12|19:35:00] Can't resolve node                       id=0ea9aeb4becdce9b err="discovery is disabled"
TRACE[07-12|19:35:00] Dial task done                           task="staticdial 0ea9aeb4becdce9b 100.64.19.101:30303"
TRACE[07-12|19:35:00] New dial task                            task="wait for dial hist expire (15.018219124s)"
DEBUG[07-12|19:35:05] Recalculated downloader QoS values       rtt=20s confidence=0.667 ttl=1m0s
TRACE[07-12|19:35:08] Catch up round                           address=0x403A286b2F3E897dEAE61774270bf932B6101F08 old_round=1  old_seq=1 old_proposer=0x403A286b2F3E897dEAE61774270bf932B6101F08 new_round=2 new_seq=1 new_proposer="&{validators:[0xc4201e1ae0 0xc4201e1b00 0xc4201e1b20 0xc4201e1b40] policy:0 proposer:0xc4201e1ae0 validatorMu:{w:{state:0 sema:0} writerSem:0 readerSem:0 readerCount:0 readerWait:0} selector:0xbbf1e0}"
TRACE[07-12|19:35:15] Dial task done                           task="wait for dial hist expire (15.018219124s)"
TRACE[07-12|19:35:15] New dial task                            task="wait for dial hist expire (1.263042ms)"
TRACE[07-12|19:35:15] Dial task done                           task="wait for dial hist expire (1.263042ms)"
TRACE[07-12|19:35:15] New dial task                            task="wait for dial hist expire (14.979546227s)"
TRACE[07-12|19:35:21] Catch up round                           address=0x403A286b2F3E897dEAE61774270bf932B6101F08 old_round=2  old_seq=1 old_proposer=0x403A286b2F3E897dEAE61774270bf932B6101F08 new_round=5 new_seq=1 new_proposer="&{validators:[0xc4201e1ae0 0xc4201e1b00 0xc4201e1b20 0xc4201e1b40] policy:0 proposer:0xc4201e1ae0 validatorMu:{w:{state:0 sema:0} writerSem:0 readerSem:0 readerCount:0 readerWait:0} selector:0xbbf1e0}"
DEBUG[07-12|19:35:21] New round                                address=0x403A286b2F3E897dEAE61774270bf932B6101F08 old_round=5  old_seq=1 old_proposer=0x403A286b2F3E897dEAE61774270bf932B6101F08 new_round=5 new_seq=1 new_proposer=0x66fEEaaAFc27c57B818e95c51865ca004385eEBe                                                                                                                                                                 valSet="[0x403A286b2F3E897dEAE61774270bf932B6101F08 0x66fEEaaAFc27c57B818e95c51865ca004385eEBe 0xf5aEFE121fA4F748037787cD56087b5c5c5C78Ce 0xf6e5d9850E5BfDd9df0D971BE7f8f12D7845A8db]" size=4 isProposer=false
INFO [07-12|19:35:21] Committed                                address=0x403A286b2F3E897dEAE61774270bf932B6101F08 hash=654791…55e569 number=1
DEBUG[07-12|19:35:21] Queued propagated block                  peer=istanbul         number=1 hash=654791…55e569 queued=1
DEBUG[07-12|19:35:21] Importing propagated block               peer=istanbul         number=1 hash=654791…55e569
WARN [07-12|19:35:21] Discarded bad propagated block           number=1 hash=654791…55e569
TRACE[07-12|19:35:21] Propagated block                         hash=654791…55e569 recipients=1 duration=2562047h47m16.854s
DEBUG[07-12|19:35:21] Queued propagated block                  peer=d25bf65162bfde47 number=1 hash=654791…55e569 queued=1
DEBUG[07-12|19:35:21] Importing propagated block               peer=d25bf65162bfde47 number=1 hash=654791…55e569
WARN [07-12|19:35:21] Discarded bad propagated block           number=1 hash=654791…55e569
TRACE[07-12|19:35:21] Propagated block                         hash=654791…55e569 recipients=0 duration=3.189ms
DEBUG[07-12|19:35:25] Recalculated downloader QoS values       rtt=20s confidence=0.833 ttl=1m0s
TRACE[07-12|19:35:30] Dial task done                           task="wait for dial hist expire (14.979546227s)"
TRACE[07-12|19:35:30] New dial task                            task="staticdial 3c1d6e1cbff5a9e5 100.68.165.149:30303"
TRACE[07-12|19:35:30] Accepted connection                      addr=10.250.15.37:44896
TRACE[07-12|19:35:30] Quorum permissioning                     EnableNodePermission=true DataDir=/qdata/dd Current Node ID=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da Node Name=Geth/tblrc/v1.7.2-stable/linux-amd64/go1.9.2 Dialed Dest="enode://3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da@100.68.165.149:30303?discport=0" Connection ID=3c1d6e1cbff5a9e5 Connection String=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da
TRACE[07-12|19:35:30] Node Permissioning is Enabled. 
TRACE[07-12|19:35:30] Node Permissioning                       Connection Direction=OUTGOING
DEBUG[07-12|19:35:30] parsePermissionedNodes                   DataDir=/qdata/dd file=permissioned-nodes.json
TRACE[07-12|19:35:30] Quorum permissioning                     EnableNodePermission=true DataDir=/qdata/dd Current Node ID=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da Node Name=Geth/tblrc/v1.7.2-stable/linux-amd64/go1.9.2 Dialed Dest=nil                                                                                                                                                                        Connection ID=3c1d6e1cbff5a9e5 Connection String=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da
TRACE[07-12|19:35:30] Node Permissioning is Enabled. 
DEBUG[07-12|19:35:30] parsePermissionedNodes                   DataDir=/qdata/dd file=permissioned-nodes.json
DEBUG[07-12|19:35:30] isNodePermissioned                       permissionedList="[3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca 0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440 8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233]"
DEBUG[07-12|19:35:30] isNodePermissioned                       connection=OUTGOING nodename=3c1d6e1cbff5a9e57dbc00e9f5a02354 ALLOWED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
TRACE[07-12|19:35:30] Rejected peer before protocol handshake  id=3c1d6e1cbff5a9e5 addr=100.68.165.149:30303 conn=staticdial err="connected to self"
TRACE[07-12|19:35:30] Dial task done                           task="staticdial 3c1d6e1cbff5a9e5 100.68.165.149:30303"
TRACE[07-12|19:35:30] New dial task                            task="wait for dial hist expire (29.999995666s)"
DEBUG[07-12|19:35:30] isNodePermissioned                       permissionedList="[3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca 0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440 8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233]"
DEBUG[07-12|19:35:30] isNodePermissioned                       connection=INCOMING nodename=3c1d6e1cbff5a9e57dbc00e9f5a02354 ALLOWED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
TRACE[07-12|19:35:30] Rejected peer before protocol handshake  id=3c1d6e1cbff5a9e5 addr=10.250.15.37:44896   conn=inbound    err="connected to self"
TRACE[07-12|19:35:31] Store future message                     address=0x403A286b2F3E897dEAE61774270bf932B6101F08 from=0x66fEEaaAFc27c57B818e95c51865ca004385eEBe state=Committed
TRACE[07-12|19:35:43] Store future message                     address=0x403A286b2F3E897dEAE61774270bf932B6101F08 from=0x66fEEaaAFc27c57B818e95c51865ca004385eEBe state=Committed
DEBUG[07-12|19:35:45] Recalculated downloader QoS values       rtt=20s confidence=0.917 ttl=1m0s
TRACE[07-12|19:35:57] Store future message                     address=0x403A286b2F3E897dEAE61774270bf932B6101F08 from=0x66fEEaaAFc27c57B818e95c51865ca004385eEBe state=Committed
TRACE[07-12|19:36:00] Dial task done                           task="wait for dial hist expire (29.999995666s)"
TRACE[07-12|19:36:00] New dial task                            task="staticdial 3c1d6e1cbff5a9e5 100.68.165.149:30303"
TRACE[07-12|19:36:00] Accepted connection                      addr=10.250.15.37:45002
TRACE[07-12|19:36:00] Quorum permissioning                     EnableNodePermission=true DataDir=/qdata/dd Current Node ID=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da Node Name=Geth/tblrc/v1.7.2-stable/linux-amd64/go1.9.2 Dialed Dest=nil                                                                                                                                                                        Connection ID=3c1d6e1cbff5a9e5 Connection String=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da
TRACE[07-12|19:36:00] Node Permissioning is Enabled. 
DEBUG[07-12|19:36:00] parsePermissionedNodes                   DataDir=/qdata/dd file=permissioned-nodes.json
DEBUG[07-12|19:36:00] isNodePermissioned                       permissionedList="[3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca 0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440 8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233]"
DEBUG[07-12|19:36:00] isNodePermissioned                       connection=INCOMING nodename=3c1d6e1cbff5a9e57dbc00e9f5a02354 ALLOWED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
TRACE[07-12|19:36:00] Rejected peer before protocol handshake  id=3c1d6e1cbff5a9e5 addr=10.250.15.37:45002   conn=inbound    err="connected to self"
TRACE[07-12|19:36:00] Quorum permissioning                     EnableNodePermission=true DataDir=/qdata/dd Current Node ID=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da Node Name=Geth/tblrc/v1.7.2-stable/linux-amd64/go1.9.2 Dialed Dest="enode://3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da@100.68.165.149:30303?discport=0" Connection ID=3c1d6e1cbff5a9e5 Connection String=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da
TRACE[07-12|19:36:00] Node Permissioning is Enabled. 
TRACE[07-12|19:36:00] Node Permissioning                       Connection Direction=OUTGOING
DEBUG[07-12|19:36:00] parsePermissionedNodes                   DataDir=/qdata/dd file=permissioned-nodes.json
DEBUG[07-12|19:36:00] isNodePermissioned                       permissionedList="[3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca 0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440 8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233]"
DEBUG[07-12|19:36:00] isNodePermissioned                       connection=OUTGOING nodename=3c1d6e1cbff5a9e57dbc00e9f5a02354 ALLOWED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
TRACE[07-12|19:36:00] Rejected peer before protocol handshake  id=3c1d6e1cbff5a9e5 addr=100.68.165.149:30303 conn=staticdial err="connected to self"
TRACE[07-12|19:36:00] Dial task done                           task="staticdial 3c1d6e1cbff5a9e5 100.68.165.149:30303"
TRACE[07-12|19:36:00] New dial task                            task="wait for dial hist expire (29.999995466s)"
TRACE[07-12|19:36:03] Catch up round                           address=0x403A286b2F3E897dEAE61774270bf932B6101F08 old_round=5  old_seq=1 old_proposer=0x66fEEaaAFc27c57B818e95c51865ca004385eEBe new_round=6 new_seq=1 new_proposer="&{validators:[0xc4201e1ae0 0xc4201e1b00 0xc4201e1b20 0xc4201e1b40] policy:0 proposer:0xc4201e1b00 validatorMu:{w:{state:0 sema:0} writerSem:0 readerSem:0 readerCount:0 readerWait:0} selector:0xbbf1e0}"
TRACE[07-12|19:36:03] Stop processing backlog                  address=0x403A286b2F3E897dEAE61774270bf932B6101F08 from=0x66fEEaaAFc27c57B818e95c51865ca004385eEBe state="Accept request" msg="{Code: 3, Address: 0x66fEEaaAFc27c57B818e95c51865ca004385eEBe}"
DEBUG[07-12|19:36:03] New round                                address=0x403A286b2F3E897dEAE61774270bf932B6101F08 old_round=6  old_seq=1 old_proposer=0x66fEEaaAFc27c57B818e95c51865ca004385eEBe new_round=6 new_seq=1 new_proposer=0xf5aEFE121fA4F748037787cD56087b5c5c5C78Ce                                                                                                                                                                 valSet="[0x403A286b2F3E897dEAE61774270bf932B6101F08 0x66fEEaaAFc27c57B818e95c51865ca004385eEBe 0xf5aEFE121fA4F748037787cD56087b5c5c5C78Ce 0xf6e5d9850E5BfDd9df0D971BE7f8f12D7845A8db]" size=4 isProposer=false
TRACE[07-12|19:36:03] Stop processing backlog                  address=0x403A286b2F3E897dEAE61774270bf932B6101F08 from=0x66fEEaaAFc27c57B818e95c51865ca004385eEBe state=Prepared         msg="{Code: 3, Address: 0x66fEEaaAFc27c57B818e95c51865ca004385eEBe}"
TRACE[07-12|19:36:03] Stop processing backlog                  address=0x403A286b2F3E897dEAE61774270bf932B6101F08 from=0x66fEEaaAFc27c57B818e95c51865ca004385eEBe state=Committed        msg="{Code: 3, Address: 0x66fEEaaAFc27c57B818e95c51865ca004385eEBe}"
INFO [07-12|19:36:03] Committed                                address=0x403A286b2F3E897dEAE61774270bf932B6101F08 hash=654791…55e569 number=1
DEBUG[07-12|19:36:03] Queued propagated block                  peer=istanbul         number=1 hash=654791…55e569 queued=1
DEBUG[07-12|19:36:03] Importing propagated block               peer=istanbul         number=1 hash=654791…55e569
ERROR[07-12|19:36:03] not a valid address                      err="recovery failed"
DEBUG[07-12|19:36:03] Propagated block verification failed     peer=istanbul         number=1 hash=654791…55e569 err="invalid signature"
DEBUG[07-12|19:36:05] Recalculated downloader QoS values       rtt=20s confidence=0.958 ttl=1m0s
TRACE[07-12|19:36:15] Store future message                     address=0x403A286b2F3E897dEAE61774270bf932B6101F08 from=0x66fEEaaAFc27c57B818e95c51865ca004385eEBe state=Committed
DEBUG[07-12|19:36:25] Recalculated downloader QoS values       rtt=20s confidence=0.979 ttl=1m0s
TRACE[07-12|19:36:30] Dial task done                           task="wait for dial hist expire (29.999995466s)"
TRACE[07-12|19:36:30] New dial task                            task="staticdial 3c1d6e1cbff5a9e5 100.68.165.149:30303"
TRACE[07-12|19:36:30] Accepted connection                      addr=10.250.15.37:45102
TRACE[07-12|19:36:30] Quorum permissioning                     EnableNodePermission=true DataDir=/qdata/dd Current Node ID=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da Node Name=Geth/tblrc/v1.7.2-stable/linux-amd64/go1.9.2 Dialed Dest=nil                                                                                                                                                                        Connection ID=3c1d6e1cbff5a9e5 Connection String=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da
TRACE[07-12|19:36:30] Node Permissioning is Enabled. 
DEBUG[07-12|19:36:30] parsePermissionedNodes                   DataDir=/qdata/dd file=permissioned-nodes.json
DEBUG[07-12|19:36:30] isNodePermissioned                       permissionedList="[3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca 0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440 8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233]"
DEBUG[07-12|19:36:30] isNodePermissioned                       connection=INCOMING nodename=3c1d6e1cbff5a9e57dbc00e9f5a02354 ALLOWED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
TRACE[07-12|19:36:30] Rejected peer before protocol handshake  id=3c1d6e1cbff5a9e5 addr=10.250.15.37:45102   conn=inbound    err="connected to self"
TRACE[07-12|19:36:30] Quorum permissioning                     EnableNodePermission=true DataDir=/qdata/dd Current Node ID=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da Node Name=Geth/tblrc/v1.7.2-stable/linux-amd64/go1.9.2 Dialed Dest="enode://3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da@100.68.165.149:30303?discport=0" Connection ID=3c1d6e1cbff5a9e5 Connection String=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da
TRACE[07-12|19:36:30] Node Permissioning is Enabled. 
TRACE[07-12|19:36:30] Node Permissioning                       Connection Direction=OUTGOING
DEBUG[07-12|19:36:30] parsePermissionedNodes                   DataDir=/qdata/dd file=permissioned-nodes.json
DEBUG[07-12|19:36:30] isNodePermissioned                       permissionedList="[3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca 0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440 8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233]"
DEBUG[07-12|19:36:30] isNodePermissioned                       connection=OUTGOING nodename=3c1d6e1cbff5a9e57dbc00e9f5a02354 ALLOWED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
TRACE[07-12|19:36:30] Rejected peer before protocol handshake  id=3c1d6e1cbff5a9e5 addr=100.68.165.149:30303 conn=staticdial err="connected to self"
TRACE[07-12|19:36:30] Dial task done                           task="staticdial 3c1d6e1cbff5a9e5 100.68.165.149:30303"
TRACE[07-12|19:36:30] New dial task                            task="wait for dial hist expire (29.999995451s)"
TRACE[07-12|19:36:41] Store future message                     address=0x403A286b2F3E897dEAE61774270bf932B6101F08 from=0x66fEEaaAFc27c57B818e95c51865ca004385eEBe state=Committed
DEBUG[07-12|19:36:45] Recalculated downloader QoS values       rtt=20s confidence=0.990 ttl=1m0s
TRACE[07-12|19:37:00] Dial task done                           task="wait for dial hist expire (29.999995451s)"
TRACE[07-12|19:37:00] New dial task                            task="staticdial 3c1d6e1cbff5a9e5 100.68.165.149:30303"
TRACE[07-12|19:37:00] Accepted connection                      addr=10.250.15.37:45204
TRACE[07-12|19:37:00] Quorum permissioning                     EnableNodePermission=true DataDir=/qdata/dd Current Node ID=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da Node Name=Geth/tblrc/v1.7.2-stable/linux-amd64/go1.9.2 Dialed Dest=nil                                                                                                                                                                        Connection ID=3c1d6e1cbff5a9e5 Connection String=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da
TRACE[07-12|19:37:00] Node Permissioning is Enabled. 
DEBUG[07-12|19:37:00] parsePermissionedNodes                   DataDir=/qdata/dd file=permissioned-nodes.json
DEBUG[07-12|19:37:00] isNodePermissioned                       permissionedList="[3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca 0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440 8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233]"
DEBUG[07-12|19:37:00] isNodePermissioned                       connection=INCOMING nodename=3c1d6e1cbff5a9e57dbc00e9f5a02354 ALLOWED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
TRACE[07-12|19:37:00] Rejected peer before protocol handshake  id=3c1d6e1cbff5a9e5 addr=10.250.15.37:45204   conn=inbound    err="connected to self"
TRACE[07-12|19:37:00] Quorum permissioning                     EnableNodePermission=true DataDir=/qdata/dd Current Node ID=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da Node Name=Geth/tblrc/v1.7.2-stable/linux-amd64/go1.9.2 Dialed Dest="enode://3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da@100.68.165.149:30303?discport=0" Connection ID=3c1d6e1cbff5a9e5 Connection String=3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da
TRACE[07-12|19:37:00] Node Permissioning is Enabled. 
TRACE[07-12|19:37:00] Node Permissioning                       Connection Direction=OUTGOING
DEBUG[07-12|19:37:00] parsePermissionedNodes                   DataDir=/qdata/dd file=permissioned-nodes.json
DEBUG[07-12|19:37:00] isNodePermissioned                       permissionedList="[3c1d6e1cbff5a9e57dbc00e9f5a0235454643f7641b52d59014edeea3d25153b818523b7786fad58116bb1d1bbd8e1281fb71c81b1165964821497328302a8da d25bf65162bfde4753e58e82b1a20e9c50c66713f796a0169119649b7ab9c29a888a611e729cb58710e845d8569c66a44e627bff40f1f0ff90407fbee85b81ca 0ea9aeb4becdce9b971996a43c871e47df079f03dbbad8757302f2dd4ae96ed6059ebc5835d878aa7f805a201ac2ce1ffde42d39de5375f23aaa7b010491a440 8dd0af45bdbe0a3f712a67c12cdfb18ee4c2888619896eb1835d93f4f87a703c4bf173e27bfdd3c69cb5057b58eee992e317813215e80fef77b8906c57885233]"
DEBUG[07-12|19:37:00] isNodePermissioned                       connection=OUTGOING nodename=3c1d6e1cbff5a9e57dbc00e9f5a02354 ALLOWED-BY=3c1d6e1cbff5a9e57dbc00e9f5a02354
TRACE[07-12|19:37:00] Rejected peer before protocol handshake  id=3c1d6e1cbff5a9e5 addr=100.68.165.149:30303 conn=staticdial err="connected to self"
TRACE[07-12|19:37:00] Dial task done                           task="staticdial 3c1d6e1cbff5a9e5 100.68.165.149:30303"
TRACE[07-12|19:37:00] New dial task                            task="wait for dial hist expire (29.9999959s)"

Mining wont start in Quorum with IBFT using Docker-compose

Hi, testing using istanbul-tools realized that mining (creation of blocks) in IBFT is not so easy, here I found a scenario where mining wont start after 20 minutes.
Step 1:
Create a docker network with 7 nodes using istanbul with command:
istanbul setup --num 7 --docker-compose --verbose --quorum --save

Step 2:
Now lets start only 4 validators:

docker-compose -f docker-compose.yml up -d eth-stats constellation-0 constellation-1 constellation-2 constellation-3 validator-0 validator-1 validator-2 validator-3

Check that mining is not happening with geth attach http://localhost:8545 it will show at block: 0

Step 3:
Wait 30 minutes, and bring up the 5th node:

docker-compose -f docker-compose.yml up -d constellation-4 validator-4

After waiting another 20 minutes there is not mining going on. I'm still at block 0.

Welcome to the Geth JavaScript console!

instance: Geth/validator-0/v1.7.2-stable/linux-amd64/go1.9
coinbase: 0xa81807268ae6e6f8dddaeac7a75001c764d9d81f
at block: 0 (Sun, 12 Aug 2018 22:00:22 -05)

Thanks a lot.
Regards.

istanbul API not accessible from JSRE console?

istanbul setup --num 4 --docker-compose --save
docker-compose up -d

Creating network "workdir_app_net" with driver "bridge"
Creating workdir_eth-stats_1   ... done
Creating workdir_validator-2_1 ... done
Creating workdir_validator-0_1 ... done
Creating workdir_validator-1_1 ... done
Creating workdir_validator-3_1 ... done

http://localhost:3000 shows ethstats, no problems.

geth attach http://localhost:8545
Welcome to the Geth JavaScript console!

instance: Geth/validator-0/v1.8.0-unstable/linux-amd64/go1.9.2
coinbase: 0x0c9f842cb2280653b9043892e4a718d11515275b
at block: 7 (Tue, 07 Aug 2018 13:53:49 BST)
 modules: eth:1.0 istanbul:1.0 net:1.0 personal:1.0 rpc:1.0 web3:1.0

it mentions istanbul !

but then it cannot find it:

> istanbul.getValidators()
ReferenceError: 'istanbul' is not defined
    at <anonymous>:1:1

always error

go build -v -o ./build/bin/istanbul ./cmd/istanbul
cmd/istanbul/main.go:23:2: cannot find package "github.com/urfave/cli" in any of:
/usr/local/go/src/github.com/urfave/cli (from $GOROOT)
/home/exp/blockchain/src/github.com/urfave/cli (from $GOPATH)
Makefile:6: recipe for target 'istanbul' failed
make: *** [istanbul] Error 1

Commands no longer match README

For example, build/bin/istanbul decode ... fails with "No help topic for 'decode'" (same for encoding). You now need to use the extra command and the decode subcommand.

> build/bin/istanbul extra decode --extradata 0x0000000000000000000000000000000000000000000000000000000000000000f89af85494475cc98b5521ab2a1335683e7567c8048bfe79ed9407d8299de61faed3686ba4c4e6c3b9083d7e2371944fe035ce99af680d89e2c4d73aca01dbfc1bd2fd94dc421209441a754f79c4a4ecd2b49c935aad0312b8410000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0
vanity:  0x0000000000000000000000000000000000000000000000000000000000000000
validator:  0x475cc98B5521AB2A1335683e7567c8048BfE79eD
validator:  0x07D8299de61FAeD3686BA4c4e6c3B9083d7e2371
validator:  0x4fe035CE99AF680d89e2c4D73aCA01DBFc1Bd2FD
validator:  0xdC421209441A754F79C4A4eCD2b49c935AAD0312
seal: 0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

I would send a PR to change the README to use the subcommands, but it's probably preferable to do a bit more work and change them back to toplevel commands?

Istanbul network doesn't start with existing accounts which are used as the validator set in the genesis file

@markya0616 @yutelin @alanchchen @bailantaotao @tailingchen
I am trying to set a private Istanbul network, however, every client I bring up has a coinbase/etherbase which I didn't create and eth.accounts[0] is not equal to eth.coinbase, because of which the coinbase/etherbase address is not in validator set and hence network just halts thus nothing proceeds. Even using --etherbase flag to set the ehterbase base doesn't change it. Can you please tell me how the etherbase is set differently to the account I have in my keystore and how do I make sure that the client is started with the correct coinbase/etherbase?How do I create a network with existing accounts where Istanbul automatically recognises the account in keystore, like in other consensus algorithms?

In the backtrace, the unauthorised addresses are which is set by the client and unlocked accounts are the desired addresses which should have been set by the client and are in the validator set.

Steps to reproduce the behaviour

  1. Create multiple accounts with the same password since its a test network
  2. Add the public addresses to a toml file
  3. Use the toml file to generate extra data
  4. Add this extra data to the genesis file
  5. Use the genesis file to initialise nodes
  6. Create a bootnode
  7. Launch each node is a tmux window under the same session

I have a bash script which takes in 2 arguments: 'location of geth binary' and 'the number of nodes to bring up the network', the following creates a network for 2 nodes which are connected using a bootnode (both files need to be in the same directory):

./istprivatenetwork.sh path/to/istanbulgeth/build/bin/geth 2

The script creates a new network everytime as well as a new tmux session, so please kill the tmux session before the script is run again.

istprivatenetwork.sh:

THIS_FILE_PARENT_DIR=`dirname \`readlink -f $0\``
ISTANBUL_DIR="`pwd`/istanbultestnet"
PASSWORD_PATH="${ISTANBUL_DIR}/passwd.txt"
NUMBER_OF_NODES=$2
GETH_BIN_PATH=`readlink -f $1`
ISTANBUL_TOOLS_PATH="${GOPATH}/src/github.com/getamis/istanbul-tools"
ISTANBUL_TOOLS_GITHUB="https://github.com/getamis/istanbul-tools.git"
TMUX_SESSION_NAME="istanbul_network"
BOOTNODE_PORT=4800
PORT=4800
RPC_PORT=9501
CHAINID=1530

# Create a common password file
createPasswd() {
    echo
    echo "---------Creating ${PASSWORD_PATH}---------"
    touch "${PASSWORD_PATH}"
    echo "istanbulnetwork" > "${PASSWORD_PATH}"
    echo "---------Finished creating ${PASSWORD_PATH}---------"
    echo
}

# Create a directory for the given path
createDir() {
    DIR="$1"
    if ! [ -d  "${DIR}" ]; then
        echo "---------Creating ${DIR}---------"
        mkdir -p "${DIR}"
        echo "---------Finished creating ${DIR}---------"
    fi
}

# Bye using Geth create the account in the given dir location
createAccounts() {
    echo "---------Creating Accounts---------"
    for i in `seq 1 "${NUMBER_OF_NODES}"`
    do
    echo
        if ! [ -d  ""${ISTANBUL_DIR}/node${i}"" ]; then
            mkdir -p ""${ISTANBUL_DIR}/node${i}""
        fi
        ${GETH_BIN_PATH} --datadir "${ISTANBUL_DIR}/node${i}" --password ${PASSWORD_PATH} account new
    echo
    done
    echo "---------Finished creating Accounts---------"
}

# Create toml file which has validator addresses in them
createToml() {
    VANITY="0x00"
    NODE_ADDRESSES=("$@")

    if [ -f "${ISTANBUL_DIR}/config.toml" ]; then
        rm "${ISTANBUL_DIR}/config.toml"
    fi

    echo "vanity = \"${VANITY}\"" >> "${ISTANBUL_DIR}/config.toml"

    count=1
    for i in ${NODE_ADDRESSES[@]}
    do
        if [ ${#NODE_ADDRESSES[@]} -eq "1" ]; then
            echo "validators = [\"0x${i}\"]" >> "${ISTANBUL_DIR}/config.toml"
        elif [ ${count} -eq "1" ]; then
            echo "validators = [\"0x${i}\"," >> "${ISTANBUL_DIR}/config.toml"
        elif [ ${count} -eq ${#NODE_ADDRESSES[@]} ]; then
            echo "${string}\"0x${i}\"]" >> "${ISTANBUL_DIR}/config.toml"
        else
            echo "${string}\"0x${i}\"," >> "${ISTANBUL_DIR}/config.toml"
        fi
        count=`expr ${count} + 1`
    done
}

# Create the genesis needed to initialise the nodes
createGenesis() {
    echo
    echo "---------Creating Genesis file---------"
    # Get the address from keystore and store them in an array
    ADDRESSES=()
    for i in `ls ${ISTANBUL_DIR} | grep node`
    do
        ADDRESSES+=(`ls ${ISTANBUL_DIR}/${i}/keystore | cut -d'-' -f9`)
    done

    # Clone istanbul-tools
    if ! [ -d "${ISTANBUL_TOOLS_PATH}" ]; then
        git clone "${ISTANBUL_TOOLS_GITHUB}" "${ISTANBUL_TOOLS_PATH}"
    fi

    # Make istanbul-tools
    if ! [ -f "${ISTANBUL_TOOLS_PATH}/build/bin/istanbul" ]; then
        make -C ${ISTANBUL_TOOLS_PATH}
    fi

    # Create config.toml with the validators
    createToml ${ADDRESSES[@]}

    # Call istanbul extra encode and store in a file
    ${ISTANBUL_TOOLS_PATH}/build/bin/istanbul extra encode --config "${ISTANBUL_DIR}/config.toml" | cut -d':' -f2 | tr -d " \t\n\r" >  "${ISTANBUL_DIR}/newextradata.txt"

    # Update genesis file, the genesis.json and extra data's file location is passed in and the rest of the addresses are passed to assign some ether
    node "${THIS_FILE_PARENT_DIR}/updategenesis.js" "${ISTANBUL_DIR}/genesis.json" "${ISTANBUL_DIR}/newextradata.txt" ${CHAINID} ${ADDRESSES[@]}
    echo "---------Finished creating Genesis file---------"
    echo
}

initialiseNodes() {
    echo
    echo "---------Initialising nodes with Genesis file---------"
    for i in `ls ${ISTANBUL_DIR} | grep node`
    do
    echo
        ${GETH_BIN_PATH} --datadir "${ISTANBUL_DIR}/${i}" init "${ISTANBUL_DIR}/genesis.json"
    echo
    done
    echo "---------Finished initialising nodes with Genesis file---------"
    echo
}


createBootNodeKey() {
    bootnode -genkey "${ISTANBUL_DIR}/boot.key"
}

launchBootNode() {
    tmux new -s ${TMUX_SESSION_NAME} -n "bootnode" -d
    tmux send-keys -t "${TMUX_SESSION_NAME}:bootnode" "bootnode -nodekey \"${ISTANBUL_DIR}/boot.key\" -verbosity 9 -addr :${BOOTNODE_PORT}" C-m
    PORT=`expr ${PORT} + 1`
}

launchNodes() {
    count=1
    for i in `ls ${ISTANBUL_DIR} | grep node`
    do
        tmux new-window -t ${TMUX_SESSION_NAME}:${count} -n ${i} 
        tmux send-keys -t ${TMUX_SESSION_NAME}:${count} "${GETH_BIN_PATH} --datadir "${ISTANBUL_DIR}/${i}" --syncmode 'full' --port ${PORT} --rpcport ${RPC_PORT} --rpc --rpcaddr '0.0.0.0' --rpccorsdomain '*' --rpcapi 'personal,db,eth,net,web3,txpool,miner,istanbul' --bootnodes 'enode://`bootnode -nodekey ${ISTANBUL_DIR}/boot.key -writeaddress`@127.0.0.1:${BOOTNODE_PORT}' --networkid ${CHAINID} --gasprice '0' -unlock \"0x`ls ${ISTANBUL_DIR}/${i}/keystore | cut -d'-' -f9`\" --password ${PASSWORD_PATH} --debug --mine --minerthreads '1' --etherbase \"0x`ls ${ISTANBUL_DIR}/${i}/keystore | cut -d'-' -f9`\"" C-m
        tmux split-window -h -t ${TMUX_SESSION_NAME}:${count}
        tmux send-keys -t ${TMUX_SESSION_NAME}:${count} "sleep 10s" C-m
        tmux send-keys -t ${TMUX_SESSION_NAME}:${count} "${GETH_BIN_PATH} attach ipc:${ISTANBUL_DIR}/${i}/geth.ipc" C-m
        
        PORT=`expr ${PORT} + 1`
        RPC_PORT=`expr ${RPC_PORT} + 1`
        count=`expr ${count} + 1`
    done
}

### Start of the main script
if ! [ ${NUMBER_OF_NODES} -eq ${NUMBER_OF_NODES} ] || [ -z ${NUMBER_OF_NODES} ] || [ ${NUMBER_OF_NODES} -lt "1" ]; then
    echo "Please enter geth binary path as first argument and number of nodes as second"
    exit 1
fi

if [ -z ${GETH_BIN_PATH} ]; then
    echo "Please enter geth binary path as first argument and number of nodes as second"
    exit 2
fi

if [ -d "${ISTANBUL_DIR}" ]; then
    rm -rf "${ISTANBUL_DIR}"
fi

createDir "${ISTANBUL_DIR}"
cd "${ISTANBUL_DIR}"

createPasswd

createAccounts

createGenesis

initialiseNodes

createBootNodeKey

launchBootNode
launchNodes

updategenesis.js:

const fs = require('fs')
const commandLineArgs = process.argv.slice(2)
const genesisFilePath = commandLineArgs[0]
const newExtraDataFilePath = commandLineArgs[1]
const newChainId = parseInt(commandLineArgs[2])
const addresses = commandLineArgs.slice(3)

let genesis = {
    "config": {
        "homesteadBlock": 1,
        "eip150Block": 2,
        "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "eip155Block": 3,
        "eip158Block": 3,
        "istanbul": {
            "epoch": 30000,
            "policy": 0
        }
    },
    "nonce": "0x0",
    "timestamp": "0x0",
    "gasLimit": "0x47b760",
    "difficulty": "0x1",
    "mixHash": "0x63746963616c2062797a616e74696e65206661756c7420746f6c6572616e6365",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "number": "0x0",
    "gasUsed": "0x0",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

let newExtraData = fs.readFileSync(newExtraDataFilePath, 'utf8')
let startingBalance = "0x446c3b15f9926687d2c40534fdb564000000000000"

// Update genesis.extraData
genesis.extraData = newExtraData
genesis.alloc = {}
for (var i = 0 ; i < addresses.length; i++) {
    genesis.alloc[addresses[i]] = {"balance" : startingBalance}
}
genesis.config.chainId = newChainId

fs.writeFileSync(genesisFilePath, JSON.stringify(genesis, null, 4))

Backtrace

Node1:

[backtrace]

/home/user98/Documents/github/getamis/go-ethereum/build/bin/geth --datadir /home/user98/Documents/github/eth-private-network/istanbul/istanbultestnet/node1 --syncmode 'full' --port 4801 --rpcport 9501 --rpc --rpcaddr '0.0.0.0' --rpccorsdomain '*' --rpcapi 'personal,db,eth,net,web3,txpool,miner,istanbul' --bootnodes 'enode://297e9ce0012765db9086cf3dd3efa793879b7010e7c38464ce0a05b8bcbb4babe0b1841ec68feaa9c65bfb93bb8e360f2a8d7de35eb250efa7c1b44c483bb2ee@127.0.0.1:4800' --networkid 1530 --gasprice '0' -unlock "0x6816b996ef724a6d5002ad4b9ba9f6ad4351195e" --password /home/user98/Documents/github/eth-private-network/istanbul/istanbultestnet/passwd.txt --debug --mine --minerthreads '1' --etherbase "0x6816b996ef724a6d5002ad4b9ba9f6ad4351195e"
INFO [08-08|13:07:40|cmd/utils/flags.go:856] Maximum peer count                       ETH=25 LES=0 total=25
INFO [08-08|13:07:40|node/node.go:166]       Starting peer-to-peer node               instance=Geth/v1.8.3-unstable-c7547381/linux-amd64/go1.9.3
INFO [08-08|13:07:40|ethdb/database.go:63]   Allocated cache and file handles         database=/home/user98/Documents/github/eth-private-network/istanbul/istanbultestnet/node1/geth/chaindata cache=768 handles=512
WARN [08-08|13:07:40|eth/db_upgrade.go:48]   Upgrading database to use lookup entries
INFO [08-08|13:07:40|eth/backend.go:123]     Initialised chain configuration          config="{ChainID: 1530 Homestead: 1 DAO: <nil> DAOSupport: false EIP150: 2 EIP155: 3 EIP158: 3 Byzantium: <nil> Constantinople: <nil> Engine: istanbul}"
INFO [08-08|13:07:40|eth/db_upgrade.go:118]  Database deduplication successful        deduped=0
INFO [08-08|13:07:40|eth/backend.go:146]     Initialising Ethereum protocol           versions=[64] network=1530
INFO [08-08|13:07:40|core/blockchain.go:253] Loaded most recent local header          number=0 hash=fc61f9…29aaac td=1
INFO [08-08|13:07:40|core/blockchain.go:254] Loaded most recent local full block      number=0 hash=fc61f9…29aaac td=1
INFO [08-08|13:07:40|core/blockchain.go:255] Loaded most recent local fast block      number=0 hash=fc61f9…29aaac td=1
INFO [08-08|13:07:40|core/tx_journal.go:149] Regenerated local transaction journal    transactions=0 accounts=0
INFO [08-08|13:07:40|p2p/server.go:395]      Starting P2P networking
INFO [08-08|13:07:43|p2p/discover/udp.go:238] UDP listener up                          self=enode://0aa3fca386e81c9858f998ae7c3eba4bc48dd21f042e39ebe54f2e0f4689eca9191b4174cb29074ae90b21e8412e4d29020885bd4b17745971f3b594ef230597@146.198.136.74:4801
INFO [08-08|13:07:43|p2p/server.go:742]       RLPx listener up                         self=enode://0aa3fca386e81c9858f998ae7c3eba4bc48dd21f042e39ebe54f2e0f4689eca9191b4174cb29074ae90b21e8412e4d29020885bd4b17745971f3b594ef230597@146.198.136.74:4801
INFO [08-08|13:07:43|node/node.go:397]        HTTP endpoint opened                     url=http://0.0.0.0:9501 cors=* vhosts=localhost
INFO [08-08|13:07:43|node/node.go:327]        IPC endpoint opened                      url=/home/user98/Documents/github/eth-private-network/istanbul/istanbultestnet/node1/geth.ipc
INFO [08-08|13:07:44|geth/accountcmd.go:218]  Unlocked account                         address=0x6816b996ef724a6D5002ad4b9ba9f6AD4351195E
INFO [08-08|13:07:44|core/tx_pool.go:473]     Transaction pool price threshold updated price=0
INFO [08-08|13:07:44|miner/miner.go:116]      Starting mining operation
INFO [08-08|13:07:44|miner/worker.go:500]     Commit new mining work                   number=1 txs=0 uncles=0 elapsed=62.044µs
WARN [08-08|13:07:44|miner/agent.go:108]      Block sealing failed                     err=unauthorized
ERROR[08-08|13:07:54|consensus/istanbul/core/handler.go:141] Failed to decode message from payload    address=0xEF037C337667afC4f47d5b0B7FDDaD9ec6D2D2a5 err="unauthorized address"
ERROR[08-08|13:08:06|consensus/istanbul/core/handler.go:141] Failed to decode message from payload    address=0xEF037C337667afC4f47d5b0B7FDDaD9ec6D2D2a5 err="unauthorized address"
ERROR[08-08|13:08:20|consensus/istanbul/core/handler.go:141] Failed to decode message from payload    address=0xEF037C337667afC4f47d5b0B7FDDaD9ec6D2D2a5 err="unauthorized address"
ERROR[08-08|13:08:38|consensus/istanbul/core/handler.go:141] Failed to decode message from payload    address=0xEF037C337667afC4f47d5b0B7FDDaD9ec6D2D2a5 err="unauthorized address"
ERROR[08-08|13:09:04|consensus/istanbul/core/handler.go:141] Failed to decode message from payload    address=0xEF037C337667afC4f47d5b0B7FDDaD9ec6D2D2a5 err="unauthorized address"

Node2:

[backtrace]

/home/user98/Documents/github/getamis/go-ethereum/build/bin/geth --datadir /home/user98/Documents/github/eth-private-network/istanbul/istanbultestnet/node2 --syncmode 'full' --port 4802 --rpcport 9502 --rpc --rpcaddr '0.0.0.0' --rpccorsdomain '*' --rpcapi 'personal,db,eth,net,web3,txpool,miner,istanbul' --bootnodes 'enode://297e9ce0012765db9086cf3dd3efa793879b7010e7c38464ce0a05b8bcbb4babe0b1841ec68feaa9c65bfb93bb8e360f2a8d7de35eb250efa7c1b44c483bb2ee@127.0.0.1:4800' --networkid 1530 --gasprice '0' -unlock "0xaf40683bf20cc8b61e2a0d083a926fa66291de57" --password /home/user98/Documents/github/eth-private-network/istanbul/istanbultestnet/passwd.txt --debug --mine --minerthreads '1' --etherbase "0xaf40683bf20cc8b61e2a0d083a926fa66291de57"
INFO [08-08|13:07:40|cmd/utils/flags.go:856] Maximum peer count                       ETH=25 LES=0 total=25
INFO [08-08|13:07:40|node/node.go:166]       Starting peer-to-peer node               instance=Geth/v1.8.3-unstable-c7547381/linux-amd64/go1.9.3
INFO [08-08|13:07:40|ethdb/database.go:63]   Allocated cache and file handles         database=/home/user98/Documents/github/eth-private-network/istanbul/istanbultestnet/node2/geth/chaindata cache=768 handles=512
WARN [08-08|13:07:40|eth/db_upgrade.go:48]   Upgrading database to use lookup entries
INFO [08-08|13:07:40|eth/db_upgrade.go:118]  Database deduplication successful        deduped=0
INFO [08-08|13:07:40|eth/backend.go:123]     Initialised chain configuration          config="{ChainID: 1530 Homestead: 1 DAO: <nil> DAOSupport: false EIP150: 2 EIP155: 3 EIP158: 3 Byzantium: <nil> Constantinople: <nil> Engine: istanbul}"
INFO [08-08|13:07:40|eth/backend.go:146]     Initialising Ethereum protocol           versions=[64] network=1530
INFO [08-08|13:07:40|core/blockchain.go:253] Loaded most recent local header          number=0 hash=fc61f9…29aaac td=1
INFO [08-08|13:07:40|core/blockchain.go:254] Loaded most recent local full block      number=0 hash=fc61f9…29aaac td=1
INFO [08-08|13:07:40|core/blockchain.go:255] Loaded most recent local fast block      number=0 hash=fc61f9…29aaac td=1
INFO [08-08|13:07:40|core/tx_journal.go:149] Regenerated local transaction journal    transactions=0 accounts=0
INFO [08-08|13:07:40|p2p/server.go:395]      Starting P2P networking
INFO [08-08|13:07:43|p2p/discover/udp.go:238] UDP listener up                          self=enode://8b301efdb128529b753ed41cb184374492d1c5cfcc0bf7c94bb7df7aa17a81a73a3aa772f3bbedb767f52c114004fbd51bf928bd91c6b282b51b46683adec27e@146.198.136.74:4802
INFO [08-08|13:07:43|p2p/server.go:742]       RLPx listener up                         self=enode://8b301efdb128529b753ed41cb184374492d1c5cfcc0bf7c94bb7df7aa17a81a73a3aa772f3bbedb767f52c114004fbd51bf928bd91c6b282b51b46683adec27e@146.198.136.74:4802
INFO [08-08|13:07:43|node/node.go:327]        IPC endpoint opened                      url=/home/user98/Documents/github/eth-private-network/istanbul/istanbultestnet/node2/geth.ipc
INFO [08-08|13:07:43|node/node.go:397]        HTTP endpoint opened                     url=http://0.0.0.0:9502                                                                       cors=* vhosts=localhost
INFO [08-08|13:07:44|geth/accountcmd.go:218]  Unlocked account                         address=0xaF40683bF20cC8b61e2A0D083a926fA66291dE57
INFO [08-08|13:07:44|core/tx_pool.go:473]     Transaction pool price threshold updated price=0
INFO [08-08|13:07:44|miner/miner.go:116]      Starting mining operation
INFO [08-08|13:07:44|miner/worker.go:500]     Commit new mining work                   number=1 txs=0 uncles=0 elapsed=86.813µs
WARN [08-08|13:07:44|miner/agent.go:108]      Block sealing failed                     err=unauthorized
ERROR[08-08|13:07:54|consensus/istanbul/core/handler.go:141] Failed to decode message from payload    address=0x0a38a2061ADA40B1da28E9e9E2Bbc6F0c6d668b0 err="unauthorized address"
ERROR[08-08|13:08:06|consensus/istanbul/core/handler.go:141] Failed to decode message from payload    address=0x0a38a2061ADA40B1da28E9e9E2Bbc6F0c6d668b0 err="unauthorized address"
ERROR[08-08|13:08:20|consensus/istanbul/core/handler.go:141] Failed to decode message from payload    address=0x0a38a2061ADA40B1da28E9e9E2Bbc6F0c6d668b0 err="unauthorized address"
ERROR[08-08|13:08:38|consensus/istanbul/core/handler.go:141] Failed to decode message from payload    address=0x0a38a2061ADA40B1da28E9e9E2Bbc6F0c6d668b0 err="unauthorized address"
ERROR[08-08|13:09:04|consensus/istanbul/core/handler.go:141] Failed to decode message from payload    address=0x0a38a2061ADA40B1da28E9e9E2Bbc6F0c6d668b0 err="unauthorized address"
ERROR[08-08|13:09:46|consensus/istanbul/core/handler.go:141] Failed to decode message from payload    address=0x0a38a2061ADA40B1da28E9e9E2Bbc6F0c6d668b0 err="unauthorized address"
ERROR[08-08|13:11:00|consensus/istanbul/core/handler.go:141] Failed to decode message from payload    address=0x0a38a2061ADA40B1da28E9e9E2Bbc6F0c6d668b0 err="unauthorized address"

panic error

Summarizing 1 Failure:

[Panic!] TPS-01: Large amount of transactions with number of validators 4 validators with gas limit 21000*1500 with txpool size 20480 with tx send rate 300ms [BeforeEach]
/usr/local/go/src/runtime/panic.go:82

Ran 1 of 1 Specs in 0.035 seconds
FAIL! -- 0 Passed | 1 Failed | 0 Pending | 0 Skipped
--- FAIL: TestIstanbulLoadTesting (0.04s)
FAIL
FAIL github.com/jpmorganchase/istanbul-tools/tests/load 0.257s
Makefile:12: recipe for target 'load-testing' failed
make: *** [load-testing] Error 1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.