scale_rb 0.3.5 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 946dbb730e56172125e2524d66c41650fb08a3b799576000b5254467080ec771
4
- data.tar.gz: cae0b7ce708380ceeefa2bdd412abc30adbc5de5153b68bec12625497cf89e03
3
+ metadata.gz: 51cde569bc10814d0163c4b972c1d926a5ef69a044d02e88085db5bfdd9119a0
4
+ data.tar.gz: 694a2356b2626d1491c2dbb5cca8207179e614a88579c99bbd43a312c2435f9d
5
5
  SHA512:
6
- metadata.gz: 3d9b11df5acc3538b9fd7af4aabd1db74f9fb0f08ab7bc2620299d2145beee2805eeee12b1948e33a9198b0141b4b6c57187bb99f984743dbfb1c7e62e9b0ca7
7
- data.tar.gz: df6d923402362b259384fe585a83ee490dc3e5bc5154d41b886a74ee1ab19d3e1fa0e92c0a3f8c2b5ffb976f12138418728b0c046ac23470bb1954b12a65a048
6
+ metadata.gz: cbe20c371a268df323e64fcd9b142a8d04b87dc00e7079e1fd5e0979cbd4311de10b20687928200c427c407d839ce6ba0c804d5e08c72001a05d16b25b6faee8
7
+ data.tar.gz: 7e36ec4ef1d6e0b5584464498836fa5f19f4f7d194856c15bd25165bc6dd7f9f01e97cf0c736bc734806be83a26cc70b1fcb3b5986f95ba8fde0361dc76227b5
@@ -1,15 +1,20 @@
1
1
  require 'scale_rb'
2
2
 
3
+ def fetch_some_storages(client, block_number)
4
+ start_time = Time.now
5
+
6
+ block_hash = client.chain_getBlockHash(block_number)
7
+ metadata = client.get_metadata(block_hash)
8
+ puts "event count: #{client.get_storage('System', 'EventCount', block_hash:, metadata:)}"
9
+ puts "treasury proposal #854: #{client.get_storage('Treasury', 'Proposals', [854], block_hash:, metadata:)}"
10
+ puts "all treasury proposals: #{client.get_storage('Treasury', 'Proposals', block_hash:, metadata:)}"
11
+ puts "child bounties: #{client.get_storage('ChildBounties', 'ChildBounties', [11, 1646], block_hash:, metadata:)}"
12
+
13
+ end_time = Time.now
14
+ puts "Time taken: #{end_time - start_time} seconds"
15
+ end
16
+
3
17
  ScaleRb.logger.level = Logger::DEBUG
4
18
 
5
19
  client = ScaleRb::HttpClient.new('https://polkadot-rpc.dwellir.com')
6
- block_number = 21711742
7
- block_hash = client.chain_getBlockHash(block_number)
8
- metadata = client.get_metadata(block_hash)
9
-
10
- storage_query = ScaleRb::WsClient::StorageQuery.new(
11
- pallet_name: 'System',
12
- storage_name: 'Events',
13
- )
14
- storage = client.get_storage(block_hash, storage_query, metadata)
15
- puts "block #{block_number}(#{block_hash}) has #{storage.length} events"
20
+ fetch_some_storages(client, 21711742)
@@ -1,43 +1,21 @@
1
1
  require 'scale_rb'
2
2
 
3
- # ScaleRb.logger.level = Logger::DEBUG
3
+ def fetch_some_storages(client, block_number)
4
+ start_time = Time.now
4
5
 
5
- ScaleRb::WsClient.start('wss://polkadot-rpc.dwellir.com') do |client|
6
- block_number = 21711742
7
6
  block_hash = client.chain_getBlockHash(block_number)
8
7
  metadata = client.get_metadata(block_hash)
8
+ puts "event count: #{client.get_storage('System', 'EventCount', block_hash:, metadata:)}"
9
+ puts "treasury proposal #854: #{client.get_storage('Treasury', 'Proposals', [854], block_hash:, metadata:)}"
10
+ puts "all treasury proposals: #{client.get_storage('Treasury', 'Proposals', block_hash:, metadata:)}"
11
+ puts "child bounties: #{client.get_storage('ChildBounties', 'ChildBounties', [11, 1646], block_hash:, metadata:)}"
9
12
 
10
- storage_query = ScaleRb::WsClient::StorageQuery.new(
11
- pallet_name: 'System',
12
- storage_name: 'EventCount',
13
- )
14
- puts "event count: #{client.get_storage(block_hash, storage_query, metadata)}"
15
- # event count: 48
16
-
17
-
18
- storage_query = ScaleRb::WsClient::StorageQuery.new(
19
- pallet_name: 'Treasury',
20
- storage_name: 'Proposals',
21
- key_part1: 854,
22
- )
23
- puts "treasury proposal #854: #{client.get_storage(block_hash, storage_query, metadata)}"
24
- # treasury proposal #854: {:proposer=>"0xb6f0f10eec993f3e6806eb6cc4d2f13d5f5a90a17b855a7bf9847a87e07ee322", :value=>82650000000000, :beneficiary=>"0xb6f0f10eec993f3e6806eb6cc4d2f13d5f5a90a17b855a7bf9847a87e07ee322", :bond=>0}
25
-
26
-
27
- storage_query = ScaleRb::WsClient::StorageQuery.new(
28
- pallet_name: 'Treasury',
29
- storage_name: 'Proposals',
30
- )
31
- puts "all treasury proposals: #{client.get_storage(block_hash, storage_query, metadata)}"
32
- # all treasury proposals: [{:storage_key=>"0x89d139e01a5eb2256f222e5fc5dbe6b388c2f7188c6fdd1dffae2fa0d171f4400c1910093df9204856030000", :storage=>{:proposer=>"0xb6f0f10eec993f3e6806eb6cc4d2f13d5f5a90a17b855a7bf9847a87e07ee322", :value=>82650000000000, :beneficiary=>"0xb6f0f10eec993f3e6806eb6cc4d2f13d5f5a90a17b855a7bf9847a87e07ee322", :bond=>0}}, ...]
13
+ end_time = Time.now
14
+ puts "Time taken: #{end_time - start_time} seconds"
15
+ end
33
16
 
17
+ ScaleRb.logger.level = Logger::DEBUG
34
18
 
35
- storage_query = ScaleRb::WsClient::StorageQuery.new(
36
- pallet_name: 'ChildBounties',
37
- storage_name: 'ChildBounties',
38
- key_part1: 11,
39
- key_part2: 1646
40
- )
41
- puts "child bounties: #{client.get_storage(block_hash, storage_query, metadata)}"
42
- # child bounties: {:parent_bounty=>11, :value=>3791150000000, :fee=>0, :curator_deposit=>0, :status=>{:PendingPayout=>{:curator=>"0xb1725c0de514e0df808b19dbfca26672019ea5f9e2eb69c0055c7f1d01b4f18a", :beneficiary=>"0xb089dedc24a15308874dc862b035d74f2f7b45cad475d6121a2d944921bbe237", :unlock_at=>21703671}}}
19
+ ScaleRb::WsClient.start('wss://polkadot-rpc.dwellir.com') do |client|
20
+ fetch_some_storages(client, 21711742)
43
21
  end
@@ -2,37 +2,31 @@ module ScaleRb
2
2
 
3
3
  # This module is used to add extra methods to both the ScaleRb::WsClient ScaleRb::HttpClient
4
4
  module ClientExt
5
- StorageQuery = Struct.new(:pallet_name, :storage_name, :key_part1, :key_part2, keyword_init: true) do
6
- def initialize(pallet_name:, storage_name:, key_part1: nil, key_part2: nil)
7
- super
8
- end
9
- end
10
-
11
5
  # get decoded metadata at block_hash
12
- def get_metadata(block_hash)
6
+ def get_metadata(block_hash = nil)
7
+ block_hash ||= chain_getHead
13
8
  metadata_hex = state_getMetadata(block_hash)
14
9
  ScaleRb::Metadata.decode_metadata(metadata_hex.strip._to_bytes)
15
10
  end
16
11
 
17
12
  # Get decoded storage at block_hash
18
- def get_storage(block_hash, storage_query, metadata = nil)
13
+ def get_storage(pallet_name, storage_name, params = [], block_hash: nil, metadata: nil)
14
+ block_hash ||= chain_getHead
19
15
  metadata ||= get_metadata(block_hash)
20
16
 
21
17
  # storeage item
22
- pallet_name = convert_to_camel_case storage_query.pallet_name
23
- storage_name = convert_to_camel_case storage_query.storage_name
18
+ pallet_name = convert_to_camel_case pallet_name
19
+ storage_name = convert_to_camel_case storage_name
24
20
 
25
21
  # storage param
26
- key = [storage_query.key_part1, storage_query.key_part2].compact
27
- ScaleRb.logger.debug "#{pallet_name}.#{storage_name}(#{key.join(', ')})"
28
- key = key.map { |part_of_key| c(part_of_key) }
29
- ScaleRb.logger.debug "converted key: #{key}"
22
+ ScaleRb.logger.debug "#{pallet_name}.#{storage_name}(#{params.inspect})"
23
+ params = params.map { |param| c(param) }
30
24
 
31
25
  get_storage2(
32
26
  block_hash, # at
33
27
  pallet_name,
34
28
  storage_name,
35
- key,
29
+ params,
36
30
  metadata
37
31
  )
38
32
  end
@@ -102,7 +96,7 @@ module ScaleRb
102
96
  #
103
97
  # key is for the param, value is for the return
104
98
  def get_storage1(block_hash, pallet_name, item_name, key, value, registry)
105
- ScaleRb::logger.debug "get_storage1: #{pallet_name}.#{item_name} key: #{key} value: #{value}"
99
+ ScaleRb.logger.debug "#{pallet_name}.#{item_name}, key: #{key.inspect}, value: #{value}"
106
100
 
107
101
  if key
108
102
  if key[:value].nil? || key[:value].empty?
@@ -138,7 +132,6 @@ module ScaleRb
138
132
  end
139
133
 
140
134
  def get_storage2(block_hash, pallet_name, item_name, params, metadata)
141
- ScaleRb.logger.debug "get_storage2: #{pallet_name}.#{item_name} params: #{params}"
142
135
  raise 'Metadata should not be nil' if metadata.nil?
143
136
 
144
137
  registry = Metadata.build_registry(metadata)
@@ -50,7 +50,7 @@ module ScaleRb
50
50
  end
51
51
 
52
52
  def method_missing(method, *args)
53
- ScaleRb.logger.debug "#{method}(#{args.join(', ')})"
53
+ # ScaleRb.logger.debug "#{method}(#{args.join(', ')})"
54
54
 
55
55
  request(method.to_s, args)
56
56
  end
@@ -22,7 +22,7 @@ module ScaleRb
22
22
  data = parse_message(message)
23
23
  next if data.nil?
24
24
 
25
- ScaleRb.logger.debug "Received response: #{data}"
25
+ ScaleRb.logger.debug "Response: #{data}"
26
26
  Async do
27
27
  client.handle_response(data)
28
28
  end
@@ -71,7 +71,7 @@ module ScaleRb
71
71
 
72
72
  def method_missing(method, *args)
73
73
  method = method.to_s
74
- ScaleRb.logger.debug "#{method}(#{args.join(', ')})"
74
+ # ScaleRb.logger.debug "#{method}(#{args.join(', ')})"
75
75
 
76
76
  # why not check 'rpc_methods', because there is no @supported_methods when initializing
77
77
  if method != 'rpc_methods' && !@supported_methods.include?(method)
@@ -142,7 +142,7 @@ module ScaleRb
142
142
  })
143
143
 
144
144
  request = { jsonrpc: '2.0', id: @request_id, method: method, params: params }
145
- ScaleRb.logger.debug "Sending request: #{request}"
145
+ ScaleRb.logger.debug "Request: #{request}"
146
146
  @connection.write(request.to_json)
147
147
 
148
148
  @request_id += 1
data/lib/codec.rb CHANGED
@@ -404,6 +404,8 @@ module ScaleRb
404
404
  end
405
405
 
406
406
  def encode_uint(type, value)
407
+ raise InvalidValueError, "type: #{type}, value: #{value.inspect}" unless value.instance_of?(Integer)
408
+
407
409
  bit_length = type[1..].to_i
408
410
  value._to_bytes(bit_length)._flip
409
411
  end
@@ -1,3 +1,3 @@
1
1
  module ScaleRb
2
- VERSION = '0.3.5'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -20,12 +20,14 @@ module ScaleRb
20
20
  ]
21
21
  else
22
22
  [
23
- registry[key[:type]]._get(:def)._get(:tuple),
23
+ registry[key[:type]]._get(:def)._get(:tuple).first(key[:value].length),
24
24
  key[:value],
25
- key[:hashers]
25
+ key[:hashers].first(key[:value].length)
26
26
  ]
27
27
  end
28
28
 
29
+ ScaleRb.logger.debug "encode_storage_key: key_values: #{key_values.inspect}, key_types: #{key_types.inspect}, key_hashers: #{key_hashers.inspect}"
30
+
29
31
  if key_types.class != key_values.class || key_types.length != key_values.length
30
32
  raise "Key's value doesn't match key's type, key's value: #{key_values.inspect}, but key's type: #{key_types.inspect}. Please check your key's value."
31
33
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scale_rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aki Wu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-08-02 00:00:00.000000000 Z
11
+ date: 2024-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base58