kipcole9 / digital_token

Elixir integration for ISO 24165 Digital Tokens through the DTIF registry data
Other
8 stars 2 forks source link

Digital Token

ISO 24165 introduces a common language for digital currencies. Up until now, digital currencies ("crypto") have been an uncomfortable fit into the world of currencies which are governed by ISO 4217.

ISO 4217 does allow for private use currencies, however in common use several crypto currencies use unnoficial ISO 4217 codes that clash with the standard.

The introduction of ISO 24165 (and is relationship to ISO 20022) creates a framework for the identification and standardisation of digital tokens.

In addition, the Digital Token Identification Foundation (DTIF) has been formed to operate a registry of tokens with downloadable data making it easy to access and integrate the data into applications.

This library provides a means to download and access the digital token registry. One application is the upcoming integration of digital_token into ex_money providing money operations on both ISO 4217 currencies and ISO 24165 digital tokens.

Digital Token Identifier Format

The basic number is eight characters (alphanumeric) in length but excludes vowels (A, E, I, O, U) and the letter Y, and zero shall not be the first character. A ninth character is added and is calculated as a checksum.

Non-ISO 4217 cryptocurrency codes

The following are examples of commonly-used but non-compliant ISO 4217 currency codes. This, plus the inherent flux in the number of digital currencies gave rise to ISO 24165.

Unofficial code Digits Currency Notes
ADA 6 Ada ADA conflicts with ISO 4217, because AD stands for Andorra.
BNB 8 Binance BNB BNB conflicts with ISO 4217, because BN stands for Brunei Darussalam.
BSV 8 Bitcoin SV BSV conflicts with ISO 4217, because BS stands for Bahamas.
BTC, XBT 8 Bitcoin XBT conflicts with ISO 4217, because BT stands for Bhutan.
DASH 8 Dash DASH is of non-standard length.
DOGE 4 Dogecoin DOGE is of non-standard length.
ETH 18 Ethereum ETH conflicts with ISO 4217, because ET stands for Ethiopia.
LTC 8 Litecoin LTC conflicts with ISO 4217, because LT stands for Lithuania.

Installation

The package can be installed by adding digital_token to your list of dependencies in mix.exs:

def deps do
  [
    {:digital_token, "~> 0.2.0"}
  ]
end

The docs can be found at https://hexdocs.pm/digital_token.

Configuration

DigitalToken requires that a JSON library be configuration that provides a decode!/1 function. Common libraries sucn as poison, jason and jsonrs are good examples.

A JSON library can be configured on config.exs like this:

config :digital_token,
  json_library: Jason

Note that the configuration parameter is the module upon which the decode!/1 function is available.

If no configuration is set, DigitalToken will attempt to use Jason, Poison, the JSON library configuration for ecto or the JSON library configured for Phoenix.