Wallet Shape Address Human-friendly Visualization of Wallet Address : Momcode


We both know, crypto wallet addresses are weird, complex, difficult to recognize or remember, that was our first impression when we first learned about bitcoin and today it is also the first, second and third impression of friends and family we are onboarding to crypto-land.

The problem

  • You can hardly memorize, recognize or distinguish this

  • You can hardly transmit the address or QR code via a voice channel


Human brain has great capacity to recognize patterns and retain complex visual perceptions, when he can make sense of it, and the most recognizable in this context are geometric shapes & colors, what if the wallet address could be express (encoded) in Colorful Symbols string (using basic 6 unambiguous colors and set of universally recognizable symbols like triangle, square, circle, star, heart arrow… etc)

So this address: 0x6719a70e3b9652d0cd3d4cd28a93556497e2bf96


In order to advance this research toward 1) final Encoding Dictionary 2) representation models (string, square, QR overlapping… etc)

I put together small test-lab https://momcode.io/lab/ which allows Hex Table manipulation and you forming your own Encoding Dictionary Proposal which you could export/share with URL link or PR on github https://github.com/drhus/momcode/milestones


So, there are two distinct problems here:

  1. we want something easy to visally recognize
  2. we want something easy to transmit over voice

What do you think about identicons for the (1)? They are a de-facto standard already.

How about BIP39 words for the (2)? 16 words will cover a 160 bit address.


Aren’t those ‘robot faces’ that we get every time we generate new addresses from MyEtherWallet or MyCrypto good enough for the same purpose of memorization, recognition, and differentiation?

The ‘robot faces’ take up far less space and can sometimes look cute too.
I got one ‘robot face’ that looks like a cyclops sheep, while another one that looks like an innocent-looking smurf.

What will imitate / produce all the myriads of differing voices (assuming a holder has multiple addresses) for transmission? If it requires the press of a button, then what limitation do the ‘robot faces’ pose that technology cannot resolve?

Or maybe we should find a way to scan those ‘robot faces’ for their corresponding addresses?
Then all we need is just carry our ‘robot faces’ around.

Edit: My mistake for misunderstanding what author meant by voice transmission but now that I do, I still do not understand how superior / effective / efficient is “red scissor” to “nine six”, or “green speaker” to “six seven”. Neither do I understand in what situation would voice transmission be the only viable option.


@drhus Please don’t add emoji to the title of your posts. I removed them.


Hi everyone; @drhus it seems you have stumbled upon something I have also been experimenting as a chrome extension so I hoped this comment thread could be of use to mention: https://github.com/ethereum/EIPs/issues/928#issuecomment-389439986

My personal takeaways:

  • There is a lot of added value in being able to recognise a hashed address (you cannot humanly/safely compare similar addresses)
  • Colors are easier to distinguish/remember than symbols and shapes
  • Emoji range has a lot of similar emoji. A LUT with select emoji is better than the whole range

PoC extension:

Argent wallet is using something resembling this concept for their key recovery:

Kind regards!


BIP39 mnemonic is a fabulous gadget for generating deterministic keys (private key), but you can’t express your Wallet Address (public key) with that 2048 words. however PGP word list can do that, encode any hex hash in word list, and despite the fact it’s only English, Momcode Geometrical Shapes and Colors are to recognize, memorize, and highly recognizable across nations/languages

Do you remember your Identicons, or Blockies of myEtherWallet, myCrypto, Ethereum wallet and Mist?
I do remember last 3 digits of my wallet address (and i know widely people memorize first or last digits of their addresses) but I can’t remember my Blockie icon at all, it’s just great for comparing and matching.

Secondly, all Identicon family including Blockies, MonsterID, Retro, Vash, Jdenticon, Jazzicon, IdentiHeart, and Robohash works beautifully as 1) avatar 2) comparing and matching,

but it is not transmittable via voice/phone and much harder online (for decoding)
it’s something you will have along-side your wallet address (will never replace it for day-to-day use)

While Momcode could be used with some adjustments as 1) replacement of Idneticion/blockies (avatar / matching and comparing 2) with Momcode keyboard -something like emoji keyboard but for wallets- can replace the address on day-to-day use completely 3) Scan on similar fashion to QR code

I would say Momcode could be seen as just describable Identicon, with higher recognizability and Memorability.


I hear you, and I totally agree, green speaker 🕪 isn’t superior to 67

but as a string of arbitrary hex ex. 0xA3F0272F35 is inferior to ▲🞧🡅♥★ in terms of memorability, distinguishability and transmit-ability particularly for non-english speakers

Transmit-ability over voice channel is actually what triggered the research at first place, I’ve introduced and successfully installed wallets for friends and family, and had a hard time assisting (over the phone) my mom to send Ether from her smart-phone wallet. so we call it Momcode : p

Important to mention particularly speaker, scissor, airplane, telephone aren’t necessarily going to be there on final version, it’s just on current lists today for experimental… and some characters like start, triangle, heart, square… i’m confident it will stay, but the idea of test-lab is to find the simplest unambiguous set 16 to 32 shapes to be used in combination with basic colors, and then sorted by frequency.


@Cygnusfear your approach with IdentiAddress is very interesting, I look forward Etherscan has that kind of built-in instead of chrome extension, I’ve responded over there and your PoC inspired me to add new Encoding Dictionary for testing, check it out https://momcode.io/lab/


Hmm, actually I do. I don’t “remember” it in the sense that I can’t describe it, but I recognize it every time I see it. If I can’t recognize the image, I will know it. This is how visual pattern recognition works. I can not describe face of my sister to you, but I easily recognize her.

So a single complex picture is probably better for visual confirmation than a series of simpler ones.

Would be really interesting to see an alternative to blockies that better resembles faces.

Let’s narrow down the problem. You want to be able to transmit the whole address over phone? Or you want to make sure that the address you’ve sent over some digital channel is complete and untampered?

The former seems a really rare use-case: to send “internet money” address to somebody who doesn’t have internet? For the latter, the PGP word list would work just fine: one person reads the words aloud, the other one checks. We will apply the transformation to the hash of the address, so changing just one digit will change the entire series.

BIP39 words are less distinct on pronounciation, but since you only need to compare the phrases this will probably work. The upsides: 1) it’s a standard with multiple languages, 2) since a BIP39 word has higher entropy, you only need 16 of them to describe the address (as opposed to 20 words from the PGP list).


The lab is great! Is there a repository where I could submit a PR / tweak the encoding?

This proposal appears to address several goals/problems regarding addresses.

Communicability: addresses are difficult to communicate verbally

Currently: very prone to human error and a horrible experience

Identification: Replace the address with something that can be humanly verified / compared / hashed

Currently: Frequently occurring attack vector. URLs are actively targeted this way. Very prone to human error

Blockies only solve identification, there are some downsides to them:

  • Downscaling Blockies really hurts their legibility/function (they merge into similar icons)
  • Their implementation differs between implementers (metamask blockies are different from etherscan)
  • They do not automatically appear for addresses ‘in the wild’ (this can only be done by a browser extension)
  • Identification & recognition only works if people have the time to actually develop that pattern recognition (not very useful for new users)

I would prefer these problems to be remedied by ENS. This hinges on the pace of ENS adoption.

To me it appears that momcode appears to be an interim solution for ENS adoption. It addresses some of the shortcomings of Blockies but without large scale adoption suffers from the same adoption problem as ENS (and there are several implementation issues).

I’d say an npm package/library that implements either of these techniques is interesting and might help adoption; however if the implementation is left to the dApp then it creates a false sense of security for the user. All things considered, wallets may be the only third party to which the user can delegate such ‘trust’.

Quick thought:

  • A simple website that converts address from and to emoticons would be a solution to the verbal communication problem (it basically delegates the problem to using an URL)


Take note that the author tries to innovate the UI for older generations. ‘Momcode’ may be more practical to generations before us, but as younger generations come into the picture, such ‘momcode’ standard may not last. Besides, the older we get, the less likely for us to adapt to newer innovations to the extent that someone else need to go backward to accommodate us. Pattern recognition is an inherent self-evolving neural capability and need not be developed as of now by anyone except newborns. In my opinion, the identicons (thank you drhus for educating me on that, I had no idea what they are called before this) remain the most viable if we can find the solutions to scan them for both input and output purposes. So far I only see them being an output from a new address generation. If they can be scanned / analyzed as an input, then I think we can open up some possibilities to better UI/UX.


The key is to understand the user, even if in a broad category such as “an elderly person”.

How would we do this? Well, as scientifically as possible. This means proposing a hypothesis, making sure the hypothesis can be disproven (Popper’s falsifiability), testing/validating the hypothesis, enabling peer review, enabling alternative hypotheses to be a part of the process.

What users actually need has to be established concretely, using an agreed-upon process, or we will imagine/speculate/guess, and end up with solutions that are not optimal.


I’m familiar with bip-39 seed phrase implementation for private key and derived addresses but not for public key, would you be so kind to refer me to a such implementation? a library that I could test to generate Bip39 mnemonic phrase of a wallet address.

sure https://github.com/drhus/Momcode

@Cygnusfear do you mean by a website to convert from and to emoticons? an input (copy/past or with special keyboard) to decode the symbols back to hash address? It is something I was thinking about a lot, I don’t have an easy solution for copy/past but on the road-map a milestone for Momcode keyboard (16-32 symbols with 8 colors) which could be used on a website or integrated with Crypto Wallet (in a similar fashion to emoji keyboards), check out https://github.com/drhus/Momcode/milestones

You said it all :slight_smile:

A Better UI/UX and Security! for 30-40 year we mainly used hashs for db/ssh/pgp and store it safely to be used once a while copy/past, Today with cryptocurrencies we’ve to transmit and use it in a daily base, not just me and you but people much less sensitive to all types of associated risk!

a deterministic (rule-based) visual linkage which serves in the capacity of identicon as distinguishable, +scannable and describable could replace both QR code and Identicon, and would provide a simpler and safer usage.


I don’t know any implementation, but it’s easy to build one. What programming language do you use?

How it can work: you split the 160-bit address into 16 10-bit parts. Like PGP words, each part is appended with evenness bit (0 for even words in the phrase, 1 for odd ones). The resulting 11-bit number is the number of word in BIP39 list.


Good idea ))

I would use an adversarial neural network to generate a human face ))


One only needs to ask, Tenzorum released an easy way to associate an ENS subdomain to an address:


indeed, that works like a charm 16 words of already existing standard list multi-lang. a small online javascript gadget will definitely be useful, and the fact that it’s 16 words and Ethereum address has no checksum (but for case-sensitivity) we could add 4 bytes or 1 -2 words checksum later!

tell me more about that…

isn’t just as ENS now subdomains of https://enslisting.com ?


If you prefer a checksum, then I think evenness bits are not necessary, so we can keep 16 words length with a 16 bit checksum. I’m not sure even that is necessary for our use-case of phrase verification, it’s just a way to create some redundancy.


I believe all/majority of wallets/dApps will use name systems (such as ENS) in the future. That’s what we’re all used to, so I guess that’s the best choice if we want mass adoption.

However, your idea is interesting and I guess it could be worth exploring (along with similar ideas) for some alternative use cases. For example, crypto community is very inclusive and open (one of the reasons I like it so much), so it would be awesome if we have good UX solutions in place for people with disabilities, too. :blue_heart:


Yes, it’s an easy way to get an ENS now subdomain. It will help solve the ‘over the phone’ issue and is easy to manually check for correctness. So this a great solution to many of the problems we associate with public keys.

Many people I know have an @gmail or @icloud email address and do not buy their own domain. So it is similar to the user experience they are familiar with.