scale.rb 0.2.18 → 0.3.2
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 +4 -4
- data/.gitignore +1 -0
- data/Cargo.lock +8 -4
- data/Cargo.toml +2 -3
- data/Dockerfile +4 -1
- data/Gemfile.lock +3 -3
- data/README.md +20 -4
- data/Rakefile +6 -0
- data/lib/helper.rb +19 -4
- data/lib/metadata/metadata.rb +27 -17
- data/lib/metadata/metadata_v0.rb +24 -20
- data/lib/metadata/metadata_v1.rb +13 -9
- data/lib/metadata/metadata_v10.rb +2 -2
- data/lib/metadata/metadata_v11.rb +2 -2
- data/lib/metadata/metadata_v12.rb +9 -8
- data/lib/metadata/metadata_v13.rb +161 -0
- data/lib/metadata/metadata_v2.rb +2 -2
- data/lib/metadata/metadata_v3.rb +2 -2
- data/lib/metadata/metadata_v4.rb +21 -11
- data/lib/metadata/metadata_v5.rb +21 -11
- data/lib/metadata/metadata_v6.rb +9 -9
- data/lib/metadata/metadata_v7.rb +26 -15
- data/lib/metadata/metadata_v8.rb +9 -9
- data/lib/metadata/metadata_v9.rb +2 -2
- data/lib/scale/base.rb +136 -96
- data/lib/scale/block.rb +10 -10
- data/lib/scale/trie.rb +1 -1
- data/lib/scale/types.rb +91 -40
- data/lib/scale/version.rb +1 -1
- data/lib/scale.rb +38 -377
- data/lib/scale_bytes.rb +63 -0
- data/lib/substrate_client.rb +11 -8
- data/lib/type_builder.rb +280 -0
- data/lib/type_registry/darwinia.json +730 -554
- data/lib/type_registry/default.json +1 -0
- data/lib/type_registry/pangolin.json +571 -132
- data/lib/type_registry.rb +91 -0
- data/scripts/mmr_root_to_sign.rb +10 -0
- data/src/lib.rs +80 -25
- metadata +7 -3
- data/src/storage_key.rs +0 -41
data/lib/metadata/metadata_v1.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Scale
|
2
2
|
module Types
|
3
3
|
class MetadataV1
|
4
|
-
include
|
4
|
+
include Base
|
5
5
|
attr_accessor :call_index, :event_index
|
6
6
|
|
7
7
|
def initialize(value)
|
@@ -11,7 +11,7 @@ module Scale
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.decode(scale_bytes)
|
14
|
-
modules = Scale::Types.
|
14
|
+
modules = Scale::Types.get("Vec<MetadataV1Module>").decode(scale_bytes).value
|
15
15
|
|
16
16
|
value = {
|
17
17
|
magicNumber: 1_635_018_093,
|
@@ -49,7 +49,7 @@ module Scale
|
|
49
49
|
end
|
50
50
|
|
51
51
|
class MetadataV1Module
|
52
|
-
include
|
52
|
+
include Base
|
53
53
|
def self.decode(scale_bytes)
|
54
54
|
name = String.decode(scale_bytes).value
|
55
55
|
prefix = String.decode(scale_bytes).value
|
@@ -61,19 +61,19 @@ module Scale
|
|
61
61
|
|
62
62
|
has_storage = Bool.decode(scale_bytes).value
|
63
63
|
if has_storage
|
64
|
-
storages = Scale::Types.
|
64
|
+
storages = Scale::Types.get("Vec<MetadataV1ModuleStorage>").decode(scale_bytes).value
|
65
65
|
result[:storage] = storages.map(&:value)
|
66
66
|
end
|
67
67
|
|
68
68
|
has_calls = Bool.decode(scale_bytes).value
|
69
69
|
if has_calls
|
70
|
-
calls = Scale::Types.
|
70
|
+
calls = Scale::Types.get("Vec<MetadataModuleCall>").decode(scale_bytes).value
|
71
71
|
result[:calls] = calls.map(&:value)
|
72
72
|
end
|
73
73
|
|
74
74
|
has_events = Bool.decode(scale_bytes).value
|
75
75
|
if has_events
|
76
|
-
events = Scale::Types.
|
76
|
+
events = Scale::Types.get("Vec<MetadataModuleEvent>").decode(scale_bytes).value
|
77
77
|
result[:events] = events.map(&:value)
|
78
78
|
end
|
79
79
|
|
@@ -82,11 +82,15 @@ module Scale
|
|
82
82
|
end
|
83
83
|
|
84
84
|
class MetadataV1ModuleStorage
|
85
|
-
include
|
85
|
+
include Base
|
86
86
|
|
87
87
|
def self.decode(scale_bytes)
|
88
88
|
name = Bytes.decode(scale_bytes).value
|
89
|
-
|
89
|
+
enum = {
|
90
|
+
"type" => "enum",
|
91
|
+
"value_list" => ["Optional", "Default"]
|
92
|
+
}
|
93
|
+
modifier = Scale::Types.get(enum).decode(scale_bytes).value
|
90
94
|
|
91
95
|
is_key_value = Bool.decode(scale_bytes).value
|
92
96
|
|
@@ -104,7 +108,7 @@ module Scale
|
|
104
108
|
end
|
105
109
|
|
106
110
|
fallback = Hex.decode(scale_bytes).value
|
107
|
-
docs = Scale::Types.
|
111
|
+
docs = Scale::Types.get("Vec<Bytes>").decode(scale_bytes).value.map(&:value)
|
108
112
|
|
109
113
|
MetadataV1ModuleStorage.new({
|
110
114
|
name: name,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Scale
|
2
2
|
module Types
|
3
3
|
class MetadataV10
|
4
|
-
include
|
4
|
+
include Base
|
5
5
|
attr_accessor :call_index, :event_index
|
6
6
|
|
7
7
|
def initialize(value)
|
@@ -11,7 +11,7 @@ module Scale
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.decode(scale_bytes)
|
14
|
-
modules = Scale::Types.
|
14
|
+
modules = Scale::Types.get("Vec<MetadataV8Module>").decode(scale_bytes).value
|
15
15
|
|
16
16
|
value = {
|
17
17
|
magicNumber: 1_635_018_093,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Scale
|
2
2
|
module Types
|
3
3
|
class MetadataV11
|
4
|
-
include
|
4
|
+
include Base
|
5
5
|
attr_accessor :call_index, :event_index
|
6
6
|
|
7
7
|
def initialize(value)
|
@@ -11,7 +11,7 @@ module Scale
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.decode(scale_bytes)
|
14
|
-
modules = Scale::Types.
|
14
|
+
modules = Scale::Types.get("Vec<MetadataV8Module>").decode(scale_bytes).value
|
15
15
|
|
16
16
|
value = {
|
17
17
|
magicNumber: 1_635_018_093,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Scale
|
2
2
|
module Types
|
3
3
|
class MetadataV12
|
4
|
-
include
|
4
|
+
include Base
|
5
5
|
attr_accessor :call_index, :event_index
|
6
6
|
|
7
7
|
def initialize(value)
|
@@ -11,7 +11,7 @@ module Scale
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.decode(scale_bytes)
|
14
|
-
modules = Scale::Types.
|
14
|
+
modules = Scale::Types.get("Vec<MetadataV12Module>").decode(scale_bytes).value
|
15
15
|
|
16
16
|
value = {
|
17
17
|
magicNumber: 1_635_018_093,
|
@@ -26,7 +26,8 @@ module Scale
|
|
26
26
|
call_module_index = 0
|
27
27
|
event_module_index = 0
|
28
28
|
|
29
|
-
modules.map(&:value).
|
29
|
+
modules.map(&:value).each do |m|
|
30
|
+
module_index = m[:index]
|
30
31
|
if m[:calls]
|
31
32
|
m[:calls].each_with_index do |call, index|
|
32
33
|
call[:lookup] = "%02x%02x" % [module_index, index]
|
@@ -47,7 +48,7 @@ module Scale
|
|
47
48
|
end
|
48
49
|
|
49
50
|
class MetadataV12Module
|
50
|
-
include
|
51
|
+
include Base
|
51
52
|
def self.decode(scale_bytes)
|
52
53
|
name = String.decode(scale_bytes).value
|
53
54
|
|
@@ -64,18 +65,18 @@ module Scale
|
|
64
65
|
|
65
66
|
has_calls = Bool.decode(scale_bytes).value
|
66
67
|
if has_calls
|
67
|
-
calls = Scale::Types.
|
68
|
+
calls = Scale::Types.get("Vec<MetadataModuleCall>").decode(scale_bytes).value
|
68
69
|
result[:calls] = calls.map(&:value)
|
69
70
|
end
|
70
71
|
|
71
72
|
has_events = Bool.decode(scale_bytes).value
|
72
73
|
if has_events
|
73
|
-
events = Scale::Types.
|
74
|
+
events = Scale::Types.get("Vec<MetadataModuleEvent>").decode(scale_bytes).value
|
74
75
|
result[:events] = events.map(&:value)
|
75
76
|
end
|
76
77
|
|
77
|
-
result[:constants] = Scale::Types.
|
78
|
-
result[:errors] = Scale::Types.
|
78
|
+
result[:constants] = Scale::Types.get("Vec<MetadataV7ModuleConstants>").decode(scale_bytes).value.map(&:value)
|
79
|
+
result[:errors] = Scale::Types.get("Vec<MetadataModuleError>").decode(scale_bytes).value.map(&:value)
|
79
80
|
|
80
81
|
result[:index] = U8.decode(scale_bytes).value
|
81
82
|
MetadataV12Module.new(result)
|
@@ -0,0 +1,161 @@
|
|
1
|
+
module Scale
|
2
|
+
module Types
|
3
|
+
class MetadataV13
|
4
|
+
include Base
|
5
|
+
attr_accessor :call_index, :event_index
|
6
|
+
|
7
|
+
def initialize(value)
|
8
|
+
@call_index = {}
|
9
|
+
@event_index = {}
|
10
|
+
super(value)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.decode(scale_bytes)
|
14
|
+
modules = Scale::Types.get("Vec<MetadataV13Module>").decode(scale_bytes).value
|
15
|
+
|
16
|
+
value = {
|
17
|
+
magicNumber: 1_635_018_093,
|
18
|
+
metadata: {
|
19
|
+
version: 12,
|
20
|
+
modules: modules.map(&:value)
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
result = MetadataV13.new(value)
|
25
|
+
|
26
|
+
call_module_index = 0
|
27
|
+
event_module_index = 0
|
28
|
+
|
29
|
+
modules.map(&:value).each do |m|
|
30
|
+
module_index = m[:index]
|
31
|
+
if m[:calls]
|
32
|
+
m[:calls].each_with_index do |call, index|
|
33
|
+
call[:lookup] = "%02x%02x" % [module_index, index]
|
34
|
+
result.call_index[call[:lookup]] = [m, call]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
if m[:events]
|
39
|
+
m[:events].each_with_index do |event, index|
|
40
|
+
event[:lookup] = "%02x%02x" % [module_index, index]
|
41
|
+
result.event_index[event[:lookup]] = [m, event]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
result
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
class MetadataV13ModuleStorage
|
51
|
+
include Base
|
52
|
+
def self.decode(scale_bytes)
|
53
|
+
prefix = String.decode(scale_bytes).value
|
54
|
+
items = Scale::Types.get("Vec<MetadataV13ModuleStorageEntry>").decode(scale_bytes).value.map(&:value)
|
55
|
+
result = {
|
56
|
+
prefix: prefix,
|
57
|
+
items: items
|
58
|
+
}
|
59
|
+
|
60
|
+
MetadataV13ModuleStorage.new(result)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class MetadataV13ModuleStorageEntry
|
65
|
+
include Base
|
66
|
+
def self.decode(scale_bytes)
|
67
|
+
name = String.decode(scale_bytes).value
|
68
|
+
modifier_enum = {
|
69
|
+
"type" => "enum",
|
70
|
+
"value_list" => ["Optional", "Default"]
|
71
|
+
}
|
72
|
+
modifier = Scale::Types.get(modifier_enum).decode(scale_bytes).value
|
73
|
+
result = {
|
74
|
+
name: name,
|
75
|
+
modifier: modifier
|
76
|
+
}
|
77
|
+
|
78
|
+
storage_function_type_enum = {
|
79
|
+
"type" => "enum",
|
80
|
+
"value_list" => %w[Plain Map DoubleMap NMap]
|
81
|
+
}
|
82
|
+
storage_function_type = Scale::Types.get(storage_function_type_enum).decode(scale_bytes).value
|
83
|
+
if storage_function_type == "Plain"
|
84
|
+
result[:type] = {
|
85
|
+
Plain: String.decode(scale_bytes).value
|
86
|
+
}
|
87
|
+
elsif storage_function_type == "Map"
|
88
|
+
result[:type] = {
|
89
|
+
Map: {
|
90
|
+
hasher: StorageHasher.decode(scale_bytes).value,
|
91
|
+
key: String.decode(scale_bytes).value,
|
92
|
+
value: String.decode(scale_bytes).value,
|
93
|
+
linked: Bool.decode(scale_bytes).value
|
94
|
+
}
|
95
|
+
}
|
96
|
+
elsif storage_function_type == "DoubleMap"
|
97
|
+
result[:type] = {
|
98
|
+
DoubleMap: {
|
99
|
+
hasher: StorageHasher.decode(scale_bytes).value,
|
100
|
+
key1: String.decode(scale_bytes).value,
|
101
|
+
key2: String.decode(scale_bytes).value,
|
102
|
+
value: String.decode(scale_bytes).value,
|
103
|
+
key2Hasher: StorageHasher.decode(scale_bytes).value
|
104
|
+
}
|
105
|
+
}
|
106
|
+
elsif storage_function_type == "NMap"
|
107
|
+
keys = Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)
|
108
|
+
hashers = Scale::Types.get("Vec<StorageHasher>").decode(scale_bytes).value.map(&:value)
|
109
|
+
result[:type] = {
|
110
|
+
NMap: {
|
111
|
+
hashers: hashers,
|
112
|
+
keys: keys,
|
113
|
+
value: String.decode(scale_bytes).value,
|
114
|
+
}
|
115
|
+
}
|
116
|
+
end
|
117
|
+
|
118
|
+
result[:fallback] = Hex.decode(scale_bytes).value
|
119
|
+
result[:documentation] = Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)
|
120
|
+
|
121
|
+
MetadataV13ModuleStorageEntry.new(result)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
class MetadataV13Module
|
126
|
+
include Base
|
127
|
+
def self.decode(scale_bytes)
|
128
|
+
name = String.decode(scale_bytes).value
|
129
|
+
|
130
|
+
result = {
|
131
|
+
name: name
|
132
|
+
}
|
133
|
+
|
134
|
+
has_storage = Bool.decode(scale_bytes).value
|
135
|
+
if has_storage
|
136
|
+
storage = MetadataV13ModuleStorage.decode(scale_bytes).value
|
137
|
+
result[:storage] = storage
|
138
|
+
result[:prefix] = storage[:prefix]
|
139
|
+
end
|
140
|
+
|
141
|
+
has_calls = Bool.decode(scale_bytes).value
|
142
|
+
if has_calls
|
143
|
+
calls = Scale::Types.get("Vec<MetadataModuleCall>").decode(scale_bytes).value
|
144
|
+
result[:calls] = calls.map(&:value)
|
145
|
+
end
|
146
|
+
|
147
|
+
has_events = Bool.decode(scale_bytes).value
|
148
|
+
if has_events
|
149
|
+
events = Scale::Types.get("Vec<MetadataModuleEvent>").decode(scale_bytes).value
|
150
|
+
result[:events] = events.map(&:value)
|
151
|
+
end
|
152
|
+
|
153
|
+
result[:constants] = Scale::Types.get("Vec<MetadataV7ModuleConstants>").decode(scale_bytes).value.map(&:value)
|
154
|
+
result[:errors] = Scale::Types.get("Vec<MetadataModuleError>").decode(scale_bytes).value.map(&:value)
|
155
|
+
|
156
|
+
result[:index] = U8.decode(scale_bytes).value
|
157
|
+
MetadataV13Module.new(result)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
data/lib/metadata/metadata_v2.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Scale
|
2
2
|
module Types
|
3
3
|
class MetadataV2
|
4
|
-
include
|
4
|
+
include Base
|
5
5
|
attr_accessor :call_index, :event_index
|
6
6
|
|
7
7
|
def initialize(value)
|
@@ -11,7 +11,7 @@ module Scale
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.decode(scale_bytes)
|
14
|
-
modules = Scale::Types.
|
14
|
+
modules = Scale::Types.get("Vec<MetadataModule>").decode(scale_bytes).value
|
15
15
|
|
16
16
|
value = {
|
17
17
|
magicNumber: 1_635_018_093,
|
data/lib/metadata/metadata_v3.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Scale
|
2
2
|
module Types
|
3
3
|
class MetadataV3
|
4
|
-
include
|
4
|
+
include Base
|
5
5
|
attr_accessor :call_index, :event_index
|
6
6
|
|
7
7
|
def initialize(value)
|
@@ -11,7 +11,7 @@ module Scale
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.decode(scale_bytes)
|
14
|
-
modules = Scale::Types.
|
14
|
+
modules = Scale::Types.get("Vec<MetadataModule>").decode(scale_bytes).value
|
15
15
|
|
16
16
|
value = {
|
17
17
|
magicNumber: 1_635_018_093,
|
data/lib/metadata/metadata_v4.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Scale
|
2
2
|
module Types
|
3
3
|
class MetadataV4
|
4
|
-
include
|
4
|
+
include Base
|
5
5
|
attr_accessor :call_index, :event_index
|
6
6
|
|
7
7
|
def initialize(value)
|
@@ -11,7 +11,7 @@ module Scale
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def self.decode(scale_bytes)
|
14
|
-
modules = Scale::Types.
|
14
|
+
modules = Scale::Types.get("Vec<MetadataV4Module>").decode(scale_bytes).value
|
15
15
|
|
16
16
|
value = {
|
17
17
|
magicNumber: 1_635_018_093,
|
@@ -49,7 +49,7 @@ module Scale
|
|
49
49
|
end
|
50
50
|
|
51
51
|
class MetadataV4Module
|
52
|
-
include
|
52
|
+
include Base
|
53
53
|
def self.decode(scale_bytes)
|
54
54
|
name = String.decode(scale_bytes).value
|
55
55
|
prefix = String.decode(scale_bytes).value
|
@@ -61,19 +61,19 @@ module Scale
|
|
61
61
|
|
62
62
|
has_storage = Bool.decode(scale_bytes).value
|
63
63
|
if has_storage
|
64
|
-
storages = Scale::Types.
|
64
|
+
storages = Scale::Types.get("Vec<MetadataV4ModuleStorage>").decode(scale_bytes).value
|
65
65
|
result[:storage] = storages.map(&:value)
|
66
66
|
end
|
67
67
|
|
68
68
|
has_calls = Bool.decode(scale_bytes).value
|
69
69
|
if has_calls
|
70
|
-
calls = Scale::Types.
|
70
|
+
calls = Scale::Types.get("Vec<MetadataModuleCall>").decode(scale_bytes).value
|
71
71
|
result[:calls] = calls.map(&:value)
|
72
72
|
end
|
73
73
|
|
74
74
|
has_events = Bool.decode(scale_bytes).value
|
75
75
|
if has_events
|
76
|
-
events = Scale::Types.
|
76
|
+
events = Scale::Types.get("Vec<MetadataModuleEvent>").decode(scale_bytes).value
|
77
77
|
result[:events] = events.map(&:value)
|
78
78
|
end
|
79
79
|
|
@@ -82,14 +82,24 @@ module Scale
|
|
82
82
|
end
|
83
83
|
|
84
84
|
class MetadataV4ModuleStorage
|
85
|
-
include
|
85
|
+
include Base
|
86
86
|
def self.decode(scale_bytes)
|
87
|
+
name = String.decode(scale_bytes).value
|
88
|
+
modifier_enum = {
|
89
|
+
"type" => "enum",
|
90
|
+
"value_list" => ["Optional", "Default"]
|
91
|
+
}
|
92
|
+
modifier = Scale::Types.get(modifier_enum).decode(scale_bytes).value
|
87
93
|
result = {
|
88
|
-
name:
|
89
|
-
modifier:
|
94
|
+
name: name,
|
95
|
+
modifier: modifier
|
90
96
|
}
|
91
97
|
|
92
|
-
|
98
|
+
storage_function_type_enum = {
|
99
|
+
"type" => "enum",
|
100
|
+
"value_list" => %w[Plain Map DoubleMap]
|
101
|
+
}
|
102
|
+
storage_function_type = Scale::Types.get(storage_function_type_enum).decode(scale_bytes).value
|
93
103
|
if storage_function_type == "Plain"
|
94
104
|
result[:type] = {
|
95
105
|
Plain: String.decode(scale_bytes).value
|
@@ -116,7 +126,7 @@ module Scale
|
|
116
126
|
end
|
117
127
|
|
118
128
|
result[:fallback] = Hex.decode(scale_bytes).value
|
119
|
-
result[:documentation] = Scale::Types.
|
129
|
+
result[:documentation] = Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)
|
120
130
|
|
121
131
|
MetadataV4ModuleStorage.new(result)
|
122
132
|
end
|