ICAN
We are introducing a standard for assets 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:
- Crypto Identifier - CID (HRP)
- Checksum
- 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)?
- This gives us the possibility to detect ~99% of mistakes.
- Easy to process/calculate.
- Well known by financial institutions.
Calculation steps:
- Replace letters with numbers
- Calculate the remainder of the Account number when divided by 97
- Subtract the result from 98
- If one number is returned, prefix it with "0"
BCAN
BCAN (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
CID | Network | Network id |
---|---|---|
cb | mainnet | 1 |
ab | testnet | 3,4 |
ce | enterprise | >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 without prefix and network.
Example:
XCB
XABTKN
XCBCTN
Address structure
Symbol | Explanation |
---|---|
n | Digits (numeric characters 0 to 9 only). |
a | Upper case letters (alphabetic characters A-Z only). |
c | Upper and lower case alphanumeric characters (A-Z, a-z, and 0-9). |
h | Hexadecimal characters (A-F, a-f, 0-9). |
e | Blank space. |
k | Check digits. |
nn! | Fixed length. |
nn | Maximum 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
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 | 10 | 11 | 12 | 13 | 14 | 15 |
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:
- Golang — go-ican
- JavaScript — ican.js
- Bash - ican-validate.sh
- .Net — IcanNet