Hello Zcash Community.
One topic that sometimes comes up is the need for a modern up-to-date paperwallet for Zcash. The existing paper wallet generation is obsolete, since it only supports Sapling address.
Since last year I was working on this project: GitHub - james-katz/zcash-paperwallet: Modern Zcash Paper Wallet with Unified Address support
This is a full Rust lib, cli tool and web tool for creating Zcash paper wallets with Unified Address support, UFVK and 24 word recovery phrase.
Paper Wallet
A paper wallet is a physical paper containing information for receiving payments (Unified Address), and information for monitoring and recovering these funds, like the UFVK and recovery phrase.
CLI
The cli tool is flexible, can generate any number of wallets at once, you can select the receivers to include into the Unified Address, and include the wallet birthday.
By default, the cli tool prints the generated wallet(s) to the stdout:
Recovery phrase:
diary luxury sound below talk barely boy upgrade clarify enjoy candy horse equal habit lucky steel tower liberty sketch slam clock current neglect guess
Unified Full Viewing Key:
uview1azrhzhrwjlduyhe0haresaffgm52fmptzhsvyvu2jp6mg6lv2z6ys4rk5nlnl6mz8gzfxal0rls8f02w0cjm6sskxas9lkh4p340tdrgj53gutrqkcg828tqdxqppqzfh9petdjthwnuzrm5qlfnc8u2w7vkmqy32en84a7ve4sphpashzyv3enf4r6ayhw883vp7uc80lec9az7nzzx98tgck6h0revvxgjqmwlf9r3gkmv6vuswc9j9ka23adq2edd8sfn8z67kyfh4gz8yd3w7fgzt4qwxppvfm6v3evld8fj9lkcrf65tq5q250wt35x46w4f7n0e75qmsdfcu6j3zq9rswgpqdx6x7hy4t5jn4nnq220tkz9g0wsrv7wj0aya6ducxyn7hjmd7qjmdv9aw5f2eeepk9c5q8clp20vautcjkuwzmplk7dmzpsnfnaj3ushlq70yqlw68zzwc3u2l03nsw6lnag507v0v438jzu4apjz5
Unified Address:
u1sl02xyyhe03kqkh7a7qkcezlk323t9xenfwapf97gskwh7l5t3q572v25rckvufxenkn0jgkyj9fhtmc6wxzr8gp54df4ws3m5p7alhsrc9f70s6ttku54l8qj6t4y9qfc6306rekt44d7wf26vxc8n6jj9l4rtauyyws6aawxwwwy0c5sl8g3ldezcj4c488vc5dkevxecgywr5z6u
It ccan also export to json and pdf
WEB
There’s also a web version, that run on any modern browser.
This version is capable of creating beautiful paper wallets with a prertty background art, created by our design team at Zcash Brazil.
It contains the Unified Address, for receiving funds, a UFVK for monitoring funds into a watch-only wallet, a “memo” filed, so the user can write down anything they want, like the name of the wallet, or a message for gifting the paper wallet to a friend, and so on… And it contains the 24 words recovery phrase, both in QR code format, and in written format as a backup.
Although it’s not recommended to create a paper wallet online, we created a website that can be accessed here: https://zecpaperwallet.com
How to use the web version
When you access the the URL, the website will ask for the user to move it’s mouse around, gathering user provided entropy for seed generation. When this step is done, the generated paper wallet will be displayed on the screen.
Generating wallets offline
To ensure complete safety and privacy, we recommend users to download or compile the paper wallet generator and run on their own machines, disconnected from the internet. Pre-compiled binaries are provided under the github page Releases. The web version can also run locally and offline.
Security
To ensure the generated seeds and addresses are valid, I used the official Zcash test-vectors for Unified Addresses tests as a Rust unit test.
The security of the actual paper wallet is responsibility of it’s owner. The paper wallet design fits into a A4 paper, that must be folded to hide it’s recovery phrase.
Drawbacks
Though a paper wallet is a cool item for quick Zcash wallet generations and distributing as gifts, it’s made of paper (shocker), humidity, heat, or poor storage can damage the paper wallet and made it unrecoverable.
Acknowledgments
Last years I was studying librustzcash
crates and learning how address derivations works. At the same time @squirrel and @zerodartz mentioned on Zcash Global Discord server that it would be cool to have a modern Zcash paper wallet, then I decided to create this project. So thank you for the idea.
Hope you guys enjoy it.