bech32 1.0.4 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e9e8e0e3c612f44109634bc974d068150d4dddd7d75f9bd62ec1358bd0b021db
4
- data.tar.gz: 2481d79db6af87e2e938c714807c3789c5c00954634dd0085beaa3638c006d11
3
+ metadata.gz: 7b6e0eb4edcadc4cbeeb612e0d085bb3caed330ed1c312c1d8465baec26a4923
4
+ data.tar.gz: ea2abc8eae17e2b503e091c71402a6f9dbd3f2be7ecd416eed3dcc08be3fccb6
5
5
  SHA512:
6
- metadata.gz: 9c41b87a356b14ce0a3c086ada2a73cb653b5584b0d73bd02dec13c54e42166473577d773b7e65dec39bd477aa5adc302674c549234867f678606ad8bccb4577
7
- data.tar.gz: 0e5ab9b288e986ab996690a78c9f976d1cf658c62160f6ef2e2fc7060fc276bc84b27a9f1309d71b81a3629ecb486dd25fb0b4105bb05103cc364ab8502de61b
6
+ metadata.gz: 39d972ba715a32e90cda977d9a6c9a53f5648e760c0afcaf9edd83e1a94ce882a09d0d38d2781a691def7d8595d270d1293f96ae63df22dd981dc23ddaaf6e40
7
+ data.tar.gz: a463c2478f923f6b8b27123e5e1af24e0f6ebee5c0593fa02243311b1ca364db7d82ceea1375d9f5078e14cc3adf3bfa6eced482ea86045fa5ec1fc726fcbe47
@@ -0,0 +1,35 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ jobs:
17
+ test:
18
+
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ matrix:
22
+ ruby-version: ['2.6', '2.7', '3.0']
23
+
24
+ steps:
25
+ - uses: actions/checkout@v2
26
+ - name: Set up Ruby
27
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
28
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
29
+ # uses: ruby/setup-ruby@v1
30
+ uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
31
+ with:
32
+ ruby-version: ${{ matrix.ruby-version }}
33
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
34
+ - name: Run tests
35
+ run: bundle exec rake
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.5.0
1
+ ruby-3.0.0
data/README.md CHANGED
@@ -1,11 +1,15 @@
1
1
  # Bech32 [![Build Status](https://travis-ci.org/azuchi/bech32rb.svg?branch=master)](https://travis-ci.org/azuchi/bech32rb) [![Gem Version](https://badge.fury.io/rb/bech32.svg)](https://badge.fury.io/rb/bech32) [![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE) <img src="http://segwit.co/static/public/images/logo.png" width="100">
2
2
 
3
- The implementation of the Bech32 encoder and decoder for Ruby.
3
+ The implementation of the Bech32/Bech32m encoder and decoder for Ruby.
4
4
 
5
5
  Bech32 is checksummed base32 format that is used in following Bitcoin address format.
6
6
 
7
7
  https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki
8
8
 
9
+ Bech32m is checksummed base32m format that is used in following Bitcoin address format.
10
+
11
+ https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki
12
+
9
13
  ## Installation
10
14
 
11
15
  Add this line to your application's Gemfile:
@@ -35,13 +39,15 @@ require 'bech32'
35
39
  Decode Bech32-encoded data into hrp part and data part.
36
40
 
37
41
  ```ruby
38
- hrp, data = Bech32.decode('BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4')
42
+ hrp, data, spec = Bech32.decode('BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4')
39
43
 
40
44
  # hrp is human-readable part of Bech32 format
41
45
  'bc'
42
46
 
43
47
  # data is data part of Bech32 format
44
48
  [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]
49
+
50
+ # spec is whether Bech32::Encoding::BECH32 or Bech32::Encoding::BECH32M
45
51
  ```
46
52
 
47
53
  Decode Bech32-encoded Segwit address into `Bech32::SegwitAddr` instance.
@@ -77,7 +83,7 @@ Encode Bech32 human-readable part and data part into Bech32 string.
77
83
  hrp = 'bc'
78
84
  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]
79
85
 
80
- bech = Bech32.encode(hrp, data)
86
+ bech = Bech32.encode(hrp, data, Bech32::Encoding::BECH32)
81
87
  => bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
82
88
  ```
83
89
 
@@ -92,6 +98,26 @@ segwit_addr.addr
92
98
  => bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4
93
99
  ```
94
100
 
101
+ ### CLI
102
+
103
+ After installing the gem, the `bech32` command will be available. Encoding and decoding features are also available in the cli.
104
+
105
+ #### Encode
106
+
107
+ The `encode` command takes `HRP`, `data`, and type (`bech32` or `bech32m`) as arguments and outputs a bech32/bech32m string.
108
+
109
+ $ bech32 encode genesis 000409190707111719041a120308120a060c161408110d091b090009021b1e1d150e190215010d0a1603091e1f0b100609090d1a1c1a13030c120c0c0f1c020d1d1a0e170b1c17021018121e0a021c121a1c0d161b16131d1609130f1d13180f1e081d041d0a110f110d1313081c11100600180b000c08140c1e130e0f090c160e0018191e1d1c0016060c11101214121e19070d1a0c1c15020414001f10100c09090600181806001809080e180507021913031100030216141b100908160c1213120f1912011f07021c13190d1900170c1d1203040f071c1908050504130e080d0a100d130b03000a0a08191310090918120f11031104120c15180c15120a0f1919070c1c12060c1911091010120a0d191b040c1613020e1911081f000b1a0b0514150c1613010d0c1c030b17011805090119061e0b051e130c00030419000112030110181d011a000f020c0901080c1113060201041a0e1b060a15160506181c11140c1c1d0b1b14020c131e0b0f071519181e0b1f0e0a08170f1d0c05060e1c1b0e160c0f0a171d0b101a1a1f1417160e0d1414030e161b0a000709100d15020c000e010c00000000 bech32
110
+ genesis1qyfe883hey6jrgj2xvk5g3dfmfqfzm7a4wez4pd2krf7ltsxffd6u6nrvjvv0uzda6whtuhzscj72zuj6udkmknakfn0anc07gaya2303dnngu3sxqctqvg5v7nw0fvkwqce7auqkxv3sj5j7e8d6vu4zy5qlssvffxqccxqcfgwc98zenr3qrzk5msfgkvjnj0ejpl8zunedeqhvajry08ueg99ynwgd2sdntrq22gensffcj03r3yjv4cv4j20ee8vujxve3fssj2demyvknzwe3glqt6t954vknpdvurthpc9fpex7t97nvqryeqpjrpscap6q0zvfpgv3nxzpy6wmx24k9xcu35vuatm5zvn7t084ec7tlw2gh0av9xwumwkv02hats66l5hkwd55rwkm2q8fsd4zvqwpvqqqqtdc6rp
111
+
112
+ #### Decode
113
+
114
+ The `decode` command takes bech32/bech32m string as arguments and outputs `HRP`, `data`, and type.
115
+
116
+ $ bech32 decode genesis1qyfe883hey6jrgj2xvk5g3dfmfqfzm7a4wez4pd2krf7ltsxffd6u6nrvjvv0uzda6whtuhzscj72zuj6udkmknakfn0anc07gaya2303dnngu3sxqctqvg5v7nw0fvkwqce7auqkxv3sj5j7e8d6vu4zy5qlssvffxqccxqcfgwc98zenr3qrzk5msfgkvjnj0ejpl8zunedeqhvajry08ueg99ynwgd2sdntrq22gensffcj03r3yjv4cv4j20ee8vujxve3fssj2demyvknzwe3glqt6t954vknpdvurthpc9fpex7t97nvqryeqpjrpscap6q0zvfpgv3nxzpy6wmx24k9xcu35vuatm5zvn7t084ec7tlw2gh0av9xwumwkv02hats66l5hkwd55rwkm2q8fsd4zvqwpvqqqqtdc6rp
117
+ HRP: genesis
118
+ DATA: 000409190707111719041a120308120a060c161408110d091b090009021b1e1d150e190215010d0a1603091e1f0b100609090d1a1c1a13030c120c0c0f1c020d1d1a0e170b1c17021018121e0a021c121a1c0d161b16131d1609130f1d13180f1e081d041d0a110f110d1313081c11100600180b000c08140c1e130e0f090c160e0018191e1d1c0016060c11101214121e19070d1a0c1c15020414001f10100c09090600181806001809080e180507021913031100030216141b100908160c1213120f1912011f07021c13190d1900170c1d1203040f071c1908050504130e080d0a100d130b03000a0a08191310090918120f11031104120c15180c15120a0f1919070c1c12060c1911091010120a0d191b040c1613020e1911081f000b1a0b0514150c1613010d0c1c030b17011805090119061e0b051e130c00030419000112030110181d011a000f020c0901080c1113060201041a0e1b060a15160506181c11140c1c1d0b1b14020c131e0b0f071519181e0b1f0e0a08170f1d0c05060e1c1b0e160c0f0a171d0b101a1a1f1417160e0d1414030e161b0a000709100d15020c000e010c00000000
119
+ TYPE: bech32
120
+
95
121
  ## License
96
122
 
97
123
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/bech32.gemspec CHANGED
@@ -4,21 +4,22 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'bech32/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "bech32"
7
+ spec.name = 'bech32'
8
8
  spec.version = Bech32::VERSION
9
- spec.authors = ["Shigeyuki Azuchi"]
10
- spec.email = ["azuchi@haw.co.jp"]
9
+ spec.authors = ['Shigeyuki Azuchi']
10
+ spec.email = ['techmedia.think@gmail.com']
11
11
 
12
- spec.summary = %q{The implementation of Bech32 encoder and decoder.}
13
- spec.description = %q{The implementation of Bech32 encoder and decoder.}
14
- spec.homepage = "https://github.com/azuchi/bech32rb"
15
- spec.license = "MIT"
12
+ spec.summary = %q(The implementation of Bech32 encoder and decoder.)
13
+ spec.description = %q(The implementation of Bech32 encoder and decoder.)
14
+ spec.homepage = 'https://github.com/azuchi/bech32rb'
15
+ spec.license = 'MIT'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
18
+ spec.bindir = 'exe'
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
20
+ spec.require_paths = ['lib']
21
+ spec.add_runtime_dependency 'thor', '>= 1.1.0'
21
22
 
22
- spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "rspec", "~> 3.0"
23
+ spec.add_development_dependency 'rake', '>= 12.3.3'
24
+ spec.add_development_dependency 'rspec', '~> 3.0'
24
25
  end
data/exe/bech32 ADDED
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bech32'
4
+ require 'thor'
5
+
6
+ class CLI < Thor
7
+
8
+ desc 'encode hrp data bech32/bech32m', 'Encoding data to bech32/bech32m string.'
9
+ def encode(hrp, data, type)
10
+ if type && !['bech32', 'bech32m'].include?(type)
11
+ puts 'Invalid type value. type must be bech32 or bech32m.'
12
+ else
13
+ spec = type.nil? || type == 'bech32' ? 1 : 2
14
+ data = [data].pack('H*').unpack('C*')
15
+ puts Bech32.encode(hrp, data, spec)
16
+ end
17
+ end
18
+
19
+ desc 'decode "bech32string"', 'Decoding bech32/bech32m string.'
20
+ def decode(bech32_str)
21
+ bech32 = Bech32.decode(bech32_str, bech32_str.length)
22
+ if bech32
23
+ puts <<~EOS
24
+ HRP: #{bech32[0]}
25
+ DATA: #{bech32[1].pack('C*').unpack1('H*')}
26
+ TYPE: #{bech32[2] == Bech32::Encoding::BECH32 ? 'bech32' : 'bech32m'}
27
+ EOS
28
+ else
29
+ puts 'Can not decode.'
30
+ end
31
+ end
32
+
33
+ end
34
+
35
+ CLI.start(ARGV)
data/lib/bech32.rb CHANGED
@@ -1,44 +1,50 @@
1
1
  module Bech32
2
2
 
3
+ module Encoding
4
+ BECH32 = 1
5
+ BECH32M = 2
6
+ end
7
+
3
8
  autoload :SegwitAddr, 'bech32/segwit_addr'
4
9
 
5
10
  SEPARATOR = '1'
6
11
 
7
12
  CHARSET = %w(q p z r y 9 x 8 g f 2 t v d w 0 s 3 j n 5 4 k h c e 6 m u a 7 l)
8
13
 
14
+ BECH32M_CONST = 0x2bc830a3
15
+
9
16
  module_function
10
17
 
11
18
  # Returns the encoded Bech32 string.
12
19
  #
13
20
  # require 'bech32'
14
21
  #
15
- # bech = Bech32.encode('bc', [])
22
+ # bech = Bech32.encode('bc', [], Bech32::Encoding::BECH32)
16
23
  #
17
24
  # <i>Generates:</i>
18
25
  # 'BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4' # bech
19
26
  #
20
- def encode(hrp, data)
21
- checksummed = data + create_checksum(hrp, data)
27
+ def encode(hrp, data, spec)
28
+ checksummed = data + create_checksum(hrp, data, spec)
22
29
  hrp + SEPARATOR + checksummed.map{|i|CHARSET[i]}.join
23
30
  end
24
31
 
25
- # Returns the Bach32 decoded hrp and data.
32
+ # Returns the Bech32 decoded hrp and data.
26
33
  #
27
34
  # require 'bech32'
28
35
  #
29
36
  # addr = 'BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4'
30
- # hrp, data = Bech32.decode(addr)
37
+ # hrp, data, spec = Bech32.decode(addr)
31
38
  #
32
39
  # <i>Generates:</i>
33
40
  # 'bc' # hrp
34
41
  # [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] # data
42
+ # 1 # spec see Bech32::Encoding
35
43
  #
36
44
  def decode(bech, max_length = 90)
37
- # check invalid bytes
38
- return nil if bech.scrub('?').include?('?')
39
45
  # check uppercase/lowercase
46
+ return nil if bech.bytes.index{|x| x < 33 || x > 126}
40
47
  return nil if (bech.downcase != bech && bech.upcase != bech)
41
- bech.each_char{|c|return nil if c.ord < 33 || c.ord > 126}
42
48
  bech = bech.downcase
43
49
  # check data length
44
50
  pos = bech.rindex(SEPARATOR)
@@ -49,20 +55,30 @@ module Bech32
49
55
  hrp = bech[0..pos-1]
50
56
  data = bech[pos+1..-1].each_char.map{|c|CHARSET.index(c)}
51
57
  # check checksum
52
- return nil unless verify_checksum(hrp, data)
53
- [hrp, data[0..-7]]
58
+ spec = verify_checksum(hrp, data)
59
+ spec ? [hrp, data[0..-7], spec] : nil
54
60
  end
55
61
 
56
62
  # Returns computed checksum values of +hrp+ and +data+
57
- def create_checksum(hrp, data)
63
+ def create_checksum(hrp, data, spec)
58
64
  values = expand_hrp(hrp) + data
59
- polymod = polymod(values + [0, 0, 0, 0, 0, 0]) ^ 1
65
+ const = (spec == Bech32::Encoding::BECH32M ? Bech32::BECH32M_CONST : 1)
66
+ polymod = polymod(values + [0, 0, 0, 0, 0, 0]) ^ const
60
67
  (0..5).map{|i|(polymod >> 5 * (5 - i)) & 31}
61
68
  end
62
69
 
63
70
  # Verify a checksum given Bech32 string
71
+ # @param [String] hrp hrp part.
72
+ # @param [Array[Integer]] data data array.
73
+ # @return [Integer] spec
64
74
  def verify_checksum(hrp, data)
65
- polymod(expand_hrp(hrp) + data) == 1
75
+ const = polymod(expand_hrp(hrp) + data)
76
+ case const
77
+ when 1
78
+ Encoding::BECH32
79
+ when BECH32M_CONST
80
+ Encoding::BECH32M
81
+ end
66
82
  end
67
83
 
68
84
  # Expand the hrp into values for checksum computation.
@@ -84,4 +100,4 @@ module Bech32
84
100
 
85
101
  private_class_method :polymod, :expand_hrp
86
102
 
87
- end
103
+ end
@@ -4,6 +4,7 @@ module Bech32
4
4
 
5
5
  HRP_MAINNET = 'bc'
6
6
  HRP_TESTNET = 'tb'
7
+ HRP_REGTEST = 'bcrt'
7
8
 
8
9
  attr_accessor :hrp # human-readable part
9
10
  attr_accessor :ver # witness version
@@ -29,19 +30,21 @@ module Bech32
29
30
 
30
31
  # Returns segwit address string which generated from hrp, witness version and witness program.
31
32
  def addr
32
- Bech32.encode(hrp, [ver] + convert_bits(prog, 8, 5))
33
+ spec = (ver == 0 ? Bech32::Encoding::BECH32 : Bech32::Encoding::BECH32M)
34
+ Bech32.encode(hrp, [ver] + convert_bits(prog, 8, 5), spec)
33
35
  end
34
36
 
35
37
  private
36
38
 
37
39
  def parse_addr(addr)
38
- @hrp, data = Bech32.decode(addr)
39
- raise 'Invalid address.' if hrp.nil? || data[0].nil? || ![HRP_MAINNET, HRP_TESTNET].include?(hrp)
40
+ @hrp, data, spec = Bech32.decode(addr)
41
+ raise 'Invalid address.' if hrp.nil? || data[0].nil? || ![HRP_MAINNET, HRP_TESTNET, HRP_REGTEST].include?(hrp)
40
42
  @ver = data[0]
41
43
  raise 'Invalid witness version' if @ver > 16
42
44
  @prog = convert_bits(data[1..-1], 5, 8, false)
43
45
  raise 'Invalid witness program' if @prog.nil? || @prog.length < 2 || @prog.length > 40
44
46
  raise 'Invalid witness program with version 0' if @ver == 0 && (@prog.length != 20 && @prog.length != 32)
47
+ raise 'Witness version and encoding spec do not match' if (@ver == 0 && spec != Bech32::Encoding::BECH32) || (@ver != 0 && spec != Bech32::Encoding::BECH32M)
45
48
  end
46
49
 
47
50
  def convert_bits(data, from, to, padding=true)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Bech32
2
- VERSION = "1.0.4"
3
- end
4
+ VERSION = '1.2.1'
5
+ end
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bech32
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shigeyuki Azuchi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-17 00:00:00.000000000 Z
11
+ date: 2021-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.1.0
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rake
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - "~>"
31
+ - - ">="
18
32
  - !ruby/object:Gem::Version
19
- version: '10.0'
33
+ version: 12.3.3
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
- version: '10.0'
40
+ version: 12.3.3
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -40,16 +54,17 @@ dependencies:
40
54
  version: '3.0'
41
55
  description: The implementation of Bech32 encoder and decoder.
42
56
  email:
43
- - azuchi@haw.co.jp
44
- executables: []
57
+ - techmedia.think@gmail.com
58
+ executables:
59
+ - bech32
45
60
  extensions: []
46
61
  extra_rdoc_files: []
47
62
  files:
63
+ - ".github/workflows/main.yml"
48
64
  - ".gitignore"
49
65
  - ".rspec"
50
66
  - ".ruby-gemset"
51
67
  - ".ruby-version"
52
- - ".travis.yml"
53
68
  - CODE_OF_CONDUCT.md
54
69
  - Gemfile
55
70
  - LICENSE.txt
@@ -58,6 +73,7 @@ files:
58
73
  - bech32.gemspec
59
74
  - bin/console
60
75
  - bin/setup
76
+ - exe/bech32
61
77
  - lib/bech32.rb
62
78
  - lib/bech32/segwit_addr.rb
63
79
  - lib/bech32/version.rb
@@ -80,8 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
96
  - !ruby/object:Gem::Version
81
97
  version: '0'
82
98
  requirements: []
83
- rubyforge_project:
84
- rubygems_version: 2.7.3
99
+ rubygems_version: 3.2.3
85
100
  signing_key:
86
101
  specification_version: 4
87
102
  summary: The implementation of Bech32 encoder and decoder.
data/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.1
4
- - 2.2.2
5
- - 2.3.0
6
- - 2.4.0
7
- - 2.5.0