ExBech32 (ExBech32 v0.1.1)

Nif for Bech32 format encoding and decoding.

It uses https://github.com/rust-bitcoin/rust-bech32 rust library

Link to this section Summary

Functions

Decodes bech32 decoded string

Decodes bech32 decoded string with witness version

Encodes into Bech32 format

Encodes into Bech32 format appending the version to data

Link to this section Functions

Link to this function

decode(encoded)

Specs

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

Decodes bech32 decoded string

Examples

iex> ExBech32.decode("bech321qqqsyrhqy2a")
{:ok, {"bech32", <<0, 1, 2>>, :bech32}}

iex> ExBech32.decode("bech32m1qqqsyy9kzpq")
{:ok, {"bech32m", <<0, 1, 2>>, :bech32m}}
Link to this function

decode_with_version(encoded)

Specs

decode_with_version(String.t()) ::
  {:ok, {String.t(), non_neg_integer(), binary(), atom()}} | {:error, atom()}

Decodes bech32 decoded string with witness version

Examples

iex> ExBech32.decode_with_version("bc1qnv5fzufzf3l4uj9ey95w6zw32nevwjxn9497vk")
{:ok, {"bc", 0, <<155, 40, 145, 113, 34, 76, 127, 94, 72, 185, 33, 104, 237, 9, 209, 84, 242, 199, 72, 211>>, :bech32}}
Link to this function

encode(hrp, data, variant \\ :bech32)

Specs

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

Encodes into Bech32 format

It accepts the following three paramters:

  • human-readable part
  • data to be encoded
  • bech32 variant. it can be :bech32 (BIP-0173) or :bech32m (BIP-0350)

Examples

iex> ExBech32.encode("bech32", <<0, 1, 2>>)
{:ok, "bech321qqqsyrhqy2a"}

iex> ExBech32.encode("bech32m", <<0, 1, 2>>, :bech32m)
{:ok, "bech32m1qqqsyy9kzpq"}
Link to this function

encode_with_version(hrp, version, data, variant \\ :bech32)

Specs

encode_with_version(String.t(), non_neg_integer(), binary(), atom()) ::
  {:ok, String.t()} | {:error, atom()}

Encodes into Bech32 format appending the version to data

It accepts the following three paramters:

  • human-readable part
  • witness version
  • data to be encoded
  • bech32 variant. it can be :bech32 (BIP-0173) or :bech32m (BIP-0350)

Examples

iex> hash = <<155, 40, 145, 113, 34, 76, 127, 94, 72, 185, 33, 104, 237, 9, 209, 84, 242, 199, 72, 211>>
iex> ExBech32.encode_with_version("bc", 0, hash)
{:ok, "bc1qnv5fzufzf3l4uj9ey95w6zw32nevwjxn9497vk"}

iex> ExBech32.encode_with_version("bc", 0, <<1>>, :bech32k)
{:error, :unknown_variant}