class Etherlite::Utils::ValidateAddress

Constants

MATCHER

Public Instance Methods

perform() click to toggle source
# File lib/etherlite/commands/utils/validate_address.rb, line 5
def perform
  return false unless MATCHER === @address
  return false if /[A-F]/ === @address && !valid_checksum?
  true
end

Private Instance Methods

valid_checksum?() click to toggle source
# File lib/etherlite/commands/utils/validate_address.rb, line 13
def valid_checksum?
  trimmed_address = @address.gsub(/^0x/, '')
  address_hash = Etherlite::Utils.sha3 trimmed_address.downcase

  trimmed_address.chars.each_with_index do |c, i|
    hash_byte = address_hash[i].to_i(16)
    return false if (hash_byte > 7 && c.upcase != c) || (hash_byte <= 7 && c.downcase != c)
  end

  true
end