Module: Ethereum::BaseConvert

Extended by:
BaseConvert
Included in:
BaseConvert
Defined in:
lib/ethereum/base_convert.rb

Constant Summary collapse

BaseSymbols =
{
  2   => '01'.freeze,
  10  => '0123456789'.freeze,
  16  => '0123456789abcdef'.freeze,
  32  => 'abcdefghijklmnopqrstuvwxyz234567'.freeze,
  58  => '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'.freeze,
  256 => 256.times.map {|i| i.chr }.join.freeze
}.freeze

Instance Method Summary collapse

Instance Method Details

#convert(s, from, to, minlen = 0) ⇒ Object



21
22
23
24
# File 'lib/ethereum/base_convert.rb', line 21

def convert(s, from, to, minlen=0)
  return Utils.lpad(s, symbols(from)[0], minlen) if from == to
  encode decode(s, from), to, minlen
end

#decode(s, base) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/ethereum/base_convert.rb', line 38

def decode(s, base)
  syms = symbols(base)
  s = s.downcase if base == 16

  result = 0
  while s.size > 0
    result *= base
    result += syms.index(s[0])
    s = s[1..-1]
  end

  result
end

#encode(v, base, minlen) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/ethereum/base_convert.rb', line 26

def encode(v, base, minlen)
  syms = symbols(base)

  result = ''
  while v > 0
    result = syms[v % base] + result
    v /= base
  end

  Utils.lpad result, syms[0], minlen
end

#symbols(base) ⇒ Object



17
18
19
# File 'lib/ethereum/base_convert.rb', line 17

def symbols(base)
  BaseSymbols[base] or raise ArgumentError, "invalid base!"
end