ethereum_bip44 0.2.0 → 0.2.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9216b9ed9156d0c1255151c09468ae6c824e3c51
4
- data.tar.gz: 19c0e5853bb81ed0a3ede0981ca93f61b5875ce6
3
+ metadata.gz: 2842344fa400cbf84fec2dd4f6e543116b417d78
4
+ data.tar.gz: 5f57d180b1188a630c749971856454a7f4552f77
5
5
  SHA512:
6
- metadata.gz: 5a2d4105fc2b5a67a6407996b090fecdc3fdde7ae2f50c644b7e17e511a5b3bed29dc6a754d68bc772289b76f80fe799704cbeb931f31df495f8cd54701c3a92
7
- data.tar.gz: 1ce8be2778f75e3eae991b1d65fa38748bfeedfc798f5b8217413d82a49518ae57ac34a3d2d0f99baba17a077292e1ea498d5b47bb87e04c300388bdf1848f64
6
+ metadata.gz: b5c67c76fba449e85fb5ca20dc7ea08145c774c427ed612eb4668571eff0f98a6ad042484c2c5899d845685d78c9fbcadb944ffeee5936506bc4a789a7d5ce4f
7
+ data.tar.gz: c53d65b4474fe22dcac2f178a40aa1fec532250b1b6ce6f8cfb32eafcb12de1f57b888fffac05c5387db77aacc840e688af2501c89996dbc22027b54e7e5e18d
data/README.md CHANGED
@@ -23,7 +23,7 @@ Or install it yourself as:
23
23
 
24
24
  ## Usage
25
25
 
26
- See test_get_addresses_from_wallet
26
+ See test
27
27
 
28
28
  TODO: Write usage instructions here
29
29
 
@@ -5,41 +5,7 @@ require 'rlp'
5
5
  require 'money-tree'
6
6
  require 'bip_mnemonic'
7
7
  require 'ethereum_bip44/utils'
8
+ require 'ethereum_bip44/wallet'
8
9
 
9
10
  module EthereumBip44
10
-
11
- # "44'", # bip 44
12
- # "60'", # coin
13
- # "0'", # wallet
14
- # "0" # 0 - public, 1 = private
15
- # "0" # index
16
- class Wallet
17
-
18
- def self.create_from_mnemonic(mnemonic, wallet_index)
19
- seed = BipMnemonic.to_seed(mnemonic: mnemonic) # 2. 该助记词使用 PBKDF2 转化为种子(参见 BIP39)
20
- EthereumBip44::Wallet.new(seed, wallet_index)
21
- end
22
-
23
- def initialize(seed, wallet_index)
24
- master = MoneyTree::Master.new(seed_hex: seed) # 3. 种子用于使用 HMAC-SHA512 生成根私钥(参见 BIP32)
25
- @wallet_node = master.node_for_path("m/44'/60'/#{wallet_index}'") # 4. 从该根私钥,导出子私钥(参见 BIP32),其中节点布局由BIP44设置
26
- end
27
-
28
- def get_address(index)
29
- node = @wallet_node.node_for_path("M/0/#{index}")
30
-
31
- # from bitcoin public key to ethereum public key
32
- group = ECDSA::Group::Secp256k1
33
- public_key = ECDSA::Format::PointOctetString.decode(node.public_key.to_bytes, group) # a point
34
- ethereum_public = public_key.x.to_s(16) + public_key.y.to_s(16)
35
-
36
- # from ethereum public key to ethereum address
37
- bytes = EthereumBip44::Utils.hex_to_bin(ethereum_public)
38
- address_bytes = Digest::SHA3.new(256).digest(bytes)[-20..-1]
39
- address = EthereumBip44::Utils.bin_to_hex(address_bytes)
40
- EthereumBip44::Utils.prefix_hex(address)
41
- end
42
-
43
- end
44
-
45
11
  end
@@ -1,3 +1,3 @@
1
1
  module EthereumBip44
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -0,0 +1,62 @@
1
+ module EthereumBip44
2
+
3
+ # "44'", # bip 44
4
+ # "60'", # coin, 0': bitcoin, 60': ethereum
5
+ # "0'", # wallet
6
+ # "0" # 0 - public, 1 = private
7
+ # "0" # index
8
+ class Wallet
9
+
10
+ def self.from_seed(seed, path)
11
+ master = MoneyTree::Master.new(seed_hex: seed) # 3. 种子用于使用 HMAC-SHA512 生成根私钥(参见 BIP32)
12
+ wallet_node = master.node_for_path(path) # 4. 从该根私钥,导出子私钥(参见 BIP32),其中节点布局由BIP44设置
13
+ Wallet.new(wallet_node)
14
+ end
15
+
16
+ def self.from_mnemonic(mnemonic, path)
17
+ seed = BipMnemonic.to_seed(mnemonic: mnemonic) # 2. 该助记词使用 PBKDF2 转化为种子(参见 BIP39)
18
+ Wallet.from_seed(seed, path)
19
+ end
20
+
21
+ def self.from_xpub(xpub)
22
+ wallet_node = MoneyTree::Node.from_bip32(xpub)
23
+ Wallet.new(wallet_node)
24
+ end
25
+
26
+ def xpub
27
+ @wallet_node.to_bip32
28
+ end
29
+
30
+ def xprv
31
+ @wallet_node.to_bip32(:private)
32
+ end
33
+
34
+ def get_bitcoin_address(index)
35
+ node = @wallet_node.node_for_path("M/0/#{index}")
36
+ node.to_address
37
+ end
38
+
39
+ def get_ethereum_address(index)
40
+ node = @wallet_node.node_for_path("M/0/#{index}")
41
+
42
+ # from bitcoin public key to ethereum public key
43
+ group = ECDSA::Group::Secp256k1
44
+ public_key = ECDSA::Format::PointOctetString.decode(node.public_key.to_bytes, group) # a point
45
+ ethereum_public = public_key.x.to_s(16) + public_key.y.to_s(16)
46
+
47
+ # from ethereum public key to ethereum address
48
+ bytes = EthereumBip44::Utils.hex_to_bin(ethereum_public)
49
+ address_bytes = Digest::SHA3.new(256).digest(bytes)[-20..-1]
50
+ address = EthereumBip44::Utils.bin_to_hex(address_bytes)
51
+ EthereumBip44::Utils.prefix_hex(address)
52
+ end
53
+
54
+ private
55
+
56
+ def initialize(wallet_node)
57
+ @wallet_node = wallet_node
58
+ end
59
+
60
+ end
61
+
62
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ethereum_bip44
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - wuminzhe
@@ -150,6 +150,7 @@ files:
150
150
  - lib/ethereum_bip44.rb
151
151
  - lib/ethereum_bip44/utils.rb
152
152
  - lib/ethereum_bip44/version.rb
153
+ - lib/ethereum_bip44/wallet.rb
153
154
  homepage: https://github.com/wuminzhe/ethereum-bip44.rb
154
155
  licenses:
155
156
  - MIT