module Cryptocurrency::Address

Constants

BECH_PREFIXES
PREFIXES

Public Class Methods

for(public_key, currency, kind = :p2pkh) click to toggle source
# File lib/cryptocurrency/address.rb, line 5
def self.for(public_key, currency, kind = :p2pkh)
  case kind
  when :p2pkh
    data = version(currency, kind) + hash(public_key, :bitcoin)
    Base58.encode58_check(data)
  when :segwit
    script = "\x00\x14" + hash(public_key, :bitcoin)
    data = version(currency, :p2sh) + Utils.hash160(script)
    Base58.encode58_check(data)
  when :segwit_native
    Bech32.encode(BECH_PREFIXES[currency], "\x00" + hash(public_key, :bitcoin))
  end
end
hash(public_key, kind = :bitcoin) click to toggle source
# File lib/cryptocurrency/address.rb, line 19
def self.hash(public_key, kind = :bitcoin)
  case kind
  when :bitcoin
    Utils.hash160(public_key.to_s)
  when :ethereum
    Utils.kekkak(public_key.uncompressed)[-20..]
  end
end
version(currency, type) click to toggle source
# File lib/cryptocurrency/address.rb, line 62
def self.version(currency, type)
  PREFIXES[currency][type]
end