“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.
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.
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 Mohan, Developer Relations, introducing Coda and how the protocol can address scalability and decentralization problems in blockchain.
Nathan Holland, Protocol Engineer, doing a deep dive on Coda’s architecture
Brad Cohn, Strategy & Operations, talking about the economics of Coda.
Thanks to Insight Data Science for hosting and to Greg (right) for taking the initiative on planning and organizing this event!
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.
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.
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!
Genesis token program (including application form)
Discord — the place where the community and core team hangs out
*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.