Skip to main content

ICAN

CIP-100Category: CBCTag: FINAL4 min read

We are introducing a standard for crypto addresses — ICAN — with HRP and checksum, similar to what we are all using for current financial transactions. ICAN stands for International Crypto Account Number. Only hexadecimal characters are used to minimize the size of the address in the Blockchain storage.

Abstract

The ICAN facilitates the communication and processing of the transactions. It allows exchanging account identification details in a machine-readable form.

Motivation

Find reliable and financially friendly Blockchain addresses for the community. Easy to understand and easy to interpret, but still compatible with modern financial solutions. The checksum is applied in this structure to ensure minimum risk of mistyping the address. ICAN based on the financial standards that people are using already to simplify the matter for them.

Specification

Crypto Address consists of:

  1. Crypto Identifier - CID (HRP)
  2. Checksum
  3. BCAN - Account address (Hexadecimal)

Crypto Identifier (CID)

The Crypto Identifier (human-readable part) uniquely identifies the network. This part must contain 2 Hexadecimal characters. Currently unassigned and deleted ISO 3166-1 alpha-2 codes are available.

Checksum

2 digits are calculated with modulo 97 from BCAN.

Why did we choose modulo 97 (IBAN format)?

  1. This gives us the possibility to detect ~99% of mistakes.
  2. Easy to process/calculate.
  3. Well known by financial institutions.

Calculation steps:

  1. Replace letters with numbers
  2. Calculate the remainder of the Account number when divided by 97
  3. Subtract the result from 98
  4. If one number is returned, prefix it with "0"

BCAN

BBCAN (Basic Crypto Account Number) uniquely identifies the address and/or identity owner. 40 characters (20 bytes) of Blockchain address.

Network classification

ISO 3166-1 alpha-2 codes

CIDNetworkNetwork id
cbmainnet1
abtestnet3,4
ceprivatenet>10

Tickers

Tickers are composed of CID prefixed with the "X" character. They can be suffixed with assets running on the network.

This is a technical recommendation. From the perspective of marketing and usability the asset can be used w/o prefix and network.

Example:

XCB XABTKN XCBCTN

Address structure

SymbolExplanation
nDigits (numeric characters 0 to 9 only).
aUpper case letters (alphabetic characters A-Z only).
cUpper and lower case alphanumeric characters (A-Z, a-z, and 0-9).
hHexadecimal characters (A-F, a-f, 0-9).
eBlank space.
kCheck digits.
nn!Fixed length.
nnMaximum length.

Format

hh!kk!hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh!

Human and machine representation

Human representation has all letters uppercase and each group of 4 characters is divided into spaces. The machine address is composed without any spaces.

Human address example:

AB18 AB12 CD45 EF78 0369 0101 ABAB FFFF 0000 1234 5678

Machine address example:

AB18AB12CD45EF7803690101ABABFFFF000012345678 ab18ab12cd45ef7803690101ababffff000012345678

Note: With QR codes, capital letters in Alphanumeric mode are a must.

Conversion table

0123456789ABCDEF
0123456789101112131415

Rationale

We use hexadecimal characters to minimize the size of the addresses in Blockchain. The first part — CID — reflects the type of the network to avoid misunderstanding of the type of address. We choose two digits checksum because it is already in use and it is easier to interpret while delivering the address in several cases. The third part showcases the last 40 characters (20 bytes) of the public key.

Implementation

Validators:

Security Considerations

40 characters (20 bytes) of Blockchain address.

Why 20 bytes?

  1. Heuristic aimed to simplify the management of the key; that is, copy and pasting, checksums, or confirmations over the phone in large transfers.
  2. Pre-empting security mechanism. Hashing functions are broken every other decade or so, hence cutting the full public key is a great extra layer of defense.

Copyright and related rights waived via CC0.