hdkey 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +30 -3
- data/hdkey.gemspec +2 -1
- data/lib/hdkey/ext_key.rb +17 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 096eeeb9c924e47cc903afec1df0f86662aaf5e6
|
4
|
+
data.tar.gz: d623b35bb40668c1fb61413d49482175dfbc57b9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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 =
|
108
|
+
ext_pubkey = Bitcoin::ExtPubkey.from_base58('xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ')
|
82
109
|
```
|
83
110
|
|
84
111
|
## License
|
data/hdkey.gemspec
CHANGED
@@ -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
|
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
|
data/lib/hdkey/ext_key.rb
CHANGED
@@ -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
|
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-
|
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
|