scale.rb 0.2.16 → 0.3.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.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Cargo.lock +8 -4
  4. data/Cargo.toml +2 -3
  5. data/Dockerfile +4 -1
  6. data/Gemfile.lock +43 -35
  7. data/README.md +44 -1
  8. data/Rakefile +6 -0
  9. data/exe/scale +39 -79
  10. data/lib/address.rb +3 -0
  11. data/lib/common.rb +163 -0
  12. data/lib/helper.rb +25 -8
  13. data/lib/metadata/metadata.rb +28 -18
  14. data/lib/metadata/metadata_v0.rb +24 -20
  15. data/lib/metadata/metadata_v1.rb +13 -9
  16. data/lib/metadata/metadata_v10.rb +2 -2
  17. data/lib/metadata/metadata_v11.rb +2 -2
  18. data/lib/metadata/metadata_v12.rb +9 -8
  19. data/lib/metadata/metadata_v13.rb +161 -0
  20. data/lib/metadata/metadata_v2.rb +2 -2
  21. data/lib/metadata/metadata_v3.rb +2 -2
  22. data/lib/metadata/metadata_v4.rb +21 -11
  23. data/lib/metadata/metadata_v5.rb +21 -11
  24. data/lib/metadata/metadata_v6.rb +9 -9
  25. data/lib/metadata/metadata_v7.rb +26 -15
  26. data/lib/metadata/metadata_v8.rb +9 -9
  27. data/lib/metadata/metadata_v9.rb +2 -2
  28. data/lib/scale.rb +41 -341
  29. data/lib/scale/base.rb +177 -95
  30. data/lib/scale/block.rb +17 -13
  31. data/lib/scale/trie.rb +1 -1
  32. data/lib/scale/types.rb +139 -40
  33. data/lib/scale/version.rb +1 -1
  34. data/lib/scale_bytes.rb +63 -0
  35. data/lib/substrate_client.rb +31 -17
  36. data/lib/type_builder.rb +279 -0
  37. data/lib/type_registry.rb +91 -0
  38. data/lib/type_registry/crab.json +676 -595
  39. data/lib/type_registry/darwinia.json +730 -554
  40. data/lib/type_registry/default.json +3 -2
  41. data/lib/type_registry/pangolin.json +771 -0
  42. data/scale.gemspec +7 -5
  43. data/scripts/mmr_root_to_sign.rb +10 -0
  44. data/src/lib.rs +80 -25
  45. metadata +59 -30
  46. data/lib/type_registry/edgeware.json +0 -124
  47. data/lib/type_registry/joystream.json +0 -49
  48. data/lib/type_registry/kulupu.json +0 -15
  49. data/lib/type_registry/plasm.json +0 -89
  50. data/lib/type_registry/robonomics.json +0 -39
  51. data/lib/type_registry/westend.json +0 -63
  52. data/src/storage_key.rs +0 -41
@@ -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
@@ -1,7 +1,7 @@
1
1
  module Scale
2
2
  module Types
3
3
  class MetadataV2
4
- include SingleValue
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.type_of("Vec<MetadataModule>").decode(scale_bytes).value
14
+ modules = Scale::Types.get("Vec<MetadataModule>").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 MetadataV3
4
- include SingleValue
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.type_of("Vec<MetadataModule>").decode(scale_bytes).value
14
+ modules = Scale::Types.get("Vec<MetadataModule>").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 MetadataV4
4
- include SingleValue
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.type_of("Vec<MetadataV4Module>").decode(scale_bytes).value
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 SingleValue
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.type_of("Vec<MetadataV4ModuleStorage>").decode(scale_bytes).value
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.type_of("Vec<MetadataModuleCall>").decode(scale_bytes).value
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.type_of("Vec<MetadataModuleEvent>").decode(scale_bytes).value
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 SingleValue
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: String.decode(scale_bytes).value,
89
- modifier: Scale::Types.type_of("Enum", %w[Optional Default]).decode(scale_bytes).value
94
+ name: name,
95
+ modifier: modifier
90
96
  }
91
97
 
92
- storage_function_type = Scale::Types.type_of("Enum", %w[Plain Map DoubleMap]).decode(scale_bytes).value
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.type_of("Vec<String>").decode(scale_bytes).value.map(&:value)
129
+ result[:documentation] = Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)
120
130
 
121
131
  MetadataV4ModuleStorage.new(result)
122
132
  end
@@ -1,7 +1,7 @@
1
1
  module Scale
2
2
  module Types
3
3
  class MetadataV5
4
- include SingleValue
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.type_of("Vec<MetadataV5Module>").decode(scale_bytes).value
14
+ modules = Scale::Types.get("Vec<MetadataV5Module>").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 MetadataV5Module
52
- include SingleValue
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.type_of("Vec<MetadataV5ModuleStorage>").decode(scale_bytes).value
64
+ storages = Scale::Types.get("Vec<MetadataV5ModuleStorage>").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.type_of("Vec<MetadataModuleCall>").decode(scale_bytes).value
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.type_of("Vec<MetadataModuleEvent>").decode(scale_bytes).value
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 MetadataV5ModuleStorage
85
- include SingleValue
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: String.decode(scale_bytes).value,
89
- modifier: Scale::Types.type_of("Enum", %w[Optional Default]).decode(scale_bytes).value
94
+ name: name,
95
+ modifier: modifier
90
96
  }
91
97
 
92
- storage_function_type = Scale::Types.type_of("Enum", %w[Plain Map DoubleMap]).decode(scale_bytes).value
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.type_of("Vec<String>").decode(scale_bytes).value.map(&:value)
129
+ result[:documentation] = Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)
120
130
 
121
131
  MetadataV5ModuleStorage.new(result)
122
132
  end
@@ -1,7 +1,7 @@
1
1
  module Scale
2
2
  module Types
3
3
  class MetadataV6
4
- include SingleValue
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.type_of("Vec<MetadataV6Module>").decode(scale_bytes).value
14
+ modules = Scale::Types.get("Vec<MetadataV6Module>").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 MetadataV6Module
52
- include SingleValue
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,23 +61,23 @@ module Scale
61
61
 
62
62
  has_storage = Bool.decode(scale_bytes).value
63
63
  if has_storage
64
- storages = Scale::Types.type_of("Vec<MetadataV6ModuleStorage>").decode(scale_bytes).value
64
+ storages = Scale::Types.get("Vec<MetadataV6ModuleStorage>").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.type_of("Vec<MetadataModuleCall>").decode(scale_bytes).value
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.type_of("Vec<MetadataModuleEvent>").decode(scale_bytes).value
76
+ events = Scale::Types.get("Vec<MetadataModuleEvent>").decode(scale_bytes).value
77
77
  result[:events] = events.map(&:value)
78
78
  end
79
79
 
80
- result[:constants] = Scale::Types.type_of("Vec<MetadataV6ModuleConstants>").decode(scale_bytes).value.map(&:value)
80
+ result[:constants] = Scale::Types.get("Vec<MetadataV6ModuleConstants>").decode(scale_bytes).value.map(&:value)
81
81
 
82
82
  MetadataV6Module.new(result)
83
83
  end
@@ -86,13 +86,13 @@ module Scale
86
86
  class MetadataV6ModuleStorage < MetadataV5ModuleStorage; end
87
87
 
88
88
  class MetadataV6ModuleConstants
89
- include SingleValue
89
+ include Base
90
90
  def self.decode(scale_bytes)
91
91
  result = {
92
92
  name: String.decode(scale_bytes).value,
93
93
  type: String.decode(scale_bytes).value, # convert
94
94
  value: Hex.decode(scale_bytes).value,
95
- documentation: Scale::Types.type_of("Vec<String>").decode(scale_bytes).value.map(&:value)
95
+ documentation: Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)
96
96
  }
97
97
  MetadataV6ModuleConstants.new result
98
98
  end
@@ -1,7 +1,7 @@
1
1
  module Scale
2
2
  module Types
3
3
  class MetadataV7
4
- include SingleValue
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.type_of("Vec<MetadataV7Module>").decode(scale_bytes).value
14
+ modules = Scale::Types.get("Vec<MetadataV7Module>").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 MetadataV7Module
52
- include SingleValue
52
+ include Base
53
53
  def self.decode(scale_bytes)
54
54
  name = String.decode(scale_bytes).value
55
55
 
@@ -66,27 +66,27 @@ module Scale
66
66
 
67
67
  has_calls = Bool.decode(scale_bytes).value
68
68
  if has_calls
69
- calls = Scale::Types.type_of("Vec<MetadataModuleCall>").decode(scale_bytes).value
69
+ calls = Scale::Types.get("Vec<MetadataModuleCall>").decode(scale_bytes).value
70
70
  result[:calls] = calls.map(&:value)
71
71
  end
72
72
 
73
73
  has_events = Bool.decode(scale_bytes).value
74
74
  if has_events
75
- events = Scale::Types.type_of("Vec<MetadataModuleEvent>").decode(scale_bytes).value
75
+ events = Scale::Types.get("Vec<MetadataModuleEvent>").decode(scale_bytes).value
76
76
  result[:events] = events.map(&:value)
77
77
  end
78
78
 
79
- result[:constants] = Scale::Types.type_of("Vec<MetadataV7ModuleConstants>").decode(scale_bytes).value.map(&:value)
79
+ result[:constants] = Scale::Types.get("Vec<MetadataV7ModuleConstants>").decode(scale_bytes).value.map(&:value)
80
80
 
81
81
  MetadataV7Module.new(result)
82
82
  end
83
83
  end
84
84
 
85
85
  class MetadataV7ModuleStorage
86
- include SingleValue
86
+ include Base
87
87
  def self.decode(scale_bytes)
88
88
  prefix = String.decode(scale_bytes).value
89
- items = Scale::Types.type_of("Vec<MetadataV7ModuleStorageEntry>").decode(scale_bytes).value.map(&:value)
89
+ items = Scale::Types.get("Vec<MetadataV7ModuleStorageEntry>").decode(scale_bytes).value.map(&:value)
90
90
  result = {
91
91
  prefix: prefix,
92
92
  items: items
@@ -97,13 +97,24 @@ module Scale
97
97
  end
98
98
 
99
99
  class MetadataV7ModuleStorageEntry
100
- include SingleValue
100
+ include Base
101
101
  def self.decode(scale_bytes)
102
+ name = String.decode(scale_bytes).value
103
+ modifier_enum = {
104
+ "type" => "enum",
105
+ "value_list" => ["Optional", "Default"]
106
+ }
107
+ modifier = Scale::Types.get(modifier_enum).decode(scale_bytes).value
102
108
  result = {
103
- name: String.decode(scale_bytes).value,
104
- modifier: Scale::Types.type_of("Enum", %w[Optional Default]).decode(scale_bytes).value
109
+ name: name,
110
+ modifier: modifier
111
+ }
112
+
113
+ storage_function_type_enum = {
114
+ "type" => "enum",
115
+ "value_list" => %w[Plain Map DoubleMap]
105
116
  }
106
- storage_function_type = Scale::Types.type_of("Enum", %w[Plain Map DoubleMap]).decode(scale_bytes).value
117
+ storage_function_type = Scale::Types.get(storage_function_type_enum).decode(scale_bytes).value
107
118
  if storage_function_type == "Plain"
108
119
  result[:type] = {
109
120
  Plain: String.decode(scale_bytes).value
@@ -130,20 +141,20 @@ module Scale
130
141
  end
131
142
 
132
143
  result[:fallback] = Hex.decode(scale_bytes).value
133
- result[:documentation] = Scale::Types.type_of("Vec<String>").decode(scale_bytes).value.map(&:value)
144
+ result[:documentation] = Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)
134
145
 
135
146
  MetadataV7ModuleStorageEntry.new(result)
136
147
  end
137
148
  end
138
149
 
139
150
  class MetadataV7ModuleConstants
140
- include SingleValue
151
+ include Base
141
152
  def self.decode(scale_bytes)
142
153
  result = {
143
154
  name: String.decode(scale_bytes).value,
144
155
  type: String.decode(scale_bytes).value, # convert
145
156
  value: Hex.decode(scale_bytes).value,
146
- documentation: Scale::Types.type_of("Vec<String>").decode(scale_bytes).value.map(&:value)
157
+ documentation: Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)
147
158
  }
148
159
  MetadataV7ModuleConstants.new result
149
160
  end