hdkey 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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