主页EIPs周刊
EIPsERC-7673
ERC-7673

Distinguishable base256emoji Addresses

Depict Account Addresses As A String of Emoji
DraftStandards Track: ERC
创建时间: 2024-04-01
William Morriss (@wjmelements)
社区讨论原文链接编辑
1 分钟了解
欢迎补充好内容
去提交
相关视频
欢迎补充好内容
去提交
正文

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

EmojiUnicode codepointByte Value
🚀U+1F6800
🪐U+1FA901
U+26042
🛰U+1F6F03
🌌U+1F30C4
🌑U+1F3115
🌒U+1F3126
🌓U+1F3137
🌔U+1F3148
🌕U+1F3159
🌖U+1F31610
🌗U+1F31711
🌘U+1F31812
🌍U+1F30D13
🌏U+1F30F14
🌎U+1F30E15
🐉U+1F40916
U+260017
💻U+1F4BB18
🖥U+1F5A519
💾U+1F4BE20
💿U+1F4BF21
😂U+1F60222
U+276423
😍U+1F60D24
🤣U+1F92325
😊U+1F60A26
🙏U+1F64F27
💕U+1F49528
😭U+1F62D29
😘U+1F61830
👍U+1F44D31
😅U+1F60532
👏U+1F44F33
😁U+1F60134
🔥U+1F52535
🥰U+1F97036
💔U+1F49437
💖U+1F49638
💙U+1F49939
😢U+1F62240
🤔U+1F91441
😆U+1F60642
🙄U+1F64443
💪U+1F4AA44
😉U+1F60945
U+263A46
👌U+1F44C47
🤗U+1F91748
💜U+1F49C49
😔U+1F61450
😎U+1F60E51
😇U+1F60752
🌹U+1F33953
🤦U+1F92654
🎉U+1F38955
💞U+1F49E56
U+270C57
U+272858
🤷U+1F93759
😱U+1F63160
😌U+1F60C61
🌸U+1F33862
🙌U+1F64C63
😋U+1F60B64
💗U+1F49765
💚U+1F49A66
😏U+1F60F67
💛U+1F49B68
🙂U+1F64269
💓U+1F49370
🤩U+1F92971
😄U+1F60472
😀U+1F60073
🖤U+1F5A474
😃U+1F60375
💯U+1F4AF76
🙈U+1F64877
👇U+1F44778
🎶U+1F3B679
😒U+1F61280
🤭U+1F92D81
U+276382
😜U+1F61C83
💋U+1F48B84
👀U+1F44085
😪U+1F62A86
😑U+1F61187
💥U+1F4A588
🙋U+1F64B89
😞U+1F61E90
😩U+1F62991
😡U+1F62192
🤪U+1F92A93
👊U+1F44A94
🥳U+1F97395
😥U+1F62596
🤤U+1F92497
👉U+1F44998
💃U+1F48399
😳U+1F633100
U+270B101
😚U+1F61A102
😝U+1F61D103
😴U+1F634104
🌟U+1F31F105
😬U+1F62C106
🙃U+1F643107
🍀U+1F340108
🌷U+1F337109
😻U+1F63B110
😓U+1F613111
U+2B50112
U+2705113
🥺U+1F97A114
🌈U+1F308115
😈U+1F608116
🤘U+1F918117
💦U+1F4A6118
U+2714119
😣U+1F623120
🏃U+1F3C3121
💐U+1F490122
U+2639123
🎊U+1F38A124
💘U+1F498125
😠U+1F620126
U+261D127
😕U+1F615128
🌺U+1F33A129
🎂U+1F382130
🌻U+1F33B131
😐U+1F610132
🖕U+1F595133
💝U+1F49D134
🙊U+1F64A135
😹U+1F639136
🗣U+1F5E3137
💫U+1F4AB138
💀U+1F480139
👑U+1F451140
🎵U+1F3B5141
🤞U+1F91E142
😛U+1F61B143
🔴U+1F534144
😤U+1F624145
🌼U+1F33C146
😫U+1F62B147
U+26BD148
🤙U+1F919149
U+2615150
🏆U+1F3C6151
🤫U+1F92B152
👈U+1F448153
😮U+1F62E154
🙆U+1F646155
🍻U+1F37B156
🍃U+1F343157
🐶U+1F436158
💁U+1F481159
😲U+1F632160
🌿U+1F33F161
🧡U+1F9E1162
🎁U+1F381163
U+26A1164
🌞U+1F31E165
🎈U+1F388166
U+274C167
U+270A168
👋U+1F44B169
😰U+1F630170
🤨U+1F928171
😶U+1F636172
🤝U+1F91D173
🚶U+1F6B6174
💰U+1F4B0175
🍓U+1F353176
💢U+1F4A2177
🤟U+1F91F178
🙁U+1F641179
🚨U+1F6A8180
💨U+1F4A8181
🤬U+1F92C182
U+2708183
🎀U+1F380184
🍺U+1F37A185
🤓U+1F913186
😙U+1F619187
💟U+1F49F188
🌱U+1F331189
😖U+1F616190
👶U+1F476191
🥴U+1F974192
U+25B6193
U+27A1194
U+2753195
💎U+1F48E196
💸U+1F4B8197
U+2B07198
😨U+1F628199
🌚U+1F31A200
🦋U+1F98B201
😷U+1F637202
🕺U+1F57A203
U+26A0204
🙅U+1F645205
😟U+1F61F206
😵U+1F635207
👎U+1F44E208
🤲U+1F932209
🤠U+1F920210
🤧U+1F927211
📌U+1F4CC212
🔵U+1F535213
💅U+1F485214
🧐U+1F9D0215
🐾U+1F43E216
🍒U+1F352217
😗U+1F617218
🤑U+1F911219
🌊U+1F30A220
🤯U+1F92F221
🐷U+1F437222
U+260E223
💧U+1F4A7224
😯U+1F62F225
💆U+1F486226
👆U+1F446227
🎤U+1F3A4228
🙇U+1F647229
🍑U+1F351230
U+2744231
🌴U+1F334232
💣U+1F4A3233
🐸U+1F438234
💌U+1F48C235
📍U+1F4CD236
🥀U+1F940237
🤢U+1F922238
👅U+1F445239
💡U+1F4A1240
💩U+1F4A9241
👐U+1F450242
📸U+1F4F8243
👻U+1F47B244
🤐U+1F910245
🤮U+1F92E246
🎼U+1F3BC247
🥵U+1F975248
🚩U+1F6A9249
🍎U+1F34E250
🍊U+1F34A251
👼U+1F47C252
💍U+1F48D253
📣U+1F4E3254
🥂U+1F942255

Rationale

Previous attempts to reduce spoofing and other copy errors such as ERC-55 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

base256emojiERC-55
🚀🚀🚀🚀🚀🚀😀💓🥴💣👻🙌🙈🤢😥☹🌏💩🍎💕0x0000000000004946c0e9F43F4Dee607b0eF1fA1c
🚀🚀🚀🚀🚀🚀💸🎊💡🌿🚩🔥📌🙂💙❄🛰💩🤝⭐0x000000000000c57CF0A1f923d44527e703F1ad70
☀☀☀☀☀❤🌊🌖❌💀✔🌎🎈❌💞🛰💗😅❓☄0x111111111117dC0aa78b770fA6A738034120C302
👍🤫😋✊🤪😞🤐👶😭❤👉🚩💔🌱🤝🌊💚🪐🚩😐0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984
😆🌎✅✨👋😜💛☺😶👋🐸🤩🌔🙌✋🤤⭐🍑☹⚡0x2a0f713aA953442EacA9EA47083f656170e67BA4
🔥🤬🌔😝😞🙄👌💢🗣🌍✨😙🐾😡😑🤘💸😂😤🔵0x23B608675a2B2fB1890d3ABBd85c5775c51691d5
🗣😅😞✨🤷😆🌟🐷🌷👶☝🪐🥀🖥🤟🐉💀💪😏❄0x89205A3A3b2A69De6Dbf7f01ED13B2108B2c43e7
🥴😆😰✌🤟🔥📣🎵🌖🌏😡🎶💙🐸🍒🌔😱🤘🍀➡0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
▶🌻😥👏💘😛💐💨❄💸😂😪😝🤤🐸💻😟☝🍃🥺0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72

Reference Implementation

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 and related rights waived via CC0.

扩展阅读
欢迎补充好内容
去提交
相关项目
欢迎补充好内容
去提交

不想错过最新的 EIP 动态?

订阅 EIPs Fun 周刊以跟进相关更新,建⽴你与 EIP 之间的连接 ,更好地建设以太坊。

详情
支持以太坊贡献者,推动生态建设
资源
GitHub
支持社区