What is Umbra?
As a protocol, Umbra defines a simple set of standards, coupled with a singleton smart contract instance, to enable stealth addresses on Ethereum. With a stealth address, a payer can send Ether or ERC20 tokens to an address controlled by the receiver, but no one except the two parties know who that receiver is.
On chain, the transaction looks like a simple transfer to an otherwise unused address on the Ethereum network. Off chain, the sender has used a public key published by the receiver to generate the new address. By encrypting the data used to generate the address, and announcing it via the Umbra smart contract, the sender can let the receiver know they’ve sent them a payment to a new stealth address. Only the receiver can generate the private key needed to withdraw the funds.
By leveraging meta-transactions Umbra enables withdrawers to pay relayers for gas using the tokens they’ve received. This avoids the need to fund stealth addresses with Ether before withdrawing.
What is the project's status?
The Umbra MVP went live on mainnet one year ago, in June 2021. You can visit https://app.umbra.cash to send and receive stealth payments using Umbra.
Since our launch, we've made many iterative improvements based on user feedback. These included better mobile responsiveness, a simpler key registry system, faster scanning when searching for received funds, and other UX enhancements. We've also launched Umbra on Polygon, Optimism, and Umbra, and made huge improvements to our relay system to make token withdrawals faster and cheaper.
Since launch, Umbra has processed more than 85,000 transactions across all networks. More than 36,000 accounts have registered stealth keys to enable privacy preserving payments through Umbra. Despite this growth, Umbra remains a grant funded public good project made possible by the community.
Why do we need your help?
We are grateful to our many supporters who have enabled us to get this far. There's still lot's more work to do!
We believe there is so much more we can do to make Umbra an even more powerful privacy tool in the Ethereum ecosystem. Here are just a few areas of development we're hoping to fund with your support.
Reaping the privacy benefits of stealth addresses requires good hygiene when moving funds out of the stealth address that received the funds.
Umbra already has some affordances for making this easier, such as gasless token withdrawals via meta transactions. Through post withdrawal integrations, we can make privacy hygiene seamless for Umbra users.
Layer 2 / Sidechain Deployments
Umbra is useful for payments, but smaller payments have been largely priced out of mainnet by high gas fees. Luckily, Umbra can work well across any L2 or sidechain that is EVM compatible. Umbra is now live on Polygon, Optimism, and Arbitrum. We're looking at other potential deployment targets, and hoping to expand the usefulness of Umbra on the networks where it already exists. This includes expanding the tokens available on these networks, and implementing integrations on these networks as well.
We’ve been collecting feedback from beta testers and early users, and see some opportunities for UX wins. We've already executed on some of these improvements in the last few months, but there are many more to tackle.
Advantages of Umbra
Umbra allows arbitrary amounts to be sent, since there is no need for inputs and outputs to be uniform.
Umbra does not require the receiver to wait to withdraw funds— as soon as they're sent, they can be withdrawn to any address the receiver chooses.
Umbra ensures only the receiver can withdraw the funds once they're sent. The sender does not hold the private key of the receiving address.
Umbra uses significantly less gas, as it does not require the verification of any advanced cryptography on chain. All transactions are simple transfers.
Umbra enables ETH and arbitrary ERC20 tokens to be transferred privately. You're not dependent on a large anonymity set developing for each token.
Sample Use Case
Alice owns a business and hires Bob to subcontract for her. She agrees to pay Bob 1,000 Dai/week for his work.
The first time Bob visits the Umbra app, he sets up his account, enabling hime to be paid privately. Alice uses Umbra to send 1,000 Dai to Bob each week— she only needs to know his ENS name or address.
On chain, we see Alice pays 1,000 Dai to a different and otherwise empty address each week. Behind the scenes, Bob controls the keys to each of these addresses via Umbra, but nobody else knows as much.
Bob uses Umbra to withdraw his 1,000 Dai each week. He only needs to provide an address. Obviously, it's best for him to use an address that's not tied to his identity. He usually chooses to send it straight to an exchange, where he sells it for fiat as needed.
Because Umbra uses meta-transactions, Bob doesn't have to fund the stealth address with Ether to withdraw his Dai. He can pay a relayer for gas with the Dai itself.
How Does it Work?
Below is a high level description of how Umbra works:
When setting up your Umbra account, users sign a message. The hash of this message is used to generate two private keys—a "spending key" and a "viewing key".
The corresponding public keys are both published on-chain in Umbra's Stealth Key Registry contract.
A payer uses your the Umbra Registry to look up your two public keys. Separately, the payer generates a random number.
The random number is used with the spending public key to generate a "stealth address" where funds are sent. The same random number is used with the viewing public key to encrypt the random number.
Using the Umbra contract, the payer sends funds to the stealth address and the encrypted data is emitted as an Announcement event.
The receiver scans all Announcement events from the Umbra contract. For each, they use their viewing private key to decrypt the random number, then multiply that number by their spending private key to generate the stealth private key. If the stealth private key controls the address funds were sent to, this payment was for the receiver
The receiver can now use the private key to either directly send the transaction required to withdraw funds to another address, or sign a meta-transaction to have the withdrawal request processed by a relayer.
Check out the "Technical Details: How does it work?" section of our FAQ for more.
Umbra is part of the Panvala league. Consider making your donation using the PAN token to help us receive extra matching.