Sha256: 189e8f8ffffeedfe4feec91b2341cf2c95b5a49044d3715cfd6bad577bd3c129

Contents?: true

Size: 1.41 KB

Versions: 2

Compression:

Stored size: 1.41 KB

Contents

# frozen_string_literal: true

require 'json'

module ScaleRb
  module RpcRequestBuilder
    def build_json_rpc_body(method, params, id)
      {
        'id' => id,
        'jsonrpc' => '2.0',
        'method' => method,
        'params' => params.reject(&:nil?)
      }.to_json
    end

    def respond_to_missing?(*_args)
      true
    end

    # example:
    #   state_getStorage(1, '0x363a..', 563_868)
    #
    #   ==
    #
    #   build_json_rpc_body('state_getStorage', ['0x363a..', 563_868], 1)
    def method_missing(method, *args)
      build_json_rpc_body(method, args[1..], args[0])
    end

    ###################################
    # derived functions
    ###################################
    def derived_state_get_storage(rpc_id, pallet_name, item_name, key = nil, registry = nil)
      storage_key = StorageHelper.encode_storage_key(pallet_name, item_name, key, registry)._to_hex
      state_getStorage(rpc_id, [storage_key])
    end

    def derived_state_subscribe_storage(rpc_id, pallet_name, item_name, key = nil, registry = nil)
      storage_key = StorageHelper.encode_storage_key(pallet_name, item_name, key, registry)._to_hex
      state_subscribeStorage(rpc_id, [storage_key])
    end

    def derived_eth_call(rpc_id, to, data, at = nil)
      eth_call(
        rpc_id,
        [
          {
            'from' => nil, 'to' => to, 'data' => data
          },
          at
        ]
      )
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
scale_rb-0.2.2 lib/client/rpc_request_builder.rb
scale_rb-0.2.0 lib/client/rpc_request_builder.rb