49. Base-58 Function in Cryptocurrencies
We owe a lot to Satoshi Nakamoto, the creator of Bitcoin. He boasts many achievements, apart from the blockchain. Base-58 is another one of them. What is it actually about? In today’s lesson we will explore the topic.
Base-58 – Definition
Base-58 is a group of binary-to-text encoding schemes. It is used to represent large integers as alphanumeric text. The coding systems that existed in Satoshi’s time were not suitable for his work. Therefore, to make it easier for himself, Nakamoto came up with such an innovation.
Satoshi Nakamoto wanted the option to convert frequent Bitcoin elements, such as private keys and addresses, into a format that is easy to share and use. His example, in fact—Bitcoin’s example—has been followed by many cryptocurrencies, which also utilize Base-58 encoding in their operations, particularly to simplify transactions. The use of this technology has found its place in everything from master key passwords to Ripple addresses and short URLs.
How Does Base-58 Work?
The term ‘Base’ refers to the number of characters used to represent a number. Therefore:
- Base-2: The binary system we are familiar with, using two characters: 0 and 1.
- Base-10: It represents numbers using 10 characters from 0 to 9.
- Base-16: Better known as hexadecimal, it uses 16 characters: 0123456789abcdef.
- Base-58, similarly, uses 58 characters. In its operation, it uses all alphanumeric characters (0-9, a-z, A-Z) except for the easily confused characters. Base-58 does not include zeros, uppercase i (I) and o (O), lowercase l, and + and / symbols. The purpose of Base-58 is to represent large numbers in a short format, while avoiding easily misinterpreted characters.
Numbers encoded in Base-58 are approximately 56.7% the size of their decimal counterparts. Eliminating visually similar characters reduces the chance of human error—whether in transcribing or reading.
As mentioned earlier, Base-58 has found its way into numerous contexts. Apart from its use in blockchain technology and cryptocurrencies, it is also employed as a compact method for encoding path or file name data in various applications.
Base-58 and Cryptocurrencies
There are many variations of Base-58 that are in use. The simplest ones simply alter the alphabet (this usually involves changing the order of the letters). A notable example is Ripple; in its code it uses characters that appear almost random. In fact, they were chosen so that the first characters of important sequences always share a common, significant letter.
Monero encodes long sequences into short, 8-byte blocks. The data has a deterministic size. The Monero address itself is 69 bytes long. Thanks to the use of block coding and padding scheme, 69-byte Monero addresses will consistently be represented as 95 characters when encoded.
Checksums play a crucial role in Base-58 encoding. There are three distinct schemes used for checksums. Bitcoin introduced Base58Check, which enables the addition of a prefix to the data. In practice, this prefix is a single byte, although it is not a technical requirement. The combined prefix and data are then hashed using SHA256. The resulting hash is processed through SHA256 again. Finally, the first four characters are utilized as a checksum.
Avalanche has introduced a simpler version of Base58Check. It eliminates the second pass through SHA256.
Another example would be the Substrate SDK for Polkadot, which introduces SS58. This is an address format with an implied checksum algorithm based on Base58Check, but with a few important differences. Instead of using SHA2, it uses Blake2 for the cryptographic hash function.
You must remember that the size of the checksum can vary from one to eight bytes. All depending on the address format used. The main challenge in implementing the Base-58 library lies in the fact that a significant portion of the coding process revolves around performing basic mathematical operations on very large numbers.
Disadvantages of Base-58
Power bases are entered very quickly. The input text is a power of two numbers. When encoding text, it involves changing the base between base 256 and the new base. For base 64, we can do this using bit shifting and masking. With base 58, however, we have to use division, which makes the process very slow. The Base-58 encoding scheme relies on long division to change the base. Therefore, this makes it useful only for small chunks of text, such as Bitcoin wallet addresses. For other, larger amounts of data, it is practically useless. Here’s why:
- Encoding is very slow.
- The encoding alone requires the implementation of a complex, base-changing converter.
- The code itself must include a library of high-precision integers.
- We may implement complex code manually, which further increases encoding time.
So Why Does Base-58 Make It Easier for Us to Use Bitcoin?
It converts the address source data into a readable format. For example, the ECDSA key is transformed into an easy-to-read Bitcoin address, which consists of 20 characters. Base-58 is also used in private keys in the WIF (Wallet Import Format) standard. Other cryptocurrencies also use this feature.
Despite its drawbacks, the Base-58 feature proves to be highly valuable and practical. Its applications extend beyond the cryptocurrency industry, encompassing various sectors dedicated to decentralized technology.