Testnet [Beta] Retrospective — Phase 3.1
by O(1) Labs
2020-02-14

“Sometimes you eat the bear, and sometimes the bear eats you.” — The Big Lebowski

Coda’s Testnet Beta Phase 3 is the biggest testnet release up to date in terms of new features and participants. In the last six months, the number of users who participated in the testnet and tried out Coda was growing steadily. However, in phase 3, together with the launch of the Genesis token program, we’ve seen an explosive growth in interest and influx of participants. See the graph below. Coda Testnet Users 3.1 Retro

Having never previously tested a net with this many users, the release could not handle the love, and was “hugged to death” as they say. We’re extremely happy with everyone’s participation and the issues that the users unearthed, so we can now fix them.

In the coming period, the team will be working hard on improving the protocol, while testnet users can still participate in the community while preparing for the next testnet release, which is estimated in mid March. Read on for details, and sign up here to receive a notification by email when the next release is live.

Table of Contents

Retrospective Release 3.1

How to participate in Testnet and Genesis Token Program

Community in Action

Retrospective Release 3.1

As much of the Coda community already knows, 3.1 was an unstable release, that from the get-go posed challenges due to the influx of participants from the Genesis token program. Specifically, we had some problems with our gossip net that was exposed under the newly heavy load and excessive forks as a consequence.

Ultimately, it exposed some of the mistakes we made when shipping this release:

  • Packing too many new features into one release
  • Not having enough QA to test volume before shipping to public
  • Not anticipating the volume of response the Genesis program received

Lesson learned. Over the past two weeks, we rolled back to a stable build, and went heads down on fixing these structural issues. To address this, we’re in the process of doing the following:

  • Developing QA infrastructure to spin up nodes and “user agents” that can help simulate user behavior at scale, and stress test networks before shipping
  • Really thinking through what features belong in each release, and not underestimating the amount of time needed to develop them with plenty of tests
  • Building a fuzzer that can throw a range of inputs at various components and simulate unexpected behaviors
  • Understanding that while we want to hit ship dates, it is better to postpone a launch in order to ensure a strong build instead of being overly optimistic. Hello pragmatism, my old friend!

Here are some of the cool (or not so cool) bugs that we discovered in this past release:

  • Faucet transaction nonce race condition — the Coda transaction pool (mempool) is a mutable structure which gets updated when you hear transactions from the network, when transactions are generated locally or when any new block is added to the chain. These three updates weren’t being done sequentially, which caused invalid transaction pool states, and crashing nodes. Furthermore, it caused the faucet to take down other nodes whenever it sent a transaction due to the transaction pool getting corrupted. The solution? Transactions need to be applied sequentially and not processed at the same time, so that one transaction doesn’t clobber the other. There is a PR up in GitHub which we are testing right now.
  • SNARK prover errors — when generating a blockchain SNARK, we verify the transaction SNARK that proves a certain ledger state. We were passing incorrect inputs to the circuit, which caused the verification of the transaction SNARK to fail, which in turn caused the failure of the blockchain SNARK. There were several of these, and we’re in the process of debugging them, as it can be challenging to know where the mismatch in the circuit occurred. The fuzzer that’s in development will help this quite a bit.

Developments coming down the pipe:

  • LibP2P Gossip Net — this means we port forward automatically for routers supporting UPNP and we have a more robust gossip layer! It will also allow for far more robust and secure P2P networking. Why? Because it replaces an unmaintained Kademlia Haskell implementation with go-libp2p.
  • QA Nets + Fuzzer — mentioned these earlier, but the idea is to battle test networks before launching them. Seems like a no brainer, but it is not trivial work to build the infrastructure that can support this.

How to participate in Testnet and Genesis Token Program

Expectation next testnet release

While the team will be working hard towards strengthening the protocol, the testnet will still be live for users to test and play around with. The majority of the testnet challenges, which are designed to contribute to greater network resilience, are on hold until the next release, which is estimated in mid March. We will work hard on strengthening the protocol and test the next release extensively before launching release 3.2. If you’d like to be notified by email when it’s live, sign up for the testnet newsletter. In between, we’ll also share updates on the progress on Discord.

Phase 3 Testnet Points*: Leaderboard LIVE

The new leaderboard for testnet phase 3 is live! Check it out here. 343 community members accrued over 1 million testnet points* together!

The points* are counted differently than on previous testnet releases. After investigating issues on release 3.1, we sadly discovered that the testnet activity that we recorded does not include all the relevant data. To explain briefly, the “activity recorder” does not record data from bad forks. Unfortunately, one of the issues in 3.1 was the formation of many forks. If we’d choose one fork as the main chain, we’d leave out the activity of a big part of the testnet users who were building on top of other forks. There were also issues with the gossip network, which caused parts of the activity on the network not to be visible to us.

We do want to reward all testnet users for their participation, therefore everyone who was active on the testnet earned 2000 pts, and users who tried to stake (no matter they managed to produce a block on the unstable network or not) are rewarded with an additional1000 pts. We're also awarding bonus points* to community members who tried hard in the chaos and excitement to help out other members by sharing helpful tips, solutions, scripts, blogs, etc. In the last section of this blog post, you'll find links to scripts and tips they shared.

If you think we’ve overlooked you on the leaderboard, please let us know — we want everyone to get their points* !

How to participate in the Testnet and Genesis token program

At the moment, there are two challenges live for the community to earn testnet points* , secure a (higher) position on the Phase 3 leaderboard, and increase their chances to be selected for the Genesis program.

Flash Challenge: Coda Use Case Survey

1000 pts* Who is Coda for? This survey is important, as it will let us know about the right direction for Coda and how we can make it successful together. Let us know what you think, so we can put together an image of the parts that resonate the most with its community. A summary of anonymised results will be shared with the entire community. Take a few minutes to fill in the survey here.

Challenge #12 Rosetta Stone

Up to 4000 pts* Community members collaborated to make Coda more accessible to people all over the world through translated resources. Educative articles about zk-SNARKs, how Coda works, the economic whitepaper and testnet documentation are already translated into several languages. We're looking for people who'd like to review it and share their feedback for these languages: Russian, Chinese, German, Spanish, French, Turkish, Italian, Korean, Japanese and Dutch.

The community organised their efforts in this overview. If you have questions, ask us in the #translations channel on Discord.

Community in Action

Community-led Meetup in San Francisco

While the team was working hard to fix testnet, our community members took advantage of the downtime to plan some community initiatives. Earlier this week, we had an exciting meetup in San Francisco organized by our community member, Greg! We had great discussions with almost 50 engaged attendees about the blockchain problems that Coda seeks to solve, the architecture behind our technology, as well as our economics and the Genesis token program.

Pranay Intro Pranay Mohan, Developer Relations, introducing Coda and how the protocol can address scalability and decentralization problems in blockchain.

Nathan Coda Architecture Nathan Holland, Protocol Engineer, doing a deep dive on Coda’s architecture

Brad Economics Brad Cohn, Strategy & Operations, talking about the economics of Coda.

SF Meetup Group Thanks to Insight Data Science for hosting and to Greg (right) for taking the initiative on planning and organizing this event!

If you are interested in what was covered during the meetup, watch the recording here or check out the slide deck here.

Testnet Contributions by the Community

We’d like to shine the community spotlight on the community members who became leaders in the community, helped out other members and share helpful blogs, scripts and tools.

Testnet tips and tricks

Cyberian — for sharing his experience with community members how to run a Coda node on a budget. Check out his post.

Kuka643 — for helping out other testnet users, sharing a script to monitor your Coda node using a Telegram bot (check it out on the forum or on GitHub), and organising Russian translations on a new GitHub page.

!Thanos — for taking a stab at creating a much-desired tool for testnet users — a script which will temporary stop SNARK work when a block producer wins a slot to produce a block. Check it out here.

mbrivio — for sharing his script with the community to easily deploy Coda.

argonau7 — for trying to bring more order into chaos by helping out other testnet users and his efforts to organise testnet users on the forum.

Testnet support

Kunkomu — for helping many (new) testnet users who got stuck when trying to connect to testnet.

tcrypt and Inv0ke — for helping out other testnet users and also the core team to test out features.

Greg, vsh and nikmit — for helping out (new) testnet users who got stuck.

Translation team

Y3v63n — for leading and organising the translation efforts of the community.

Kuka643 and oliver — for taking the initiative to organise the translation efforts for respectively the Russian and German working groups by creating a Github page and spreadsheet.

Star.Li — for providing translations for many resources in Chinese.

More points will be assigned in this category after more resources are reviewed by the community. Head over to the #translations channel on Discord to join the community working groups!

As always, a BIG thanks to the Coda crew (that’s you, reading this) for being a part of the ride with the core team. Launching crypto-networks is capital H hard, but we continue to strengthen and prepare Coda for a mainnet launch. Stay tuned for more updates and events!

Update: Testnet 3.1 Concluded and Testnet 3.1 Winners

The first release of Coda's testnet Phase 3 has ended and there are some final awards to reach out to the standouts in the community!

Challenge #15: Coda Wiki

2000 pts for @Gordon Freeman and roger_rabbit! They collaborated and created a guide that will be interesting for members who plan to run a node -- How to install a Coda node using VPS and make it secure. Help @Gordon Freeman and @roger_rabbit by testing out their guide, giving them feedback, and collaborating on expanding the guide! Bonus points to both Gordon and Roger for creating this original content for the community!

Challenge #11: Megaphone

1000 pts* for @Tiago | POS Bakerz -- @Tiago | POS Bakerz wrote a complete summary on Coda and shared it with the community! Go check it out.

Challenge #13 Community Builder

500 pts (Silver) * @Decostre and @Tiago | POS Bakerz recently joined and dived into Coda's resources. On top of that, they are even already helping out other new members to get familiar with the channels. We're happy to have you in the community, @Decostre and @Tiago | POS Bakerz !

@◮👁◭ Víctor | melea and @Star.LI for joining hands to find efficient ways to collaborate on translations.

@viboracecata for taking the lead to collaborate with members on WeChat and improving Chinese resources.

2000 pts (Gold) * @kuka643 for creating a Russian website on Coda: https://spdd.github.io/coda-rus/ It's open source, feel free to check it out!

@Brandon for helping out as one of the first to shape the wiki, and proposing and showing demo's of useful wiki platforms and tools to the team.

Also, a BIG shoutout to the translations team from the community. More than 50 resources are now available in 8 languages besides English. That's an awesome achievement!

This brings us to the latest interim Testnet Phase 3 ranking on the leaderboard (http://bit.ly/TestnetBetaLeaderboard):

  1. @tembo
  2. @kuka643
  3. @paddyson
  4. @◮👁◭ Víctor | melea
  5. @veriform
  6. @alfonso
  7. @gamah
  8. @Natalia
  9. @mbrivio
  10. @kumosoukai

Congratulations to these members who are occupying the top 10 positions in Phase 3 at the moment! There are a few more releases to go in Phase 3 -- the second release of Phase 3 is coming next week! Stay tuned everyone!

Useful links:

Genesis token program (including application form)

Discord — the place where the community and core team hangs out

Testnet newsletter

*Testnet Points are designed solely to track contributions to the Testnet and Testnet Points have no cash or other monetary value. Testnet Points and are not transferable and are not redeemable or exchangeable for any cryptocurrency or digital assets. We may at any time amend or eliminate Testnet Points.