scale_rb 0.1.3 → 0.1.5

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.
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metadata
4
+ module MetadataV13
5
+ class << self
6
+ def get_module(module_name, metadata)
7
+ metadata._get(:metadata)._get(:v13)._get(:modules).find do |m|
8
+ m._get(:name) == module_name
9
+ end
10
+ end
11
+
12
+ def get_storage_item(module_name, item_name, metadata)
13
+ modula = get_module(module_name, metadata)
14
+ modula._get(:storage)._get(:items).find do |item|
15
+ item._get(:name) == item_name
16
+ end
17
+ end
18
+ end
19
+
20
+ TYPES = {
21
+ MetadataV13: {
22
+ modules: 'Vec<ModuleMetadataV13>',
23
+ extrinsic: 'ExtrinsicMetadataV13'
24
+ },
25
+
26
+ ModuleMetadataV13: {
27
+ name: 'Text',
28
+ storage: 'Option<StorageMetadataV13>',
29
+ calls: 'Option<Vec<FunctionMetadataV13>>',
30
+ events: 'Option<Vec<EventMetadataV13>>',
31
+ constants: 'Vec<ModuleConstantMetadataV13>',
32
+ errors: 'Vec<ErrorMetadataV13>',
33
+ index: 'u8'
34
+ },
35
+ StorageMetadataV13: {
36
+ prefix: 'Text',
37
+ items: 'Vec<StorageEntryMetadataV13>'
38
+ },
39
+ StorageEntryMetadataV13: {
40
+ name: 'Text',
41
+ modifier: 'StorageEntryModifierV13',
42
+ type: 'StorageEntryTypeV13',
43
+ fallback: 'Bytes',
44
+ docs: 'Vec<Text>'
45
+ },
46
+ StorageEntryModifierV13: 'StorageEntryModifierV12',
47
+ StorageEntryTypeV13: {
48
+ _enum: {
49
+ plain: 'Type',
50
+ map: {
51
+ hasher: 'StorageHasherV13',
52
+ key: 'Type',
53
+ value: 'Type',
54
+ linked: 'bool'
55
+ },
56
+ doubleMap: {
57
+ hasher: 'StorageHasherV13',
58
+ key1: 'Type',
59
+ key2: 'Type',
60
+ value: 'Type',
61
+ key2Hasher: 'StorageHasherV13'
62
+ },
63
+ nMap: {
64
+ keyVec: 'Vec<Type>',
65
+ hashers: 'Vec<StorageHasherV13>',
66
+ value: 'Type'
67
+ }
68
+ }
69
+ },
70
+ StorageHasherV13: 'StorageHasherV12',
71
+ FunctionMetadataV13: 'FunctionMetadataV12',
72
+ EventMetadataV13: 'EventMetadataV12',
73
+ ModuleConstantMetadataV13: 'ModuleConstantMetadataV12',
74
+ ErrorMetadataV13: 'ErrorMetadataV12',
75
+ ExtrinsicMetadataV13: 'ExtrinsicMetadataV12'
76
+ }.freeze
77
+ end
78
+ end
@@ -0,0 +1,176 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metadata
4
+ module MetadataV14
5
+ class << self
6
+ def build_registry(metadata)
7
+ types = metadata._get(:lookup)._get(:types)
8
+ types.map { |type| [type._get(:id), type._get(:type)] }.to_h
9
+ end
10
+
11
+ def get_module(pallet_name, metadata)
12
+ metadata._get(:metadata)._get(:v14)._get(:pallets).find do |p|
13
+ p._get(:name) == pallet_name
14
+ end
15
+ end
16
+
17
+ def get_storage_item(pallet_name, item_name, metadata)
18
+ pallet = get_module(pallet_name, metadata)
19
+ pallet._get(:storage)._get(:items).find do |item|
20
+ item._get(:name) == item_name
21
+ end
22
+ end
23
+ end
24
+
25
+ TYPES = {
26
+ MetadataV14: {
27
+ lookup: 'PortableRegistry',
28
+ pallets: 'Vec<PalletMetadataV14>',
29
+ extrinsic: 'ExtrinsicMetadataV14',
30
+ type: 'SiLookupTypeId'
31
+ },
32
+
33
+ # PortableRegistry begin
34
+ PortableRegistry: {
35
+ types: 'Vec<PortableTypeV14>'
36
+ },
37
+ PortableTypeV14: {
38
+ id: 'Si1LookupTypeId',
39
+ type: 'Si1Type'
40
+ },
41
+ Si1LookupTypeId: 'Compact',
42
+ Si1Type: {
43
+ path: 'Si1Path',
44
+ params: 'Vec<Si1TypeParameter>',
45
+ def: 'Si1TypeDef',
46
+ docs: 'Vec<Text>'
47
+ },
48
+ Si1Path: 'Vec<Text>',
49
+ Si1TypeParameter: {
50
+ name: 'Text',
51
+ type: 'Option<Si1LookupTypeId>'
52
+ },
53
+ Si1TypeDef: {
54
+ _enum: {
55
+ composite: 'Si1TypeDefComposite',
56
+ variant: 'Si1TypeDefVariant',
57
+ sequence: 'Si1TypeDefSequence',
58
+ array: 'Si1TypeDefArray',
59
+ tuple: 'Si1TypeDefTuple',
60
+ primitive: 'Si1TypeDefPrimitive',
61
+ compact: 'Si1TypeDefCompact',
62
+ bitSequence: 'Si1TypeDefBitSequence',
63
+ historicMetaCompat: 'Text' # TODO: sanitize?
64
+ }
65
+ },
66
+ Si1TypeDefComposite: {
67
+ fields: 'Vec<Si1Field>'
68
+ },
69
+ Si1Field: {
70
+ name: 'Option<Text>',
71
+ type: 'Si1LookupTypeId',
72
+ typeName: 'Option<Text>',
73
+ docs: 'Vec<Text>'
74
+ },
75
+ Si1TypeDefVariant: {
76
+ variants: 'Vec<Si1Variant>'
77
+ },
78
+ Si1Variant: {
79
+ name: 'Text',
80
+ fields: 'Vec<Si1Field>',
81
+ index: 'u8',
82
+ docs: 'Vec<Text>'
83
+ },
84
+ Si1TypeDefSequence: {
85
+ type: 'Si1LookupTypeId'
86
+ },
87
+ Si1TypeDefArray: {
88
+ len: 'u32',
89
+ type: 'Si1LookupTypeId'
90
+ },
91
+ Si1TypeDefTuple: 'Vec<Si1LookupTypeId>',
92
+ Si1TypeDefPrimitive: {
93
+ _enum: %w[
94
+ Bool Char Str U8 U16 U32 U64 U128 U256 I8 I16 I32 I64 I128 I256
95
+ ]
96
+ },
97
+ Si1TypeDefCompact: {
98
+ type: 'Si1LookupTypeId'
99
+ },
100
+ Si1TypeDefBitSequence: {
101
+ bitStoreType: 'Si1LookupTypeId',
102
+ bitOrderType: 'Si1LookupTypeId'
103
+ },
104
+ # PortableRegistry end
105
+
106
+ # PalletMetadataV14 begin
107
+ PalletMetadataV14: {
108
+ name: 'Text',
109
+ storage: 'Option<PalletStorageMetadataV14>',
110
+ calls: 'Option<PalletCallMetadataV14>',
111
+ events: 'Option<PalletEventMetadataV14>',
112
+ constants: 'Vec<PalletConstantMetadataV14>',
113
+ errors: 'Option<PalletErrorMetadataV14>',
114
+ index: 'U8'
115
+ },
116
+ PalletStorageMetadataV14: {
117
+ prefix: 'Text',
118
+ items: 'Vec<StorageEntryMetadataV14>'
119
+ },
120
+ StorageEntryMetadataV14: {
121
+ name: 'Text',
122
+ modifier: 'StorageEntryModifierV14',
123
+ type: 'StorageEntryTypeV14',
124
+ fallback: 'Bytes',
125
+ docs: 'Vec<Text>'
126
+ },
127
+ StorageEntryModifierV14: {
128
+ _enum: %w[Optional Default Required]
129
+ },
130
+ StorageEntryTypeV14: {
131
+ _enum: {
132
+ plain: 'SiLookupTypeId',
133
+ map: {
134
+ hashers: 'Vec<StorageHasherV14>',
135
+ key: 'SiLookupTypeId',
136
+ value: 'SiLookupTypeId'
137
+ }
138
+ }
139
+ },
140
+ StorageHasherV14: {
141
+ _enum: %w[Blake2128 Blake2256 Blake2128Concat Twox128 Twox256 Twox64Concat Identity]
142
+ },
143
+ PalletCallMetadataV14: {
144
+ type: 'Si1LookupTypeId'
145
+ },
146
+ PalletEventMetadataV14: {
147
+ type: 'SiLookupTypeId'
148
+ },
149
+ PalletConstantMetadataV14: {
150
+ name: 'Text',
151
+ type: 'SiLookupTypeId',
152
+ value: 'Bytes',
153
+ docs: 'Vec<Text>'
154
+ },
155
+ PalletErrorMetadataV14: {
156
+ type: 'SiLookupTypeId'
157
+ },
158
+ # PalletMetadataV14 end
159
+
160
+ # ExtrinsicMetadataV14 begin
161
+ ExtrinsicMetadataV14: {
162
+ type: 'SiLookupTypeId',
163
+ version: 'u8',
164
+ signedExtensions: 'Vec<SignedExtensionMetadataV14>'
165
+ },
166
+ SignedExtensionMetadataV14: {
167
+ identifier: 'Text',
168
+ type: 'SiLookupTypeId',
169
+ additionalSigned: 'SiLookupTypeId'
170
+ },
171
+ # ExtrinsicMetadataV14 end
172
+
173
+ SiLookupTypeId: 'Compact'
174
+ }.freeze
175
+ end
176
+ end
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metadata
4
+ module MetadataV9
5
+ class << self
6
+ def get_module(module_name, metadata)
7
+ metadata._get(:metadata)._get(:v9)._get(:modules).find do |m|
8
+ m._get(:name) == module_name
9
+ end
10
+ end
11
+
12
+ def get_storage_item(module_name, item_name, metadata)
13
+ modula = get_module(module_name, metadata)
14
+ modula._get(:storage)._get(:items).find do |item|
15
+ item._get(:name) == item_name
16
+ end
17
+ end
18
+ end
19
+
20
+ TYPES = {
21
+ ErrorMetadataV9: {
22
+ name: 'Text',
23
+ docs: 'Vec<Text>'
24
+ },
25
+ EventMetadataV9: {
26
+ name: 'Text',
27
+ args: 'Vec<Type>',
28
+ docs: 'Vec<Text>'
29
+ },
30
+ FunctionArgumentMetadataV9: {
31
+ name: 'Text',
32
+ type: 'Type'
33
+ },
34
+ FunctionMetadataV9: {
35
+ name: 'Text',
36
+ args: 'Vec<FunctionArgumentMetadataV9>',
37
+ docs: 'Vec<Text>'
38
+ },
39
+ MetadataV9: {
40
+ modules: 'Vec<ModuleMetadataV9>'
41
+ },
42
+ ModuleConstantMetadataV9: {
43
+ name: 'Text',
44
+ type: 'Type',
45
+ value: 'Bytes',
46
+ docs: 'Vec<Text>'
47
+ },
48
+ ModuleMetadataV9: {
49
+ name: 'Text',
50
+ storage: 'Option<StorageMetadataV9>',
51
+ calls: 'Option<Vec<FunctionMetadataV9>>',
52
+ events: 'Option<Vec<EventMetadataV9>>',
53
+ constants: 'Vec<ModuleConstantMetadataV9>',
54
+ errors: 'Vec<ErrorMetadataV9>'
55
+ },
56
+ StorageEntryMetadataV9: {
57
+ name: 'Text',
58
+ modifier: 'StorageEntryModifierV9',
59
+ type: 'StorageEntryTypeV9',
60
+ fallback: 'Bytes',
61
+ docs: 'Vec<Text>'
62
+ },
63
+ StorageEntryModifierV9: {
64
+ _enum: %w[Optional Default Required]
65
+ },
66
+ StorageEntryTypeV9: {
67
+ _enum: {
68
+ Plain: 'Type',
69
+ Map: {
70
+ hasher: 'StorageHasherV9',
71
+ key: 'Type',
72
+ value: 'Type',
73
+ linked: 'bool'
74
+ },
75
+ DoubleMap: {
76
+ hasher: 'StorageHasherV9',
77
+ key1: 'Type',
78
+ key2: 'Type',
79
+ value: 'Type',
80
+ key2Hasher: 'StorageHasherV9'
81
+ }
82
+ }
83
+ },
84
+ StorageHasherV9: {
85
+ _enum: %w[
86
+ Blake2_128
87
+ Blake2_256
88
+ Twox128
89
+ Twox256
90
+ Twox64Concat
91
+ ]
92
+ },
93
+ StorageMetadataV9: {
94
+ prefix: 'Text',
95
+ items: 'Vec<StorageEntryMetadataV9>'
96
+ }
97
+ }.freeze
98
+ end
99
+ end
@@ -106,8 +106,10 @@ class Hash
106
106
  def _get(key)
107
107
  if key.instance_of?(String)
108
108
  self[key] || self[key.to_sym]
109
- else
109
+ elsif key.instance_of?(Symbol)
110
110
  self[key] || self[key.to_s]
111
+ else
112
+ self[key]
111
113
  end
112
114
  end
113
115
  end
@@ -81,37 +81,41 @@ module PortableCodec
81
81
  def decode_composite(composite_type, bytes, registry)
82
82
  fields = composite_type._get(:fields)
83
83
 
84
- type_name_list = fields.map { |f| f._get(:name) }
85
- type_id_list = fields.map { |f| f._get(:type) }
86
-
87
- type_value_list, remaining_bytes = _decode_types(type_id_list, bytes, registry)
88
- [
89
- if type_name_list.all?(&:nil?)
90
- type_value_list
91
- else
92
- [type_name_list.map(&:to_sym), type_value_list].transpose.to_h
93
- end,
94
- remaining_bytes
95
- ]
84
+ # reduce composite level when composite only has one field without name
85
+ if fields.length == 1 && fields.first._get(:name).nil?
86
+ decode(fields.first._get(:type), bytes, registry)
87
+ else
88
+ type_name_list = fields.map { |f| f._get(:name) }
89
+ type_id_list = fields.map { |f| f._get(:type) }
90
+
91
+ type_value_list, remaining_bytes = _decode_types(type_id_list, bytes, registry)
92
+ [
93
+ if type_name_list.all?(&:nil?)
94
+ type_value_list
95
+ else
96
+ [type_name_list.map(&:to_sym), type_value_list].transpose.to_h
97
+ end,
98
+ remaining_bytes
99
+ ]
100
+ end
96
101
  end
97
102
 
98
103
  def decode_variant(variant_type, bytes, registry)
99
104
  variants = variant_type._get(:variants)
100
105
 
101
106
  index = bytes[0]
102
- if index > (variants.length - 1)
103
- raise VariantIndexOutOfRange,
104
- "type: #{variant_type}, index: #{index}, bytes: #{bytes}"
105
- end
107
+ item = variants.find { |v| v._get(:index) == index } # item is an composite
106
108
 
107
- item_variant = variants.find { |v| v._get(:index) == index }
108
- item_name = item_variant._get(:name)
109
- item, remaining_bytes = decode_composite(item_variant, bytes[1..], registry)
109
+ raise VariantIndexOutOfRange, "type: #{variant_type}, index: #{index}, bytes: #{bytes}" if item.nil?
110
110
 
111
- [
112
- item.empty? ? item_name : { item_name.to_sym => item },
113
- remaining_bytes
114
- ]
111
+ item_name = item._get(:name)
112
+ item_fields = item._get(:fields)
113
+ if item_fields.empty?
114
+ [item_name, bytes[1..]]
115
+ else
116
+ item_value, remaining_bytes = decode_composite(item, bytes[1..], registry)
117
+ [{ item_name.to_sym => item_value }, remaining_bytes]
118
+ end
115
119
  end
116
120
 
117
121
  def _decode_types(ids, bytes, registry = {})
@@ -181,18 +185,23 @@ module PortableCodec
181
185
  # or
182
186
  # [value1, value2, ...]
183
187
  def encode_composite(composite_type, value, registry)
184
- values =
185
- if value.instance_of?(Hash)
186
- value.values
187
- elsif value.instance_of?(Array)
188
- value
189
- else
190
- raise CompositeInvalidValue, "value: #{value}, only hash and array"
191
- end
192
-
193
188
  fields = composite_type._get(:fields)
194
- type_id_list = fields.map { |f| f._get(:type) }
195
- _encode_types(type_id_list, values, registry)
189
+ # reduce composite level when composite only has one field without name
190
+ if fields.length == 1 && fields.first._get(:name).nil?
191
+ encode(fields.first._get(:type), value, registry)
192
+ else
193
+ values =
194
+ if value.instance_of?(Hash)
195
+ value.values
196
+ elsif value.instance_of?(Array)
197
+ value
198
+ else
199
+ raise CompositeInvalidValue, "value: #{value}, only hash and array"
200
+ end
201
+
202
+ type_id_list = fields.map { |f| f._get(:type) }
203
+ _encode_types(type_id_list, values, registry)
204
+ end
196
205
  end
197
206
 
198
207
  # value:
@@ -213,11 +222,11 @@ module PortableCodec
213
222
  raise VariantInvalidValue, "type: #{variant_type}, value: #{value}"
214
223
  end
215
224
 
216
- variant = variants.find { |var| var._get(:name) == name }
217
- raise VariantItemNotFound, "type: #{variant_type}, name: #{name}" if variant.nil?
218
- raise VariantInvalidValue, "type: #{variant_type}, v: #{v}" if variant._get(:fields).length != v.length
225
+ item = variants.find { |var| var._get(:name) == name }
226
+ raise VariantItemNotFound, "type: #{variant_type}, name: #{name}" if item.nil?
227
+ raise VariantInvalidValue, "type: #{variant_type}, v: #{v}" if item._get(:fields).length != v.length
219
228
 
220
- ScaleRb.encode_uint('u8', variant._get(:index)) + encode_composite(variant, v, registry)
229
+ ScaleRb.encode_uint('u8', item._get(:index)) + encode_composite(item, v, registry)
221
230
  end
222
231
 
223
232
  def _encode_types(ids, values, registry)
@@ -1,3 +1,3 @@
1
1
  module ScaleRb
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.5'
3
3
  end
data/lib/scale_rb.rb CHANGED
@@ -9,15 +9,21 @@ require 'codec'
9
9
  require 'portable_codec'
10
10
 
11
11
  # metadata types, decoding and helpers
12
- require 'metadata'
13
- require 'metadata_v14'
12
+ require 'metadata/metadata_v9'
13
+ require 'metadata/metadata_v10'
14
+ require 'metadata/metadata_v11'
15
+ require 'metadata/metadata_v12'
16
+ require 'metadata/metadata_v13'
17
+ require 'metadata/metadata_v14'
18
+ require 'metadata/metadata'
14
19
 
15
20
  require 'hasher'
16
21
  require 'storage_helper'
17
22
 
18
23
  # client
19
- require 'substrate/rpc'
20
- require 'substrate/client'
24
+ require 'client/rpc_request_builder'
25
+ require 'client/http_client'
26
+ require 'client/abstract_ws_client'
21
27
 
22
28
  # get registry from config
23
29
  require 'registry'
@@ -2,37 +2,56 @@
2
2
 
3
3
  module StorageHelper
4
4
  class << self
5
- # params:
6
- # pallet_name: module name
7
- # method_name: storage name
8
- # params: {
9
- # values: values,
10
- # type_ids: type_ids,
11
- # hashers: hashers,
12
- # }
13
- # registry: portable_types_registry
14
- def encode_storage_key(pallet_name, method_name, params = nil, registry = nil)
15
- pallet_method_key = Hasher.twox128(pallet_name) + Hasher.twox128(method_name)
5
+ # key: {
6
+ # value: ,
7
+ # type: ,
8
+ # hashers: []
9
+ # }
10
+ def encode_storage_key(pallet_name, item_name, key = nil, registry = nil)
11
+ storage_key = Hasher.twox128(pallet_name) + Hasher.twox128(item_name)
16
12
 
17
- if params.nil?
18
- pallet_method_key
19
- else
20
- values = params[:values]
21
- type_ids = params[:type_ids]
22
- hashers = params[:hashers]
13
+ if key && registry
14
+
15
+ types, values =
16
+ if key[:hashers].length == 1
17
+ [
18
+ [key[:type]],
19
+ [key[:value]]
20
+ ]
21
+ else
22
+ [
23
+ registry[key[:type]]._get(:def)._get(:tuple),
24
+ key[:value]
25
+ ]
26
+ end
23
27
 
24
- pallet_method_key + PortableCodec._encode_types_with_hashers(type_ids, values, registry, hashers)
28
+ storage_key + PortableCodec._encode_types_with_hashers(types, values, registry, key[:hashers])
29
+ else
30
+ storage_key
25
31
  end
26
32
  end
27
33
 
28
- def build_params(param_values, storage_key_type_id, hashers, registry)
29
- type_ids = registry._get(storage_key_type_id)._get(:def)._get(:tuple)
30
- type_ids = [storage_key_type_id] if type_ids.nil?
31
- {
32
- values: param_values,
33
- type_ids: type_ids,
34
- hashers: hashers
35
- }
34
+ # data: hex string
35
+ # type: portable type id
36
+ # optional: boolean
37
+ # fallback: hex string
38
+ def decode_storage(data, type, optional, fallback, registry)
39
+ data ||= (optional ? nil : fallback)
40
+ PortableCodec.decode(type, data.to_bytes, registry)[0]
41
+ end
42
+
43
+ # storage_item: the storage item from metadata
44
+ def decode_storage2(data, storage_item, registry)
45
+ modifier = storage_item._get(:modifier) # Default | Optional
46
+ fallback = storage_item._get(:fallback)
47
+ type = storage_item._get(:type)._get(:plain) || storage_item._get(:type)._get(:map)._get(:value)
48
+ decode_storage(data, type, modifier == 'Optional', fallback, registry)
49
+ end
50
+
51
+ def decode_storage3(data, pallet_name, item_name, metadata)
52
+ registry = Metadata.build_registry(metadata)
53
+ storage_item = Metadata.get_storage_item(pallet_name, item_name, metadata)
54
+ decode_storage2(data, storage_item, registry)
36
55
  end
37
56
  end
38
57
  end
data/scale_rb.gemspec CHANGED
@@ -26,6 +26,6 @@ Gem::Specification.new do |spec|
26
26
  spec.require_paths = ['lib']
27
27
 
28
28
  # for hashers
29
- spec.add_dependency 'blake2b_rs', '~> 0.1.2'
29
+ spec.add_dependency 'blake2b_rs', '~> 0.1.4'
30
30
  spec.add_dependency 'xxhash'
31
31
  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.1.3
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aki Wu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-10-13 00:00:00.000000000 Z
11
+ date: 2023-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: blake2b_rs
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.2
19
+ version: 0.1.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.1.2
26
+ version: 0.1.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: xxhash
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -59,18 +59,24 @@ files:
59
59
  - bin/console
60
60
  - bin/setup
61
61
  - exe/metadata
62
+ - lib/client/abstract_ws_client.rb
63
+ - lib/client/http_client.rb
64
+ - lib/client/rpc_request_builder.rb
62
65
  - lib/codec.rb
63
66
  - lib/hasher.rb
64
- - lib/metadata.rb
65
- - lib/metadata_v14.rb
67
+ - lib/metadata/metadata.rb
68
+ - lib/metadata/metadata_v10.rb
69
+ - lib/metadata/metadata_v11.rb
70
+ - lib/metadata/metadata_v12.rb
71
+ - lib/metadata/metadata_v13.rb
72
+ - lib/metadata/metadata_v14.rb
73
+ - lib/metadata/metadata_v9.rb
66
74
  - lib/monkey_patching.rb
67
75
  - lib/portable_codec.rb
68
76
  - lib/registry.rb
69
77
  - lib/scale_rb.rb
70
78
  - lib/scale_rb/version.rb
71
79
  - lib/storage_helper.rb
72
- - lib/substrate/client.rb
73
- - lib/substrate/rpc.rb
74
80
  - scale_rb.gemspec
75
81
  homepage: https://github.com/wuminzhe/scale_rb
76
82
  licenses:
@@ -93,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
99
  - !ruby/object:Gem::Version
94
100
  version: '0'
95
101
  requirements: []
96
- rubygems_version: 3.1.4
102
+ rubygems_version: 3.3.7
97
103
  signing_key:
98
104
  specification_version: 4
99
105
  summary: New Ruby SCALE Codec Library