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

[AuRa] What is correct behaviour of Validating Contract with emptyStepsTransition enabled? #9546

Closed
kavu opened this issue Sep 13, 2018 · 4 comments
Labels
M4-core ⛓ Core client code / Rust. Z1-question 🙋‍♀️ Issue is a question. Closer should answer.
Milestone

Comments

@kavu
Copy link
Contributor

kavu commented Sep 13, 2018

Before filing a new issue, please provide the following information.

  • Parity Ethereum version: Parity-Ethereum/v2.2.0-unstable-6e62d77e4-20180912/x86_64-macos/rustc1.28.0 && Parity-Ethereum/v2.0.4-beta-e2e1d22-20180910/x86_64-macos/rustc1.28.0
  • Operating system: MacOS
  • Installation: built from source && Homebrew

Hello, Parity Team!

Recently I've reported the issue about wrong logic on reporting skipped steps when emptyStepsTransition is enabled (see #9325). And @andresilva fixed it in #9435, many thanks to him!

But now I've faced another problem.

In #9325 we had really generic case, when there is pre-defined list of validators and they have no any ability to repot each other besides reporting about step gap.

But as I said in out production network we have a contract, with reportBenign ability (cite):

Also in this test config you can see simple list of validators, but in production we have contract, which handles reportBenign with removing reported validator. And all validators rather quickly begin to report each other, due to building blocks with a "gap". But that's not the case here, I think I can provide you another chainspec, with contract supplied, to demonstrate similar beheviour.

And now, after the fix, I can't make my validators to report each other, even when the skip their steps! Is it even possible?

Our engine is Authority Round, of course, with immediateTransitions and maximumEmptySteps (set as 3, but any value will show same behaviour, even 0) and reporting (non-safe) validator contract, with reportBenign programmed to remove validators from a list of validators.

  "engine": {
    "authorityRound": {
      "params": {
        "immediateTransitions": true,
        "stepDuration": 4,
        "maximumEmptySteps": 3,
        "emptyStepsTransition": 0,
        "validators" : {
          "contract": "0x0000000000000000000000000000000000000100"
        }
      }
    }
  },

I am adding 3 random addresses as validators, they are non-existent nodes, and they never connect of seal anything.

As you can see in logs below, there is no any reporting (as per engine) and transitioning to new validator set (as per contract logic) here. And of course block generation is really slow, on every step we are waiting for non-existent validator and we receive no empty (or real) seals.

My wild guess is that we need to add a report_skipped after
https://github.com/paritytech/parity-ethereum/blob/98f6d6cae51528b717d75abae91411a0ab5c1fa3/ethcore/src/engines/authority_round/mod.rs#L1007

But I pretty much sure, that it's wrong way to solve(?) it.

Thanks in advance!

And here is my logs:

Loading config file from config.toml
2018-09-13 12:24:03  main INFO parity_ethereum::run  Starting Parity-Ethereum/v2.2.0-unstable-6e62d77e4-20180912/x86_64-macos/rustc1.28.0
2018-09-13 12:24:03  main INFO parity_ethereum::run  Keys path eth/keys/Polys
2018-09-13 12:24:03  main INFO parity_ethereum::run  DB path eth/db/Polys/db/27eb180af56a89b9
2018-09-13 12:24:03  main INFO parity_ethereum::run  State DB configuration: fast
2018-09-13 12:24:03  main INFO parity_ethereum::run  Operating mode: active
2018-09-13 12:24:03  main DEBUG poa  Setting Engine signer to 0x4e65…162e
2018-09-13 12:24:04  main INFO ethcore_service::service  Configured for Polys using AuthorityRound engine
2018-09-13 12:24:04  main TRACE engine  obtained proof for initial set: 1 validators, 4682 bytes
2018-09-13 12:24:04  main INFO engine  Signal for switch to contract-based validator set.
2018-09-13 12:24:04  main INFO engine  Initial contract validators: [0x4e65fabe9a857524d0a3c7a69308462fe9fc162e]
2018-09-13 12:24:04  main TRACE engine  Setting up contract caller.
2018-09-13 12:24:04  IO Worker #2 DEBUG engine  Set of validators obtained: [0x4e65fabe9a857524d0a3c7a69308462fe9fc162e]
2018-09-13 12:24:04  IO Worker #2 TRACE engine  Fetched proposer for step 384207661: 0x4e65…162e
2018-09-13 12:24:04  IO Worker #2 TRACE engine  broadcasting empty step message: EmptyStep { signature: 0xaeb728f1d3a45e5c0c65f18315cac028ad3a4f4ee7684a0828939b6ae1a665e51bd013f739a95ffdec9487229e6dbe96f9f1069c1083cfc8736f1b886a21d1d601, step: 384207661, parent_hash: 0x438a0cd2e9a0eb39a03efc7a227df6f48f28fac827eb180af56a89b97338884f }
2018-09-13 12:24:08  IO Worker #3 TRACE engine  Fetched proposer for step 384207662: 0x4e65…162e
2018-09-13 12:24:08  IO Worker #3 TRACE engine  broadcasting empty step message: EmptyStep { signature: 0x5a335554b5ecc8b8a1db9fe24b8637033af85f73c2e60298a5f5e563339bc63f332856fd959ef3c0064c2995db6648a86d0de48d62f3f04dc75f5b4d9308be2301, step: 384207662, parent_hash: 0x438a0cd2e9a0eb39a03efc7a227df6f48f28fac827eb180af56a89b97338884f }
2018-09-13 12:24:09  IO Worker #2 INFO network  Public node URL: enode://ff6744f2e25495340a991239092714c2925070ccd97ae4c981ac4844c0cb740d94b11531e3b4fb9362b98a63e3c9205e6890eeb5c38e49d0fb06eda096c39750@10.16.176.89:30329
2018-09-13 12:24:12  IO Worker #3 TRACE engine  Fetched proposer for step 384207663: 0x4e65…162e
2018-09-13 12:24:12  IO Worker #3 TRACE engine  broadcasting empty step message: EmptyStep { signature: 0x37cacf907ae1de5d7647d714770762e7b0dbfee1931f8a789d2c4a1245021f0d47bd50a6c435b0d08c71f26656d707e4a7acdb07fe0aa3e2acb3b5783ac87c0000, step: 384207663, parent_hash: 0x438a0cd2e9a0eb39a03efc7a227df6f48f28fac827eb180af56a89b97338884f }
2018-09-13 12:24:16  IO Worker #3 TRACE engine  Fetched proposer for step 384207664: 0x4e65…162e
2018-09-13 12:24:16  IO Worker #3 TRACE engine  generate_seal: Issuing a block for step 384207664.
2018-09-13 12:24:16  IO Worker #3 INFO import  Imported #1 0xb9e6…b1ea (0 txs, 0.00 Mgas, 8 ms, 0.79 KiB)
2018-09-13 12:24:20  IO Worker #3 DEBUG engine  Set of validators obtained: [0x4e65fabe9a857524d0a3c7a69308462fe9fc162e]
2018-09-13 12:24:20  IO Worker #3 TRACE engine  Fetched proposer for step 384207665: 0x4e65…162e
2018-09-13 12:24:20  IO Worker #3 TRACE engine  broadcasting empty step message: EmptyStep { signature: 0x6d29dd677a5ad9b987160cd95b8504a978fcdb8e226378cd610f9f86c3856b92615b0c4054115a3ecc7e51b740113af083a9448bee431e5262b4ce30fa07d86a00, step: 384207665, parent_hash: 0xb9e666881b1aae590a0a894e1064ce3d0ad010b01071ef917634bd1e8f6db1ea }
2018-09-13 12:24:24  IO Worker #3 TRACE engine  Fetched proposer for step 384207666: 0x4e65…162e
2018-09-13 12:24:24  IO Worker #3 TRACE engine  broadcasting empty step message: EmptyStep { signature: 0x6daa6fcfea63803536ff338f3e102b1839ec38b0af5a93b696c50b1bf78fbbc83d4ce42f0ac1a831f5b67fc17a6a6d45657c98d876519abe7f2af840f10fcb0201, step: 384207666, parent_hash: 0xb9e666881b1aae590a0a894e1064ce3d0ad010b01071ef917634bd1e8f6db1ea }
2018-09-13 12:24:25   WARN parity_rpc::v1::impls::eth  Fallback to `BlockId::Latest`
2018-09-13 12:24:28  IO Worker #0 TRACE engine  Fetched proposer for step 384207667: 0x4e65…162e
2018-09-13 12:24:28  IO Worker #0 TRACE engine  generate_seal: Issuing a block for step 384207667.
2018-09-13 12:24:28  IO Worker #0 INFO import  Imported #2 0xb0ff…4493 (1 txs, 0.10 Mgas, 8 ms, 0.86 KiB)
2018-09-13 12:24:32  IO Worker #0 DEBUG engine  Set of validators obtained: [0x4e65fabe9a857524d0a3c7a69308462fe9fc162e, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d76]
2018-09-13 12:24:32  IO Worker #0 TRACE engine  Fetched proposer for step 384207668: 0x4e65…162e
2018-09-13 12:24:32  IO Worker #0 TRACE engine  generate_seal: Issuing a block for step 384207668.
2018-09-13 12:24:32  IO Worker #0 INFO import  Imported #3 0x5a3c…1d3f (1 txs, 0.10 Mgas, 8 ms, 0.71 KiB)
2018-09-13 12:24:34  IO Worker #0 INFO import     0/25 peers   16 KiB chain 22 KiB db 0 bytes queue 448 bytes sync  RPC:  1 conn,    3 req/s, 1606 µs
2018-09-13 12:24:36  IO Worker #1 DEBUG engine  Set of validators obtained: [0x4e65fabe9a857524d0a3c7a69308462fe9fc162e, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d76, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d77]
2018-09-13 12:24:36  IO Worker #1 TRACE engine  Fetched proposer for step 384207669: 0x4e65…162e
2018-09-13 12:24:36  IO Worker #1 TRACE engine  generate_seal: Issuing a block for step 384207669.
2018-09-13 12:24:36  IO Worker #1 INFO import  Imported #4 0xf242…137a (1 txs, 0.10 Mgas, 8 ms, 0.71 KiB)
2018-09-13 12:24:40  IO Worker #0 DEBUG engine  Set of validators obtained: [0x4e65fabe9a857524d0a3c7a69308462fe9fc162e, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d76, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d77, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d78]
2018-09-13 12:24:40  IO Worker #0 TRACE engine  Fetched proposer for step 384207670: 0x5e27…7d77
2018-09-13 12:24:40  IO Worker #0 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207670.
2018-09-13 12:24:44  IO Worker #2 TRACE engine  Fetched proposer for step 384207671: 0x5e27…7d78
2018-09-13 12:24:44  IO Worker #2 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207671.
2018-09-13 12:24:48  IO Worker #1 TRACE engine  Fetched proposer for step 384207672: 0x4e65…162e
2018-09-13 12:24:48  IO Worker #1 TRACE engine  generate_seal: Issuing a block for step 384207672.
2018-09-13 12:24:48  IO Worker #1 INFO import  Imported #5 0x5690…f600 (1 txs, 0.07 Mgas, 10 ms, 0.71 KiB)
2018-09-13 12:24:52  IO Worker #3 DEBUG engine  Set of validators obtained: [0x4e65fabe9a857524d0a3c7a69308462fe9fc162e, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d76, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d77, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d78]
2018-09-13 12:24:52  IO Worker #3 TRACE engine  Fetched proposer for step 384207673: 0x5e27…7d76
2018-09-13 12:24:52  IO Worker #3 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207673.
2018-09-13 12:24:56  IO Worker #1 TRACE engine  Fetched proposer for step 384207674: 0x5e27…7d77
2018-09-13 12:24:56  IO Worker #1 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207674.
2018-09-13 12:25:00  IO Worker #1 TRACE engine  Fetched proposer for step 384207675: 0x5e27…7d78
2018-09-13 12:25:00  IO Worker #1 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207675.
2018-09-13 12:25:04  IO Worker #2 TRACE engine  Fetched proposer for step 384207676: 0x4e65…162e
2018-09-13 12:25:04  IO Worker #2 TRACE engine  broadcasting empty step message: EmptyStep { signature: 0xf41cd3d65e6d600c64476f4dd630f850088172029d756aa0f21800437da3d2f05cde965b08ddeff2a67ab775dcbe3c74a8320f36d5c5c56cb02512d9ee360d9700, step: 384207676, parent_hash: 0x56907fe666ce0bb9455da8bd6654ffb9bae7ec879269dc5efaff23207e16f600 }
2018-09-13 12:25:04  IO Worker #0 INFO import     0/25 peers   19 KiB chain 25 KiB db 0 bytes queue 448 bytes sync  RPC:  0 conn,    1 req/s,  351 µs
2018-09-13 12:25:08  IO Worker #3 TRACE engine  Fetched proposer for step 384207677: 0x5e27…7d76
2018-09-13 12:25:08  IO Worker #3 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207677.
2018-09-13 12:25:12  IO Worker #0 TRACE engine  Fetched proposer for step 384207678: 0x5e27…7d77
2018-09-13 12:25:12  IO Worker #0 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207678.
2018-09-13 12:25:16  IO Worker #3 TRACE engine  Fetched proposer for step 384207679: 0x5e27…7d78
2018-09-13 12:25:16  IO Worker #3 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207679.
2018-09-13 12:25:20  IO Worker #2 TRACE engine  Fetched proposer for step 384207680: 0x4e65…162e
2018-09-13 12:25:20  IO Worker #2 TRACE engine  broadcasting empty step message: EmptyStep { signature: 0xe24042b78a8ad36e4addf12683724db4925743ff6e7c19d758cc8d44a38ec6cf5b4179ce8494ecc10cb727f8e93740373698274cd025774d1fa073fa39a32e0100, step: 384207680, parent_hash: 0x56907fe666ce0bb9455da8bd6654ffb9bae7ec879269dc5efaff23207e16f600 }
2018-09-13 12:25:24  IO Worker #0 TRACE engine  Fetched proposer for step 384207681: 0x5e27…7d76
2018-09-13 12:25:24  IO Worker #0 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207681.
2018-09-13 12:25:28  IO Worker #1 TRACE engine  Fetched proposer for step 384207682: 0x5e27…7d77
2018-09-13 12:25:28  IO Worker #1 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207682.
2018-09-13 12:25:32  IO Worker #1 TRACE engine  Fetched proposer for step 384207683: 0x5e27…7d78
2018-09-13 12:25:32  IO Worker #1 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207683.
2018-09-13 12:25:34  IO Worker #3 INFO import     0/25 peers   19 KiB chain 25 KiB db 0 bytes queue 448 bytes sync  RPC:  0 conn,    0 req/s,  351 µs
2018-09-13 12:25:36  IO Worker #2 TRACE engine  Fetched proposer for step 384207684: 0x4e65…162e
2018-09-13 12:25:36  IO Worker #2 TRACE engine  broadcasting empty step message: EmptyStep { signature: 0xa707de6b00c48f9e12d66ff26dcd966d9a878d284ccfca7176b8a36b566c98a303d6976d9c7bef539ec723833e4ec930537d81c09925c7c37f5e63ac00fc097401, step: 384207684, parent_hash: 0x56907fe666ce0bb9455da8bd6654ffb9bae7ec879269dc5efaff23207e16f600 }
2018-09-13 12:25:40  IO Worker #2 TRACE engine  Fetched proposer for step 384207685: 0x5e27…7d76
2018-09-13 12:25:40  IO Worker #2 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207685.
2018-09-13 12:25:44  IO Worker #0 TRACE engine  Fetched proposer for step 384207686: 0x5e27…7d77
2018-09-13 12:25:44  IO Worker #0 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207686.
2018-09-13 12:25:48  IO Worker #0 TRACE engine  Fetched proposer for step 384207687: 0x5e27…7d78
2018-09-13 12:25:48  IO Worker #0 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207687.
2018-09-13 12:25:52  IO Worker #1 TRACE engine  Fetched proposer for step 384207688: 0x4e65…162e
2018-09-13 12:25:52  IO Worker #1 TRACE engine  generate_seal: Issuing a block for step 384207688.
2018-09-13 12:25:52  IO Worker #1 INFO import  Imported #6 0xa15f…f94d (0 txs, 0.00 Mgas, 10 ms, 0.79 KiB)
2018-09-13 12:25:56  IO Worker #3 DEBUG engine  Set of validators obtained: [0x4e65fabe9a857524d0a3c7a69308462fe9fc162e, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d76, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d77, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d78]
2018-09-13 12:25:56  IO Worker #3 TRACE engine  Fetched proposer for step 384207689: 0x5e27…7d76
2018-09-13 12:25:56  IO Worker #3 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207689.
2018-09-13 12:26:00  IO Worker #0 TRACE engine  Fetched proposer for step 384207690: 0x5e27…7d77
2018-09-13 12:26:00  IO Worker #0 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207690.
2018-09-13 12:26:04  IO Worker #1 TRACE engine  Fetched proposer for step 384207691: 0x5e27…7d78
2018-09-13 12:26:04  IO Worker #1 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207691.
2018-09-13 12:26:08  IO Worker #2 TRACE engine  Fetched proposer for step 384207692: 0x4e65…162e
2018-09-13 12:26:08  IO Worker #2 TRACE engine  broadcasting empty step message: EmptyStep { signature: 0xb469fa8c0e80ec46cd9c8beeb5751064a01dfd1f29bfae29c12d340953ccdf97297f0e9d2bee38ebb5cf1bff624494ef2ffa11d05cde5c106376d2a136ad3e9801, step: 384207692, parent_hash: 0xa15f3c2338ac7c0ff59f7c4d9af4118046c4d0df1d04b1897358fedd7618f94d }
2018-09-13 12:26:09  IO Worker #0 INFO import     0/25 peers   19 KiB chain 25 KiB db 0 bytes queue 448 bytes sync  RPC:  0 conn,    0 req/s,  351 µs
2018-09-13 12:26:12  IO Worker #1 TRACE engine  Fetched proposer for step 384207693: 0x5e27…7d76
2018-09-13 12:26:12  IO Worker #1 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207693.
2018-09-13 12:26:16  IO Worker #2 TRACE engine  Fetched proposer for step 384207694: 0x5e27…7d77
2018-09-13 12:26:16  IO Worker #2 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207694.
2018-09-13 12:26:20  IO Worker #0 TRACE engine  Fetched proposer for step 384207695: 0x5e27…7d78
2018-09-13 12:26:20  IO Worker #0 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207695.
2018-09-13 12:26:24  IO Worker #1 TRACE engine  Fetched proposer for step 384207696: 0x4e65…162e
2018-09-13 12:26:24  IO Worker #1 TRACE engine  broadcasting empty step message: EmptyStep { signature: 0xc07500d1a2cff2bb3c7950e3704f3fe6b157c6768953ebf198103f6c45aa66865716f1e03beb692a0850df8252d5f9f53b2a4db616761127cae6b2f4f316e65901, step: 384207696, parent_hash: 0xa15f3c2338ac7c0ff59f7c4d9af4118046c4d0df1d04b1897358fedd7618f94d }
2018-09-13 12:26:28  IO Worker #0 TRACE engine  Fetched proposer for step 384207697: 0x5e27…7d76
2018-09-13 12:26:28  IO Worker #0 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207697.
2018-09-13 12:26:32  IO Worker #3 TRACE engine  Fetched proposer for step 384207698: 0x5e27…7d77
2018-09-13 12:26:32  IO Worker #3 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207698.
2018-09-13 12:26:36  IO Worker #0 TRACE engine  Fetched proposer for step 384207699: 0x5e27…7d78
2018-09-13 12:26:36  IO Worker #0 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207699.
2018-09-13 12:26:39  IO Worker #0 INFO import     0/25 peers   19 KiB chain 25 KiB db 0 bytes queue 448 bytes sync  RPC:  0 conn,    0 req/s,  351 µs
2018-09-13 12:26:40  IO Worker #2 TRACE engine  Fetched proposer for step 384207700: 0x4e65…162e
2018-09-13 12:26:40  IO Worker #2 TRACE engine  broadcasting empty step message: EmptyStep { signature: 0xe540597ee492004b18a5c012256dc0232915f9b2489d848fab3eeda93bee612743c604c1b370a32820821e97da477b02f00cae0f551220182f5c96c3ce145eae01, step: 384207700, parent_hash: 0xa15f3c2338ac7c0ff59f7c4d9af4118046c4d0df1d04b1897358fedd7618f94d }
2018-09-13 12:26:44  IO Worker #0 TRACE engine  Fetched proposer for step 384207701: 0x5e27…7d76
2018-09-13 12:26:44  IO Worker #0 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207701.
2018-09-13 12:26:48  IO Worker #3 TRACE engine  Fetched proposer for step 384207702: 0x5e27…7d77
2018-09-13 12:26:48  IO Worker #3 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207702.
2018-09-13 12:26:52  IO Worker #3 TRACE engine  Fetched proposer for step 384207703: 0x5e27…7d78
2018-09-13 12:26:52  IO Worker #3 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207703.
2018-09-13 12:26:56  IO Worker #0 TRACE engine  Fetched proposer for step 384207704: 0x4e65…162e
2018-09-13 12:26:56  IO Worker #0 TRACE engine  generate_seal: Issuing a block for step 384207704.
2018-09-13 12:26:56  IO Worker #0 INFO import  Imported #7 0x6bdc…7648 (0 txs, 0.00 Mgas, 8 ms, 0.79 KiB)
2018-09-13 12:27:00  IO Worker #2 DEBUG engine  Set of validators obtained: [0x4e65fabe9a857524d0a3c7a69308462fe9fc162e, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d76, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d77, 0x5e27485c0ab3ec9f87429b0fed98b244c52f7d78]
2018-09-13 12:27:00  IO Worker #2 TRACE engine  Fetched proposer for step 384207705: 0x5e27…7d76
2018-09-13 12:27:00  IO Worker #2 TRACE engine  generate_seal: 0x4e65…162e not a proposer for step 384207705.
^C2018-09-13 12:27:01  main INFO parity_ethereum::run  Finishing work, please wait...
@jam10o-new jam10o-new added Z1-question 🙋‍♀️ Issue is a question. Closer should answer. M4-core ⛓ Core client code / Rust. labels Sep 13, 2018
@andresilva
Copy link
Contributor

This is expected behavior, even though it may not be the most correct behavior. The problem is that unlike block propagation, there are no reliable delivery semantics associated with empty step messages. Therefore when you're sealing a block and there's a step gap, if empty steps are enabled there's no way to tell whether the previous validator was offline or if he was online but you didn't receive his empty step message. This may change in the future but right now it's a limitation of the current implementation.

@kavu
Copy link
Contributor Author

kavu commented Sep 13, 2018

@andresilva Thank you for a such quick answer! So, if we have two options:

  1. Empty steps, less blocks, but longer block creation due to "valid validator" and not benign reporting.
  2. More blocks, no empty steps, but quicker blocks due to validator benign reporting and our smart logic, which drops invalid validators.

Am I right?

@andresilva
Copy link
Contributor

Yes, unfortunately right now that is the trade-off you have to make. Offline validators won't be caught and reported by the engine when empty steps are enabled. Depending on your use case another option might be to track validator health off-chain and remove validators based on that.

@kavu
Copy link
Contributor Author

kavu commented Sep 13, 2018

Depending on your use case another option might be to track validator health off-chain and remove validators based on that.

Yeah, that's always an option.

Okay. That's not an answer I wished to hear, but cruel reality is cruel 😄

Thank you, André!

@kavu kavu closed this as completed Sep 13, 2018
@5chdn 5chdn added this to the 2.1 milestone Sep 13, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
M4-core ⛓ Core client code / Rust. Z1-question 🙋‍♀️ Issue is a question. Closer should answer.
Projects
None yet
Development

No branches or pull requests

4 participants