4 Important Updates about Phase 1 of Game of Zones

Throughout the day, the GoZ team and Iqlusion teams have worked with core Cosmos developers to resolve the issues that impacted the Game of Zones Hub over the weekend. As of this evening, the GoZ Hub has achieved a 24 hour period of testnet stability that is required to launch the competition. This important development means that Phase 1 of Game of Zones will launch on Wednesday, May 6th at 12am PST / 7AM UTC. 

  • Today’s software release resolves stability issues within the capabilities initiation implementation of the code without breaking changes, and it will not require a hub restart for the competition.
  • Phase 1 of the contest will run on version 0.34.4-0.20200430150743-930802e7a13c of the Cosmos SDK, version 0.0.0-185-g9f47782 of Gaia, and version 0.3.1-3-g6685579 of the Relayer
  • More information about the software and updates to the Game of Zones Challenge Scope are available in the official GoZ Github Repo
  • The Game of Zones Scoreboard will be shared with participants several hours after Phase 1 begins on Wednesday, May 6th. 

Before launching Phase 1 of Game of Zones, we will also be making a change to the Challenge Scope that governs the challenge. This is in light of several questions that have been asked by participants about the requirement to send a packet to keep a connection alive and the capabilities of the underlying code. 

In the contest scope, we initially stated that the winner of Phase 1 would be the team that pushes the limits of packet connections by maintaining the longest lived connection with the fewest packets sent. We will be updating the Challenge Scope to clarify that we are looking for teams to send the fewest packets possible while keeping the client alive.

To ensure that all participants are aware of official start time for Phase 1, we will be sending an email and sharing this information across our official Game of Zones channels. If you have any questions about these changes, the best way to get in touch is to send us an email at gameofzones@cosmosnetwork.dev or join us on Friday, May 8th for our Phase 1 Live Stream.

An Update on Phase 1 of Game of Zones

Over the weekend, the Game of Zones and Iqlusion teams have debugged and resolved several issues that impacted the launch of the Game of Zones Hub.  Though we were able to get the Hub up and  running over the weekend,  the hub did not achieve the necessary 24 hours of stability required to start Phase 1 of the competition. As a result, we will be pushing back the start time for Phase 1 of Game of Zones to Wednesday, May 5th.

  • At present, we are working towards resolving this issue discovered by Yelong from the IRISnet team.
    • We expect this bug to take about a business day to resolve, and we are aiming to cut a release with a fix for this issue on or before Tuesday, May 5th.
  • In order to launch the competition, the hub will need to achieve 24 hours of testnet stability.  
    • If a release is cut on or before Tuesday, the earliest that Phase 1 of Game of Zones could launch is Wednesday, May 6th.
  • The Game of Zones scoreboard will be shared with participants on the first official day of the competition. 
    • The scoreboard will be available to participants within a few hours of the official starting time.
  • Phase 1 will likely run on an abbreviated schedule that begins on May 6th and ends on May 10th. 
    • The schedule may be amended to provide a short break between Phases 1 and 2.

The contributions from the community towards resolving issues with the Hub were incredible, and we are looking forward to launching the competition as quickly as we can.Though Game of Zones will start a couple of days later than projected, it’s been our priority to achieve an initial period of stability before Phases 2 and 3 kick off. Later this week, we’ll provide technical details of the issues that impacted Hub launch.

Throughout Monday and Tuesday, we will provide updates on our progress and communicate an official starting time through our official communications channels and we will send an official communication with the new starting time to all participants. To ensure that you’re receiving the most up to date information, follow us on Twitter and be sure to watch the Github repos for the competition.

How to Stress the IBC Security Model to Win Game of Zones


When we started thinking about Game of Zones in 2019, one of the most important goals we set was to use the challenge to prepare network operators for a whole new internet of blockchains. Once participants master liveness and throughput during Game of Zones, their final task will be to stress test the IBC Security Model. This exercise in adversarial thinking is designed to help teams identify and detect deception attacks in the wild, and to encourage the development of observability tooling to monitor for and alert on confusion attacks on the network.

The Double Spend Problem

Blockchains are notorious for attempting to implement solutions for the double spend problem. But the typical approach to solving this problem usually requires a world computer that runs about as fast as a calculator. Trying to scale solutions to the double spend problem has driven innovation and demand for zero knowledge proofs, random beacons, and complex sharding architectures. 

In designing IBC, we took a different approach that was inspired by the early works of the Agoric team and we focused on sovereignty. Core concept of sovereignty is that every user of a system needs to look at their own trust boundaries and preferences when choosing what chains, objects and tokens to interact with. With Game of Zones, we get to make that process of attack and defense real.

Token Distribution and ICS 20

At the launch of the GoZ Hub, we will be distributing tokens to each participating zone. Each of the zones will receive an equal number of tokens at the beginning of the competition, and those tokens will circulate in the IBC Network. While those tokens will not be a deciding factor in the first two phases of the competition, they are very important in assessing performance during the Phase 3. This is when we will look for confusion and deception attacks that trick users into accepting tokens that have been counterfeited and debased as if they were the real deal. The team with the most coins on the Hub may be the most likely to win. 

To compete in Game of Zones, your chain must support the ICS20 token transfer protocols during Phase 1 and Phase 2. If you want to bring a chain without ICS 20 support in the third phase, we suggest running a standard gaia in the first and second phases. We will be judging other application protocols during Phase 3, but they won’t be able to test the security model in the same way.

Confusion + Deception Attacks

One trend that we expect to emerge from participating teams during Phase 3 is fraudulent coin generation. An interesting implementation of this could be creating fractional exchange rates that enable zones to mint new coins out of nothing, and then send them on to other zones to convince other players to accept these coins. Though these tokens would never be redeemable, it would be difficult to judge whether they are valid coins or not.

Teams that are considering fraudulent coin strategies should pay special attention to the logic in the ics-20 implementation. Carefully manipulating the escrow and denom creation may also be a successful approach to trying to create underhanded state machines.


   if source {
       // clear the denomination from the prefix to send the coins to the escrow account
       coins := make(sdk.Coins, len(amount))
       for i, coin := range amount {
           if strings.HasPrefix(coin.Denom, prefix) {
               coins[i] = sdk.NewCoin(coin.Denom[len(prefix):], coin.Amount)
           } else {
               coins[i] = coin
           }
       }
 
       // escrow tokens if the destination chain is the same as the sender's
       escrowAddress := types.GetEscrowAddress(sourcePort, sourceChannel)
 
       // escrow source tokens. It fails if balance insufficient.
       if err := k.bankKeeper.SendCoins(
           ctx, sender, escrowAddress, coins,
       ); err != nil {
           return err
       }
 
   } else {
       // build the receiving denomination prefix if it's not present
       prefix = types.GetDenomPrefix(sourcePort, sourceChannel)
       for _, coin := range amount {
           if !strings.HasPrefix(coin.Denom, prefix) {
               return sdkerrors.Wrapf(types.ErrInvalidDenomForTransfer, "denom was: %s", coin.Denom)
           }
       }
 
       // transfer the coins to the module account and burn them
       if err := k.supplyKeeper.SendCoinsFromAccountToModule(
           ctx, sender, types.GetModuleAccountName(), amount,
       ); err != nil {
           return err
       }
 
       // burn vouchers from the sender's balance if the source is from another chain
       if err := k.supplyKeeper.BurnCoins(
           ctx, types.GetModuleAccountName(), amount,
       ); err != nil {
           // NOTE: should not happen as the module account was
           // retrieved on the step above and it has enough balance
           // to burn.
           return err
       }



Other attacks we expect to see during the competition include using a validator set to create difficult to detect light client forks and using state machines that conceal back doors and create tokens with arbitrary denominations to trick IBC users. Hopefully, we will see new ideas that we haven’t thought of before: to win this round of Game of Zones, teams will need to show their work by publishing technical details and write ups of their attacks once they’ve been carried out.

Has your team started working on your strategy for Phase 3? If not, take a closer look at ICS 20 and spend an afternoon with your team thinking about you would defend against deception attacks.