class SubstrateClient
Constants
- VERSION
Attributes
metadata[RW]
spec_name[RW]
spec_version[RW]
Public Class Methods
new(url, spec_name: nil)
click to toggle source
# File lib/substrate_client.rb, line 36 def initialize(url, spec_name: nil) @url = url @request_id = 1 @spec_name = spec_name Scale::TypeRegistry.instance.load(spec_name: spec_name) end
Public Instance Methods
compose_call(module_name, call_name, params, block_hash=nil)
click to toggle source
compose_call
“Balances”, “Transfer”, { dest: “0x586cb27c291c813ce74e86a60dad270609abf2fc8bee107e44a80ac00225c409”, value: 1_000_000_000_000 }
# File lib/substrate_client.rb, line 136 def compose_call(module_name, call_name, params, block_hash=nil) self.init_runtime(block_hash) SubstrateClient::Helper.compose_call_from_metadata(@metadata, module_name, call_name, params) end
generate_storage_hash_from_data(storage_hex_data)
click to toggle source
# File lib/substrate_client.rb, line 141 def generate_storage_hash_from_data(storage_hex_data) "0x" + Crypto.blake2_256(Scale::Bytes.new(storage_hex_data).bytes) end
generate_storage_key(module_name, storage_name, params = nil, block_hash = nil)
click to toggle source
# File lib/substrate_client.rb, line 130 def generate_storage_key(module_name, storage_name, params = nil, block_hash = nil) self.init_runtime(block_hash) SubstrateClient::Helper.generate_storage_key_from_metadata(@metadata, module_name, storage_name, params) end
get_block(block_hash=nil)
click to toggle source
# File lib/substrate_client.rb, line 100 def get_block(block_hash=nil) self.init_runtime(block_hash) block = self.chain_getBlock(block_hash) SubstrateClient::Helper.decode_block(block) end
get_block_events(block_hash=nil)
click to toggle source
# File lib/substrate_client.rb, line 106 def get_block_events(block_hash=nil) self.init_runtime(block_hash) storage_key = "0x26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7" events_data = state_getStorage storage_key, block_hash scale_bytes = Scale::Bytes.new(events_data) Scale::Types.get("Vec<EventRecord>").decode(scale_bytes).to_human end
get_block_number(block_hash)
click to toggle source
# File lib/substrate_client.rb, line 90 def get_block_number(block_hash) header = self.chain_getHeader(block_hash) header["number"].to_i(16) end
get_metadata(block_hash=nil)
click to toggle source
# File lib/substrate_client.rb, line 95 def get_metadata(block_hash=nil) hex = self.state_getMetadata(block_hash) Scale::Types::Metadata.decode(Scale::Bytes.new(hex)) end
get_storage(module_name, storage_name, params = nil, block_hash = nil)
click to toggle source
Plain: client.get_storage(“Sudo”, “Key”) Plain: client.get_storage(“Balances”, “TotalIssuance”) Map: client.get_storage(“System”, “Account”, [“0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d”]) DoubleMap: client.get_storage(“ImOnline”, “AuthoredBlocks”, [2818, “0x749ddc93a65dfec3af27cc7478212cb7d4b0c0357fef35a0163966ab5333b757”])
# File lib/substrate_client.rb, line 120 def get_storage(module_name, storage_name, params = nil, block_hash = nil) self.init_runtime(block_hash) storage_key, return_type = SubstrateClient::Helper.generate_storage_key_from_metadata(@metadata, module_name, storage_name, params) result = self.state_getStorage(storage_key, block_hash) return unless result Scale::Types.get(return_type).decode(Scale::Bytes.new(result)) end
init_runtime(block_hash=nil)
click to toggle source
# File lib/substrate_client.rb, line 59 def init_runtime(block_hash=nil) # set current runtime spec version runtime_version = self.state_getRuntimeVersion(block_hash) @spec_version = runtime_version["specVersion"] Scale::TypeRegistry.instance.spec_version = @spec_version # set current metadata @metadata = self.get_metadata(block_hash) Scale::TypeRegistry.instance.metadata = @metadata.value true end
invoke(method, *params)
click to toggle source
# File lib/substrate_client.rb, line 71 def invoke(method, *params) # params.reject! { |param| param.nil? } request(method, params) end
method_missing(method, *args)
click to toggle source
################################################ origin rpc methods ################################################
# File lib/substrate_client.rb, line 79 def method_missing(method, *args) invoke method, *args end
methods()
click to toggle source
################################################ custom methods based on origin rpc methods ################################################
# File lib/substrate_client.rb, line 86 def methods invoke("rpc_methods")["methods"] end
request(method, params)
click to toggle source
# File lib/substrate_client.rb, line 43 def request(method, params) payload = { "jsonrpc" => "2.0", "method" => method, "params" => params, "id" => @request_id } data = ws_request(@url, payload) if data["error"] raise RpcError, data["error"] else data["result"] end end