class Scale::Types::MetadataV4

Attributes

call_index[RW]
event_index[RW]

Public Class Methods

decode(scale_bytes) click to toggle source
# File lib/metadata/metadata_v4.rb, line 13
def self.decode(scale_bytes)
  modules = Scale::Types.get("Vec<MetadataV4Module>").decode(scale_bytes).value

  value = {
    magicNumber: 1_635_018_093,
    metadata: {
      version: 4,
      modules: modules.map(&:value)
    }
  }

  result = MetadataV4.new(value)

  call_module_index = 0
  event_module_index = 0

  modules.map(&:value).each do |m|
    if m[:calls]
      m[:calls].each_with_index do |call, index|
        call[:lookup] = "%02x%02x" % [call_module_index, index]
        result.call_index[call[:lookup]] = [m, call]
      end
      call_module_index += 1
    end

    if m[:events]
      m[:events].each_with_index do |event, index|
        event[:lookup] = "%02x%02x" % [event_module_index, index]
        result.event_index[event[:lookup]] = [m, event]
      end
      event_module_index += 1
    end
  end

  result
end
new(value) click to toggle source
Calls superclass method Scale::Types::Base::new
# File lib/metadata/metadata_v4.rb, line 7
def initialize(value)
  @call_index = {}
  @event_index = {}
  super(value)
end