module XRBP::NodeStore::STAmount::Conversion

Public Class Methods

included(base) click to toggle source
# File lib/xrbp/nodestore/sle/st_amount_conversion.rb, line 86
def self.included(base)
  base.extend(ClassMethods)
end

Public Instance Methods

clear() click to toggle source
# File lib/xrbp/nodestore/sle/st_amount_conversion.rb, line 174
def clear
  # From rippled docs:
  #   The -100 is used to allow 0 to sort less than a small positive values
  #   which have a negative exponent.
  @exponent = native? ? 0 : -100

  @neg = false
  @mantissa = 0
end
drops()
Alias for: xrp_amount
iou_amount() click to toggle source
# File lib/xrbp/nodestore/sle/st_amount_conversion.rb, line 197
def iou_amount
  (neg ? -1 : 1) * mantissa * 10 ** exponent
end
negate!() click to toggle source
# File lib/xrbp/nodestore/sle/st_amount_conversion.rb, line 109
def negate!
  return if zero?
  @neg = !@neg
end
sn_value() click to toggle source
# File lib/xrbp/nodestore/sle/st_amount_conversion.rb, line 184
def sn_value
  neg ? (-mantissa) : mantissa
end
to_h() click to toggle source
# File lib/xrbp/nodestore/sle/st_amount_conversion.rb, line 102
def to_h
  {:mantissa => mantissa,
   :exponent => exponent,
   :neg      => neg,
   :issue    => issue.to_h}
end
to_wire() click to toggle source

Encode STAmount into binary format

# File lib/xrbp/nodestore/sle/st_amount_conversion.rb, line 91
def to_wire
  xrp_bit = ((native? ? 0 : 1) << 63)
  neg_bit = ((   neg  ? 0 : 1) << 62)
  value_bits = native? ? mantissa :
            (((exponent+97) << 54) + mantissa)

  xrp_bit + neg_bit + value_bits
end
xrp_amount() click to toggle source

In drops!

# File lib/xrbp/nodestore/sle/st_amount_conversion.rb, line 191
def xrp_amount
  neg ? (-value) : value
end
Also aliased as: drops

Protected Instance Methods

canonicalize() click to toggle source
# File lib/xrbp/nodestore/sle/st_amount_conversion.rb, line 118
def canonicalize
  if native?
    if @mantissa == 0
      @exponent = 0
      @neg = false
      return
    end

    while @exponent < 0
      @mantissa /= 10
      @exponent += 1
    end

    while @exponent > 0
      @mantissa *= 10
      @exponent -= 1
    end

    raise if @mantissa > MAX_NATIVE
    return
  end

  if @mantissa == 0
    @exponent = -100
    @negative = false
    return
  end

  while ((@mantissa < MIN_VAL) && (@exponent > MIN_OFFSET))
    @mantissa *= 10;
    @exponent -= 1
  end

  while (@mantissa > MAX_VAL)
    raise "value overflow" if (@exponent >= MAX_OFFSET)

    @mantissa /= 10
    @exponent += 1
  end

  if @exponent < MIN_OFFSET || @mantissa < MIN_VAL
    @mantissa = 0;
    @neg      = false;
    @exponent = -100;
    return
  end

  raise "value overflow" if (@exponent > MAX_OFFSET)

  raise unless @mantissa == 0 || (@mantissa >= MIN_VAL    && @mantissa <= MAX_VAL)
  raise unless @mantissa == 0 || (@exponent >= MIN_OFFSET && @exponent <= MAX_OFFSET)
  raise unless @mantissa != 0 ||  @exponent != -100
end