Skip to content

Latest commit

ย 

History

History
116 lines (80 loc) ยท 7.48 KB

File metadata and controls

116 lines (80 loc) ยท 7.48 KB

Bytemoji: Easy and quick digital object recognition using emojis

BCR-2024-008

ยฉ 2024 Blockchain Commons

Authors: Wolf McNally, Christopher Allen
Date: December 7, 2024

Introduction

Bytemoji is a curated set of 256 emojis that are chosen to be easily recognized and distinguished from each other, especially when used in combination. Bytemoji are intended to be used as a simple and quick way to visually identify objects in digital systems, for example, by converting a 32-bit hash (e.g., CRC-32 or truncated SHA-256) to its four corresponding Bytemojis.

Other ways to visually identify digital object include ByteWords, and LifeHash. Bytemoji combine the value of cryptographic hash visualization with easy display and handling as text.

Unlike ByteWords, Bytemoji are not intended to "round-trip" data between text and binary format, although this is technically possible.

Example

Each line below represents a combination of four bytes, represented as Bytemojis.

๐Ÿ’› ๐Ÿšฉ ๐Ÿฅ ๐Ÿซ 
๐Ÿงต ๐Ÿ’€ ๐ŸŽ‚ ๐Ÿ›Ÿ
๐Ÿ’ซ ๐Ÿค  ๐Ÿ‘† ๐Ÿ˜‚
๐Ÿช ๐Ÿ‘” ๐Ÿ‘š ๐Ÿ‘ป
๐Ÿงธ ๐Ÿฅš ๐Ÿง€ ๐Ÿ™€
๐Ÿ‘ƒ ๐Ÿ‘„ ๐Ÿฌ ๐Ÿง„
๐Ÿงฆ ๐ŸŒฝ ๐Ÿ  ๐Ÿฆ†
๐ŸŒ ๐ŸŒญ ๐Ÿฅบ ๐Ÿ›‘
๐Ÿฅ ๐Ÿฆž ๐ŸŒน ๐Ÿข
๐Ÿ˜ฝ ๐Ÿ˜ ๐Ÿบ ๐ŸŒ€

Clustering

Although Bytemoji are chosen partly for their visual distinctness, they are not intended to be individually identifiable. Bytemoji should never be displayed in isolation: they should always displayed in clusters of four or more to represent cryptographic hashes. In addition, they should be clustered with other indicators of the digital object's unique identity, such as hex codes, ByteWords, or a LifeHash.

This clustering ensures sufficient visual distinction and reduces the risk of ambiguity, even if individual emojis may share some similar features. In this example, the Bytemojis, the ByteWords, and the raw hex representation are shown together, under the user's chosen name of the object:

**My First Cryptographic Seed**

๐ŸŒŠ ๐Ÿ˜น ๐ŸŒฝ ๐Ÿž
JUGS DELI GIFT WHEN
71 27 4d f1

This mix of modalities further increases the likelihood of accurate recognition and decreases the risk of confusion. It is also useful for accessibility, as it provides multiple ways to present the information via assistive technologies.

See our previous work on the Object Identity Block (OIB) for more information on identifying digital objects.

Selection Criteria

The byte sequences that encode emojis can become quite long and complex:

  • Some emojis that render as a single glyph use several combining forms. For example, โ€œI am a witnessโ€ takes 17 UTF-8 bytes!

๐Ÿ‘๏ธโ€๐Ÿ—จ๏ธ

  • Some emojis are rendered as sequences of multiple glyphs, for example "family: man, woman, girl, boy with various skin tones" takes 28 UTF-8 bytes. Note that this is a single emoji!

๐Ÿ‘จ๐Ÿฟโ€๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ‘ง๐Ÿฝโ€๐Ÿ‘ฆ๐Ÿผ

So to keep things simple while still providing a wide range of visual objects, we selected a set of 256 emojis that:

  • All render as single glyphs.
  • All have code points that serialize as 3 or 4 UTF-8 bytes.

In addition, we used these other selection criteria:

  • All emojis are visually distinct, with maximally unique shapes and designs.
  • All emojis must render on a wide range of platforms.
  • Avoid emojis that are highly similar or could be easily confused.
  • Avoid emojis that depend solely on color differences to be distinguished.
  • Prefer emojis that read well at smaller sizes.
  • Ensure that contrast is good when displayed on light or dark backgrounds.
  • Exclude combining forms, skin tone modifiers, and gender modifiers.
  • Ensure the set covers a wide range of themes and concepts.
  • Prefer emojis with positive or neutral connotations.
  • Avoid national, ideological, and controversial symbols.

Bytemoji Table

0 1 2 3 4 5 6 7 8 9 A B C D E F
0 ๐Ÿ˜€ ๐Ÿ˜‚ ๐Ÿ˜† ๐Ÿ˜‰ ๐Ÿ™„ ๐Ÿ˜‹ ๐Ÿ˜Ž ๐Ÿ˜ ๐Ÿ˜˜ ๐Ÿ˜ญ ๐Ÿซ  ๐Ÿฅฑ ๐Ÿคฉ ๐Ÿ˜ถ ๐Ÿคจ ๐Ÿซฅ
1 ๐Ÿฅต ๐Ÿฅถ ๐Ÿ˜ณ ๐Ÿคช ๐Ÿ˜ต ๐Ÿ˜ก ๐Ÿคข ๐Ÿ˜‡ ๐Ÿค  ๐Ÿคก ๐Ÿฅณ ๐Ÿฅบ ๐Ÿ˜ฌ ๐Ÿค‘ ๐Ÿ™ƒ ๐Ÿคฏ
2 ๐Ÿ˜ˆ ๐Ÿ‘น ๐Ÿ‘บ ๐Ÿ’€ ๐Ÿ‘ป ๐Ÿ‘ฝ ๐Ÿ˜บ ๐Ÿ˜น ๐Ÿ˜ป ๐Ÿ˜ฝ ๐Ÿ™€ ๐Ÿ˜ฟ ๐Ÿซถ ๐Ÿคฒ ๐Ÿ™Œ ๐Ÿค
3 ๐Ÿ‘ ๐Ÿ‘Ž ๐Ÿ‘ˆ ๐Ÿ‘† ๐Ÿ’ช ๐Ÿ‘„ ๐Ÿฆท ๐Ÿ‘‚ ๐Ÿ‘ƒ ๐Ÿง  ๐Ÿ‘€ ๐Ÿคš ๐Ÿฆถ ๐ŸŽ ๐ŸŠ ๐Ÿ‹
4 ๐ŸŒ ๐Ÿ‰ ๐Ÿ‡ ๐Ÿ“ ๐Ÿซ ๐Ÿ’ ๐Ÿ‘ ๐Ÿ ๐Ÿฅ ๐Ÿ† ๐Ÿฅ‘ ๐Ÿฅฆ ๐Ÿ… ๐ŸŒฝ ๐Ÿฅ• ๐Ÿซ’
5 ๐Ÿง„ ๐Ÿฅ ๐Ÿฅฏ ๐Ÿž ๐Ÿง€ ๐Ÿฅš ๐Ÿ— ๐ŸŒญ ๐Ÿ” ๐ŸŸ ๐Ÿ• ๐ŸŒฎ ๐Ÿฅ™ ๐Ÿฑ ๐Ÿœ ๐Ÿค
6 ๐Ÿš ๐Ÿฅ  ๐Ÿจ ๐Ÿฆ ๐ŸŽ‚ ๐Ÿชด ๐ŸŒต ๐ŸŒฑ ๐Ÿ’ ๐Ÿ ๐Ÿ„ ๐ŸŒน ๐ŸŒบ ๐ŸŒผ ๐ŸŒป ๐ŸŒธ
7 ๐Ÿ’จ ๐ŸŒŠ ๐Ÿ’ง ๐Ÿ’ฆ ๐ŸŒ€ ๐ŸŒˆ ๐ŸŒž ๐ŸŒ ๐ŸŒ› ๐ŸŒœ ๐ŸŒ™ ๐ŸŒŽ ๐Ÿ’ซ โญ ๐Ÿช ๐ŸŒ
8 ๐Ÿ’› ๐Ÿ’” ๐Ÿ’˜ ๐Ÿ’– ๐Ÿ’• ๐Ÿ ๐Ÿšฉ ๐Ÿ’ฌ ๐Ÿ’ฏ ๐Ÿšซ ๐Ÿ”ด ๐Ÿ”ท ๐ŸŸฉ ๐Ÿ›‘ ๐Ÿ”บ ๐Ÿš—
9 ๐Ÿš‘ ๐Ÿš’ ๐Ÿšœ ๐Ÿ›ต ๐Ÿšจ ๐Ÿš€ ๐Ÿš ๐Ÿ›Ÿ ๐Ÿšฆ ๐Ÿฐ ๐ŸŽก ๐ŸŽข ๐ŸŽ  ๐Ÿ  ๐Ÿ”” ๐Ÿ”‘
A ๐Ÿšช ๐Ÿช‘ ๐ŸŽˆ ๐Ÿ’Œ ๐Ÿ“ฆ ๐Ÿ“ซ ๐Ÿ“– ๐Ÿ“š ๐Ÿ“Œ ๐Ÿงฎ ๐Ÿ”’ ๐Ÿ’Ž ๐Ÿ“ท โฐ โณ ๐Ÿ“ก
B ๐Ÿ’ก ๐Ÿ’ฐ ๐Ÿงฒ ๐Ÿงธ ๐ŸŽ ๐ŸŽ€ ๐ŸŽ‰ ๐Ÿชญ ๐Ÿ‘‘ ๐Ÿซ– ๐Ÿ”ญ ๐Ÿ› ๐Ÿ† ๐Ÿฅ ๐ŸŽท ๐ŸŽบ
C ๐Ÿ€ ๐Ÿˆ ๐ŸŽพ ๐Ÿ“ โœจ ๐Ÿ”ฅ ๐Ÿ’ฅ ๐Ÿ‘• ๐Ÿ‘š ๐Ÿ‘– ๐Ÿฉณ ๐Ÿ‘— ๐Ÿ‘” ๐Ÿงข ๐Ÿ‘“ ๐Ÿงถ
D ๐Ÿงต ๐Ÿ’ ๐Ÿ‘  ๐Ÿ‘Ÿ ๐Ÿงฆ ๐Ÿงค ๐Ÿ‘’ ๐Ÿ‘œ ๐Ÿฑ ๐Ÿถ ๐Ÿญ ๐Ÿน ๐Ÿฐ ๐ŸฆŠ ๐Ÿป ๐Ÿผ
E ๐Ÿจ ๐Ÿฏ ๐Ÿฆ ๐Ÿฎ ๐Ÿท ๐Ÿธ ๐Ÿต ๐Ÿ” ๐Ÿฅ ๐Ÿฆ† ๐Ÿฆ‰ ๐Ÿด ๐Ÿฆ„ ๐Ÿ ๐Ÿ› ๐Ÿฆ‹
F ๐ŸŒ ๐Ÿž ๐Ÿข ๐Ÿบ ๐Ÿ ๐Ÿชฝ ๐Ÿ™ ๐Ÿฆ‘ ๐Ÿชผ ๐Ÿฆž ๐Ÿฆ€ ๐Ÿš ๐Ÿฆญ ๐ŸŸ ๐Ÿฌ ๐Ÿณ

Reference Implementation

The current reference implementation is in the bc-ur Rust crate. The bc-ur crate is available on crates.io and GitHub.

Reference String

The following line contains all 256 Bytemojis in order, which may be used for testing and in further implementations:

๐Ÿ˜€๐Ÿ˜‚๐Ÿ˜†๐Ÿ˜‰๐Ÿ™„๐Ÿ˜‹๐Ÿ˜Ž๐Ÿ˜๐Ÿ˜˜๐Ÿ˜ญ๐Ÿซ ๐Ÿฅฑ๐Ÿคฉ๐Ÿ˜ถ๐Ÿคจ๐Ÿซฅ๐Ÿฅต๐Ÿฅถ๐Ÿ˜ณ๐Ÿคช๐Ÿ˜ต๐Ÿ˜ก๐Ÿคข๐Ÿ˜‡๐Ÿค ๐Ÿคก๐Ÿฅณ๐Ÿฅบ๐Ÿ˜ฌ๐Ÿค‘๐Ÿ™ƒ๐Ÿคฏ๐Ÿ˜ˆ๐Ÿ‘น๐Ÿ‘บ๐Ÿ’€๐Ÿ‘ป๐Ÿ‘ฝ๐Ÿ˜บ๐Ÿ˜น๐Ÿ˜ป๐Ÿ˜ฝ๐Ÿ™€๐Ÿ˜ฟ๐Ÿซถ๐Ÿคฒ๐Ÿ™Œ๐Ÿค๐Ÿ‘๐Ÿ‘Ž๐Ÿ‘ˆ๐Ÿ‘†๐Ÿ’ช๐Ÿ‘„๐Ÿฆท๐Ÿ‘‚๐Ÿ‘ƒ๐Ÿง ๐Ÿ‘€๐Ÿคš๐Ÿฆถ๐ŸŽ๐ŸŠ๐Ÿ‹๐ŸŒ๐Ÿ‰๐Ÿ‡๐Ÿ“๐Ÿซ๐Ÿ’๐Ÿ‘๐Ÿ๐Ÿฅ๐Ÿ†๐Ÿฅ‘๐Ÿฅฆ๐Ÿ…๐ŸŒฝ๐Ÿฅ•๐Ÿซ’๐Ÿง„๐Ÿฅ๐Ÿฅฏ๐Ÿž๐Ÿง€๐Ÿฅš๐Ÿ—๐ŸŒญ๐Ÿ”๐ŸŸ๐Ÿ•๐ŸŒฎ๐Ÿฅ™๐Ÿฑ๐Ÿœ๐Ÿค๐Ÿš๐Ÿฅ ๐Ÿจ๐Ÿฆ๐ŸŽ‚๐Ÿชด๐ŸŒต๐ŸŒฑ๐Ÿ’๐Ÿ๐Ÿ„๐ŸŒน๐ŸŒบ๐ŸŒผ๐ŸŒป๐ŸŒธ๐Ÿ’จ๐ŸŒŠ๐Ÿ’ง๐Ÿ’ฆ๐ŸŒ€๐ŸŒˆ๐ŸŒž๐ŸŒ๐ŸŒ›๐ŸŒœ๐ŸŒ™๐ŸŒŽ๐Ÿ’ซโญ๐Ÿช๐ŸŒ๐Ÿ’›๐Ÿ’”๐Ÿ’˜๐Ÿ’–๐Ÿ’•๐Ÿ๐Ÿšฉ๐Ÿ’ฌ๐Ÿ’ฏ๐Ÿšซ๐Ÿ”ด๐Ÿ”ท๐ŸŸฉ๐Ÿ›‘๐Ÿ”บ๐Ÿš—๐Ÿš‘๐Ÿš’๐Ÿšœ๐Ÿ›ต๐Ÿšจ๐Ÿš€๐Ÿš๐Ÿ›Ÿ๐Ÿšฆ๐Ÿฐ๐ŸŽก๐ŸŽข๐ŸŽ ๐Ÿ ๐Ÿ””๐Ÿ”‘๐Ÿšช๐Ÿช‘๐ŸŽˆ๐Ÿ’Œ๐Ÿ“ฆ๐Ÿ“ซ๐Ÿ“–๐Ÿ“š๐Ÿ“Œ๐Ÿงฎ๐Ÿ”’๐Ÿ’Ž๐Ÿ“ทโฐโณ๐Ÿ“ก๐Ÿ’ก๐Ÿ’ฐ๐Ÿงฒ๐Ÿงธ๐ŸŽ๐ŸŽ€๐ŸŽ‰๐Ÿชญ๐Ÿ‘‘๐Ÿซ–๐Ÿ”ญ๐Ÿ›๐Ÿ†๐Ÿฅ๐ŸŽท๐ŸŽบ๐Ÿ€๐Ÿˆ๐ŸŽพ๐Ÿ“โœจ๐Ÿ”ฅ๐Ÿ’ฅ๐Ÿ‘•๐Ÿ‘š๐Ÿ‘–๐Ÿฉณ๐Ÿ‘—๐Ÿ‘”๐Ÿงข๐Ÿ‘“๐Ÿงถ๐Ÿงต๐Ÿ’๐Ÿ‘ ๐Ÿ‘Ÿ๐Ÿงฆ๐Ÿงค๐Ÿ‘’๐Ÿ‘œ๐Ÿฑ๐Ÿถ๐Ÿญ๐Ÿน๐Ÿฐ๐ŸฆŠ๐Ÿป๐Ÿผ๐Ÿจ๐Ÿฏ๐Ÿฆ๐Ÿฎ๐Ÿท๐Ÿธ๐Ÿต๐Ÿ”๐Ÿฅ๐Ÿฆ†๐Ÿฆ‰๐Ÿด๐Ÿฆ„๐Ÿ๐Ÿ›๐Ÿฆ‹๐ŸŒ๐Ÿž๐Ÿข๐Ÿบ๐Ÿ๐Ÿชฝ๐Ÿ™๐Ÿฆ‘๐Ÿชผ๐Ÿฆž๐Ÿฆ€๐Ÿš๐Ÿฆญ๐ŸŸ๐Ÿฌ๐Ÿณ

Note on Emoji Rendering

The rendering of emojis can vary significantly between platforms. The Bytemoji set was chosen to be as platform-independent as possible and the entire set should be universally supported where emojis are supported, but some variation in appearance is to be expected.