It is common (and secure) practice to save cryptocurrency/blockchain keys on paper. There exists several tools for the various blockchains to generate a public/private key pair and the corresponding the paper wallet at once. In this post, I would like to show you how I created my custom paper wallets.

TL;DR: Generate QR Codes from the public/private keys, paste everything into a simple document and print it.

Whenever I created an account for any blockchain, I made sure I got hold of the private key; or at least of the seed phrase. No matter what the creation method was (website, local wallet software, browser plugin, etc.): I want to have control over my stakes!

Now, what’s a paper wallet? I am gonna assume a paper wallet is simply an offline (physical) document that stores the necessary data to access a blockchain account. Depending on the blockchain technology, this might only be the private key or the seed phrase of an account. Furthermore, the public key as well as some non-mandatory information is handy. For convenience, the hard-to-remember-and-easy-to-mistype strings are often encoded as Quick Response Code.

In practice, my approach is the following: I generate QR code images of the keys and write a simple markdown document with all necessary information. Finally, I use Pandoc to generate a PDF from that file that can be easily printed.

The QR code can be generated with various tools. It is important to do this offline - do not paste any sensitive information to a website that creates QR codes. I did use qrcode for generation in the past which is simply enough.

# Generate QR Codes
qr "WHATEVERTHEPRIVATEKEYIS" > private.png
qr "WHATEVERTHEPUBLICKEYIS" > public.png
qr "SOME RANDOM WORDS FOR THE SEED PHRASE" > seed.png

Then, we’ll make a simple markdown document with all information needed. Note that I only list two blockchain accounts here but more can be used, of course.

# Stellar - XLM
~~~

Account created on 2018-10-06 with
https://www.stellar.org/laboratory/#account-creator?network=public.

Use https://www.stellar.org/account-viewer/#!/ for access.

public: WHATEVERTHEPUBLICKEYIS
private: WHATEVERTHEPRIVATEKEYIS

            public                      private
~~~

![public](./public.png){ width=200px } ![private](./private.png){ width=200px }

# Cardano - ADA

~~~
Account created on 2018-10-06 with Cardano wallet Daedalus v1.1.0.960.
Use https://daedaluswallet.io/ for access.

seed: "SOME RANDOM WORDS FOR THE SEED PHRASE"

            seed
~~~

![seed](./seed.png){ width=200px } \

(Download)

Finally, we’ll simply generate a PDF from that input …

# Generate a PDF from the Markdown file. Tell Pandoc to reduce the default
# (LaTeX) margins.
pandoc -V geometry:margin=1.5cm -s -o paperwallet.pdf paperwallet.md 

… giving us our paper wallet:

Less nice than other tools but it does the job! Importantly, this approach makes it possibly to independently create a “paper wallet” for already existing accounts where not printable output has been auto-generated.

Actually, it would be good to add even further hints to the paper wallet on how to access the funds. This would help my clueless inheritors ;)