class MoacEth::Address

Attributes

address[R]

Public Class Methods

new(address) click to toggle source
# File lib/moac_eth/address.rb, line 4
def initialize(address)
  @address = Utils.prefix_hex(address)
end

Public Instance Methods

checksummed() click to toggle source
# File lib/moac_eth/address.rb, line 18
def checksummed
  raise "Invalid address: #{address}" unless matches_any_format?

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

  Utils.prefix_hex(cased.join)
end
valid?() click to toggle source
# File lib/moac_eth/address.rb, line 8
def valid?
  if !matches_any_format?
    false
  elsif not_checksummed?
    true
  else
    checksum_matches?
  end
end

Private Instance Methods

all_lowercase?() click to toggle source
# File lib/moac_eth/address.rb, line 45
def all_lowercase?
  address.match(/(?:0[xX])[a-f0-9]{40}/)
end
all_uppercase?() click to toggle source
# File lib/moac_eth/address.rb, line 41
def all_uppercase?
  address.match(/(?:0[xX])[A-F0-9]{40}/)
end
checksum() click to toggle source
# File lib/moac_eth/address.rb, line 53
def checksum
  Utils.bin_to_hex(Utils.keccak256 unprefixed.downcase)
end
checksum_matches?() click to toggle source
# File lib/moac_eth/address.rb, line 33
def checksum_matches?
  address == checksummed
end
matches_any_format?() click to toggle source
# File lib/moac_eth/address.rb, line 49
def matches_any_format?
  address.match(/\A(?:0[xX])[a-fA-F0-9]{40}\z/)
end
not_checksummed?() click to toggle source
# File lib/moac_eth/address.rb, line 37
def not_checksummed?
  all_uppercase? || all_lowercase?
end
unprefixed() click to toggle source
# File lib/moac_eth/address.rb, line 57
def unprefixed
  Utils.remove_hex_prefix address
end