Penumbra brings privacy to proof-of-stake, allowing users to transact, stake, swap, and marketmake without disclosing their personal information, account activity, or trading strategies to the entire world – while still permitting selective disclosure to appropriate parties. Working at Penumbra Labs is a unique opportunity to work on exciting problems and build new financial infrastructure, and offers a collaborative work environment and a meaningful stake in the creation of a new protocol.
What Penumbra is
Penumbra is a private-by-default proof-of-stake network. Penumbra provides private transactions in any kind of cryptoasset, using Inter-Blockchain Communication (IBC) to connect to other chains. It also has a novel staking mechanism that provides accountability for validators but privacy for delegators, allowing them to privately stake, earn rewards, and participate in governance. Finally, Penumbra provides ZSwap, a decentralized exchange integrated with its shielded pool. ZSwap provides sealed-bid batch auctions on the market-taker side and Uniswap-v3-style concentrated liquidity on the market-maker side. Sealed-bid batch auctions prevent frontrunning, provide better execution, and reveal only the net flow across a pair of assets in each block, and liquidity positions are created anonymously, allowing traders to approximate their desired trading function without revealing their individual beliefs about prices.
This is a condensed summary of the entire system; more details on the economic and cryptographic design of Penumbra can be found in the notes on the website, which – with your help – will eventually evolve into a complete protocol specification. (If something on the website is unclear, please let us know, we’d love to fix it).
What you’ll be doing
Penumbra is an early-stage project. There are lots of interesting things to work on:
- Cryptographic design for Penumbra’s shielded transaction system. This is based on the Zcash Sapling design, but adapted for a different proving curve (BLS12-377), and with various tweaks to enable functionality such as detection keys.
- Cryptographic implementation. Penumbra’s shielded transaction system will involve a number of ZK-SNARK statements, each with a circuit. Because Penumbra provides larger (but still specialized) functionality than the original Sapling design, there are more proof statements to implement.
- Design and implementation for IBC integration with the shielded transaction system, so that IBC transfers into Penumbra shield value, and transfers out of Penumbra unshield it. This involves specifying precisely what data is included in IBC messages, how IBC asset names correspond to shielded asset types, and testing interoperability.
- Design and implementation for the staking and delegation system. Penumbra uses a novel staking design that treats bonded and unbonded stake not as two states of the same asset, but as distinct assets with a defined exchange mechanism. The economic design is complete, but the technical design details need to be filled in and implemented.
- Cryptographic design and system integration for threshold decryption. Penumbra uses a verifiable, homomorphic threshold encryption scheme to aggregate flows of value between different parts of the system, and reveal only the total flow over some time interval, rather than amounts in individual transactions. For instance, new delegations to a particular validator are aggregated over each epoch, and swaps between a particular trading pair are aggregated in each block. This primitive currently exists as a sketch, and needs to be fleshed out and integrated with the interface to the consensus engine.
- Design and implementation of client functionality. In a private blockchain, each user has a private portion of the chain state. This means that they cannot simply query a remote node for, e.g., an account balance. Instead, they need to have some kind of client infrastructure that maintains a picture of the state they have access to.
- Design and implementation of ZSwap. The high-level design of ZSwap is largely complete, but there are still high-level questions to work out before it can be implemented. Implementation work involves integration into the consensus-driven state machine, as well as work to provide an library that allows managing positions and making trades and can be used to implement active trading strategies.
This is a big list, and it’s by no means expected that you would work on all or even most of these — any of these areas could individually constitute most of your entire responsibility for some time. If even one of these sub-projects sounds interesting, we’d love to hear from you.
Who you are
You have solid cryptography experience
You’ll be working with the team on some combination of cryptographic design and implementation. Our codebase is written in Rust, and you don’t need to be a Rust expert (though you could become one on the job), but you should be willing to learn some Rust so you can begin meaningfully contributing to the project within the first month or two of joining the team.
You have strong skills for public, asynchronous, remote work
Penumbra Labs is a remote organization, building in public. You should have excellent written and verbal communication skills to coordinate with and make your work legible to the rest of the team and – as the project grows – to outside collaborators and stakeholders. The COVID-19 situation remains uncertain, but, were it not for the pandemic, we’d ideally sync up in person about once per quarter.
You’re excited to build the systems you want to see in the world
You’ll be building new, decentralized infrastructure for economic coordination. You should be interested in thinking about how the systems you’re building reflect your values, and you should be excited about the challenge of trying to build solutions, not just analyze problems.
You have any of many different backgrounds and skills
The team that builds Penumbra will need deep technical expertise across a wide range of specialties. But it’s not necessary that each team member has expertise in all of those specialties, or particular formal credentials for their skills. If you’re excited by what you’ve read so far, please don’t hesitate to apply, even if:
- you don’t have a university degree in computer science,
- you don’t have X years of professional experience in Rust or Y years of experience as a programmer, or
- you don’t have experience with cryptography, zero-knowledge proofs, blockchains, economic mechanism design, or any other specific domain details.
How to apply
Apply using the form with:
1. your name and pronouns,
2. your resume/cv,
3. a brief description of your interest in the role,
4. a sample or description of your technical work.
This sample could be public links to code you’ve written, or, if your best work has happened behind closed doors, it can be a description of what you built in enough detail for us to understand it. It’s fine if the best example of your work is in a language other than Rust, but in this case, please also include a sample or description of something you’ve built in Rust as well.