Unchained system addresses are generated by deriving from the public key, which
is itself derived from the client's BLS private key, specifically within the G2
curve context. This setup is optimized for shorter signatures, with the trade-off
of utilizing longer public keys.
After deriving the public key from the private key, the address is generated by
first calculating the Shake256 hash of the public key, then taking the first 20
bytes of the hash, and finally encoding the result in Base32.
Two checksum bytes are appended to the address, which is calculated by taking
the first 2 bytes of the Shake256 hash of the address, calculating the modulo 32
of each byte, and then encoding the result in Base32.
The final address format is as follows:
block-beta columns 4 addr["FCB64Q7Y72N123NED23N0C0TEHHXZFSE"]:3 sum["8B"]:1 space:4 addrb["Address"]:3 sumb["Checksum"]:1 addr --> addrb sum --> sumb
Unchained Address Format
This address format is used for the Unchained system and is the default address
format for the client. The address is used to identify the client in the system
and is used for various purposes, such as signing transactions and verifying
signatures.
The address is case-insensitive, meaning that the same address can be written
in either uppercase or lowercase. The checksum is used to ensure that the address
is valid and has not been tampered with.
Unchained uses a custom Base32 encoding scheme for encoding public keys into addresses.
The custom Base32 encoding scheme is designed to be more human-readable and easier to
transcribe than the standard Base32 encoding scheme.
The custom Base32 encoding scheme uses the following character set:
As you can see, the custom Base32 encoding scheme excludes the letters "I", "L", and "O"
to avoid confusion with the numbers "1", and "0". It also drops the letter "W" to avoid
confusion with the letters "U" (double-U in English), and "V" (double-V in French).