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

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).

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

@gluk64
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.

1 Like

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.

1 Like

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.

Oh yeah, I forgot we’re using 2 lists pgp style for error redundancy, IMO a proper checksum is defiantly a better than 2x tables. and this application could work universally across crypto addresses most Hex or encoding of hex, we add then base58check >> hash140 and would instantly work for bitcoin.

This might be the safest way to transmit a wallet address over the phone today with 16 words +distinguishable +checksum!

Great idea, I looked up the subject there is 8% of men with color blindness!

I’ve just added a Dictionary that supports color-blindless, and it dosn’t look bad at all!
ex. random 0xbdd8fe2a864cfa165b1266649996e976dcc99483 >>


or square

6%20(6)

here is how the entire new dictionary looks for people with Deuteranomaly (which is the most common type ~5% of total men has it)
6%20(7)

https://momcode.io/lab/ >> list #225b

Glad you liked it, even more glad you immediately acted upon it! :slightly_smiling_face::clap::pray:

I think it would be super awesome if you focus on that in future. :blush:

Yes. I thought that ENS is a good solution to this general problem. After all, email addresses are readily recognizable.

@Cygnusfear @drhus @gluk64
I was working on something similar the other day:


It’s still a work in progress. Somebody proposed adding checksums: Bijective Mnemonic Phrases for addresses, hashes, etc
Maybe it can inspire something new.

1 Like

Also relevant to this topic:


As a first step, I don’t understand why wallet addresses can’t at least start with the currency code: BTC1Co7WbQJzesUgLuQtr7bFWEUfnDFuBS2nm or ETH0xa5b7d615c99f011a22f16f5809890ca6911200a3, etc. so that new users to crypto have some easy way of making sure they’re sending the right currency to the right address.

Very well done @osolmaz this is useful for matching and comparing as well as for transmitting addresses over the phone, (btw have you considered the odd/even error detection scheme, similar to PGP word list cc @gluk64? this would be really useful!)

@Cygnusfear Emoji checksumming is :sunglasses: but as visual checksum only, and I can’t envision several use cases? possibly for etherscan like your chrome extension, however, I still prefer your color highlighting approach.

I’m working on an appealing Square/Circle visualization of momcode to test for identicons…

actually Prefix with separator " : " is supported by most wallets!
Bitcoin:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
Ethereum:0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413 << this URL shall open with wallet directly if you’ve one installed that support prefix.

and some addresses format has explicit prefix structure like XRP addresses start with " r " as rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh, EOS start with " EOS " as EOS8RTr8MFSP37tUQCZspPCDpyphed9noU6zTKjqHh93U2DThjdVr and CashAdd of BTC start with " q " as qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a litecoin L etc

:man: :sunny: :smile: :ab:
:tiger2: :mailbox: :m: :camera:
:flight_departure: :balloon: :triangular_ruler: :previous_track_button:
:fountain: :eye: :weary:

With 1024 emoji you can do something similar to the bijective mnemonic @osolmaz proposed (for example: https://github.com/keith-turner/ecoji), but with icons (so you can communicate the icons verbally). Emoji are supported by most chat applications so there’s native support for the visuals.

The 3 emoji checksum is not bi-directional. With a 1024 emoji list you can get a public key down to 15 characters and still allow decoding. Biggest issue here is similar emoji. Probably should implement a last character that allows the decoder to checksum the input.

address: '0x03236033522cdCBaC862afBeb56a951649082b78',
emoji: '☀️ 👨 ☀️ 😄 🆎 🐅 📫 Ⓜ️ 📷 🛫 🎈 📐 ⏮ ⛲️ 👁 😩',
text: 'sunny man sunny smile ab tiger2 mailbox m camera airplane_departure balloon triangular_ruler black_left_pointing_double_triangle_with_vertical_bar fountain eye weary'

Of course there is a relevant XKCD for this: https://www.xkcd.com/936/

Considering people traditionally remember narratives easily, “Plane taking off to the sun” etc. I’m imagining a lookup table of narratives.

Having background colors for each row is an option, but it’s not so elegant.

Interesting reference: