{"id":19844346,"url":"https://github.com/mroth/momocode","last_synced_at":"2025-05-01T20:32:22.951Z","repository":{"id":57607360,"uuid":"123638398","full_name":"mroth/momocode","owner":"mroth","description":":peach: Visual fingerprinting for 20-byte Ethereum addresses via emoji","archived":false,"fork":false,"pushed_at":"2020-05-21T12:05:53.000Z","size":28,"stargazers_count":12,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-06T18:07:07.597Z","etag":null,"topics":["emoji","ethereum","solidity","visual-hash"],"latest_commit_sha":null,"homepage":"","language":"Solidity","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mroth.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-03-02T22:40:09.000Z","updated_at":"2023-08-17T15:38:49.000Z","dependencies_parsed_at":"2022-08-30T08:51:42.722Z","dependency_job_id":null,"html_url":"https://github.com/mroth/momocode","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mroth%2Fmomocode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mroth%2Fmomocode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mroth%2Fmomocode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mroth%2Fmomocode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mroth","download_url":"https://codeload.github.com/mroth/momocode/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251941150,"owners_count":21668681,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["emoji","ethereum","solidity","visual-hash"],"created_at":"2024-11-12T13:03:36.436Z","updated_at":"2025-05-01T20:32:22.676Z","avatar_url":"https://github.com/mroth.png","language":"Solidity","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MomoCode 🍑\n\nThis proof-of-concept exhibits a representative visual fingerprint for a 20-byte\naddress, such as those found on the Ethereum network, by using Emoji Unicode\nglyphs. The representation is designed to be easily visually distinguished by a\nhuman, using commonly supported and visually distinct symbols, that can be\neasily transmitted without having to rely on image generation/storage/serving.\n\nFor example, `0x627306090abab3a6e1400e9345bc60c78a8bef57` can be more visually\ndistinctly represented as:\n\n    🎡🎲🌟🌱🌲\n    🐱🐪🐝👚🍬\n    🌷🐊🍱🐳🎓\n    🐾🐁🐂👨🎈\n\nNote by design this encoding provides no [avalanching][1], e.g. a small change\nin the input hash will result in an equivalently small change to the visual\nrepresentation, so if your goal in visual fingerprinting is to provide robust\n_change detection_ for the end-user, then you must be sure to hash the input\nfirst. (For convenience, the included libraries have built-in optional hashing\nfunctions that can do this for you.)\n\n[1]: https://en.wikipedia.org/wiki/Avalanche_effect\n\n\n## Libraries\n\n### [Solidity](solidity/)\n\nAll encoding operations are `pure` functions written in inline assembly, for low\nexecution gas costs (or zero cost when called locally). For docs, see natspec\ndocumentation in the source files themselves.\n\n### [Go](go/)\n\nSee the [godocs](https://godoc.org/github.com/mroth/momocode/go).\n\n\n## Visual Representation\n\nWhen displaying visually to a user, I recommend splitting the string into a 4x5\ngrid via linebreaks, as the rectangular format makes it easier to visually parse\nfor differences even faster.\n\nThe Go library contains a `Grid()` function to do this for you.\n\n\n## Future Work\n\n- Replace the 256 4-byte emoji with hand-picked choices optimized for visual\n  distinction and compatibility.\n- Flesh out a JavaScript library so people can do equivalent stuff client side\n  in the browser if desired.\n\n\n## Prior Art\n\nThis is not a new idea by any means, just adapting it to Ethereum addresses. See\nfor example:\n\n 1. [\"Visualizing hex dumps with Unicode Emoji\"](http://www.windytan.com/2014/10/visualizing-hex-bytes-with-unicode-emoji.html) by Oona Räisänen\n 2. [base💯](https://github.com/AdamNiederer/base100) authored by Adam Niederer\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmroth%2Fmomocode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmroth%2Fmomocode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmroth%2Fmomocode/lists"}