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 +4 -4
- data/.github/workflows/main.yml +35 -0
- data/.ruby-version +1 -1
- data/README.md +29 -3
- data/bech32.gemspec +12 -11
- data/exe/bech32 +35 -0
- data/lib/bech32.rb +30 -14
- data/lib/bech32/segwit_addr.rb +6 -3
- data/lib/bech32/version.rb +4 -2
- metadata +26 -11
- data/.travis.yml +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b6e0eb4edcadc4cbeeb612e0d085bb3caed330ed1c312c1d8465baec26a4923
|
4
|
+
data.tar.gz: ea2abc8eae17e2b503e091c71402a6f9dbd3f2be7ecd416eed3dcc08be3fccb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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 =
|
7
|
+
spec.name = 'bech32'
|
8
8
|
spec.version = Bech32::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Shigeyuki Azuchi']
|
10
|
+
spec.email = ['techmedia.think@gmail.com']
|
11
11
|
|
12
|
-
spec.summary = %q
|
13
|
-
spec.description = %q
|
14
|
-
spec.homepage =
|
15
|
-
spec.license =
|
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 =
|
18
|
+
spec.bindir = 'exe'
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
-
spec.require_paths = [
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
spec.add_runtime_dependency 'thor', '>= 1.1.0'
|
21
22
|
|
22
|
-
spec.add_development_dependency
|
23
|
-
spec.add_development_dependency
|
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
|
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
|
-
|
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
|
-
|
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)
|
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
|
data/lib/bech32/segwit_addr.rb
CHANGED
@@ -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
|
-
|
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)
|
data/lib/bech32/version.rb
CHANGED
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.
|
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:
|
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:
|
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:
|
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
|
-
-
|
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
|
-
|
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.
|