Skip to content

TIP-101: Succinct canonical token names #87

@nullchinchilla

Description

@nullchinchilla
TIP 101
Category Notational standards (1xx)
Author Eric Tung eric@themelio.org

Summary

Right now, other than the built-in tokens SYM, MEL, and ERG, all other tokens don't have canonical "ticker symbols". This TIP strives to provide a notation for succinctly referring to custom tokens in an unambiguous, verifiable way.

Motivation

There is no way right now to unambiguously refer to a custom token, except by a long and unwieldy 256-bit hash. This may not seem such a big problem --- Ethereum AFAIK has the same issue, and in practice people will assign "conventional" names to popular custom tokens.

The problem here is really security: given two tokens, both with big hash blobs as their token names, which one is the "real", say, WETH? A solution to this is human-readable canonical token names that are unique to each token, looking something like X-ROSVAGKUBBIG instead of 9f6579e66c18b661fb51b08e1011d30ad1f8d7324a82b59525597e094ec9d9f9

Proposed changes

We define a new pronounceable encoding of any nonnegative integer. We define a set of syllables, consisting of all syllables of the form CV or CVC, where

  • C is one of the following consonants: "p", "t", "k", "b", "d", "g", "f", "s", "h", "v", "z", "r", "l", "w", "y", "c", "q",
  • V is one of the following vowels: "a", "e", "i", "o", "u"

We then assign a number to each of these syllables by their index when sorted alphabetically. Then, the pronounceable encoding of an integer is just a little-endian encoding where the "digits" are syllables from this list.

To produce the succinct encoding of a custom token, we follow these steps:

  • Let height and index be the location where the transaction that created the custom token was confirmed. For example, if the token-creating transaction is the 3rd transaction (i.e., the transaction with the third-smallest nosig hash) at block 100000, then height = 100000, index = 3.
  • Compute unique_number = pi(height, index) using the (Cantor pairing function)[https://en.m.wikipedia.org/wiki/Pairing_function], which gives a unique integer that encodes a pair of integers.
  • Then, the custom token name is X- appended to the pronounceable encoding of unique_number.

For example, a token made by the 3rd transaction of 100000 would have name X-ZOCDAKKOSBAB

Deployment

TBD

Metadata

Metadata

Assignees

No one assigned

    Labels

    TIPThemelio Improvement Proposal

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions