Module: Bip44::Ethereum

Included in:
Wallet
Defined in:
lib/bip44/ethereum.rb

Instance Method Summary collapse

Instance Method Details

#ethereum_addressObject



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/bip44/ethereum.rb', line 18

def ethereum_address
  node = @wallet_node
  
  # from bitcoin public key to ethereum public key
  group = ECDSA::Group::Secp256k1
  public_key = ECDSA::Format::PointOctetString.decode(node.public_key.to_bytes, group) # a point
  ethereum_public = public_key.x.to_s(16) + public_key.y.to_s(16)

  # from ethereum public key to ethereum address
  bytes = Bip44::Utils.hex_to_bin(ethereum_public)
  address_bytes = Digest::SHA3.new(256).digest(bytes)[-20..-1]
  address = Bip44::Utils.bin_to_hex(address_bytes)
  Bip44::Utils.prefix_hex(address)
end

#get_ethereum_address(path) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/bip44/ethereum.rb', line 3

def get_ethereum_address(path)
  node = @wallet_node.node_for_path(path)

  # from bitcoin public key to ethereum public key
  group = ECDSA::Group::Secp256k1
  public_key = ECDSA::Format::PointOctetString.decode(node.public_key.to_bytes, group) # a point
  ethereum_public = public_key.x.to_s(16) + public_key.y.to_s(16)

  # from ethereum public key to ethereum address
  bytes = Bip44::Utils.hex_to_bin(ethereum_public)
  address_bytes = Digest::SHA3.new(256).digest(bytes)[-20..-1]
  address = Bip44::Utils.bin_to_hex(address_bytes)
  Bip44::Utils.prefix_hex(address)
end