Standby Rotation Solution by Chainrift EOS

ChainRift
ChainRift
Published in
2 min readSep 24, 2019

A couple of months ago, Chainrift EOS was selected for the EOS Voter Bounty (EVB) for random standby testing. Regardless of the fact that Chainrift EOS isn’t a paid producer (vote requirements for paid position raised, and the votes from EVB proxies were reduced), we completed the contracts and are presenting them to the community for testing.

What is complete

  • list of already tested paid standby Block Producers (sBP) with a configurable (mainnet suggested 4h) refresh rate. After all, sBPs have been tested, the list is renewed.
  • rotation to 21 spots, every configurable (mainnet suggested 4h). The rotated sBP stays in for a configurable number of rounds (mainnet suggested 4h).
  • Random entropy generation for the Random Number Generator (RNG).
  • Random selection of sBP to be tested next. List of already tested sBPs makes gaming of the RNG ineffective.
  • Autokick (unreg - an action that unregisters a sBP) of non-producing sBP after 6 seconds. It takes another 3 rounds (varies) to be fully removed from the active schedule.
    Github link to a solution and setup instructions

What was tested

The solution was thoughtfully tested on 2 different sets of numbers of active block producers on a local testnet during the developing. The results were used to inform the need for further optimization and rewrites of the solution and to eliminate found bugs.

What was researched but not used.

We researched adding a 22nd spot during rotation (and then removing it again). We abandoned the solution after testing it. It was clear that autokick would take longer (1 whole round).
Github link to POC2

Next steps

  • BPs need to further test it, help to evaluate the real-life performance overhead.
  • Further code optimizations (see readme).
  • After that, the pull request to EOSIO codebase should be initiated.

If/when it gets merged, then it could be deployed on the mainnet.

We propose to do the re-regproducer timeouts (let’s say 2 weeks limit) If sBPs that has been auto-kicked re-register and fails again, a couple of months after. This timeout functionality could be merged with a proposal to autokick all active BPs.

Optional; the solution can be further optimized by preparing the hard-fork proposal that removes the need to wait for another 3 rounds (for non-producing / unregistered BP to be fully removed from the active schedule). That hard-fork proposal would again benefit (reduced the number of missed blocks) for both rotation and autokick of all active BPs.

ChainRift EOS continues to develop for the EOS ecosystem. Next up is an open-sourced, 1 Token 1 Vote automated proxy with voter rebates. For a full list of our projects please visit our website.

Telegram | Twitter | Exchange |WhichBPsToVoteFor

--

--