scale_rb 0.1.3 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +3 -3
- data/README.md +3 -0
- data/exe/metadata +3 -3
- data/lib/client/abstract_ws_client.rb +100 -0
- data/lib/{substrate/client.rb → client/http_client.rb} +47 -27
- data/lib/client/rpc_request_builder.rb +53 -0
- data/lib/codec.rb +27 -9
- data/lib/metadata/metadata.rb +55 -0
- data/lib/metadata/metadata_v10.rb +79 -0
- data/lib/metadata/metadata_v11.rb +85 -0
- data/lib/metadata/metadata_v12.rb +47 -0
- data/lib/metadata/metadata_v13.rb +78 -0
- data/lib/metadata/metadata_v14.rb +176 -0
- data/lib/metadata/metadata_v9.rb +99 -0
- data/lib/monkey_patching.rb +3 -1
- data/lib/portable_codec.rb +47 -38
- data/lib/scale_rb/version.rb +1 -1
- data/lib/scale_rb.rb +10 -4
- data/lib/storage_helper.rb +45 -26
- data/scale_rb.gemspec +1 -1
- metadata +15 -9
- data/lib/metadata.rb +0 -199
- data/lib/metadata_v14.rb +0 -21
- data/lib/substrate/rpc.rb +0 -70
data/lib/metadata.rb
DELETED
@@ -1,199 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Metadata
|
4
|
-
class << self
|
5
|
-
def decode_metadata(bytes)
|
6
|
-
metadata, = ScaleRb.decode('MetadataTop', bytes, TYPES)
|
7
|
-
metadata
|
8
|
-
end
|
9
|
-
|
10
|
-
def build_registry(metadata)
|
11
|
-
raise ScaleRb::NotImplemented, metadata._get(:metadata).keys.first unless metadata._get(:metadata)._key?(:v14)
|
12
|
-
|
13
|
-
metadata_v14 = metadata._get(:metadata)._get(:v14)
|
14
|
-
MetadataV14.build_registry(metadata_v14)
|
15
|
-
end
|
16
|
-
|
17
|
-
def get_storage_item(pallet_name, item_name, metadata)
|
18
|
-
raise ScaleRb::NotImplemented, metadata._get(:metadata).keys.first unless metadata._get(:metadata)._key?(:v14)
|
19
|
-
|
20
|
-
metadata_v14 = metadata._get(:metadata)._get(:v14)
|
21
|
-
MetadataV14.get_storage_item(pallet_name, item_name, metadata_v14)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
TYPES = {
|
26
|
-
'MetadataTop' => {
|
27
|
-
magicNumber: 'U32',
|
28
|
-
metadata: 'Metadata'
|
29
|
-
},
|
30
|
-
'Metadata' => {
|
31
|
-
_enum: {
|
32
|
-
v0: 'MetadataV0',
|
33
|
-
v1: 'MetadataV1',
|
34
|
-
v2: 'MetadataV2',
|
35
|
-
v3: 'MetadataV3',
|
36
|
-
v4: 'MetadataV4',
|
37
|
-
v5: 'MetadataV5',
|
38
|
-
v6: 'MetadataV6',
|
39
|
-
v7: 'MetadataV7',
|
40
|
-
v8: 'MetadataV8',
|
41
|
-
v9: 'MetadataV9',
|
42
|
-
v10: 'MetadataV10',
|
43
|
-
v11: 'MetadataV11',
|
44
|
-
v12: 'MetadataV12',
|
45
|
-
v13: 'MetadataV13',
|
46
|
-
v14: 'MetadataV14'
|
47
|
-
}
|
48
|
-
},
|
49
|
-
|
50
|
-
'MetadataV14' => {
|
51
|
-
lookup: 'PortableRegistry',
|
52
|
-
pallets: 'Vec<PalletMetadataV14>',
|
53
|
-
extrinsic: 'ExtrinsicMetadataV14',
|
54
|
-
type: 'SiLookupTypeId'
|
55
|
-
},
|
56
|
-
|
57
|
-
# PortableRegistry begin
|
58
|
-
'PortableRegistry' => {
|
59
|
-
types: 'Vec<PortableTypeV14>'
|
60
|
-
},
|
61
|
-
'PortableTypeV14' => {
|
62
|
-
id: 'Si1LookupTypeId',
|
63
|
-
type: 'Si1Type'
|
64
|
-
},
|
65
|
-
'Si1LookupTypeId' => 'Compact',
|
66
|
-
'Si1Type' => {
|
67
|
-
path: 'Si1Path',
|
68
|
-
params: 'Vec<Si1TypeParameter>',
|
69
|
-
def: 'Si1TypeDef',
|
70
|
-
docs: 'Vec<Text>'
|
71
|
-
},
|
72
|
-
'Si1Path' => 'Vec<Text>',
|
73
|
-
'Si1TypeParameter' => {
|
74
|
-
name: 'Text',
|
75
|
-
type: 'Option<Si1LookupTypeId>'
|
76
|
-
},
|
77
|
-
'Si1TypeDef' => {
|
78
|
-
_enum: {
|
79
|
-
composite: 'Si1TypeDefComposite',
|
80
|
-
variant: 'Si1TypeDefVariant',
|
81
|
-
sequence: 'Si1TypeDefSequence',
|
82
|
-
array: 'Si1TypeDefArray',
|
83
|
-
tuple: 'Si1TypeDefTuple',
|
84
|
-
primitive: 'Si1TypeDefPrimitive',
|
85
|
-
compact: 'Si1TypeDefCompact',
|
86
|
-
bitSequence: 'Si1TypeDefBitSequence',
|
87
|
-
historicMetaCompat: 'Text' # TODO: sanitize?
|
88
|
-
}
|
89
|
-
},
|
90
|
-
'Si1TypeDefComposite' => {
|
91
|
-
fields: 'Vec<Si1Field>'
|
92
|
-
},
|
93
|
-
'Si1Field' => {
|
94
|
-
name: 'Option<Text>',
|
95
|
-
type: 'Si1LookupTypeId',
|
96
|
-
typeName: 'Option<Text>',
|
97
|
-
docs: 'Vec<Text>'
|
98
|
-
},
|
99
|
-
'Si1TypeDefVariant' => {
|
100
|
-
variants: 'Vec<Si1Variant>'
|
101
|
-
},
|
102
|
-
'Si1Variant' => {
|
103
|
-
name: 'Text',
|
104
|
-
fields: 'Vec<Si1Field>',
|
105
|
-
index: 'u8',
|
106
|
-
docs: 'Vec<Text>'
|
107
|
-
},
|
108
|
-
'Si1TypeDefSequence' => {
|
109
|
-
type: 'Si1LookupTypeId'
|
110
|
-
},
|
111
|
-
'Si1TypeDefArray' => {
|
112
|
-
len: 'u32',
|
113
|
-
type: 'Si1LookupTypeId'
|
114
|
-
},
|
115
|
-
'Si1TypeDefTuple' => 'Vec<Si1LookupTypeId>',
|
116
|
-
'Si1TypeDefPrimitive' => {
|
117
|
-
_enum: %w[
|
118
|
-
Bool Char Str U8 U16 U32 U64 U128 U256 I8 I16 I32 I64 I128 I256
|
119
|
-
]
|
120
|
-
},
|
121
|
-
'Si1TypeDefCompact' => {
|
122
|
-
type: 'Si1LookupTypeId'
|
123
|
-
},
|
124
|
-
'Si1TypeDefBitSequence' => {
|
125
|
-
bitStoreType: 'Si1LookupTypeId',
|
126
|
-
bitOrderType: 'Si1LookupTypeId'
|
127
|
-
},
|
128
|
-
# PortableRegistry end
|
129
|
-
|
130
|
-
# PalletMetadataV14 begin
|
131
|
-
'PalletMetadataV14' => {
|
132
|
-
name: 'Text',
|
133
|
-
storage: 'Option<PalletStorageMetadataV14>',
|
134
|
-
calls: 'Option<PalletCallMetadataV14>',
|
135
|
-
events: 'Option<PalletEventMetadataV14>',
|
136
|
-
constants: 'Vec<PalletConstantMetadataV14>',
|
137
|
-
errors: 'Option<PalletErrorMetadataV14>',
|
138
|
-
index: 'U8'
|
139
|
-
},
|
140
|
-
'PalletStorageMetadataV14' => {
|
141
|
-
prefix: 'Text',
|
142
|
-
items: 'Vec<StorageEntryMetadataV14>'
|
143
|
-
},
|
144
|
-
'StorageEntryMetadataV14' => {
|
145
|
-
name: 'Text',
|
146
|
-
modifier: 'StorageEntryModifierV14',
|
147
|
-
type: 'StorageEntryTypeV14',
|
148
|
-
fallback: 'Bytes',
|
149
|
-
docs: 'Vec<Text>'
|
150
|
-
},
|
151
|
-
'StorageEntryModifierV14' => {
|
152
|
-
_enum: %w[Optional Default Required]
|
153
|
-
},
|
154
|
-
'StorageEntryTypeV14' => {
|
155
|
-
_enum: {
|
156
|
-
plain: 'SiLookupTypeId',
|
157
|
-
map: {
|
158
|
-
hashers: 'Vec<StorageHasherV14>',
|
159
|
-
key: 'SiLookupTypeId',
|
160
|
-
value: 'SiLookupTypeId'
|
161
|
-
}
|
162
|
-
}
|
163
|
-
},
|
164
|
-
'StorageHasherV14' => {
|
165
|
-
_enum: %w[Blake2128 Blake2256 Blake2128Concat Twox128 Twox256 Twox64Concat Identity]
|
166
|
-
},
|
167
|
-
'PalletCallMetadataV14' => {
|
168
|
-
type: 'Si1LookupTypeId'
|
169
|
-
},
|
170
|
-
'PalletEventMetadataV14' => {
|
171
|
-
type: 'SiLookupTypeId'
|
172
|
-
},
|
173
|
-
'PalletConstantMetadataV14' => {
|
174
|
-
name: 'Text',
|
175
|
-
type: 'SiLookupTypeId',
|
176
|
-
value: 'Bytes',
|
177
|
-
docs: 'Vec<Text>'
|
178
|
-
},
|
179
|
-
'PalletErrorMetadataV14' => {
|
180
|
-
type: 'SiLookupTypeId'
|
181
|
-
},
|
182
|
-
# PalletMetadataV14 end
|
183
|
-
|
184
|
-
# ExtrinsicMetadataV14 begin
|
185
|
-
'ExtrinsicMetadataV14' => {
|
186
|
-
type: 'SiLookupTypeId',
|
187
|
-
version: 'u8',
|
188
|
-
signedExtensions: 'Vec<SignedExtensionMetadataV14>'
|
189
|
-
},
|
190
|
-
'SignedExtensionMetadataV14' => {
|
191
|
-
identifier: 'Text',
|
192
|
-
type: 'SiLookupTypeId',
|
193
|
-
additionalSigned: 'SiLookupTypeId'
|
194
|
-
},
|
195
|
-
# ExtrinsicMetadataV14 end
|
196
|
-
|
197
|
-
'SiLookupTypeId' => 'Compact'
|
198
|
-
}.freeze
|
199
|
-
end
|
data/lib/metadata_v14.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module MetadataV14
|
4
|
-
class << self
|
5
|
-
def build_registry(metadata)
|
6
|
-
types = metadata._get(:lookup)._get(:types)
|
7
|
-
types.map { |type| [type._get(:id), type._get(:type)] }.to_h
|
8
|
-
end
|
9
|
-
|
10
|
-
def get_storage_item(pallet_name, item_name, metadata)
|
11
|
-
pallet =
|
12
|
-
metadata._get(:pallets).find do |p|
|
13
|
-
p._get(:name) == pallet_name
|
14
|
-
end
|
15
|
-
|
16
|
-
pallet._get(:storage)._get(:items).find do |item|
|
17
|
-
item._get(:name) == item_name
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
data/lib/substrate/rpc.rb
DELETED
@@ -1,70 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'uri'
|
4
|
-
require 'net/http'
|
5
|
-
require 'json'
|
6
|
-
|
7
|
-
module Substrate
|
8
|
-
module RPC
|
9
|
-
class << self
|
10
|
-
def json_rpc_call(method, params, url)
|
11
|
-
uri = URI(url)
|
12
|
-
req = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
|
13
|
-
req.body = {
|
14
|
-
'id' => 1,
|
15
|
-
'jsonrpc' => '2.0',
|
16
|
-
'method' => method,
|
17
|
-
'params' => params.reject(&:nil?)
|
18
|
-
}.to_json
|
19
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
20
|
-
http.use_ssl = true if uri.instance_of? URI::HTTPS
|
21
|
-
res = http.request(req)
|
22
|
-
# puts res unless res.is_a?(Net::HTTPSuccess)
|
23
|
-
|
24
|
-
result = JSON.parse(res.body)
|
25
|
-
raise result['error'] if result['error']
|
26
|
-
|
27
|
-
result['result']
|
28
|
-
end
|
29
|
-
|
30
|
-
def chain_getBlockHash(url, block_number = nil)
|
31
|
-
json_rpc_call('chain_getBlockHash', [block_number], url)
|
32
|
-
end
|
33
|
-
|
34
|
-
def chain_getBlock(url, at = nil)
|
35
|
-
json_rpc_call('chain_getBlock', [at], url)
|
36
|
-
end
|
37
|
-
|
38
|
-
def state_getRuntimeVersion(url, at = nil)
|
39
|
-
json_rpc_call('state_getRuntimeVersion', [at], url)
|
40
|
-
end
|
41
|
-
|
42
|
-
def state_getMetadata(url, at = nil)
|
43
|
-
json_rpc_call('state_getMetadata', [at], url)
|
44
|
-
end
|
45
|
-
|
46
|
-
def state_getStorage(url, key, at = nil)
|
47
|
-
json_rpc_call('state_getStorage', [key, at], url)
|
48
|
-
end
|
49
|
-
|
50
|
-
def state_queryStorageAt(url, keys, at = nil)
|
51
|
-
json_rpc_call('state_queryStorageAt', [keys, at], url)
|
52
|
-
end
|
53
|
-
|
54
|
-
def state_getKeysPaged(url, key, count, start_key = nil, at = nil)
|
55
|
-
json_rpc_call('state_getKeysPaged', [key, count, start_key, at], url)
|
56
|
-
end
|
57
|
-
|
58
|
-
def eth_call(url, to, data, at_block_number = nil)
|
59
|
-
json_rpc_call('eth_call', [
|
60
|
-
{
|
61
|
-
'from' => nil,
|
62
|
-
'to' => to,
|
63
|
-
'data' => data
|
64
|
-
},
|
65
|
-
at_block_number
|
66
|
-
], url)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|