class Ethereum::Address

Constants

BLANK
CREATE_CONTRACT
ZERO

Public Class Methods

new(s) click to toggle source
# File lib/ethereum/address.rb, line 10
def initialize(s)
  @bytes = parse s
end

Public Instance Methods

blank?() click to toggle source
# File lib/ethereum/address.rb, line 26
def blank?
  @bytes == BLANK
end
checksum(bytes=nil) click to toggle source
# File lib/ethereum/address.rb, line 22
def checksum(bytes=nil)
  Utils.keccak256(bytes||@bytes)[0,4]
end
to_bytes(extended=false) click to toggle source
# File lib/ethereum/address.rb, line 14
def to_bytes(extended=false)
  extended ? "#{@bytes}#{checksum}" : @bytes
end
to_hex(extended=false) click to toggle source
# File lib/ethereum/address.rb, line 18
def to_hex(extended=false)
  Utils.encode_hex to_bytes(extended)
end

Private Instance Methods

parse(s) click to toggle source
# File lib/ethereum/address.rb, line 32
def parse(s)
  return Utils.int_to_addr(s) if s.is_a?(Integer)

  case s.size
  when 0
    s
  when 40
    Utils.decode_hex s
  when 42
    raise FormatError, "Invalid address format!" unless s[0,2] == '0x'
    parse s[2..-1]
  when 48
    bytes = Utils.decode_hex s
    parse bytes
  when 50
    raise FormatError, "Invalid address format!" unless s[0,2] == '0x'
    parse s[2..-1]
  when 20
    s
  when 24
    bytes = s[0...-4]
    raise ChecksumError, "Invalid address checksum!" unless s[-4..-1] == checksum(bytes)
    bytes
  else
    raise FormatError, "Invalid address format!"
  end
end