class EIP55::Address
Attributes
address[R]
Public Class Methods
new(address)
click to toggle source
# File lib/eip55/address.rb, line 6 def initialize address @address = Util.prefix(address) end
Public Instance Methods
checksummed()
click to toggle source
# File lib/eip55/address.rb, line 20 def checksummed raise InvalidAddressError.new("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 Util.prefix(cased.join) end
valid?()
click to toggle source
# File lib/eip55/address.rb, line 10 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/eip55/address.rb, line 50 def all_lowercase? address.match(/\A(?:0[xX])[a-f0-9]{40}\z/) end
all_uppercase?()
click to toggle source
# File lib/eip55/address.rb, line 46 def all_uppercase? address.match(/\A(?:0[xX])[A-F0-9]{40}\z/) end
checksum()
click to toggle source
# File lib/eip55/address.rb, line 58 def checksum Util.encode_hex(Util.keccak256(unprefixed.downcase)) end
checksum_matches?()
click to toggle source
# File lib/eip55/address.rb, line 34 def checksum_matches? address == checksummed end
matches_any_format?()
click to toggle source
# File lib/eip55/address.rb, line 38 def matches_any_format? address.match(/\A(?:0[xX])[a-fA-F0-9]{40}\z/) end
not_checksummed?()
click to toggle source
# File lib/eip55/address.rb, line 42 def not_checksummed? all_uppercase? || all_lowercase? end
unprefixed()
click to toggle source
# File lib/eip55/address.rb, line 54 def unprefixed Util.unprefix(address) end