class Platon::Function

Attributes

constant[RW]
function_string[RW]
inputs[RW]
name[RW]
outputs[RW]
signature[RW]

Public Class Methods

calc_id(signature) click to toggle source
# File lib/platon/function.rb, line 31
def self.calc_id(signature)
  Digest::SHA3.hexdigest(signature, 256)[0..7]
end
calc_signature(name, inputs) click to toggle source
# File lib/platon/function.rb, line 27
def self.calc_signature(name, inputs)
  "#{name}(#{inputs.collect {|x| self.to_canonical_type(x.type) }.join(",")})"
end
new(data) click to toggle source
# File lib/platon/function.rb, line 6
def initialize(data)
  @name = data["name"]
  @constant = data["constant"]
  @inputs = data["inputs"].map do |input|
    Platon::FunctionInput.new(input)
  end
  @outputs = data["outputs"].collect do |output|
    Platon::FunctionOutput.new(output)
  end
  @function_string = self.class.calc_signature(@name, @inputs)
  @signature = self.class.calc_id(@function_string)
end
to_canonical_type(type) click to toggle source
# File lib/platon/function.rb, line 19
def self.to_canonical_type(type)
  type
  .gsub(/(int)(\z|\D)/, '\1256\2')
  .gsub(/(uint)(\z|\D)/, '\1256\2')
  .gsub(/(fixed)(\z|\D)/, '\1128x128\2')
  .gsub(/(ufixed)(\z|\D)/, '\1128x128\2')
end