hdkey 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +30 -3
  3. data/hdkey.gemspec +2 -1
  4. data/lib/hdkey/ext_key.rb +17 -0
  5. metadata +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d3127c2b4ced521532f460511c497e22f69519de
4
- data.tar.gz: b40d18ff28f378e678eb726cd4f924fe8c3fbcf7
3
+ metadata.gz: 096eeeb9c924e47cc903afec1df0f86662aaf5e6
4
+ data.tar.gz: d623b35bb40668c1fb61413d49482175dfbc57b9
5
5
  SHA512:
6
- metadata.gz: c920c3f81438c9e1a47fec3bb43765a9449a254a38704f55ff709a7ebbb51114014c668da011e486f2b4033d2790edacc51ac09d13b0c3bd2dfa5cf9a99dc00a
7
- data.tar.gz: 9a58cdd3427aa6ed45fda1e5366fa4a2cef4b271848e3e628928609e9a81fb2e76016f35538577290dbe36ccc9999920982909182850561e3fbffef42b0283ba
6
+ metadata.gz: a91388f03f5544df4762072ea7037e9362855907b340b5100b93c5848f6e4601b989a785793c1510a9da729fb4b9595b1b14d3c32ac2d8368ed20c6c7c3de657
7
+ data.tar.gz: a0be3762ff9dfc478119ea3408a7864aebc9dd4c2612da5897f95a6e6c2e38d76826ccac26b10ac4915a7ded805f5de33c88f324cc7467d901dc42ce79bc8e0d
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Hierarchical Deterministic key derivation for Ruby
2
- [![Build Status](https://travis-ci.org/azuchi/hdkey.svg?branch=master)](https://travis-ci.org/azuchi/hdkey) [![Gem Version](https://badge.fury.io/rb/hdkey.svg)](https://badge.fury.io/rb/hdkey) [![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)
2
+ [![Build Status](https://travis-ci.org/azuchi/hdkey.svg?branch=master)](https://travis-ci.org/azuchi/hdkey) [![Gem Version](https://badge.fury.io/rb/hdkey.svg)](https://badge.fury.io/rb/hdkey) [![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">
3
3
 
4
4
  The implementation of Bitcoin hierarchical deterministic key for Ruby.
5
5
 
@@ -58,17 +58,44 @@ key.fingerprint
58
58
  key.chain_code
59
59
  => '47fdacbd0f1097043b78c63c20c34ef4ed9a111d980047ad16282c7ae6236141'
60
60
 
61
- key.priv_key.priv
61
+ key.priv
62
62
  => 'edb2e14f9ee77d26dd93b4ecede8d16ed408ce149b6cd80b0715a2d911a0afea'
63
63
 
64
+ # P2PKH address
65
+ key.addr
66
+ => '19Q2WoS5hSS6T8GjhK8KZLMgmWaq4neXrh'
67
+
68
+ # Segwit address(P2WPKH)
69
+ key.segwit_addr
70
+ => 'bc1qtsdavj8dyw49l4gt554jg47pr60gpf48ww2ens'
71
+
64
72
  key.to_base58
65
73
  => 'xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7'
66
74
 
67
75
  key.ext_pubkey.to_base58
68
76
  => 'xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw'
69
77
 
78
+ # P2PKH address
79
+ key.ext_pubkey.addr
80
+ => '19Q2WoS5hSS6T8GjhK8KZLMgmWaq4neXrh'
81
+
82
+ # Segwit address(P2WPKH)
83
+ key.ext_pubkey.segwit_addr
84
+ => 'bc1qtsdavj8dyw49l4gt554jg47pr60gpf48ww2ens'
85
+
70
86
  # derive child(m/0H/1)
71
87
  child_key = key.derive(1)
88
+
89
+ # For testnet
90
+ Bitcoin.network = :testnet3
91
+
92
+ # testnet P2PKH address
93
+ key.addr
94
+ => 'mouyorX4WTsMEEkMQt6hPFa1dWBXws2Yos'
95
+
96
+ # testnet Segwit address(P2WPKH)
97
+ key.segwit_addr
98
+ => 'tb1qtsdavj8dyw49l4gt554jg47pr60gpf48yg32gr'
72
99
  ```
73
100
 
74
101
  ### import key
@@ -78,7 +105,7 @@ child_key = key.derive(1)
78
105
  ext_privkey = Bitcoin::ExtKey.from_base58('xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs')
79
106
 
80
107
  # import pubkey
81
- ext_pubkey = key = Bitcoin::ExtPubkey.from_base58('xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ')
108
+ ext_pubkey = Bitcoin::ExtPubkey.from_base58('xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ')
82
109
  ```
83
110
 
84
111
  ## License
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "hdkey"
7
- spec.version = "1.0.1"
7
+ spec.version = "1.1.0"
8
8
  spec.authors = ["Shigeyuki Azuchi"]
9
9
  spec.email = ["azuchi@haw.co.jp"]
10
10
 
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_runtime_dependency "bitcoin-ruby", "~> 0.0.10"
22
22
  spec.add_runtime_dependency "ffi"
23
+ spec.add_runtime_dependency "bech32"
23
24
  spec.add_development_dependency "rake", "~> 10.0"
24
25
  spec.add_development_dependency "rspec", "~> 3.0"
25
26
  end
@@ -1,3 +1,5 @@
1
+ require 'bech32'
2
+
1
3
  module Bitcoin
2
4
 
3
5
  def self.hmac_sha512(key, data)
@@ -68,6 +70,11 @@ module Bitcoin
68
70
  priv_key.addr
69
71
  end
70
72
 
73
+ # get segwit p2wpkh address
74
+ def segwit_addr
75
+ ext_pubkey.segwit_addr
76
+ end
77
+
71
78
  # get key identifier
72
79
  def identifier
73
80
  Bitcoin.hash160(priv_key.pub)
@@ -139,6 +146,16 @@ module Bitcoin
139
146
  Bitcoin.hash160_to_address(Bitcoin.hash160(pub))
140
147
  end
141
148
 
149
+ # get segwit p2wpkh address
150
+ def segwit_addr
151
+ hash160 = Bitcoin.hash160(pub)
152
+ p2wpkh = [ ["00", "14", hash160].join ].pack("H*").bth
153
+ segwit_addr = Bech32::SegwitAddr.new
154
+ segwit_addr.hrp = Bitcoin.network[:address_version] == '00' ? 'bc' : 'tb'
155
+ segwit_addr.script_pubkey = p2wpkh
156
+ segwit_addr.addr
157
+ end
158
+
142
159
  # get key identifier
143
160
  def identifier
144
161
  Bitcoin.hash160(pub)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hdkey
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shigeyuki Azuchi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-05-22 00:00:00.000000000 Z
11
+ date: 2017-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bitcoin-ruby
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bech32
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement