Bech32 Build Status Gem Version MIT License

The implementation of the Bech32 encoder and decoder for Ruby.

Bech32 is checksummed base32 format that is used in following Bitcoin address format.

https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki

Installation

Add this line to your application's Gemfile:

gem 'bech32'

And then execute:

$ bundle

Or install it yourself as:

$ gem install bech32

Usage

Require the Gem:

require 'bech32'

Decode

Decode Bech32-encoded data into hrp part and data part.

hrp, data = Bech32.decode('BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4')

# hrp is human-readable part of Bech32 format
'bc'

# data is data part of Bech32 format
[0, 14, 20, 15, 7, 13, 26, 0, 25, 18, 6, 11, 13, 8, 21, 4, 20, 3, 17, 2, 29, 3, 12, 29, 3, 4, 15, 24, 20, 6, 14, 30, 22]

Decode Bech32-encoded Segwit address into Bech32::SegwitAddr instance.

addr = 'BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4'
segwit_addr = Bech32::SegwitAddr.new(addr)

# generate script pubkey
segwit_addr.to_script_pubkey
=> 0014751e76e8199196d454941c45d1b3a323f1433bd6

Advanced

The maximum number of characters of Bech32 defined in BIP-173 is limited to 90 characters. However, LN specification BOLT#11 has no limitation.

To decode data of more than 90 characters, specify max_length at decode as below. (The default value of max_length is 90.)

MAX_INTEGER = 2**31 - 1
Bech32.decode(bechString, MAX_INTEGER)

Note that between length of the addresses and the error-detection capabilities are trade-off.

Encode

Encode Bech32 human-readable part and data part into Bech32 string.

hrp = 'bc'
data = [0, 14, 20, 15, 7, 13, 26, 0, 25, 18, 6, 11, 13, 8, 21, 4, 20, 3, 17, 2, 29, 3, 12, 29, 3, 4, 15, 24, 20, 6, 14, 30, 22]

bech = Bech32.encode(hrp, data)
=> bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4

Encode Segwit script into Bech32 Segwit address.

segwit_addr = Bech32::SegwitAddr.new
segwit_addr.script_pubkey = '0014751e76e8199196d454941c45d1b3a323f1433bd6'

# generate addr
segwit_addr.addr
=> bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4

License

The gem is available as open source under the terms of the MIT License.