ExBase58 (ex_base58 v0.6.5)

Base58 encoding and decoding.

Every function in this module accepts additonal optional parameter - alphabet. Default alphabet is :bitcoin.

It uses https://github.com/mycorrhiza/bs58-rs rust library

Summary

Functions

Decodes from Base58 format

Same as decode/2, but returns a string value instead of a tuple and raises if the alphabet is wrong

Decodes binary checking checksum using the Base58Check algorithm.

Same as decode_check/2, but returns a string value instead of a tuple and raises if the alphabet is wrong

Decodes binary checking checksum using the Base58Check algorithm. The version byte will be used in verification.

Same as decode_check_version/3, but returns a string value instead of a tuple and raises if the alphabet is wrong

Encodes binary into Base58 format.

Same as encode/2, but returns a string value instead of a tuple and raises if the alphabet is wrong

Encodes binary including checksum calculated using the Base58Check algorithm

Same as encode_check/2, but returns a string value instead of a tuple and raises if the alphabet is wrong

Encodes binary including checksum calculated using the Base58Check algorithm and version

Same as encode_check_version/3, but returns a string value instead of a tuple and raises if the alphabet is wrong

Types

alphabet()

@type alphabet() :: :bitcoin | :monero | :ripple | :flickr

Functions

decode(encoded, alphabet \\ :bitcoin)

@spec decode(String.t(), alphabet()) :: {:ok, binary()} | {:error, atom()}

Decodes from Base58 format

Examples

iex> ExBase58.decode("c4oi")
{:ok, "hey"}

iex> ExBase58.decode("Cn8eVZg")
{:ok, "hello"}

iex> ExBase58.decode("U83eVZg", :ripple)
{:ok, "hello"}

iex> ExBase58.decode("cM8DuyF", :flickr)
{:ok, "hello"}

iex> ExBase58.decode("Hello")
{:error, :decode_error}

iex> ExBase58.decode("cM8DuyF", :meow)
{:error, :invalid_alphabet}

iex> ExBase58.decode("2gsG")
{:ok, <<5, 6, 7>>}

decode!(encoded, alphabet \\ :bitcoin)

@spec decode!(String.t(), alphabet()) :: binary()

Same as decode/2, but returns a string value instead of a tuple and raises if the alphabet is wrong

Examples

iex> ExBase58.decode!("2gsG")
<<5, 6, 7>>

iex> ExBase58.decode!("cM8DuyF", :not_listed)
** (ArgumentError) Invalid alphabet

decode_check(binary, alphabet \\ :bitcoin)

@spec decode_check(binary(), alphabet()) :: {:ok, String.t()} | {:error, atom()}

Decodes binary checking checksum using the Base58Check algorithm.

Examples

iex> ExBase58.decode_check("GZVwCXwyKVRPTViubJDVKVhVvcaKpEnqR", :monero)
{:ok, <<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>}

iex> ExBase58.decode_check("GZVAUXAyKVRPTV5ubJDVKV6Vvc2KFN8qR", :ripple)
{:ok, <<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>}

decode_check!(binary, alphabet \\ :bitcoin)

@spec decode_check!(binary(), alphabet()) :: String.t()

Same as decode_check/2, but returns a string value instead of a tuple and raises if the alphabet is wrong

Examples

iex> ExBase58.decode_check!("GZVwCXwyKVRPTViubJDVKVhVvcaKpEnqR", :monero)
<<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>

iex> ExBase58.decode_check!("GZVwCXwyKVRPTViubJDVKVhVvcaKpEnqR", :not_listed)
** (ArgumentError) Invalid alphabet

decode_check_version(binary, version, alphabet \\ :bitcoin)

@spec decode_check_version(binary(), non_neg_integer(), alphabet()) ::
  {:ok, binary()} | {:error, atom()}

Decodes binary checking checksum using the Base58Check algorithm. The version byte will be used in verification.

Examples

iex> ExBase58.decode_check_version("1GZVwCXwyKVRPTViubJDVKVhVvcaEoX5cN", 0)
{:ok, <<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>}

iex> ExBase58.decode_check_version("mw5TEFcvnLvgAZyLdAGbKEi2MvDHF1HXJX", 111)
{:ok, <<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>}

iex> ExBase58.decode_check_version("mAnTNEcv8LvgwZyLdwGbKN5pMvDHErHXJX", 111, :ripple)
{:ok, <<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>}

decode_check_version!(binary, version, alphabet \\ :bitcoin)

@spec decode_check_version!(binary(), non_neg_integer(), alphabet()) :: binary()

Same as decode_check_version/3, but returns a string value instead of a tuple and raises if the alphabet is wrong

Examples

iex> ExBase58.decode_check_version!("1GZVwCXwyKVRPTViubJDVKVhVvcaEoX5cN", 0)
<<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>

iex> ExBase58.decode_check_version!("1GZVwCXwyKVRPTViubJDVKVhVvcaEoX5cN", 0, :not_listed)
** (ArgumentError) Invalid alphabet

encode(binary, alphabet \\ :bitcoin)

@spec encode(binary(), alphabet()) :: {:ok, String.t()} | {:error, atom()}

Encodes binary into Base58 format.

Examples

iex> ExBase58.encode("hello")
{:ok, "Cn8eVZg"}

iex> ExBase58.encode("hello", :monero)
{:ok, "Cn8eVZg"}

iex> ExBase58.encode("hello", :ripple)
{:ok, "U83eVZg"}

iex> ExBase58.encode("hello", :flickr)
{:ok, "cM8DuyF"}

iex> ExBase58.encode("hello", :meow)
{:error, :invalid_alphabet}

iex> ExBase58.encode(<<5, 6, 7>>)
{:ok, "2gsG"}

encode!(binary, alphabet \\ :bitcoin)

@spec encode!(binary(), alphabet()) :: String.t()

Same as encode/2, but returns a string value instead of a tuple and raises if the alphabet is wrong

Examples

iex> ExBase58.encode!("hello")
"Cn8eVZg"

iex> ExBase58.encode!("hello", :not_listed)
** (ArgumentError) Invalid alphabet

encode_check(binary, alphabet \\ :bitcoin)

@spec encode_check(binary(), alphabet()) :: {:ok, String.t()} | {:error, atom()}

Encodes binary including checksum calculated using the Base58Check algorithm

Examples

iex> ExBase58.encode_check(<<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>, :monero)
{:ok, "GZVwCXwyKVRPTViubJDVKVhVvcaKpEnqR"}

iex> ExBase58.encode_check(<<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>, :ripple)
{:ok, "GZVAUXAyKVRPTV5ubJDVKV6Vvc2KFN8qR"}

encode_check!(binary, alphabet \\ :bitcoin)

@spec encode_check!(binary(), alphabet()) :: String.t()

Same as encode_check/2, but returns a string value instead of a tuple and raises if the alphabet is wrong

Examples

iex> ExBase58.encode_check!(<<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>, :monero)
"GZVwCXwyKVRPTViubJDVKVhVvcaKpEnqR"

iex> ExBase58.encode_check!(<<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>, :not_listed)
** (ArgumentError) Invalid alphabet

encode_check_version(binary, version, alphabet \\ :bitcoin)

@spec encode_check_version(binary(), non_neg_integer(), alphabet()) ::
  {:ok, binary()} | {:error, atom()}

Encodes binary including checksum calculated using the Base58Check algorithm and version

Examples

iex> ExBase58.encode_check_version(<<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>, 0)
{:ok, "1GZVwCXwyKVRPTViubJDVKVhVvcaEoX5cN"}

iex> ExBase58.encode_check_version(<<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>, 111)
{:ok, "mw5TEFcvnLvgAZyLdAGbKEi2MvDHF1HXJX"}

iex> ExBase58.encode_check_version(<<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>, 111, :ripple)
{:ok, "mAnTNEcv8LvgwZyLdwGbKN5pMvDHErHXJX"}

encode_check_version!(binary, version, alphabet \\ :bitcoin)

@spec encode_check_version!(binary(), non_neg_integer(), alphabet()) :: binary()

Same as encode_check_version/3, but returns a string value instead of a tuple and raises if the alphabet is wrong

Examples

iex> ExBase58.encode_check_version!(<<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>, 0)
"1GZVwCXwyKVRPTViubJDVKVhVvcaEoX5cN"

iex> ExBase58.encode_check_version!(<<170, 175, 89, 206, 129, 197, 74, 82, 170, 144, 47, 81, 120, 199, 251, 203, 167, 32, 54, 7>>, 0, :not_listed)
** (ArgumentError) Invalid alphabet