Game of Stakes: Recap of a Historic Journey

Leopold Joy
Stake Capital
Published in
6 min readMar 12, 2019

As the first implementation of a BFT decentralized network, Game of Stakes (GoS) was planned as the ultimate real-world trial of the Cosmos network before Mainnet launch. While registration for GoS closed in October, genesis transactions were collected in mid-December, kicking-off the competition.

Although not publicly known to the community at the time, there were suspicions that 73 out of the 180 GoS 1 genesis transactions seemed to originate from a single party.

GoS 1 launched on December 19, however it was short lived, halting at block 28 due to a fee distribution bug. Version `v0.29.0` of Gaia was quickly shipped as a fix, but it suffered a similar fate after several days when GoS 2 halted at block 76 due to a slashing bug triggered when validator @Chinezupwnz double signed. The fix was quick again, however as the holiday season was impending, the Cosmos team postponed GoS 3 until the new year.

At the beginning of January, Certus One released their Stargazer cosmos blockchain explorer which quickly became the go-to explorer for many validators. On January 3 GoS 3 started — a day early due to some timezone ambiguities / communication inconsistencies:

This time around the network did not halt and the longest running chain in the Game of Stakes commenced, running for nearly 1 month and creating over 340,000 blocks. GoS 3 was eventually hardforked to add a number of upgrades and improvements to the SDK, including the F1 Fee Distribution changes. However, GoS 4 never went live…

Over the course of GoS 1–3, a segment of validators — including Certus One, Stake Capital and other reputable validators — began to suspect the existence of a cartel run by Bitfish.

GoS’s Cartel

Various events, including a network halt, similar patterns of delegation, patterns in Github accounts and submissions, and many other telltale signs, led us to believe that a large number of validators in GoS were actually being operated by a single entity.

Significant community discourse ensued. Validators who were aware of the cartel presented evidence and worked to engage all other non-cartel validators, attempting to convince a majority of the community not to come online for GoS 4 and instead skip to GoS 5 one day later (February 2). Of course, those of us working to push through the cartel removal fork were aware of the risk that self-serving validators, fearing exclusion from the testnet, might opt to turn their hardware on for both GoS 4 and GoS 5. While on an individual level many could justify such a decision to themselves, as a community we had to insure that at least 34% of the validators would not activate their hardware for GoS 4 (preventing the decentralized start from beginning to create blocks as it required support from at least 66% of all validators).

One by one, validators came forward on Riot and Twitter, committing not to participate in GoS 4 and support forking out the cartel. All three validators who provided explorers — Certus One, Forbole, and Figment — also committed not to provide support for GoS 4 on their explores, helping to minimize participation. The decentralized start time rolled around and it soon became clear that GoS 4 did not have enough support to begin creating blocks: the cartel would be removed. GoS 5 started 24 hours later with all cartel validators omitted from the genesis file’s validator set. For more in depth details on the cartel fork see our article from the time, as well as Certus One’s findings.

After running for just over a week, GoS 5 had to be upgraded due to a consensus breaking fix required due to some bugs introduced by vesting that were not caught in the pre-release simulations, in addition to a number of missing vesting accounts (some validators did not get a vesting account in the GoS 5 genesis file). It was decided that while uptime data from GoS 5 would be included as a performance evaluation metric, STAKE token accrued during GoS 5 would not considered for evaluation due to the unfair vesting account absences.

Finally, GoS 6 launched on February 11 with the required improvements and fixes, running for a few days without issue, before Game of Stakes officially ended on February 15, one day earlier than expected due to a communication breakdown:

It was unclear how exactly jail record, pre-commits and accrued STAKE would affect GoS evaluation. Jail record and pre-commits were largely dependent on validator architecture, including sentry node connectivity / latency, fee structure (e.g. spam attack avoidance), effective monitoring to aid in quick responses to issues, etc. On the other hand, each validator’s total accrued STAKE was primarily dependant on the effectiveness of their auto-delegation script, something that we at Stake Capital worked tirelessly to update and refine (it can be viewed here along with the rest of our suite of scripts). After each new SDK release, there was a race to create effective auto-delegation scripts, updating CLI commands and sometimes improving strategies (e.g. in the case of the F1 Fee Distribution changes).

Over the next few weeks Zaki collected KYC information from all Mainnet validators and worked on calculating the GoS reward distribution — some GoS validators have opted not to run there own hardware on mainnet or were not eligible for reward due to Cosmos/Tendermint association, etc. Castlenode put together a rich analysis of validator performance that was useful for assessing performance.

After all KYC information had been gathered, the ICF contacted each of the validators selected for mainnet participation and the GoS award amounts were released on March 12 in the mainnet genesis file. Some Atom reward was awarded to Bitfish (even they violated the Game of Stakes registration rules by making multiple submissions) due to their noteworthy contribution to the game from a game theory point-of-view. As Zaki said in his Closing Ceremonies article:

I’d also like to celebrate BitFish and their cartel/sybil attack on the network. The signs of a sybil attack on registration were detected early. We saw a pretty unexpected number of passports from Southeast Asia in the registration process and then a massive batch of gentxs from Digital Ocean IPs. Getting the opportunity to see how a large cartel would affect the network was incredibly valuable. They didn’t do any of the really interesting attacks at > 1/3rd of stake that I was hoping to see but I think they clearly appreciated that this would just speed up defensive reactions.

Finally, as shown by the exclusive lists in Zaki’s closing article, the “never jailed” metric was the most important performance indicator — Stake Capital is one of the few validators occupying this prestigious list. While most validators on this “never jailed” list also had the most accrued STAKE and best pre-commit records, Zaki also recognized a secondary list of validators who were jailed but had attained significant amounts of token or had impressive pre-commit records. Mainnet genesis rewards have been set according to these metrics.

All things considered, Game of Stakes has been a groundbreaking experiment, setting a precedent of what is possible with a BFT PoS network. Mainnet launch on March 13 represents the next exciting step in this epic journey which Stake Capital will continue to support, as we offer Cosmos validation services.

--

--