Skip to main content
Base58 is a binary-to-text encoding scheme that is commonly used in Bitcoin and Solana. It uses an alphabet of 58 characters, which is the same as the Base64 encoding scheme, but omits the characters 0, O, I, and l to avoid confusion between similar-looking letters and numbers. You can use the from_base58 function to convert a Base58-encoded string to a VARBINARY value. For example, the following query converts the Base58-encoded string 3DZBMRwnSU8f to a VARBINARY value:
Now that we are able to convert Base58-encoded strings to VARBINARY values, we can use the bytearray_to_bigint function to convert the VARBINARY value to a BIGINT value. However, we need to consider more things:
  1. The decoded VARBINARY value does not only contain the data we want to convert to a BIGINT value. It also contains a discriminator that indicates which function of a solana program was called. We need to remove this discriminator before we can convert the VARBINARY value to a BIGINT value. We do this by using the bytearray_substring function.
  2. Solana uses little-endian byte order, so we need to reverse the byte order before we can convert the VARBINARY value to a BIGINT value. We do this by using the bytearray_reverse function.
In a real-world scenario, here is how you would use these functions to decode a Base58-encoded string that represents a token amount in a Solana swap transaction:
→ Query in Dune

Functions

from_base58()

from_base58(varchar)varbinary Converts a Base58-encoded string to a VARBINARY value.

to_base58()

to_base58(varbinary)varchar Converts a VARBINARY value to a Base58-encoded string.