--- eip: 7673 title: Distinguishable base256emoji Addresses description: Depict Account Addresses As A String of Emoji author: William Morriss (@wjmelements) discussions-to: https://ethereum-magicians.org/t/erc-7673-distinguishable-account-addresses/19461 status: Review type: Standards Track category: ERC created: 2024-04-01 --- ## Abstract Introduce base256emoji for use as the primary input and display for account addresses in all user interfaces. ## Motivation Human users often fail to distinguish between long strings of hexadecimal characters, especially when they match at the beginning and at the end. This makes hexadecimal strings a poor format for human-readable account addresses. The problem is being exploited by several spoofing strategies that mine similar addresses and spoof [ERC-20](./eip-20.md) Transfer events with the goal of tricking the end user into copying the wrong recipient address. These address spoofing attacks have mislead tens of thousands of ether, and countless other tokens. Spoofers flooding the network with fake Transfer events waste network resources and complicate blockchain accounting. Improving the distinguishability of addresses will reduce the incentives for this behavior. ## Specification The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174. User interfaces: - SHALL depict account addresses as a base256emoji string instead of hexadecimal. - SHALL accept base256emoji strings as input for user-supplied account address parameters. - SHOULD recognize and interpret strings of exactly 20 consecutive emoji as addresses when all of them are valid base256emoji. ### base256emoji encoding table | Emoji | Unicode codepoint | Byte Value | |:-:|:-:|:-:| | ๐Ÿš€ | U+1F680 | 0 | | ๐Ÿช | U+1FA90 | 1 | | โ˜„ | U+2604 | 2 | | ๐Ÿ›ฐ | U+1F6F0 | 3 | | ๐ŸŒŒ | U+1F30C | 4 | | ๐ŸŒ‘ | U+1F311 | 5 | | ๐ŸŒ’ | U+1F312 | 6 | | ๐ŸŒ“ | U+1F313 | 7 | | ๐ŸŒ” | U+1F314 | 8 | | ๐ŸŒ• | U+1F315 | 9 | | ๐ŸŒ– | U+1F316 | 10 | | ๐ŸŒ— | U+1F317 | 11 | | ๐ŸŒ˜ | U+1F318 | 12 | | ๐ŸŒ | U+1F30D | 13 | | ๐ŸŒ | U+1F30F | 14 | | ๐ŸŒŽ | U+1F30E | 15 | | ๐Ÿ‰ | U+1F409 | 16 | | โ˜€ | U+2600 | 17 | | ๐Ÿ’ป | U+1F4BB | 18 | | ๐Ÿ–ฅ | U+1F5A5 | 19 | | ๐Ÿ’พ | U+1F4BE | 20 | | ๐Ÿ’ฟ | U+1F4BF | 21 | | ๐Ÿ˜‚ | U+1F602 | 22 | | โค | U+2764 | 23 | | ๐Ÿ˜ | U+1F60D | 24 | | ๐Ÿคฃ | U+1F923 | 25 | | ๐Ÿ˜Š | U+1F60A | 26 | | ๐Ÿ™ | U+1F64F | 27 | | ๐Ÿ’• | U+1F495 | 28 | | ๐Ÿ˜ญ | U+1F62D | 29 | | ๐Ÿ˜˜ | U+1F618 | 30 | | ๐Ÿ‘ | U+1F44D | 31 | | ๐Ÿ˜… | U+1F605 | 32 | | ๐Ÿ‘ | U+1F44F | 33 | | ๐Ÿ˜ | U+1F601 | 34 | | ๐Ÿ”ฅ | U+1F525 | 35 | | ๐Ÿฅฐ | U+1F970 | 36 | | ๐Ÿ’” | U+1F494 | 37 | | ๐Ÿ’– | U+1F496 | 38 | | ๐Ÿ’™ | U+1F499 | 39 | | ๐Ÿ˜ข | U+1F622 | 40 | | ๐Ÿค” | U+1F914 | 41 | | ๐Ÿ˜† | U+1F606 | 42 | | ๐Ÿ™„ | U+1F644 | 43 | | ๐Ÿ’ช | U+1F4AA | 44 | | ๐Ÿ˜‰ | U+1F609 | 45 | | โ˜บ | U+263A | 46 | | ๐Ÿ‘Œ | U+1F44C | 47 | | ๐Ÿค— | U+1F917 | 48 | | ๐Ÿ’œ | U+1F49C | 49 | | ๐Ÿ˜” | U+1F614 | 50 | | ๐Ÿ˜Ž | U+1F60E | 51 | | ๐Ÿ˜‡ | U+1F607 | 52 | | ๐ŸŒน | U+1F339 | 53 | | ๐Ÿคฆ | U+1F926 | 54 | | ๐ŸŽ‰ | U+1F389 | 55 | | ๐Ÿ’ž | U+1F49E | 56 | | โœŒ | U+270C | 57 | | โœจ | U+2728 | 58 | | ๐Ÿคท | U+1F937 | 59 | | ๐Ÿ˜ฑ | U+1F631 | 60 | | ๐Ÿ˜Œ | U+1F60C | 61 | | ๐ŸŒธ | U+1F338 | 62 | | ๐Ÿ™Œ | U+1F64C | 63 | | ๐Ÿ˜‹ | U+1F60B | 64 | | ๐Ÿ’— | U+1F497 | 65 | | ๐Ÿ’š | U+1F49A | 66 | | ๐Ÿ˜ | U+1F60F | 67 | | ๐Ÿ’› | U+1F49B | 68 | | ๐Ÿ™‚ | U+1F642 | 69 | | ๐Ÿ’“ | U+1F493 | 70 | | ๐Ÿคฉ | U+1F929 | 71 | | ๐Ÿ˜„ | U+1F604 | 72 | | ๐Ÿ˜€ | U+1F600 | 73 | | ๐Ÿ–ค | U+1F5A4 | 74 | | ๐Ÿ˜ƒ | U+1F603 | 75 | | ๐Ÿ’ฏ | U+1F4AF | 76 | | ๐Ÿ™ˆ | U+1F648 | 77 | | ๐Ÿ‘‡ | U+1F447 | 78 | | ๐ŸŽถ | U+1F3B6 | 79 | | ๐Ÿ˜’ | U+1F612 | 80 | | ๐Ÿคญ | U+1F92D | 81 | | โฃ | U+2763 | 82 | | ๐Ÿ˜œ | U+1F61C | 83 | | ๐Ÿ’‹ | U+1F48B | 84 | | ๐Ÿ‘€ | U+1F440 | 85 | | ๐Ÿ˜ช | U+1F62A | 86 | | ๐Ÿ˜‘ | U+1F611 | 87 | | ๐Ÿ’ฅ | U+1F4A5 | 88 | | ๐Ÿ™‹ | U+1F64B | 89 | | ๐Ÿ˜ž | U+1F61E | 90 | | ๐Ÿ˜ฉ | U+1F629 | 91 | | ๐Ÿ˜ก | U+1F621 | 92 | | ๐Ÿคช | U+1F92A | 93 | | ๐Ÿ‘Š | U+1F44A | 94 | | ๐Ÿฅณ | U+1F973 | 95 | | ๐Ÿ˜ฅ | U+1F625 | 96 | | ๐Ÿคค | U+1F924 | 97 | | ๐Ÿ‘‰ | U+1F449 | 98 | | ๐Ÿ’ƒ | U+1F483 | 99 | | ๐Ÿ˜ณ | U+1F633 | 100 | | โœ‹ | U+270B | 101 | | ๐Ÿ˜š | U+1F61A | 102 | | ๐Ÿ˜ | U+1F61D | 103 | | ๐Ÿ˜ด | U+1F634 | 104 | | ๐ŸŒŸ | U+1F31F | 105 | | ๐Ÿ˜ฌ | U+1F62C | 106 | | ๐Ÿ™ƒ | U+1F643 | 107 | | ๐Ÿ€ | U+1F340 | 108 | | ๐ŸŒท | U+1F337 | 109 | | ๐Ÿ˜ป | U+1F63B | 110 | | ๐Ÿ˜“ | U+1F613 | 111 | | โญ | U+2B50 | 112 | | โœ… | U+2705 | 113 | | ๐Ÿฅบ | U+1F97A | 114 | | ๐ŸŒˆ | U+1F308 | 115 | | ๐Ÿ˜ˆ | U+1F608 | 116 | | ๐Ÿค˜ | U+1F918 | 117 | | ๐Ÿ’ฆ | U+1F4A6 | 118 | | โœ” | U+2714 | 119 | | ๐Ÿ˜ฃ | U+1F623 | 120 | | ๐Ÿƒ | U+1F3C3 | 121 | | ๐Ÿ’ | U+1F490 | 122 | | โ˜น | U+2639 | 123 | | ๐ŸŽŠ | U+1F38A | 124 | | ๐Ÿ’˜ | U+1F498 | 125 | | ๐Ÿ˜  | U+1F620 | 126 | | โ˜ | U+261D | 127 | | ๐Ÿ˜• | U+1F615 | 128 | | ๐ŸŒบ | U+1F33A | 129 | | ๐ŸŽ‚ | U+1F382 | 130 | | ๐ŸŒป | U+1F33B | 131 | | ๐Ÿ˜ | U+1F610 | 132 | | ๐Ÿ–• | U+1F595 | 133 | | ๐Ÿ’ | U+1F49D | 134 | | ๐Ÿ™Š | U+1F64A | 135 | | ๐Ÿ˜น | U+1F639 | 136 | | ๐Ÿ—ฃ | U+1F5E3 | 137 | | ๐Ÿ’ซ | U+1F4AB | 138 | | ๐Ÿ’€ | U+1F480 | 139 | | ๐Ÿ‘‘ | U+1F451 | 140 | | ๐ŸŽต | U+1F3B5 | 141 | | ๐Ÿคž | U+1F91E | 142 | | ๐Ÿ˜› | U+1F61B | 143 | | ๐Ÿ”ด | U+1F534 | 144 | | ๐Ÿ˜ค | U+1F624 | 145 | | ๐ŸŒผ | U+1F33C | 146 | | ๐Ÿ˜ซ | U+1F62B | 147 | | โšฝ | U+26BD | 148 | | ๐Ÿค™ | U+1F919 | 149 | | โ˜• | U+2615 | 150 | | ๐Ÿ† | U+1F3C6 | 151 | | ๐Ÿคซ | U+1F92B | 152 | | ๐Ÿ‘ˆ | U+1F448 | 153 | | ๐Ÿ˜ฎ | U+1F62E | 154 | | ๐Ÿ™† | U+1F646 | 155 | | ๐Ÿป | U+1F37B | 156 | | ๐Ÿƒ | U+1F343 | 157 | | ๐Ÿถ | U+1F436 | 158 | | ๐Ÿ’ | U+1F481 | 159 | | ๐Ÿ˜ฒ | U+1F632 | 160 | | ๐ŸŒฟ | U+1F33F | 161 | | ๐Ÿงก | U+1F9E1 | 162 | | ๐ŸŽ | U+1F381 | 163 | | โšก | U+26A1 | 164 | | ๐ŸŒž | U+1F31E | 165 | | ๐ŸŽˆ | U+1F388 | 166 | | โŒ | U+274C | 167 | | โœŠ | U+270A | 168 | | ๐Ÿ‘‹ | U+1F44B | 169 | | ๐Ÿ˜ฐ | U+1F630 | 170 | | ๐Ÿคจ | U+1F928 | 171 | | ๐Ÿ˜ถ | U+1F636 | 172 | | ๐Ÿค | U+1F91D | 173 | | ๐Ÿšถ | U+1F6B6 | 174 | | ๐Ÿ’ฐ | U+1F4B0 | 175 | | ๐Ÿ“ | U+1F353 | 176 | | ๐Ÿ’ข | U+1F4A2 | 177 | | ๐ŸคŸ | U+1F91F | 178 | | ๐Ÿ™ | U+1F641 | 179 | | ๐Ÿšจ | U+1F6A8 | 180 | | ๐Ÿ’จ | U+1F4A8 | 181 | | ๐Ÿคฌ | U+1F92C | 182 | | โœˆ | U+2708 | 183 | | ๐ŸŽ€ | U+1F380 | 184 | | ๐Ÿบ | U+1F37A | 185 | | ๐Ÿค“ | U+1F913 | 186 | | ๐Ÿ˜™ | U+1F619 | 187 | | ๐Ÿ’Ÿ | U+1F49F | 188 | | ๐ŸŒฑ | U+1F331 | 189 | | ๐Ÿ˜– | U+1F616 | 190 | | ๐Ÿ‘ถ | U+1F476 | 191 | | ๐Ÿฅด | U+1F974 | 192 | | โ–ถ | U+25B6 | 193 | | โžก | U+27A1 | 194 | | โ“ | U+2753 | 195 | | ๐Ÿ’Ž | U+1F48E | 196 | | ๐Ÿ’ธ | U+1F4B8 | 197 | | โฌ‡ | U+2B07 | 198 | | ๐Ÿ˜จ | U+1F628 | 199 | | ๐ŸŒš | U+1F31A | 200 | | ๐Ÿฆ‹ | U+1F98B | 201 | | ๐Ÿ˜ท | U+1F637 | 202 | | ๐Ÿ•บ | U+1F57A | 203 | | โš  | U+26A0 | 204 | | ๐Ÿ™… | U+1F645 | 205 | | ๐Ÿ˜Ÿ | U+1F61F | 206 | | ๐Ÿ˜ต | U+1F635 | 207 | | ๐Ÿ‘Ž | U+1F44E | 208 | | ๐Ÿคฒ | U+1F932 | 209 | | ๐Ÿค  | U+1F920 | 210 | | ๐Ÿคง | U+1F927 | 211 | | ๐Ÿ“Œ | U+1F4CC | 212 | | ๐Ÿ”ต | U+1F535 | 213 | | ๐Ÿ’… | U+1F485 | 214 | | ๐Ÿง | U+1F9D0 | 215 | | ๐Ÿพ | U+1F43E | 216 | | ๐Ÿ’ | U+1F352 | 217 | | ๐Ÿ˜— | U+1F617 | 218 | | ๐Ÿค‘ | U+1F911 | 219 | | ๐ŸŒŠ | U+1F30A | 220 | | ๐Ÿคฏ | U+1F92F | 221 | | ๐Ÿท | U+1F437 | 222 | | โ˜Ž | U+260E | 223 | | ๐Ÿ’ง | U+1F4A7 | 224 | | ๐Ÿ˜ฏ | U+1F62F | 225 | | ๐Ÿ’† | U+1F486 | 226 | | ๐Ÿ‘† | U+1F446 | 227 | | ๐ŸŽค | U+1F3A4 | 228 | | ๐Ÿ™‡ | U+1F647 | 229 | | ๐Ÿ‘ | U+1F351 | 230 | | โ„ | U+2744 | 231 | | ๐ŸŒด | U+1F334 | 232 | | ๐Ÿ’ฃ | U+1F4A3 | 233 | | ๐Ÿธ | U+1F438 | 234 | | ๐Ÿ’Œ | U+1F48C | 235 | | ๐Ÿ“ | U+1F4CD | 236 | | ๐Ÿฅ€ | U+1F940 | 237 | | ๐Ÿคข | U+1F922 | 238 | | ๐Ÿ‘… | U+1F445 | 239 | | ๐Ÿ’ก | U+1F4A1 | 240 | | ๐Ÿ’ฉ | U+1F4A9 | 241 | | ๐Ÿ‘ | U+1F450 | 242 | | ๐Ÿ“ธ | U+1F4F8 | 243 | | ๐Ÿ‘ป | U+1F47B | 244 | | ๐Ÿค | U+1F910 | 245 | | ๐Ÿคฎ | U+1F92E | 246 | | ๐ŸŽผ | U+1F3BC | 247 | | ๐Ÿฅต | U+1F975 | 248 | | ๐Ÿšฉ | U+1F6A9 | 249 | | ๐ŸŽ | U+1F34E | 250 | | ๐ŸŠ | U+1F34A | 251 | | ๐Ÿ‘ผ | U+1F47C | 252 | | ๐Ÿ’ | U+1F48D | 253 | | ๐Ÿ“ฃ | U+1F4E3 | 254 | | ๐Ÿฅ‚ | U+1F942 | 255 | ## Rationale Previous attempts to reduce spoofing and other copy errors such as [ERC-55](./eip-55.md) have not reduced the number of characters in an address. Any base-256 standard would achieve this goal but emoji were chosen to maximize human-distinguishability. Multiple base-256 emoji encodings have been proposed. The base256emoji encoding was chosen due to its acceptance into the multibase repository. This standard does not also recommend base256emoji for use in depicting other bytestrings such as transaction hashes and calldata. Transaction hashes are not yet being spoofed. Calldata is best decoded via the appropriate ABI. By only using base256emoji for addresses, addresses can be easily noticed among other information. ## Backwards Compatibility Using the encoding table, the base256emoji encoding can be transcoded into hexadecimal and vice-versa. ## Test Cases | base256emoji | ERC-55 | |:-:|:-:| |๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿ˜€๐Ÿ’“๐Ÿฅด๐Ÿ’ฃ๐Ÿ‘ป๐Ÿ™Œ๐Ÿ™ˆ๐Ÿคข๐Ÿ˜ฅโ˜น๐ŸŒ๐Ÿ’ฉ๐ŸŽ๐Ÿ’•|`0x0000000000004946c0e9F43F4Dee607b0eF1fA1c`| |๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿš€๐Ÿ’ธ๐ŸŽŠ๐Ÿ’ก๐ŸŒฟ๐Ÿšฉ๐Ÿ”ฅ๐Ÿ“Œ๐Ÿ™‚๐Ÿ’™โ„๐Ÿ›ฐ๐Ÿ’ฉ๐Ÿคโญ|`0x000000000000c57CF0A1f923d44527e703F1ad70`| |โ˜€โ˜€โ˜€โ˜€โ˜€โค๐ŸŒŠ๐ŸŒ–โŒ๐Ÿ’€โœ”๐ŸŒŽ๐ŸŽˆโŒ๐Ÿ’ž๐Ÿ›ฐ๐Ÿ’—๐Ÿ˜…โ“โ˜„|`0x111111111117dC0aa78b770fA6A738034120C302`| |๐Ÿ‘๐Ÿคซ๐Ÿ˜‹โœŠ๐Ÿคช๐Ÿ˜ž๐Ÿค๐Ÿ‘ถ๐Ÿ˜ญโค๐Ÿ‘‰๐Ÿšฉ๐Ÿ’”๐ŸŒฑ๐Ÿค๐ŸŒŠ๐Ÿ’š๐Ÿช๐Ÿšฉ๐Ÿ˜|`0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984`| |๐Ÿ˜†๐ŸŒŽโœ…โœจ๐Ÿ‘‹๐Ÿ˜œ๐Ÿ’›โ˜บ๐Ÿ˜ถ๐Ÿ‘‹๐Ÿธ๐Ÿคฉ๐ŸŒ”๐Ÿ™Œโœ‹๐Ÿคคโญ๐Ÿ‘โ˜นโšก|`0x2a0f713aA953442EacA9EA47083f656170e67BA4`| |๐Ÿ”ฅ๐Ÿคฌ๐ŸŒ”๐Ÿ˜๐Ÿ˜ž๐Ÿ™„๐Ÿ‘Œ๐Ÿ’ข๐Ÿ—ฃ๐ŸŒโœจ๐Ÿ˜™๐Ÿพ๐Ÿ˜ก๐Ÿ˜‘๐Ÿค˜๐Ÿ’ธ๐Ÿ˜‚๐Ÿ˜ค๐Ÿ”ต|`0x23B608675a2B2fB1890d3ABBd85c5775c51691d5`| |๐Ÿ—ฃ๐Ÿ˜…๐Ÿ˜žโœจ๐Ÿคท๐Ÿ˜†๐ŸŒŸ๐Ÿท๐ŸŒท๐Ÿ‘ถโ˜๐Ÿช๐Ÿฅ€๐Ÿ–ฅ๐ŸคŸ๐Ÿ‰๐Ÿ’€๐Ÿ’ช๐Ÿ˜โ„|`0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e7`| |๐Ÿฅด๐Ÿ˜†๐Ÿ˜ฐโœŒ๐ŸคŸ๐Ÿ”ฅ๐Ÿ“ฃ๐ŸŽต๐ŸŒ–๐ŸŒ๐Ÿ˜ก๐ŸŽถ๐Ÿ’™๐Ÿธ๐Ÿ’๐ŸŒ”๐Ÿ˜ฑ๐Ÿค˜๐Ÿ€โžก|`0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2`| |โ–ถ๐ŸŒป๐Ÿ˜ฅ๐Ÿ‘๐Ÿ’˜๐Ÿ˜›๐Ÿ’๐Ÿ’จโ„๐Ÿ’ธ๐Ÿ˜‚๐Ÿ˜ช๐Ÿ˜๐Ÿคค๐Ÿธ๐Ÿ’ป๐Ÿ˜Ÿโ˜๐Ÿƒ๐Ÿฅบ|`0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72`| ## Reference Implementation ```python3 to_emoji = [ '๐Ÿš€', '๐Ÿช', 'โ˜„', '๐Ÿ›ฐ', '๐ŸŒŒ', '๐ŸŒ‘', '๐ŸŒ’', '๐ŸŒ“', '๐ŸŒ”', '๐ŸŒ•', '๐ŸŒ–', '๐ŸŒ—', '๐ŸŒ˜', '๐ŸŒ', '๐ŸŒ', '๐ŸŒŽ', '๐Ÿ‰', 'โ˜€', '๐Ÿ’ป', '๐Ÿ–ฅ', '๐Ÿ’พ', '๐Ÿ’ฟ', '๐Ÿ˜‚', 'โค', '๐Ÿ˜', '๐Ÿคฃ', '๐Ÿ˜Š', '๐Ÿ™', '๐Ÿ’•', '๐Ÿ˜ญ', '๐Ÿ˜˜', '๐Ÿ‘', '๐Ÿ˜…', '๐Ÿ‘', '๐Ÿ˜', '๐Ÿ”ฅ', '๐Ÿฅฐ', '๐Ÿ’”', '๐Ÿ’–', '๐Ÿ’™', '๐Ÿ˜ข', '๐Ÿค”', '๐Ÿ˜†', '๐Ÿ™„', '๐Ÿ’ช', '๐Ÿ˜‰', 'โ˜บ', '๐Ÿ‘Œ', '๐Ÿค—', '๐Ÿ’œ', '๐Ÿ˜”', '๐Ÿ˜Ž', '๐Ÿ˜‡', '๐ŸŒน', '๐Ÿคฆ', '๐ŸŽ‰', '๐Ÿ’ž', 'โœŒ', 'โœจ', '๐Ÿคท', '๐Ÿ˜ฑ', '๐Ÿ˜Œ', '๐ŸŒธ', '๐Ÿ™Œ', '๐Ÿ˜‹', '๐Ÿ’—', '๐Ÿ’š', '๐Ÿ˜', '๐Ÿ’›', '๐Ÿ™‚', '๐Ÿ’“', '๐Ÿคฉ', '๐Ÿ˜„', '๐Ÿ˜€', '๐Ÿ–ค', '๐Ÿ˜ƒ', '๐Ÿ’ฏ', '๐Ÿ™ˆ', '๐Ÿ‘‡', '๐ŸŽถ', '๐Ÿ˜’', '๐Ÿคญ', 'โฃ', '๐Ÿ˜œ', '๐Ÿ’‹', '๐Ÿ‘€', '๐Ÿ˜ช', '๐Ÿ˜‘', '๐Ÿ’ฅ', '๐Ÿ™‹', '๐Ÿ˜ž', '๐Ÿ˜ฉ', '๐Ÿ˜ก', '๐Ÿคช', '๐Ÿ‘Š', '๐Ÿฅณ', '๐Ÿ˜ฅ', '๐Ÿคค', '๐Ÿ‘‰', '๐Ÿ’ƒ', '๐Ÿ˜ณ', 'โœ‹', '๐Ÿ˜š', '๐Ÿ˜', '๐Ÿ˜ด', '๐ŸŒŸ', '๐Ÿ˜ฌ', '๐Ÿ™ƒ', '๐Ÿ€', '๐ŸŒท', '๐Ÿ˜ป', '๐Ÿ˜“', 'โญ', 'โœ…', '๐Ÿฅบ', '๐ŸŒˆ', '๐Ÿ˜ˆ', '๐Ÿค˜', '๐Ÿ’ฆ', 'โœ”', '๐Ÿ˜ฃ', '๐Ÿƒ', '๐Ÿ’', 'โ˜น', '๐ŸŽŠ', '๐Ÿ’˜', '๐Ÿ˜ ', 'โ˜', '๐Ÿ˜•', '๐ŸŒบ', '๐ŸŽ‚', '๐ŸŒป', '๐Ÿ˜', '๐Ÿ–•', '๐Ÿ’', '๐Ÿ™Š', '๐Ÿ˜น', '๐Ÿ—ฃ', '๐Ÿ’ซ', '๐Ÿ’€', '๐Ÿ‘‘', '๐ŸŽต', '๐Ÿคž', '๐Ÿ˜›', '๐Ÿ”ด', '๐Ÿ˜ค', '๐ŸŒผ', '๐Ÿ˜ซ', 'โšฝ', '๐Ÿค™', 'โ˜•', '๐Ÿ†', '๐Ÿคซ', '๐Ÿ‘ˆ', '๐Ÿ˜ฎ', '๐Ÿ™†', '๐Ÿป', '๐Ÿƒ', '๐Ÿถ', '๐Ÿ’', '๐Ÿ˜ฒ', '๐ŸŒฟ', '๐Ÿงก', '๐ŸŽ', 'โšก', '๐ŸŒž', '๐ŸŽˆ', 'โŒ', 'โœŠ', '๐Ÿ‘‹', '๐Ÿ˜ฐ', '๐Ÿคจ', '๐Ÿ˜ถ', '๐Ÿค', '๐Ÿšถ', '๐Ÿ’ฐ', '๐Ÿ“', '๐Ÿ’ข', '๐ŸคŸ', '๐Ÿ™', '๐Ÿšจ', '๐Ÿ’จ', '๐Ÿคฌ', 'โœˆ', '๐ŸŽ€', '๐Ÿบ', '๐Ÿค“', '๐Ÿ˜™', '๐Ÿ’Ÿ', '๐ŸŒฑ', '๐Ÿ˜–', '๐Ÿ‘ถ', '๐Ÿฅด', 'โ–ถ', 'โžก', 'โ“', '๐Ÿ’Ž', '๐Ÿ’ธ', 'โฌ‡', '๐Ÿ˜จ', '๐ŸŒš', '๐Ÿฆ‹', '๐Ÿ˜ท', '๐Ÿ•บ', 'โš ', '๐Ÿ™…', '๐Ÿ˜Ÿ', '๐Ÿ˜ต', '๐Ÿ‘Ž', '๐Ÿคฒ', '๐Ÿค ', '๐Ÿคง', '๐Ÿ“Œ', '๐Ÿ”ต', '๐Ÿ’…', '๐Ÿง', '๐Ÿพ', '๐Ÿ’', '๐Ÿ˜—', '๐Ÿค‘', '๐ŸŒŠ', '๐Ÿคฏ', '๐Ÿท', 'โ˜Ž', '๐Ÿ’ง', '๐Ÿ˜ฏ', '๐Ÿ’†', '๐Ÿ‘†', '๐ŸŽค', '๐Ÿ™‡', '๐Ÿ‘', 'โ„', '๐ŸŒด', '๐Ÿ’ฃ', '๐Ÿธ', '๐Ÿ’Œ', '๐Ÿ“', '๐Ÿฅ€', '๐Ÿคข', '๐Ÿ‘…', '๐Ÿ’ก', '๐Ÿ’ฉ', '๐Ÿ‘', '๐Ÿ“ธ', '๐Ÿ‘ป', '๐Ÿค', '๐Ÿคฎ', '๐ŸŽผ', '๐Ÿฅต', '๐Ÿšฉ', '๐ŸŽ', '๐ŸŠ', '๐Ÿ‘ผ', '๐Ÿ’', '๐Ÿ“ฃ', '๐Ÿฅ‚' ] from_emoji = {emoji: "{0:02x}".format(i) for i, emoji in enumerate(to_emoji)} def encode_address(hexadecimal_address): if len(hexadecimal_address) != 42 or not hexadecimal_address.startswith('0x'): return None return ''.join([to_emoji[int(hexadecimal_address[i:i+2], 16)] for i in range(2, 42, 2)]) def decode_address(emoji_address): # In python, these unicode characters all have a len() of 1 if len(emoji_address) != 20: return None try: return '0x' + ''.join(from_emoji[emoji] for emoji in emoji_address) except IndexError: return None ``` ## Security Considerations With the base256emoji encoding, addresses use half as many characters. The characters used are more distinguishable. This squares the difficulty of generating similar addresses, making address spoofing impractical. ## Copyright Copyright and related rights waived via [CC0](../LICENSE.md).