Public Testnet #1: “Valetudo”
In our last post, we described our strategy for building Penumbra, using “transparent proofs” to let us rapidly iterate towards a working system while ensuring that our system design has data flows compatible with a fully shielded implementation. Along the way, we’ll be launching (and crashing) early testnets, prioritizing rapid iteration at the beginning and gradually moving towards stability as the system becomes fully formed.
Today, we’re excited to announce our first public testnet, codenamed “Valetudo”. In keeping with the theme of Cosmos, Penumbra, and going to the moon, we’ll be naming our testnets after the moons of Jupiter. Valetudo is the smallest named moon of Jupiter, just 1km across and barely visible from Earth, highlighted between markers in the image above.
The Valetudo testnet is the smallest possible testnet, just a single Tendermint instance on a single VPS, but it’s a big step forward, representing our MVP1 milestone: multi-asset shielded transactions and a basic, fully-trusting light wallet protocol for client-side chain scanning, using a fixed validator set.
Multi-Asset Shielded Transactions
As a fully shielded blockchain, Penumbra records all value in a single shielded pool that can record any kind of asset. Penumbra has privacy by default, with no transparent transactions or transparent value pool. Instead, inbound IBC transfers will shield value as it moves into the chain, and outbound IBC transfers will unshield value as it moves out, aligning the privacy boundary with the chain boundary, and allowing Penumbra to act as a cross-chain shielded pool.
The Valetudo testnet contains a working implementation of Penumbra’s new primitives.
Penumbra’s transactions are fully shielded, protecting the sender, receiver, amount, and asset type, and they can move multiple kinds of assets in the same transaction. When we implement IBC support in our MVP3 milestone, we’ll be able to move cross-chain assets into and out of Penumbra; for now, we’ve created a few different types of test assets to play with on the testnet. >
Client-Side Private Scanning
The most fundamental difference between a transparent blockchain and a shielded blockchain is in their data architectures. Consider wallet software as a basic example. On a transparent chain, users have no data privacy, so a wallet can query any node to get all of that user’s (or, in fact, any user’s) account balances, transaction activity, and so on. But on a shielded chain, a wallet can’t simply query a random node to find out about user-specific data, because the whole point is that users control the disclosure of their information.
As we described in our previous post, our approach to building Penumbra is to focus on getting the data architecture right from the start. That means starting with a light-wallet protocol that enables scanning the chain state to happen client-side, completely isolated from the node software.
This has two key benefits. First, it means that we build the underlying infrastructure required for a great web and mobile user experience from the beginning, rather than relying on initial users running full nodes. Second, it improves security, because it avoids mixing secret data (the viewing keys used to scan the chain) into the main node software, eliminating the possibility for those secrets to leak through observable network behavior of the node software. This isn’t just a theoretical concern – for instance, in Zcash, where the primary chain scanning mechanism was integrated into the node software, the PING and REJECT attacks allowed an adversary to deanonymize users by watching how nodes responded to network messages as they scanned transactions sent to target addresses.>
Our light-wallet protocol is still a work in progress, and it’s not yet integrated with Tendermint’s light-client protocol for integrity checking, but it currently works to allow users to scan the chain without maintaining a full node.
This testnet represents our MVP1 milestone. Our MVP2 milestone is to implement our shielded staking and delegation system, bringing privacy to proof-of-stake with a new staking design that enables private delegation and liquid staking. Once our staking design is in place, we’ll be ready to run public testnets with multiple validators. We’re building in public, and our complete roadmap can be found here.
Using the Testnet
The testnet is only accessible by a command-line interface. Instructions on how to get started with it can be found on Github. We don’t have an automated faucet set up, but we do have a dedicated discord channel (#testnet-faucet) where you can paste an address and have someone send you tokens, or send tokens to someone else in the discord.
We’ve created a few different test assets to exercise the transaction functionality:
penumbratokens, which can be used for paying fees;
gntokens, allowing you to send gm and gn to your friends;
tungsten_cubetokens, a fan favorite;
pizzatokens, representing a tasty and nutritious snack;
nalatokens, since no blockchain is complete without a dog token.
It should be clear from these test assets and the rest of the post, but to be very explicit: this is not an incentivized testnet. These tokens have no value whatsoever, no purpose other than playing with our unfinished software, and we’ll be shutting down the testnet as soon as we reach our next milestone. In the meantime, though, if you’re interested in giving it a spin, why not try it out?
(Header image of Jupiter's moon Valetudo CC-BY-SA from Wikimedia Commmons)