Skip to content
This repository has been archived by the owner on Nov 6, 2020. It is now read-only.

Stage 1 block verification failed - DifficultyOutOfBounds #9926

Closed
mirek opened this issue Nov 15, 2018 · 17 comments
Closed

Stage 1 block verification failed - DifficultyOutOfBounds #9926

mirek opened this issue Nov 15, 2018 · 17 comments
Labels
Z1-question 🙋‍♀️ Issue is a question. Closer should answer. Z3-stale 🍃 Issue is in principle valid, but it is not relevant anymore or can not reproduced.
Milestone

Comments

@mirek
Copy link

mirek commented Nov 15, 2018

  • Parity Ethereum version: Parity/v1.11.11-stable-cb03f38-20180910/x86_64-linux-gnu/rustc1.28.0
  • Operating system: Red Hat Enterprise Linux Server release 7.5 (Maipo)
  • Installation: ?
  • Fully synchronized: N/A
  • Network: internal
  • Restarted: no

We've got authority round with 4 nodes via safe contract, everything was working fine until recently we've got 3 different histories - only 2 nodes are in sync, other two diverged into their own histories.

Related log entry at the moment they diverged is:

2018-11-13 10:05:33 UTC IO Worker #1 INFO import  Imported #13724 0x7133…9559 (1 txs, 0.05 Mgas, 0 ms, 0.97 KiB) + another 1 block(s) containing 1 tx(s)
2018-11-13 10:05:34 UTC IO Worker #3 WARN client  Stage 1 block verification failed for 0xe9e0…4ff9: Error(Block(DifficultyOutOfBounds(OutOfBounds { min: None, max: Some(0xffffffffffffffffffffffffffffffff), found: 0xffffffffffffffffffffffffffffffff })), State { next_error: None, backtrace: None })
2018-11-13 10:05:35 UTC Verifier #0 INFO import  Imported #13724 0xa9ff…e302 (2 txs, 0.52 Mgas, 3 ms, 1.80 KiB)

We have quite verbose/trace logs available on all 4 nodes if needed to investigate it further.

@jam10o-new jam10o-new added Z1-question 🙋‍♀️ Issue is a question. Closer should answer. Z3-stale 🍃 Issue is in principle valid, but it is not relevant anymore or can not reproduced. labels Nov 15, 2018
@jam10o-new
Copy link
Contributor

It would be helpful to have more logs from around the time this happened, especially things like system time on your nodes, and any sealing logs. However, I'd like to note that there aren't any more backports to 1.11.x; you'll mostly be on your own in fixing this issue.

@tomusdrw
Copy link
Collaborator

@mirek are all 4 nodes running the exact same version and spec file?

@mirek
Copy link
Author

mirek commented Nov 15, 2018

Yes except signers, which are different.

@tomusdrw
Copy link
Collaborator

@mirek do you have empty steps enabled? The authorities should re-organize to longer chain anyway, but seems you have a 2/2 split. Did you try stopping the "faulty" nodes that produced the incorrect block(s) and restart them after a while to check if they re-organize?

@tomusdrw
Copy link
Collaborator

Can you also make sure that time on all authorities is perfectly in sync?

@mirek
Copy link
Author

mirek commented Nov 15, 2018

We have:

        "emptyStepsTransition": "0",
        "maximumEmptySteps": "600"

Clocks seem to be in sync atm, I don't have reasons to believe they were out of sync when this happened, but I can't say for sure.

@mirek
Copy link
Author

mirek commented Nov 15, 2018

The split is 2/1/1 – but yes, there's no majority out of 4 – would that be a reason for missing reorg? We haven't restarted nodes so we can investigate.

@mirek
Copy link
Author

mirek commented Nov 15, 2018

We have 4 nodes - eth1, eth2, eth3 and eth4.

Last block in sync was block number 13723, hash 3ce7...824f.

Following block did split:

blkno eth1        eth2        eth3        eth4
13723 3ce7...824f 3ce7...824f 3ce7...824f 3ce7...824f (same)
13724 a9ff...e302 7133...9559 e9e0...4ff9 a9ff...e302 (eth1+eth4/eth3/eth3 split)

Then nodes continued for hundreds of blocks with their own history keeping this split, no reorg.

Here are logs from each node around this time (transaction's data payload replaced with ...bytes... placeholder):

[eth1 ~]$  cat /var/log/parity.node.log | grep "2018-11-13 10:05"
2018-11-13 10:05:29 UTC Verifier #0 INFO import  Imported #13721 0x0bd1…53f1 (1 txs, 0.05 Mgas, 56 ms, 20.99 KiB)
2018-11-13 10:05:30 UTC Verifier #0 INFO import  Imported #13722 0xfbb1…94c0 (1 txs, 0.05 Mgas, 1 ms, 0.82 KiB)
2018-11-13 10:05:33 UTC IO Worker #2 WARN client  Stage 1 block verification failed for 0x7133…9559: Error(Block(DifficultyOutOfBounds(OutOfBounds { min: None, max: Some(0xffffffffffffffffffffffffffffffff), found: 0xffffffffffffffffffffffffffffffff })), State { next_error: None, backtrace: None })
2018-11-13 10:05:34 UTC IO Worker #2 INFO import     3/25 peers    705 KiB chain    1 GiB db  0 bytes queue    1 MiB sync  RPC:  0 conn,  4 req/s,  90 µs
2018-11-13 10:05:34 UTC IO Worker #1 WARN client  Stage 1 block verification failed for 0xe9e0…4ff9: Error(Block(DifficultyOutOfBounds(OutOfBounds { min: None, max: Some(0xffffffffffffffffffffffffffffffff), found: 0xffffffffffffffffffffffffffffffff })), State { next_error: None, backtrace: None })
2018-11-13 10:05:35 UTC Verifier #0 INFO import  Imported #13724 0xa9ff…e302 (2 txs, 0.52 Mgas, 2 ms, 1.80 KiB) + another 1 block(s) containing 1 tx(s)
2018-11-13 10:05:51 UTC Verifier #0 INFO import  Imported #13725 0xe2af…69cc (1 txs, 0.41 Mgas, 3 ms, 1.78 KiB)

[eth2 ~]$ cat /var/log/parity.node.log | grep "2018-11-13 10:05"
2018-11-13 10:05:10 UTC IO Worker #3 INFO import     3/25 peers      7 MiB chain    1 GiB db  0 bytes queue    1 MiB sync  RPC:  0 conn, 430 req/s, 11437 µs
2018-11-13 10:05:29 UTC  TRACE own_tx  Importing transaction: PendingTransaction { transaction: SignedTransaction { transaction: UnverifiedTransaction { unsigned: Transaction { nonce: 0x0, gas_price: 0x0, gas: 0x5fdfb0, action: Call(0x1f141cb40ee1c67cf4930e79e98c9470cdac5631), value: 0x0, data: [ ...bytes... ] }, v: 43, r: 0x5939309377af2ca90f4390402720c15f3fcbf6f447d2d5bd91b024daba9ab9f8, s: 0x48e829be3e1c7af569694bf6c0c146eb4703c0d84938454adc1e219b13f72532, hash: 0x91a7338e14eece95da3548ce0da1746143a664f28d2cd83eb3ead5b97a62718b }, sender: 0x85ab0c20325b5fc87f9baa26b10160907421895d, public: Some(0x7ea44e74cd7b664a507bba1ed12ff0b6a44c03fab86a1698d0ad8f9bd087d85a6a94b8942df12567cd858aa43ee0632f211fc1dc39da6283b7b2bc2e1b5f2ff7) }, condition: None }
2018-11-13 10:05:29 UTC  DEBUG own_tx  Imported to the pool (hash 0x91a7338e14eece95da3548ce0da1746143a664f28d2cd83eb3ead5b97a62718b)
2018-11-13 10:05:29 UTC IO Worker #3 INFO import  Imported #13721 0x0bd1…53f1 (1 txs, 0.05 Mgas, 9 ms, 20.99 KiB)
2018-11-13 10:05:29 UTC IO Worker #0 INFO own_tx  Transaction mined (hash 0x91a7338e14eece95da3548ce0da1746143a664f28d2cd83eb3ead5b97a62718b)
2018-11-13 10:05:30 UTC Verifier #0 INFO import  Imported #13722 0xfbb1…94c0 (1 txs, 0.05 Mgas, 1 ms, 0.82 KiB)
2018-11-13 10:05:30 UTC  TRACE own_tx  Importing transaction: PendingTransaction { transaction: SignedTransaction { transaction: UnverifiedTransaction { unsigned: Transaction { nonce: 0x1, gas_price: 0x0, gas: 0x2faf080, action: Call(0xba72c34e8c0219deca5a3abe0a9fbba16152078d), value: 0x0, data: [ ...bytes... ] }, v: 43, r: 0x6a0d87f13b01df7784666acab7dbb6755d3f4025de8ddeb471621795fd62f7d5, s: 0x2dd9ad0f77a2b97e71dc449e59eeb34b98b7f401f8baa8f36cf88d2d3733d498, hash: 0x2e9768bf31b91869188dc57909832975558322f24d7c45e63b5ca628b1bc0929 }, sender: 0x85ab0c20325b5fc87f9baa26b10160907421895d, public: Some(0x7ea44e74cd7b664a507bba1ed12ff0b6a44c03fab86a1698d0ad8f9bd087d85a6a94b8942df12567cd858aa43ee0632f211fc1dc39da6283b7b2bc2e1b5f2ff7) }, condition: None }
2018-11-13 10:05:30 UTC  DEBUG own_tx  Imported to the pool (hash 0x2e9768bf31b91869188dc57909832975558322f24d7c45e63b5ca628b1bc0929)
2018-11-13 10:05:31 UTC IO Worker #1 INFO own_tx  Transaction mined (hash 0x2e9768bf31b91869188dc57909832975558322f24d7c45e63b5ca628b1bc0929)
2018-11-13 10:05:33 UTC IO Worker #1 INFO import  Imported #13724 0x7133…9559 (1 txs, 0.05 Mgas, 0 ms, 0.97 KiB) + another 1 block(s) containing 1 tx(s)
2018-11-13 10:05:34 UTC IO Worker #3 WARN client  Stage 1 block verification failed for 0xe9e0…4ff9: Error(Block(DifficultyOutOfBounds(OutOfBounds { min: None, max: Some(0xffffffffffffffffffffffffffffffff), found: 0xffffffffffffffffffffffffffffffff })), State { next_error: None, backtrace: None })
2018-11-13 10:05:35 UTC Verifier #0 INFO import  Imported #13724 0xa9ff…e302 (2 txs, 0.52 Mgas, 3 ms, 1.80 KiB)
2018-11-13 10:05:37 UTC IO Worker #1 INFO import  Imported #13725 0xc8ef…d6e0 (1 txs, 0.47 Mgas, 1 ms, 1.32 KiB)
2018-11-13 10:05:45 UTC IO Worker #1 INFO import     3/25 peers      7 MiB chain    1 GiB db  0 bytes queue    1 MiB sync  RPC:  0 conn,  5 req/s, 300 µs
2018-11-13 10:05:49 UTC IO Worker #2 INFO import  Imported #13726 0x891d…890e (1 txs, 0.41 Mgas, 1 ms, 1.34 KiB)
2018-11-13 10:05:51 UTC Verifier #0 INFO import  Imported #13725 0xe2af…69cc (1 txs, 0.41 Mgas, 7 ms, 1.78 KiB)

[eth3 ~]$ cat /var/log/parity.node.log | grep "2018-11-13 10:05"
2018-11-13 10:05:04 UTC IO Worker #2 INFO import     3/25 peers      3 MiB chain    1 GiB db  0 bytes queue    1 MiB sync  RPC:  0 conn,  1 req/s,  87 µs
2018-11-13 10:05:29 UTC Verifier #0 INFO import  Imported #13721 0x0bd1…53f1 (1 txs, 0.05 Mgas, 318 ms, 20.99 KiB)
2018-11-13 10:05:30 UTC  TRACE own_tx  Importing transaction: PendingTransaction { transaction: SignedTransaction { transaction: UnverifiedTransaction { unsigned: Transaction { nonce: 0x0, gas_price: 0x0, gas: 0x5fdfb0, action: Call(0x1f141cb40ee1c67cf4930e79e98c9470cdac5631), value: 0x0, data: [ ...bytes... ] }, v: 43, r: 0x6bb1075edfa18ff1b3db7f19857abe38aa46e0368987fdf32631862028c79bdc, s: 0x55cc71d9c35d3de46d37efb3ffc1c367bf83fe83e362f62eb6f15302e2206a71, hash: 0x49605822265bceacef6118ef2abbc71e933e2351bd4d81153bc766a5d3aab294 }, sender: 0x3bb72fa31612eb7471a42de37ce010f32069bfe0, public: Some(0x81d69ec0b09f59558e9d311de087ef2f1d6710a9795f7db00f3e00e1e527441da8c0b39dadef6ff8a63def60478d433da3f38fe8cb067965fdb14bf3f943b41e) }, condition: None }
2018-11-13 10:05:30 UTC  DEBUG own_tx  Imported to the pool (hash 0x49605822265bceacef6118ef2abbc71e933e2351bd4d81153bc766a5d3aab294)
2018-11-13 10:05:30 UTC IO Worker #1 INFO own_tx  Transaction mined (hash 0x49605822265bceacef6118ef2abbc71e933e2351bd4d81153bc766a5d3aab294)
2018-11-13 10:05:31 UTC Verifier #0 INFO import  Imported #13723 0x3ce7…824f (1 txs, 1.23 Mgas, 14 ms, 2.51 KiB) + another 1 block(s) containing 1 tx(s)
2018-11-13 10:05:33 UTC  TRACE own_tx  Importing transaction: PendingTransaction { transaction: SignedTransaction { transaction: UnverifiedTransaction { unsigned: Transaction { nonce: 0x0, gas_price: 0x0, gas: 0x5fdfb0, action: Call(0x1f141cb40ee1c67cf4930e79e98c9470cdac5631), value: 0x0, data: [ ...bytes... ] }, v: 44, r: 0x7aa4fb3f0837bc253f6bbed729c123b250c8060e33eaf631ad3661a3ba5ec6ab, s: 0x20b390931d94c76286aec715c72ae06fc4001b19d5bb4b6b520ff8ea0f70a61f, hash: 0x98875551eb1101c2c4210ebd0d48afb6d176030f25de1c8b592c834df5267f79 }, sender: 0x37da5a9cf26f3b856782c28a546e3eaad059b53f, public: Some(0xd5028001ec61a95699fd8e79f0ceed709d56ef20e82559c21b65180c763377b3f91e6edf67b6196e80c2d8c7a972f471e3b129dda9797dee605c1a484441871b) }, condition: None }
2018-11-13 10:05:33 UTC  DEBUG own_tx  Imported to the pool (hash 0x98875551eb1101c2c4210ebd0d48afb6d176030f25de1c8b592c834df5267f79)
2018-11-13 10:05:33 UTC IO Worker #1 WARN client  Stage 1 block verification failed for 0x7133…9559: Error(Block(DifficultyOutOfBounds(OutOfBounds { min: None, max: Some(0xffffffffffffffffffffffffffffffff), found: 0xffffffffffffffffffffffffffffffff })), State { next_error: None, backtrace: None })
2018-11-13 10:05:34 UTC IO Worker #0 INFO import  Imported #13724 0xe9e0…4ff9 (1 txs, 0.05 Mgas, 0 ms, 1.04 KiB)
2018-11-13 10:05:34 UTC IO Worker #0 INFO own_tx  Transaction mined (hash 0x98875551eb1101c2c4210ebd0d48afb6d176030f25de1c8b592c834df5267f79)
2018-11-13 10:05:34 UTC  TRACE own_tx  Importing transaction: PendingTransaction { transaction: SignedTransaction { transaction: UnverifiedTransaction { unsigned: Transaction { nonce: 0x1, gas_price: 0x0, gas: 0x2faf080, action: Call(0xba72c34e8c0219deca5a3abe0a9fbba16152078d), value: 0x0, data: [ ...bytes... ] }, v: 43, r: 0x4de25f1188241b683bfd2855d12140984c7fa325c7c257d8f998a0c6c23dd7b, s: 0x399d8e20bbddb9fb03ca0709aae287161fa0631ffdc372b64eec6ec87ba8ceb6, hash: 0x79f489b8657b9ad9578375a409c45adf1ab373c1ef07d2dac58ec693dd2ce2a8 }, sender: 0x4d989eceada8d3ad9ab1c276c75331badca9a9b9, public: Some(0xcf32f6948fddccc84f815d58465d83c9c68cbe91ab18148f7ad03c5d1fb915328b356a0f495e717f347faa30ec9e413cbec1d138c7a336663d5a517bdd7dd203) }, condition: None }
2018-11-13 10:05:34 UTC  DEBUG own_tx  Imported to the pool (hash 0x79f489b8657b9ad9578375a409c45adf1ab373c1ef07d2dac58ec693dd2ce2a8)
2018-11-13 10:05:35 UTC Verifier #0 INFO import  Imported #13724 0xa9ff…e302 (2 txs, 0.52 Mgas, 3 ms, 1.80 KiB)
2018-11-13 10:05:38 UTC IO Worker #2 INFO import  Imported #13725 0x5870…fa8e (1 txs, 0.47 Mgas, 4 ms, 1.32 KiB)
2018-11-13 10:05:38 UTC IO Worker #3 INFO own_tx  Transaction mined (hash 0x79f489b8657b9ad9578375a409c45adf1ab373c1ef07d2dac58ec693dd2ce2a8)
2018-11-13 10:05:39 UTC IO Worker #3 INFO import     3/25 peers      4 MiB chain    1 GiB db  0 bytes queue    1 MiB sync  RPC:  0 conn,  7 req/s, 142 µs
2018-11-13 10:05:48 UTC  TRACE own_tx  Importing transaction: PendingTransaction { transaction: SignedTransaction { transaction: UnverifiedTransaction { unsigned: Transaction { nonce: 0x1, gas_price: 0x0, gas: 0x2faf080, action: Call(0xba72c34e8c0219deca5a3abe0a9fbba16152078d), value: 0x0, data: [ ...bytes... ] }, v: 44, r: 0x41066ba4ca04f65855d6d59650ee0c5dda08a782e570082cf57c6d60969805d4, s: 0x102836f0c6d950ccd4d206993d57bf6e2af2474d94ef947686287d957fb90e8a, hash: 0x131c004a29478fd5e44b5d8cf5e319caec0ab9b2da060ab7ac024cbc8a3c6e5a }, sender: 0x37da5a9cf26f3b856782c28a546e3eaad059b53f, public: Some(0xd5028001ec61a95699fd8e79f0ceed709d56ef20e82559c21b65180c763377b3f91e6edf67b6196e80c2d8c7a972f471e3b129dda9797dee605c1a484441871b) }, condition: None }
2018-11-13 10:05:48 UTC  DEBUG own_tx  Imported to the pool (hash 0x131c004a29478fd5e44b5d8cf5e319caec0ab9b2da060ab7ac024cbc8a3c6e5a)
2018-11-13 10:05:50 UTC IO Worker #0 INFO own_tx  Transaction mined (hash 0x131c004a29478fd5e44b5d8cf5e319caec0ab9b2da060ab7ac024cbc8a3c6e5a)
2018-11-13 10:05:50 UTC IO Worker #0 INFO import  Imported #13726 0x640b…2d59 (1 txs, 0.41 Mgas, 3 ms, 1.34 KiB)
2018-11-13 10:05:51 UTC Verifier #0 INFO import  Imported #13725 0xe2af…69cc (1 txs, 0.41 Mgas, 6 ms, 1.78 KiB)

[eth4 ~]$ cat /var/log/parity.node.log | grep "2018-11-13 10:05"
2018-11-13 10:05:13 UTC IO Worker #0 INFO import     3/25 peers    247 KiB chain    1 GiB db  0 bytes queue    1 MiB sync  RPC:  0 conn, 119 req/s,  53 µs
2018-11-13 10:05:29 UTC Verifier #0 INFO import  Imported #13721 0x0bd1…53f1 (1 txs, 0.05 Mgas, 120 ms, 20.99 KiB)
2018-11-13 10:05:30 UTC Verifier #0 INFO import  Imported #13722 0xfbb1…94c0 (1 txs, 0.05 Mgas, 1 ms, 0.82 KiB)
2018-11-13 10:05:33 UTC IO Worker #3 WARN client  Stage 1 block verification failed for 0x7133…9559: Error(Block(DifficultyOutOfBounds(OutOfBounds { min: None, max: Some(0xffffffffffffffffffffffffffffffff), found: 0xffffffffffffffffffffffffffffffff })), State { next_error: None, backtrace: None })
2018-11-13 10:05:34 UTC IO Worker #0 WARN client  Stage 1 block verification failed for 0xe9e0…4ff9: Error(Block(DifficultyOutOfBounds(OutOfBounds { min: None, max: Some(0xffffffffffffffffffffffffffffffff), found: 0xffffffffffffffffffffffffffffffff })), State { next_error: None, backtrace: None })
2018-11-13 10:05:35 UTC IO Worker #3 INFO import  Imported #13724 0xa9ff…e302 (2 txs, 0.52 Mgas, 1 ms, 1.80 KiB) + another 1 block(s) containing 1 tx(s)
2018-11-13 10:05:48 UTC IO Worker #3 INFO import     3/25 peers    250 KiB chain    1 GiB db  0 bytes queue    1 MiB sync  RPC:  0 conn,  0 req/s,  53 µs
2018-11-13 10:05:51 UTC IO Worker #3 INFO import  Imported #13725 0xe2af…69cc (1 txs, 0.41 Mgas, 1 ms, 1.78 KiB)

@tomusdrw
Copy link
Collaborator

Then nodes continued for hundreds of blocks with their own history keeping this split, no reorg.

Yes, that's expected, cause if the invalid block was detected every child of that blocks is marked invalid as well. Only restarting the node would clear that cache.

It seems that you are running with quite small block number (1s?), that's definitely contributes to the issue and requires the time to be in sync all the the time.

Could you tell me what's the order of authorities? Whose turn was it to seal #13724?

I have a theory how it happened, the main issue being that locally-sealed blocks are short-cutted to the chain (so we don't perform validation) + time drift. And seems that the blocks were just created with incorrect step.

@tomusdrw
Copy link
Collaborator

@mirek would you also be so kind to provide the seals of blocks #13725 and #13724 from all nodes? We are mostly interested in the empty_steps produced by authorities.

@mirek
Copy link
Author

mirek commented Nov 15, 2018

Signers are:

eth1 0x00e1ea722b8e50601f79699610df94f372eafef7
eth2 0x00d4f3f56ed107bfe2e8f65068fc411c7cb600d2
eth3 0x0048c3f4da21116b39e2766eeb006ca15261db4f
eth4 0x00787e911b61b4c64965da853a6f2577d8d65757

They are listed in contract in that order (eth1, eth2, eth3, eth4).

Authors of previous blocks were:

[mirek]$ docker run -ti ethereum/client-go attach http://eth1:8545 --exec "[13720, 13721, 13722, 13723].map(function (blockNumber) { var block = eth.getBlock(blockNumber); return { number: block.number, timestamp: block.timestamp, author: block.author } })"
[{
    author: "0x00d4f3f56ed107bfe2e8f65068fc411c7cb600d2",
    number: 13720,
    timestamp: 1542103249
}, {
    author: "0x00d4f3f56ed107bfe2e8f65068fc411c7cb600d2",
    number: 13721,
    timestamp: 1542103529
}, {
    author: "0x0048c3f4da21116b39e2766eeb006ca15261db4f",
    number: 13722,
    timestamp: 1542103530
}, {
    author: "0x00787e911b61b4c64965da853a6f2577d8d65757",
    number: 13723,
    timestamp: 1542103531
}]

Blocks #13724 and #13725 on each node are:

[mirek]$ docker run -ti ethereum/client-go attach http://eth1:8545 --exec "eth.getBlock(13724, true)"
{
  author: "0x00787e911b61b4c64965da853a6f2577d8d65757",
  difficulty: 3.40282366920938463463374607431768211454e+38,
  emptySteps: "[(0x43a5…0500, 1542103532, 0x3ce7…824f),(0x43a5…0500, 1542103532, 0x3ce7…824f),(0x3d7b…2c00, 1542103533, 0x3ce7…824f)]",
  extraData: "...bytes...",
  gasLimit: 9007199254740991,
  gasUsed: 522258,
  hash: "0xa9ff79d5f03840bf380cd5b402af06485a3460aa25403607d7f273f0164be302",
  logsBloom: "0x04000000000000000000000000000000000000000000000000000000000020000000000000000040000000400000000010000000000000004000000000040000000000000000000000000000000000000000000000040000000000000000000000001000000000004000000000000000000000020010000000000000000000004000000000000000000000000000000000000000000004000000000000000000000000000000000000000900000000000000000000000000000000000000000000040000000000000800008000200000000000000200000000000000000040000000000000000000200000000000000000000400008000000000001000000800",
  miner: "0x00787e911b61b4c64965da853a6f2577d8d65757",
  number: 13724,
  parentHash: "0x3ce7fb21f587bbde876685b2b827f1a18c7dbd9c31cc39dc1860af05a69d824f",
  receiptsRoot: "0x4491a5015786c3d97203f534de3b6caff090ac99396fab0955c546bde644a716",
  sealFields: ["0x845beaa1ef", "0xb84140c6d046343e56c0f1e2ed8d59767196c4542b869e538621418f878505f9658a14471e8ad08cb0c33169762c3084a252016daf8dc7421b1b99192f81adc99fe301", "0xf8def848b84143a526487cb82cd75cae73d90bfe7f7ccc54cc8b2dcac61d2f09c8be44073d2e1f912852dd0aed1227bf1caeef90669c578859ca8aaba6fd0223bd856de9460500845beaa1ecf848b84143a526487cb82cd75cae73d90bfe7f7ccc54cc8b2dcac61d2f09c8be44073d2e1f912852dd0aed1227bf1caeef90669c578859ca8aaba6fd0223bd856de9460500845beaa1ecf848b8413d7b8eb300a97c35a6f60b4e9b84b79f0e48c230555afa9ecb8544d9631ea691043176e2179cf0f6317520003f4b6233dcef5ea8da1084dc8231ea6411358f2c00845beaa1ed"],
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  signature: "40c6d046343e56c0f1e2ed8d59767196c4542b869e538621418f878505f9658a14471e8ad08cb0c33169762c3084a252016daf8dc7421b1b99192f81adc99fe301",
  size: 1843,
  stateRoot: "0xd7145dc855a3374b41f8089fce7c43a30e4de72beecc54421f1242510a90fb11",
  step: "1542103535",
  timestamp: 1542103535,
  totalDifficulty: 4.670035203622959472571353112393585393569031e+42,
  transactions: [{
      blockHash: "0xa9ff79d5f03840bf380cd5b402af06485a3460aa25403607d7f273f0164be302",
      blockNumber: 13724,
      chainId: "0x4",
      condition: null,
      creates: null,
      from: "0x4d989eceada8d3ad9ab1c276c75331badca9a9b9",
      gas: 50000000,
      gasPrice: 0,
      hash: "0x79f489b8657b9ad9578375a409c45adf1ab373c1ef07d2dac58ec693dd2ce2a8",
      input: "...bytes...",
      nonce: 1,
      publicKey: "0xcf32f6948fddccc84f815d58465d83c9c68cbe91ab18148f7ad03c5d1fb915328b356a0f495e717f347faa30ec9e413cbec1d138c7a336663d5a517bdd7dd203",
      r: "0x4de25f1188241b683bfd2855d12140984c7fa325c7c257d8f998a0c6c23dd7b",
      raw: "...bytes...",
      s: "0x399d8e20bbddb9fb03ca0709aae287161fa0631ffdc372b64eec6ec87ba8ceb6",
      standardV: "0x0",
      to: "0xba72c34e8c0219deca5a3abe0a9fbba16152078d",
      transactionIndex: 0,
      v: "0x2b",
      value: 0
  }, {
      blockHash: "0xa9ff79d5f03840bf380cd5b402af06485a3460aa25403607d7f273f0164be302",
      blockNumber: 13724,
      chainId: "0x4",
      condition: null,
      creates: null,
      from: "0x37da5a9cf26f3b856782c28a546e3eaad059b53f",
      gas: 6283184,
      gasPrice: 0,
      hash: "0x98875551eb1101c2c4210ebd0d48afb6d176030f25de1c8b592c834df5267f79",
      input: "...bytes...",
      nonce: 0,
      publicKey: "0xd5028001ec61a95699fd8e79f0ceed709d56ef20e82559c21b65180c763377b3f91e6edf67b6196e80c2d8c7a972f471e3b129dda9797dee605c1a484441871b",
      r: "0x7aa4fb3f0837bc253f6bbed729c123b250c8060e33eaf631ad3661a3ba5ec6ab",
      raw: "...bytes...",
      s: "0x20b390931d94c76286aec715c72ae06fc4001b19d5bb4b6b520ff8ea0f70a61f",
      standardV: "0x1",
      to: "0x1f141cb40ee1c67cf4930e79e98c9470cdac5631",
      transactionIndex: 1,
      v: "0x2c",
      value: 0
  }],
  transactionsRoot: "0xa1dc4a256fb72542843fcda3858e9916987266ed1d6b272bfb513c3b62219567",
  uncles: []
}

[mirek]$ docker run -ti ethereum/client-go attach http://eth1:8545 --exec "eth.getBlock(13725, true)"
{
  author: "0x00787e911b61b4c64965da853a6f2577d8d65757",
  difficulty: 3.40282366920938463463374607431768211447e+38,
  emptySteps: "[(0x413b…4300, 1542103536, 0xa9ff…e302),(0x413b…4300, 1542103536, 0xa9ff…e302),(0xca2b…a901, 1542103539, 0xa9ff…e302),(0x073d…8300, 1542103540, 0xa9ff…e302),(0x2f7f…f001, 1542103543, 0xa9ff…e302),(0x9ea3…9700, 1542103544, 0xa9ff…e302),(0x4028…cd00, 1542103547, 0xa9ff…e302),(0x37a0…dc01, 1542103548, 0xa9ff…e302)]",
  extraData: "...bytes...",
  gasLimit: 9007199254740991,
  gasUsed: 405883,
  hash: "0xe2af5e5eba32ed519989df82ee6351ad788b1523388dee56cdf71fbc2c2f69cc",
  logsBloom: "0x04000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000020000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000004000000000000000000000000000000000000000000004000000000000000000000000000000000000000100000000000000000000800000000000000000400000000000000000000800008000000000000000000000000000000000000000000000000000000000200000000000000000000000009000000000000000000000",
  miner: "0x00787e911b61b4c64965da853a6f2577d8d65757",
  number: 13725,
  parentHash: "0xa9ff79d5f03840bf380cd5b402af06485a3460aa25403607d7f273f0164be302",
  receiptsRoot: "0x1f0c9e41d87bd7156c522eca960aea239d074232dd5a84e2e22f0e942150fe92",
  sealFields: ["0x845beaa1ff", "0xb841cd17bac7df632493dd8669f41466c3ffb90d3565b94f232ac400cb63adfbdab66f878bbde7021cffe8a187672ba871e35f923a87e1ca6bc8b390e0f09602123201", "0xf90250f848b841413ba0f16feb134e6171e5cb3285d1f374db9e40b58e33a6e6950ad8677dbc010c26f772b7fb19f79b0c58b8d47b25b3140843913f9ff44a6d2f91f1d98aad4300845beaa1f0f848b841413ba0f16feb134e6171e5cb3285d1f374db9e40b58e33a6e6950ad8677dbc010c26f772b7fb19f79b0c58b8d47b25b3140843913f9ff44a6d2f91f1d98aad4300845beaa1f0f848b841ca2b4d237364238bb14a075e2870a3eefd00128062eb51d378b19d277fa291a86de0a7901247e6f37cf87f35d1746292326c8cca8e988ad5b1f0c563cb2ac7a901845beaa1f3f848b841073dce12e4783d67359f7ba9498da150f0341a721388508c64bb36e5b16b004f558b3cd678ecba65bb4ed24c6e36b3e41873402fa2f3071337074402e247a08300845beaa1f4f848b8412f7ffb0a1fa264378490a8a92f4877f7ce3e4008189c9f8c503cb593d3f5ae5c40072601013feae2a663ab57d8baf4980a11513419bfb922ebdadea3356abaf001845beaa1f7f848b8419ea3c7f70b7fe2d6bf11fe38e958ae9b99803acd2c2a12bbeeaedfe13b13b886471dc9083c0b53722dd2d70eaaa24c73fca8620c178410f85ad142cd96773e9700845beaa1f8f848b841402820c984cfc12b8ba746d77d15ab500efd5079c1f3a1f8c295241b230dad690e70f23d0c41a3da07065304e8722ffa96ba8b707a6d845a14c6ef27881dd1cd00845beaa1fbf848b84137a02910248eb15bdf8f5795a715ccac4e85cadaffb6fb8bb5aededfa7e5724f4ef961e16bd7d2894a191eff0cd88f56f6d51625eeaa1d0cf856cfb926ddc6dc01845beaa1fc"],
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  signature: "cd17bac7df632493dd8669f41466c3ffb90d3565b94f232ac400cb63adfbdab66f878bbde7021cffe8a187672ba871e35f923a87e1ca6bc8b390e0f09602123201",
  size: 1822,
  stateRoot: "0x03cd876c8b811427871fa01ff5640f50ec3fc44338c3e9a7449688a7ad21a5a0",
  step: "1542103551",
  timestamp: 1542103551,
  totalDifficulty: 4.670375485989880411034816487001017161780478e+42,
  transactions: [{
      blockHash: "0xe2af5e5eba32ed519989df82ee6351ad788b1523388dee56cdf71fbc2c2f69cc",
      blockNumber: 13725,
      chainId: "0x4",
      condition: null,
      creates: null,
      from: "0x37da5a9cf26f3b856782c28a546e3eaad059b53f",
      gas: 50000000,
      gasPrice: 0,
      hash: "0x131c004a29478fd5e44b5d8cf5e319caec0ab9b2da060ab7ac024cbc8a3c6e5a",
      input: "...bytes...",
      nonce: 1,
      publicKey: "0xd5028001ec61a95699fd8e79f0ceed709d56ef20e82559c21b65180c763377b3f91e6edf67b6196e80c2d8c7a972f471e3b129dda9797dee605c1a484441871b",
      r: "0x41066ba4ca04f65855d6d59650ee0c5dda08a782e570082cf57c6d60969805d4",
      raw: "...bytes...",
      s: "0x102836f0c6d950ccd4d206993d57bf6e2af2474d94ef947686287d957fb90e8a",
      standardV: "0x1",
      to: "0xba72c34e8c0219deca5a3abe0a9fbba16152078d",
      transactionIndex: 0,
      v: "0x2c",
      value: 0
  }],
  transactionsRoot: "0x0a277dfef145f05de9f5a9e4a1a37131c3cd11a54aeec8c75da8bf5ee6116703",
  uncles: []
}
[mirek]$ docker run -ti ethereum/client-go attach http://eth2:8545 --exec "eth.getBlock(13724, true)"
{
  author: "0x00d4f3f56ed107bfe2e8f65068fc411c7cb600d2",
  difficulty: 3.40282366920938463463374607431768211455e+38,
  emptySteps: "[(0x43a5…0500, 1542103532, 0x3ce7…824f),(0x43a5…0500, 1542103532, 0x3ce7…824f)]",
  extraData: "...bytes...",
  gasLimit: 9007199254740991,
  gasUsed: 49696,
  hash: "0x71332e9de8c44e6e14335851891eb9b18c9561fbbbbb77dfcfece2b5a8aa9559",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000020000000000000000040000000400000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000020010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000040000000000000000000000200000000000000200000000000000000000000000000000000000000000000000000000000400000000000000000000000000",
  miner: "0x00d4f3f56ed107bfe2e8f65068fc411c7cb600d2",
  number: 13724,
  parentHash: "0x3ce7fb21f587bbde876685b2b827f1a18c7dbd9c31cc39dc1860af05a69d824f",
  receiptsRoot: "0xdced4eba789a10c09c32c24ca81ceab96b45af8235cdbe70e813bc1b43b3f965",
  sealFields: ["0x845beaa1ed", "0xb8414e503f7b9e0e8d3a5564a4479f411ee786b1bd334a85ddc73f83feed24c23ecc39bf029ff7db0142d54920027dd889ff752b83e90301ad896b474310b2c45ec701", "0xf894f848b84143a526487cb82cd75cae73d90bfe7f7ccc54cc8b2dcac61d2f09c8be44073d2e1f912852dd0aed1227bf1caeef90669c578859ca8aaba6fd0223bd856de9460500845beaa1ecf848b84143a526487cb82cd75cae73d90bfe7f7ccc54cc8b2dcac61d2f09c8be44073d2e1f912852dd0aed1227bf1caeef90669c578859ca8aaba6fd0223bd856de9460500845beaa1ec"],
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  signature: "4e503f7b9e0e8d3a5564a4479f411ee786b1bd334a85ddc73f83feed24c23ecc39bf029ff7db0142d54920027dd889ff752b83e90301ad896b474310b2c45ec701",
  size: 990,
  stateRoot: "0x4092cb3c6da6157326bcf6445bb94843d46ed9af2f4e7cd0d6a2e6ffdc474d74",
  step: "1542103533",
  timestamp: 1542103533,
  totalDifficulty: 4.670035203622959472571353112393585393569032e+42,
  transactions: [{
      blockHash: "0x71332e9de8c44e6e14335851891eb9b18c9561fbbbbb77dfcfece2b5a8aa9559",
      blockNumber: 13724,
      chainId: "0x4",
      condition: null,
      creates: null,
      from: "0x37da5a9cf26f3b856782c28a546e3eaad059b53f",
      gas: 6283184,
      gasPrice: 0,
      hash: "0x98875551eb1101c2c4210ebd0d48afb6d176030f25de1c8b592c834df5267f79",
      input: "...bytes...",
      nonce: 0,
      publicKey: "0xd5028001ec61a95699fd8e79f0ceed709d56ef20e82559c21b65180c763377b3f91e6edf67b6196e80c2d8c7a972f471e3b129dda9797dee605c1a484441871b",
      r: "0x7aa4fb3f0837bc253f6bbed729c123b250c8060e33eaf631ad3661a3ba5ec6ab",
      raw: "...bytes...",
      s: "0x20b390931d94c76286aec715c72ae06fc4001b19d5bb4b6b520ff8ea0f70a61f",
      standardV: "0x1",
      to: "0x1f141cb40ee1c67cf4930e79e98c9470cdac5631",
      transactionIndex: 0,
      v: "0x2c",
      value: 0
  }],
  transactionsRoot: "0xd7d3e5aa425833e5bcf277c985d3aa3d5721e9a77f8d1d4ac6f75bf41f1c82f5",
  uncles: []
}

[mirek]$ docker run -ti ethereum/client-go attach http://eth2:8545 --exec "eth.getBlock(13725, true)"
{
  author: "0x00d4f3f56ed107bfe2e8f65068fc411c7cb600d2",
  difficulty: 3.40282366920938463463374607431768211451e+38,
  emptySteps: "[]",
  extraData: "...bytes...",
  gasLimit: 9007199254740991,
  gasUsed: 472562,
  hash: "0xc8efc95741f8e7215039822043da1ddfb3919746b0feb3382e9bb11d9b84d6e0",
  logsBloom: "0x04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000040000000000000000000000000000000000000000000000040000000000000000000000001000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000004000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000800008000000000000000000000000000000000000040000000000000000000200000000000000000000000008000000000001000000800",
  miner: "0x00d4f3f56ed107bfe2e8f65068fc411c7cb600d2",
  number: 13725,
  parentHash: "0x71332e9de8c44e6e14335851891eb9b18c9561fbbbbb77dfcfece2b5a8aa9559",
  receiptsRoot: "0x3d9f6a256a8e31e9e1f3bac27b4e53bdb910bad8d16f65c9a76db42dbfa9387f",
  sealFields: ["0x845beaa1f1", "0xb84135551e3a479b7c863b84adba7f02bb3d4eed9aeed5c4b9172889da3ab1349b7f0dbd5059e2e944f00dc38c3fab6e56f83d34d00b61229dd9a2b13214e42446ce01", "0xc0"],
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  signature: "35551e3a479b7c863b84adba7f02bb3d4eed9aeed5c4b9172889da3ab1349b7f0dbd5059e2e944f00dc38c3fab6e56f83d34d00b61229dd9a2b13214e42446ce01",
  size: 1356,
  stateRoot: "0x05d3b1f9c25759bca806d4e5755760d841324b8915ed447e8ced42450e332832",
  step: "1542103537",
  timestamp: 1542103537,
  totalDifficulty: 4.670375485989880411034816487001017161780483e+42,
  transactions: [{
      blockHash: "0xc8efc95741f8e7215039822043da1ddfb3919746b0feb3382e9bb11d9b84d6e0",
      blockNumber: 13725,
      chainId: "0x4",
      condition: null,
      creates: null,
      from: "0x4d989eceada8d3ad9ab1c276c75331badca9a9b9",
      gas: 50000000,
      gasPrice: 0,
      hash: "0x79f489b8657b9ad9578375a409c45adf1ab373c1ef07d2dac58ec693dd2ce2a8",
      input: "...bytes...",
      nonce: 1,
      publicKey: "0xcf32f6948fddccc84f815d58465d83c9c68cbe91ab18148f7ad03c5d1fb915328b356a0f495e717f347faa30ec9e413cbec1d138c7a336663d5a517bdd7dd203",
      r: "0x4de25f1188241b683bfd2855d12140984c7fa325c7c257d8f998a0c6c23dd7b",
      raw: "...bytes...",
      s: "0x399d8e20bbddb9fb03ca0709aae287161fa0631ffdc372b64eec6ec87ba8ceb6",
      standardV: "0x0",
      to: "0xba72c34e8c0219deca5a3abe0a9fbba16152078d",
      transactionIndex: 0,
      v: "0x2b",
      value: 0
  }],
  transactionsRoot: "0xf7b470b8e7f7a45fc44edfb19616c199221dc2b7b13bd0430d48a3cef8b76d14",
  uncles: []
}

[mirek]$ docker run -ti ethereum/client-go attach http://eth3:8545 --exec "eth.getBlock(13724, true)"
{
  author: "0x0048c3f4da21116b39e2766eeb006ca15261db4f",
  difficulty: 3.40282366920938463463374607431768211455e+38,
  emptySteps: "[(0x43a5…0500, 1542103532, 0x3ce7…824f),(0x43a5…0500, 1542103532, 0x3ce7…824f),(0x3d7b…2c00, 1542103533, 0x3ce7…824f)]",
  extraData: "...bytes...",
  gasLimit: 9007199254740991,
  gasUsed: 49696,
  hash: "0xe9e04fcd7b2e376ef27b653b35f24688ca23e195f4b41f3a7d1f36d0d3ed4ff9",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000020000000000000000040000000400000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000020010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000040000000000000000000000200000000000000200000000000000000000000000000000000000000000000000000000000400000000000000000000000000",
  miner: "0x0048c3f4da21116b39e2766eeb006ca15261db4f",
  number: 13724,
  parentHash: "0x3ce7fb21f587bbde876685b2b827f1a18c7dbd9c31cc39dc1860af05a69d824f",
  receiptsRoot: "0xdced4eba789a10c09c32c24ca81ceab96b45af8235cdbe70e813bc1b43b3f965",
  sealFields: ["0x845beaa1ee", "0xb84139bc2e06e2d9686f6f7933e5e826fcd9a588bb65d9c4cf5dc7082c1f5e9c7c6521fbde8c5a1b92dde7731d69976ab9ab9dcd57e1932be5f91d86844b7427bf6600", "0xf8def848b84143a526487cb82cd75cae73d90bfe7f7ccc54cc8b2dcac61d2f09c8be44073d2e1f912852dd0aed1227bf1caeef90669c578859ca8aaba6fd0223bd856de9460500845beaa1ecf848b84143a526487cb82cd75cae73d90bfe7f7ccc54cc8b2dcac61d2f09c8be44073d2e1f912852dd0aed1227bf1caeef90669c578859ca8aaba6fd0223bd856de9460500845beaa1ecf848b8413d7b8eb300a97c35a6f60b4e9b84b79f0e48c230555afa9ecb8544d9631ea691043176e2179cf0f6317520003f4b6233dcef5ea8da1084dc8231ea6411358f2c00845beaa1ed"],
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  signature: "39bc2e06e2d9686f6f7933e5e826fcd9a588bb65d9c4cf5dc7082c1f5e9c7c6521fbde8c5a1b92dde7731d69976ab9ab9dcd57e1932be5f91d86844b7427bf6600",
  size: 1064,
  stateRoot: "0x4092cb3c6da6157326bcf6445bb94843d46ed9af2f4e7cd0d6a2e6ffdc474d74",
  step: "1542103534",
  timestamp: 1542103534,
  totalDifficulty: 4.670035203622959472571353112393585393569032e+42,
  transactions: [{
      blockHash: "0xe9e04fcd7b2e376ef27b653b35f24688ca23e195f4b41f3a7d1f36d0d3ed4ff9",
      blockNumber: 13724,
      chainId: "0x4",
      condition: null,
      creates: null,
      from: "0x37da5a9cf26f3b856782c28a546e3eaad059b53f",
      gas: 6283184,
      gasPrice: 0,
      hash: "0x98875551eb1101c2c4210ebd0d48afb6d176030f25de1c8b592c834df5267f79",
      input: "...bytes...",
      nonce: 0,
      publicKey: "0xd5028001ec61a95699fd8e79f0ceed709d56ef20e82559c21b65180c763377b3f91e6edf67b6196e80c2d8c7a972f471e3b129dda9797dee605c1a484441871b",
      r: "0x7aa4fb3f0837bc253f6bbed729c123b250c8060e33eaf631ad3661a3ba5ec6ab",
      raw: "...bytes...",
      s: "0x20b390931d94c76286aec715c72ae06fc4001b19d5bb4b6b520ff8ea0f70a61f",
      standardV: "0x1",
      to: "0x1f141cb40ee1c67cf4930e79e98c9470cdac5631",
      transactionIndex: 0,
      v: "0x2c",
      value: 0
  }],
  transactionsRoot: "0xd7d3e5aa425833e5bcf277c985d3aa3d5721e9a77f8d1d4ac6f75bf41f1c82f5",
  uncles: []
}

[mirek]$ docker run -ti ethereum/client-go attach http://eth3:8545 --exec "eth.getBlock(13725, true)"
{
  author: "0x0048c3f4da21116b39e2766eeb006ca15261db4f",
  difficulty: 3.40282366920938463463374607431768211451e+38,
  emptySteps: "[]",
  extraData: "...bytes...",
  gasLimit: 9007199254740991,
  gasUsed: 472562,
  hash: "0x587052c264586d6e90d43540ba2010949fa78e452445f9fe994c8374d0a5fa8e",
  logsBloom: "0x04000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000040000000000000000000000000000000000000000000000040000000000000000000000001000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000004000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000800008000000000000000000000000000000000000040000000000000000000200000000000000000000000008000000000001000000800",
  miner: "0x0048c3f4da21116b39e2766eeb006ca15261db4f",
  number: 13725,
  parentHash: "0xe9e04fcd7b2e376ef27b653b35f24688ca23e195f4b41f3a7d1f36d0d3ed4ff9",
  receiptsRoot: "0x3d9f6a256a8e31e9e1f3bac27b4e53bdb910bad8d16f65c9a76db42dbfa9387f",
  sealFields: ["0x845beaa1f2", "0xb8417847b4332420989ae1e2493ba7e8cf6651167d262b98dfe8b9a7a05b89b4e36f44c4eacd121fe849d0cbc3369cf4d1ee4caa91496cadb56c7e5d12665caea35000", "0xc0"],
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  signature: "7847b4332420989ae1e2493ba7e8cf6651167d262b98dfe8b9a7a05b89b4e36f44c4eacd121fe849d0cbc3369cf4d1ee4caa91496cadb56c7e5d12665caea35000",
  size: 1356,
  stateRoot: "0xbc5f50014feac6aa1742e6874431df44cc58242e8b9a587c955cb19bcaa36782",
  step: "1542103538",
  timestamp: 1542103538,
  totalDifficulty: 4.670375485989880411034816487001017161780483e+42,
  transactions: [{
      blockHash: "0x587052c264586d6e90d43540ba2010949fa78e452445f9fe994c8374d0a5fa8e",
      blockNumber: 13725,
      chainId: "0x4",
      condition: null,
      creates: null,
      from: "0x4d989eceada8d3ad9ab1c276c75331badca9a9b9",
      gas: 50000000,
      gasPrice: 0,
      hash: "0x79f489b8657b9ad9578375a409c45adf1ab373c1ef07d2dac58ec693dd2ce2a8",
      input: "...bytes...",
      nonce: 1,
      publicKey: "0xcf32f6948fddccc84f815d58465d83c9c68cbe91ab18148f7ad03c5d1fb915328b356a0f495e717f347faa30ec9e413cbec1d138c7a336663d5a517bdd7dd203",
      r: "0x4de25f1188241b683bfd2855d12140984c7fa325c7c257d8f998a0c6c23dd7b",
      raw: "...bytes...",
      s: "0x399d8e20bbddb9fb03ca0709aae287161fa0631ffdc372b64eec6ec87ba8ceb6",
      standardV: "0x0",
      to: "0xba72c34e8c0219deca5a3abe0a9fbba16152078d",
      transactionIndex: 0,
      v: "0x2b",
      value: 0
  }],
  transactionsRoot: "0xf7b470b8e7f7a45fc44edfb19616c199221dc2b7b13bd0430d48a3cef8b76d14",
  uncles: []
}

[mirek]$ docker run -ti ethereum/client-go attach http://eth4:8545 --exec "eth.getBlock(13724, true)"
{
  author: "0x00787e911b61b4c64965da853a6f2577d8d65757",
  difficulty: 3.40282366920938463463374607431768211454e+38,
  emptySteps: "[(0x43a5…0500, 1542103532, 0x3ce7…824f),(0x43a5…0500, 1542103532, 0x3ce7…824f),(0x3d7b…2c00, 1542103533, 0x3ce7…824f)]",
  extraData: "...bytes...",
  gasLimit: 9007199254740991,
  gasUsed: 522258,
  hash: "0xa9ff79d5f03840bf380cd5b402af06485a3460aa25403607d7f273f0164be302",
  logsBloom: "0x04000000000000000000000000000000000000000000000000000000000020000000000000000040000000400000000010000000000000004000000000040000000000000000000000000000000000000000000000040000000000000000000000001000000000004000000000000000000000020010000000000000000000004000000000000000000000000000000000000000000004000000000000000000000000000000000000000900000000000000000000000000000000000000000000040000000000000800008000200000000000000200000000000000000040000000000000000000200000000000000000000400008000000000001000000800",
  miner: "0x00787e911b61b4c64965da853a6f2577d8d65757",
  number: 13724,
  parentHash: "0x3ce7fb21f587bbde876685b2b827f1a18c7dbd9c31cc39dc1860af05a69d824f",
  receiptsRoot: "0x4491a5015786c3d97203f534de3b6caff090ac99396fab0955c546bde644a716",
  sealFields: ["0x845beaa1ef", "0xb84140c6d046343e56c0f1e2ed8d59767196c4542b869e538621418f878505f9658a14471e8ad08cb0c33169762c3084a252016daf8dc7421b1b99192f81adc99fe301", "0xf8def848b84143a526487cb82cd75cae73d90bfe7f7ccc54cc8b2dcac61d2f09c8be44073d2e1f912852dd0aed1227bf1caeef90669c578859ca8aaba6fd0223bd856de9460500845beaa1ecf848b84143a526487cb82cd75cae73d90bfe7f7ccc54cc8b2dcac61d2f09c8be44073d2e1f912852dd0aed1227bf1caeef90669c578859ca8aaba6fd0223bd856de9460500845beaa1ecf848b8413d7b8eb300a97c35a6f60b4e9b84b79f0e48c230555afa9ecb8544d9631ea691043176e2179cf0f6317520003f4b6233dcef5ea8da1084dc8231ea6411358f2c00845beaa1ed"],
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  signature: "40c6d046343e56c0f1e2ed8d59767196c4542b869e538621418f878505f9658a14471e8ad08cb0c33169762c3084a252016daf8dc7421b1b99192f81adc99fe301",
  size: 1843,
  stateRoot: "0xd7145dc855a3374b41f8089fce7c43a30e4de72beecc54421f1242510a90fb11",
  step: "1542103535",
  timestamp: 1542103535,
  totalDifficulty: 4.670035203622959472571353112393585393569031e+42,
  transactions: [{
      blockHash: "0xa9ff79d5f03840bf380cd5b402af06485a3460aa25403607d7f273f0164be302",
      blockNumber: 13724,
      chainId: "0x4",
      condition: null,
      creates: null,
      from: "0x4d989eceada8d3ad9ab1c276c75331badca9a9b9",
      gas: 50000000,
      gasPrice: 0,
      hash: "0x79f489b8657b9ad9578375a409c45adf1ab373c1ef07d2dac58ec693dd2ce2a8",
      input: "...bytes...",
      nonce: 1,
      publicKey: "0xcf32f6948fddccc84f815d58465d83c9c68cbe91ab18148f7ad03c5d1fb915328b356a0f495e717f347faa30ec9e413cbec1d138c7a336663d5a517bdd7dd203",
      r: "0x4de25f1188241b683bfd2855d12140984c7fa325c7c257d8f998a0c6c23dd7b",
      raw: "...bytes...",
      s: "0x399d8e20bbddb9fb03ca0709aae287161fa0631ffdc372b64eec6ec87ba8ceb6",
      standardV: "0x0",
      to: "0xba72c34e8c0219deca5a3abe0a9fbba16152078d",
      transactionIndex: 0,
      v: "0x2b",
      value: 0
  }, {
      blockHash: "0xa9ff79d5f03840bf380cd5b402af06485a3460aa25403607d7f273f0164be302",
      blockNumber: 13724,
      chainId: "0x4",
      condition: null,
      creates: null,
      from: "0x37da5a9cf26f3b856782c28a546e3eaad059b53f",
      gas: 6283184,
      gasPrice: 0,
      hash: "0x98875551eb1101c2c4210ebd0d48afb6d176030f25de1c8b592c834df5267f79",
      input: "...bytes...",
      nonce: 0,
      publicKey: "0xd5028001ec61a95699fd8e79f0ceed709d56ef20e82559c21b65180c763377b3f91e6edf67b6196e80c2d8c7a972f471e3b129dda9797dee605c1a484441871b",
      r: "0x7aa4fb3f0837bc253f6bbed729c123b250c8060e33eaf631ad3661a3ba5ec6ab",
      raw: "...bytes...",
      s: "0x20b390931d94c76286aec715c72ae06fc4001b19d5bb4b6b520ff8ea0f70a61f",
      standardV: "0x1",
      to: "0x1f141cb40ee1c67cf4930e79e98c9470cdac5631",
      transactionIndex: 1,
      v: "0x2c",
      value: 0
  }],
  transactionsRoot: "0xa1dc4a256fb72542843fcda3858e9916987266ed1d6b272bfb513c3b62219567",
  uncles: []
}

[mirek]$ docker run -ti ethereum/client-go attach http://eth4:8545 --exec "eth.getBlock(13725, true)"
{
  author: "0x00787e911b61b4c64965da853a6f2577d8d65757",
  difficulty: 3.40282366920938463463374607431768211447e+38,
  emptySteps: "[(0x413b…4300, 1542103536, 0xa9ff…e302),(0x413b…4300, 1542103536, 0xa9ff…e302),(0xca2b…a901, 1542103539, 0xa9ff…e302),(0x073d…8300, 1542103540, 0xa9ff…e302),(0x2f7f…f001, 1542103543, 0xa9ff…e302),(0x9ea3…9700, 1542103544, 0xa9ff…e302),(0x4028…cd00, 1542103547, 0xa9ff…e302),(0x37a0…dc01, 1542103548, 0xa9ff…e302)]",
  extraData: "...bytes...",
  gasLimit: 9007199254740991,
  gasUsed: 405883,
  hash: "0xe2af5e5eba32ed519989df82ee6351ad788b1523388dee56cdf71fbc2c2f69cc",
  logsBloom: "0x04000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000020000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000004000000000000000000000000000000000000000000004000000000000000000000000000000000000000100000000000000000000800000000000000000400000000000000000000800008000000000000000000000000000000000000000000000000000000000200000000000000000000000009000000000000000000000",
  miner: "0x00787e911b61b4c64965da853a6f2577d8d65757",
  number: 13725,
  parentHash: "0xa9ff79d5f03840bf380cd5b402af06485a3460aa25403607d7f273f0164be302",
  receiptsRoot: "0x1f0c9e41d87bd7156c522eca960aea239d074232dd5a84e2e22f0e942150fe92",
  sealFields: ["0x845beaa1ff", "0xb841cd17bac7df632493dd8669f41466c3ffb90d3565b94f232ac400cb63adfbdab66f878bbde7021cffe8a187672ba871e35f923a87e1ca6bc8b390e0f09602123201", "0xf90250f848b841413ba0f16feb134e6171e5cb3285d1f374db9e40b58e33a6e6950ad8677dbc010c26f772b7fb19f79b0c58b8d47b25b3140843913f9ff44a6d2f91f1d98aad4300845beaa1f0f848b841413ba0f16feb134e6171e5cb3285d1f374db9e40b58e33a6e6950ad8677dbc010c26f772b7fb19f79b0c58b8d47b25b3140843913f9ff44a6d2f91f1d98aad4300845beaa1f0f848b841ca2b4d237364238bb14a075e2870a3eefd00128062eb51d378b19d277fa291a86de0a7901247e6f37cf87f35d1746292326c8cca8e988ad5b1f0c563cb2ac7a901845beaa1f3f848b841073dce12e4783d67359f7ba9498da150f0341a721388508c64bb36e5b16b004f558b3cd678ecba65bb4ed24c6e36b3e41873402fa2f3071337074402e247a08300845beaa1f4f848b8412f7ffb0a1fa264378490a8a92f4877f7ce3e4008189c9f8c503cb593d3f5ae5c40072601013feae2a663ab57d8baf4980a11513419bfb922ebdadea3356abaf001845beaa1f7f848b8419ea3c7f70b7fe2d6bf11fe38e958ae9b99803acd2c2a12bbeeaedfe13b13b886471dc9083c0b53722dd2d70eaaa24c73fca8620c178410f85ad142cd96773e9700845beaa1f8f848b841402820c984cfc12b8ba746d77d15ab500efd5079c1f3a1f8c295241b230dad690e70f23d0c41a3da07065304e8722ffa96ba8b707a6d845a14c6ef27881dd1cd00845beaa1fbf848b84137a02910248eb15bdf8f5795a715ccac4e85cadaffb6fb8bb5aededfa7e5724f4ef961e16bd7d2894a191eff0cd88f56f6d51625eeaa1d0cf856cfb926ddc6dc01845beaa1fc"],
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  signature: "cd17bac7df632493dd8669f41466c3ffb90d3565b94f232ac400cb63adfbdab66f878bbde7021cffe8a187672ba871e35f923a87e1ca6bc8b390e0f09602123201",
  size: 1822,
  stateRoot: "0x03cd876c8b811427871fa01ff5640f50ec3fc44338c3e9a7449688a7ad21a5a0",
  step: "1542103551",
  timestamp: 1542103551,
  totalDifficulty: 4.670375485989880411034816487001017161780478e+42,
  transactions: [{
      blockHash: "0xe2af5e5eba32ed519989df82ee6351ad788b1523388dee56cdf71fbc2c2f69cc",
      blockNumber: 13725,
      chainId: "0x4",
      condition: null,
      creates: null,
      from: "0x37da5a9cf26f3b856782c28a546e3eaad059b53f",
      gas: 50000000,
      gasPrice: 0,
      hash: "0x131c004a29478fd5e44b5d8cf5e319caec0ab9b2da060ab7ac024cbc8a3c6e5a",
      input: "...bytes...",
      nonce: 1,
      publicKey: "0xd5028001ec61a95699fd8e79f0ceed709d56ef20e82559c21b65180c763377b3f91e6edf67b6196e80c2d8c7a972f471e3b129dda9797dee605c1a484441871b",
      r: "0x41066ba4ca04f65855d6d59650ee0c5dda08a782e570082cf57c6d60969805d4",
      raw: "...bytes...",
      s: "0x102836f0c6d950ccd4d206993d57bf6e2af2474d94ef947686287d957fb90e8a",
      standardV: "0x1",
      to: "0xba72c34e8c0219deca5a3abe0a9fbba16152078d",
      transactionIndex: 0,
      v: "0x2c",
      value: 0
  }],
  transactionsRoot: "0x0a277dfef145f05de9f5a9e4a1a37131c3cd11a54aeec8c75da8bf5ee6116703",
  uncles: []
}

@mariogemoll
Copy link

mariogemoll commented Nov 16, 2018

Hi, I'm working with @mirek on the project that's experiencing the issues; we spoke about it again earlier today.

@tomusdrw here are the decoded seals from the blocks:

Block 13724
Node eth1 (block hash: 0xa9ff79d5f03840bf380cd5b402af06485a3460aa25403607d7f273f0164be302)
1542103532 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103532 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103533 '00d4f3f56ed107bfe2e8f65068fc411c7cb600d2'

Node eth2 (block hash: 0x71332e9de8c44e6e14335851891eb9b18c9561fbbbbb77dfcfece2b5a8aa9559)
1542103532 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103532 '00e1ea722b8e50601f79699610df94f372eafef7'

Node eth3 (block hash: 0xe9e04fcd7b2e376ef27b653b35f24688ca23e195f4b41f3a7d1f36d0d3ed4ff9)
1542103532 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103532 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103533 '00d4f3f56ed107bfe2e8f65068fc411c7cb600d2'

Node eth4 (block hash: 0xa9ff79d5f03840bf380cd5b402af06485a3460aa25403607d7f273f0164be302)
1542103532 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103532 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103533 '00d4f3f56ed107bfe2e8f65068fc411c7cb600d2'
Block 13725
Node eth1 (block hash: 0xe2af5e5eba32ed519989df82ee6351ad788b1523388dee56cdf71fbc2c2f69cc)
1542103536 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103536 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103539 '00787e911b61b4c64965da853a6f2577d8d65757'
1542103540 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103543 '00787e911b61b4c64965da853a6f2577d8d65757'
1542103544 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103547 '00787e911b61b4c64965da853a6f2577d8d65757'
1542103548 '00e1ea722b8e50601f79699610df94f372eafef7'

Node eth2 (block hash: 0xc8efc95741f8e7215039822043da1ddfb3919746b0feb3382e9bb11d9b84d6e0)
---

Node eth3 (block hash: 0x587052c264586d6e90d43540ba2010949fa78e452445f9fe994c8374d0a5fa8e)
---

Node eth4 (block hash: 0xe2af5e5eba32ed519989df82ee6351ad788b1523388dee56cdf71fbc2c2f69cc)
1542103536 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103536 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103539 '00787e911b61b4c64965da853a6f2577d8d65757'
1542103540 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103543 '00787e911b61b4c64965da853a6f2577d8d65757'
1542103544 '00e1ea722b8e50601f79699610df94f372eafef7'
1542103547 '00787e911b61b4c64965da853a6f2577d8d65757'
1542103548 '00e1ea722b8e50601f79699610df94f372eafef7'

However I think our main problem is the following:

From the code we gather that the difficulty must never be greater than or equal to the max value for uint128:
https://github.com/paritytech/parity-ethereum/blob/ac974a180d56e58501aa502abac24cd5b13affa1/ethcore/src/engines/authority_round/mod.rs#L1170-L1174

However the difficulty of the (forking) block 13724 in the chains of eth2 and eth3 is equal to the max value for uint128:

eth1
number,hash,timestamp,miner,difficulty,gasLimit,gasUsed,size,transactionCount
13724,0xa9ff79d5f03840bf380cd5b402af06485a3460aa25403607d7f273f0164be302,1542103535,0x00787e911b61b4c64965da853a6f2577d8d65757,0xfffffffffffffffffffffffffffffffe,9007199254740991,522258,1843,2
13725,0xe2af5e5eba32ed519989df82ee6351ad788b1523388dee56cdf71fbc2c2f69cc,1542103551,0x00787e911b61b4c64965da853a6f2577d8d65757,0xfffffffffffffffffffffffffffffff7,9007199254740991,405883,1822,1

eth2
number,hash,timestamp,miner,difficulty,gasLimit,gasUsed,size,transactionCount
13724,0x71332e9de8c44e6e14335851891eb9b18c9561fbbbbb77dfcfece2b5a8aa9559,1542103533,0x00d4f3f56ed107bfe2e8f65068fc411c7cb600d2,0xffffffffffffffffffffffffffffffff,9007199254740991,49696,990,1
13725,0xc8efc95741f8e7215039822043da1ddfb3919746b0feb3382e9bb11d9b84d6e0,1542103537,0x00d4f3f56ed107bfe2e8f65068fc411c7cb600d2,0xfffffffffffffffffffffffffffffffb,9007199254740991,472562,1356,1

eth3
number,hash,timestamp,miner,difficulty,gasLimit,gasUsed,size,transactionCount
13724,0xe9e04fcd7b2e376ef27b653b35f24688ca23e195f4b41f3a7d1f36d0d3ed4ff9,1542103534,0x0048c3f4da21116b39e2766eeb006ca15261db4f,0xffffffffffffffffffffffffffffffff,9007199254740991,49696,1064,1
13725,0x587052c264586d6e90d43540ba2010949fa78e452445f9fe994c8374d0a5fa8e,1542103538,0x0048c3f4da21116b39e2766eeb006ca15261db4f,0xfffffffffffffffffffffffffffffffb,9007199254740991,472562,1356,1

eth4
number,hash,timestamp,miner,difficulty,gasLimit,gasUsed,size,transactionCount
13724,0xa9ff79d5f03840bf380cd5b402af06485a3460aa25403607d7f273f0164be302,1542103535,0x00787e911b61b4c64965da853a6f2577d8d65757,0xfffffffffffffffffffffffffffffffe,9007199254740991,522258,1843,2
13725,0xe2af5e5eba32ed519989df82ee6351ad788b1523388dee56cdf71fbc2c2f69cc,1542103551,0x00787e911b61b4c64965da853a6f2577d8d65757,0xfffffffffffffffffffffffffffffff7,9007199254740991,405883,1822,1

So could it be eth1 and eth4 correctly rejected those blocks, but eth2 and eth3 just included the (locally) sealed blocks as described above ("short-cutted without validation")?

How can we keep the difficulty down? We see that in our chain we start with a low difficulty but it quickly rises to near the max amount - 1:

number,difficulty
0,0x20000
1,0xffffffffffffffffffffffffa42d096a
2,0xfffffffffffffffffffffffffffffffe

It fluctuates a bit after the fork, but still stays high:

number,difficulty
13724,0xfffffffffffffffffffffffffffffffe
13725,0xfffffffffffffffffffffffffffffff7
13726,0xffffffffffffffffffffffffffffff71
13727,0xffffffffffffffffffffffffffffff6a
13728,0xfffffffffffffffffffffffffffffffd
13729,0xfffffffffffffffffffffffffffffffe
13730,0xfffffffffffffffffffffffffffffffc
13731,0xfffffffffffffffffffffffffffffffa
13732,0xfffffffffffffffffffffffffffffdb2
13733,0xfffffffffffffffffffffffffffffda7
13734,0xfffffffffffffffffffffffffffffffc

Is there a way of keeping the difficulty constant or at least in a lower range? How is it calculated (btw we're using gasprice 0)? I guess the difficulty needs to be in the block because it's part of the Ethereum spec, but it doesn't really have a meaning in PoA, does it?

@tomusdrw
Copy link
Collaborator

@mariogemoll thanks for the details, didn't have time yet to look into the seals, but let me answer questions from the last part of your post.

So could it be eth1 and eth4 correctly rejected those blocks, but eth2 and eth3 just included the (locally) sealed blocks as described above ("short-cutted without validation")?

Yes, eth2 and eth3 produced invalid blocks (with wrong difficulty/score), but accepted it because it was produced locally. So the main issue here is to figure out how we got to this situation. My current guess is that one authority issued both a block and an empty step statement in it's turn (say turn N), which lead to a block with number N+1 that actually includes a stament about block N that the authority was supposed to produce being empty (and obviously that should never happen, cause we cannnot have both empty step and a block in the same turn).

How can we keep the difficulty down? We see that in our chain we start with a low difficulty but it quickly rises to near the max amount - 1

difficulty field in PoA is actually re-used for chain score. Having it equal u128::max_value() - 1 is actually correct behaviour, since it indicates that all blocks are produced in the correct succession by all authorities. The idea behind scoring is to have a value that is high when all authorities produce blocks in their step. If the authority misses it's step the score goes down - we just favor forks with more authorities on it.

Is there a way of keeping the difficulty constant or at least in a lower range?

The issue here arises from the fact that you operate in a really tight conditions of super low block time, random (but seems uniform) distribution of transactions, while having empty steps enabled at the same time. So authorities have hard time deciding whether to send empty_step statement or rather seal a block with. Currently it seems that we don't have a protection in the code to avoid creating a block after empty step statement has been issued (in case a transaction came in the meantime and it's still our turn to create a block).
As a workaround currently you can try to:

  1. Disable empty steps (would require a HF)
  2. Increase the block time / improve the connectivity
  3. Change the --min-reseal-time for authorities to avoid creating blocks too frequently.

Thanks for the seal data, I'm going to analyze it closely to figure out if my theory holds.

@mariogemoll
Copy link

Hi @tomusdrw, thanks for the quick and detailed response! It all makes much more sense now.

The documentation on Aura talks about the score, but I wasn't aware the difficulty field is being "repurposed" for that, thanks for the clarification (maybe should be added to the documentation?).

Seems like EmptyStep is not really production-ready yet then? We introduced it to not have so many empty blocks (we reasoned it would give roughly the same finality guarantees), but I guess it would be better to disable it again for now in our case.

Maybe we can increase the block time to 2 seconds, but we'd rather not. The nodes are actually in the same datacentre, so we thought 1 second would be feasible.

@mariogemoll
Copy link

I thought about how the block time plays into this / if increasing it would solve the problem. If I understood correctly you said that (with one second block time) a validator would, when it's its turn and there are no transactions, issue an EmptyStep message; if afterwards (during the same second) a transaction comes in it would still seal a block in addition to the EmptyStep. But wouldn't that be a possibility with any block time? I guess a node would always wait until the last second of the step with the EmptyStep, but could still seal a block if it sees a transaction afterwards during that same second. I guess EmptyStep creation/block sealing just need to be made mutually exclusive?

@mirek
Copy link
Author

mirek commented Nov 16, 2018

@tomusdrw do you think changing reseal_on_txs from current value all to none could work around this race condition?

btw. of course we can provide config values if it helps

@tomusdrw
Copy link
Collaborator

I did some digging into, you can find a visualisation of what happened here:
viz svg

Seems that there are at least 3 issues:

  1. ETH2 (green) produced both EmptyStep and a block in the same turn.
  2. Empty step statements are sometimes included twice, which results in incorrect score
  3. Blocks are not validated if mined locally, so authorities may end up on incorrect chain that is rejected by others.

I already spoke with @andresilva and he proposed some solutions to all issues:

  1. can_propose should be false after issuing an empty block
  2. We should avoid duplicates on empty step list
  3. At least verify_block_basic should be checked after the block is sealed locally

@mirek The best workaround for now would be to disable empty steps - note you don't need a hardfork for that, maximumEmptySteps can be safely lowered, cause it only affects local behaviour (we don't penalize authorities for mining empty blocks instead of issuing empty steps afaict).

I'll look into patching that.

@5chdn 5chdn added this to the 2.3 milestone Nov 26, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Z1-question 🙋‍♀️ Issue is a question. Closer should answer. Z3-stale 🍃 Issue is in principle valid, but it is not relevant anymore or can not reproduced.
Projects
None yet
Development

No branches or pull requests

5 participants