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