class AdequateCryptoAddress::Ethereum

Attributes

address[R]
raw_address[R]

Public Class Methods

new(address_sring) click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 7
def initialize(address_sring)
  @address = normalize(address_sring)
  @raw_address = address_sring
end

Public Instance Methods

address_type() click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 26
def address_type; end
normalize(address_sring) click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 12
def normalize(address_sring)
  /\A0x/.match?(address_sring) ? address_sring : "0x#{address_sring}"
end
valid?(_type = nil) click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 16
def valid?(_type = nil)
  if !valid_format?
    false
  elsif not_checksummed?
    true
  else
    checksum_matches?
  end
end

Private Instance Methods

all_lowercase?() click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 54
def all_lowercase?
  address.match(/(?:0[xX])[a-f0-9]{40}/)
end
all_uppercase?() click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 50
def all_uppercase?
  address.match(/(?:0[xX])[A-F0-9]{40}/)
end
bin_to_hex(string) click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 74
def bin_to_hex(string)
  string.unpack1('H*')
end
checksum() click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 62
def checksum
  bin_to_hex(keccak256(unprefixed.downcase))
end
checksum_matches?() click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 42
def checksum_matches?
  address == checksummed
end
checksummed() click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 30
def checksummed
  raise "Invalid address: #{address}" unless valid_format?

  cased = unprefixed.chars.zip(checksum.chars).map do |char, check|
    /[0-7]/.match?(check) ? char.downcase : char.upcase
  end

  normalize(cased.join)
end
keccak256(x) click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 78
def keccak256(x)
  Digest::SHA3.new(256).digest(x)
end
not_checksummed?() click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 46
def not_checksummed?
  all_uppercase? || all_lowercase?
end
remove_hex_prefix(s) click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 70
def remove_hex_prefix(s)
  s[0, 2] == '0x' ? s[2..-1] : s
end
unprefixed() click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 66
def unprefixed
  remove_hex_prefix address
end
valid_format?() click to toggle source
# File lib/adequate_crypto_address/eth.rb, line 58
def valid_format?
  address.match(/\A(?:0[xX])[a-fA-F0-9]{40}\z/)
end