scale.rb 0.2.17 → 0.3.1
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 +23 -21
- data/README.md +44 -1
- data/Rakefile +6 -0
- data/exe/scale +49 -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.rb +40 -339
- data/lib/scale/base.rb +175 -93
- data/lib/scale/block.rb +10 -10
- data/lib/scale/trie.rb +1 -1
- data/lib/scale/types.rb +139 -40
- data/lib/scale/version.rb +1 -1
- 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.rb +91 -0
- data/lib/type_registry/crab.json +676 -595
- data/lib/type_registry/darwinia.json +730 -554
- data/lib/type_registry/default.json +3 -2
- data/lib/type_registry/pangolin.json +771 -0
- data/scale.gemspec +1 -0
- data/scripts/mmr_root_to_sign.rb +10 -0
- data/src/lib.rs +80 -25
- metadata +25 -10
- data/lib/type_registry/edgeware.json +0 -124
- data/lib/type_registry/joystream.json +0 -49
- data/lib/type_registry/kulupu.json +0 -15
- data/lib/type_registry/plasm.json +0 -89
- data/lib/type_registry/robonomics.json +0 -39
- data/lib/type_registry/westend.json +0 -63
- data/src/storage_key.rs +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 861596854598a5ea2a2648cc9fe3b32915eeba97a372f2c49ba1839537cd6741
|
4
|
+
data.tar.gz: 222a2e692373bd1523f37927a304c12f2d24d252c428be3b6beb8b4dc52163c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68406b9ce9d33d5bf4513fc825f7e76b5e290f52a6b144893ff9df130e513ff01f20b647e51eab61efef2f15bb4b4be0db0b0a817cba465f268577199731f4d3
|
7
|
+
data.tar.gz: d0225db7a736a2909dd8e3967658b9fef543457e2eea479e09af8944161830fbad114782ec8fa0014e6a4df5f8599c3b128dcc16cc00c3518dcd836f1b6dd4ef
|
data/.gitignore
CHANGED
data/Cargo.lock
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# This file is automatically @generated by Cargo.
|
2
2
|
# It is not intended for manual editing.
|
3
|
+
version = 3
|
4
|
+
|
3
5
|
[[package]]
|
4
6
|
name = "Inflector"
|
5
7
|
version = "0.11.4"
|
@@ -15,6 +17,8 @@ name = "SCALE-testing-interface"
|
|
15
17
|
version = "0.1.0"
|
16
18
|
dependencies = [
|
17
19
|
"frame-support",
|
20
|
+
"hex",
|
21
|
+
"libc",
|
18
22
|
"parity-scale-codec",
|
19
23
|
"sp-core",
|
20
24
|
]
|
@@ -642,9 +646,9 @@ dependencies = [
|
|
642
646
|
|
643
647
|
[[package]]
|
644
648
|
name = "hex"
|
645
|
-
version = "0.4.
|
649
|
+
version = "0.4.3"
|
646
650
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
647
|
-
checksum = "
|
651
|
+
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
648
652
|
|
649
653
|
[[package]]
|
650
654
|
name = "hmac"
|
@@ -744,9 +748,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
|
744
748
|
|
745
749
|
[[package]]
|
746
750
|
name = "libc"
|
747
|
-
version = "0.2.
|
751
|
+
version = "0.2.94"
|
748
752
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
749
|
-
checksum = "
|
753
|
+
checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e"
|
750
754
|
|
751
755
|
[[package]]
|
752
756
|
name = "libsecp256k1"
|
data/Cargo.toml
CHANGED
@@ -8,11 +8,10 @@ edition = "2018"
|
|
8
8
|
parity-scale-codec = { version = "1.3.6" }
|
9
9
|
sp-core = { version = "2.0.0", git = "https://github.com/paritytech/substrate.git", features = ["full_crypto"]}
|
10
10
|
frame-support = { version = "2.0.0", git = "https://github.com/paritytech/substrate.git" }
|
11
|
+
libc = { version = "0.2.94" }
|
12
|
+
hex = { version = "0.4.3" }
|
11
13
|
|
12
14
|
[lib]
|
13
15
|
name = "scale_ffi"
|
14
16
|
crate-type = ["dylib"]
|
15
17
|
|
16
|
-
[[bin]]
|
17
|
-
name = "storage_key"
|
18
|
-
path = "src/storage_key.rs"
|
data/Dockerfile
CHANGED
@@ -15,7 +15,10 @@ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && \
|
|
15
15
|
export RUSTFLAGS='-C target-feature=-crt-static' && \
|
16
16
|
make
|
17
17
|
|
18
|
-
|
18
|
+
ENV RUSTFLAGS='-C target-feature=-crt-static'
|
19
|
+
ENV PATH=/root/.cargo/bin:$PATH
|
20
|
+
|
21
|
+
RUN gem install bundler:2.2.13 && \
|
19
22
|
bundle install && \
|
20
23
|
rake install:local
|
21
24
|
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
scale.rb (0.
|
4
|
+
scale.rb (0.3.1)
|
5
5
|
base58
|
6
6
|
blake2b_rs (~> 0.1.2)
|
7
7
|
faye-websocket
|
8
8
|
json (~> 2.3.0)
|
9
|
+
thor (~> 1.0)
|
9
10
|
xxhash
|
10
11
|
|
11
12
|
GEM
|
@@ -15,39 +16,40 @@ GEM
|
|
15
16
|
blake2b_rs (0.1.2)
|
16
17
|
ffi (= 1.15.0)
|
17
18
|
thermite (~> 0)
|
18
|
-
coderay (1.1.
|
19
|
-
diff-lcs (1.
|
19
|
+
coderay (1.1.3)
|
20
|
+
diff-lcs (1.4.4)
|
20
21
|
eventmachine (1.2.7)
|
21
|
-
faye-websocket (0.11.
|
22
|
+
faye-websocket (0.11.1)
|
22
23
|
eventmachine (>= 0.12.0)
|
23
24
|
websocket-driver (>= 0.5.1)
|
24
25
|
ffi (1.15.0)
|
25
26
|
json (2.3.1)
|
26
|
-
method_source (0.
|
27
|
+
method_source (1.0.0)
|
27
28
|
minitar (0.9)
|
28
|
-
pry (0.
|
29
|
-
coderay (~> 1.1
|
30
|
-
method_source (~>
|
31
|
-
rake (13.0.
|
32
|
-
rspec (3.
|
33
|
-
rspec-core (~> 3.
|
34
|
-
rspec-expectations (~> 3.
|
35
|
-
rspec-mocks (~> 3.
|
36
|
-
rspec-core (3.
|
37
|
-
rspec-support (~> 3.
|
38
|
-
rspec-expectations (3.
|
29
|
+
pry (0.14.0)
|
30
|
+
coderay (~> 1.1)
|
31
|
+
method_source (~> 1.0)
|
32
|
+
rake (13.0.3)
|
33
|
+
rspec (3.10.0)
|
34
|
+
rspec-core (~> 3.10.0)
|
35
|
+
rspec-expectations (~> 3.10.0)
|
36
|
+
rspec-mocks (~> 3.10.0)
|
37
|
+
rspec-core (3.10.1)
|
38
|
+
rspec-support (~> 3.10.0)
|
39
|
+
rspec-expectations (3.10.1)
|
39
40
|
diff-lcs (>= 1.2.0, < 2.0)
|
40
|
-
rspec-support (~> 3.
|
41
|
-
rspec-mocks (3.
|
41
|
+
rspec-support (~> 3.10.0)
|
42
|
+
rspec-mocks (3.10.2)
|
42
43
|
diff-lcs (>= 1.2.0, < 2.0)
|
43
|
-
rspec-support (~> 3.
|
44
|
-
rspec-support (3.
|
44
|
+
rspec-support (~> 3.10.0)
|
45
|
+
rspec-support (3.10.2)
|
45
46
|
thermite (0.13.0)
|
46
47
|
minitar (~> 0.5)
|
47
48
|
rake (>= 10)
|
48
49
|
tomlrb (~> 1.2)
|
50
|
+
thor (1.1.0)
|
49
51
|
tomlrb (1.3.0)
|
50
|
-
websocket-driver (0.7.
|
52
|
+
websocket-driver (0.7.5)
|
51
53
|
websocket-extensions (>= 0.1.0)
|
52
54
|
websocket-extensions (0.1.5)
|
53
55
|
xxhash (0.4.0)
|
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|

|
2
2
|
|
3
|
+
**Warning: After v0.2.19, the develop branch will do a structure refactor and big optimization.**
|
4
|
+
|
3
5
|
# scale.rb
|
4
6
|
|
5
7
|
**Ruby SCALE Codec Library**
|
@@ -19,7 +21,7 @@ Because the feature of ruby 2.6 is used, the ruby version is required to be >= 2
|
|
19
21
|
Add this line to your application's Gemfile:
|
20
22
|
|
21
23
|
```ruby
|
22
|
-
gem 'scale.rb', '0.2.
|
24
|
+
gem 'scale.rb', '0.2.19'
|
23
25
|
```
|
24
26
|
|
25
27
|
And then execute:
|
@@ -37,10 +39,22 @@ Or install it yourself as:
|
|
37
39
|
```ruby
|
38
40
|
require "scale"
|
39
41
|
|
42
|
+
Scale::TypeRegistry.instance.load # default
|
43
|
+
# Scale::TypeRegistry.instance.load spec_name: "pangolin"
|
44
|
+
# Scale::TypeRegistry.instance.load spec_name: "kusama"
|
45
|
+
|
46
|
+
# print hex changes if you set debug to true, default is false
|
47
|
+
Scale::Types.debug = true
|
48
|
+
|
40
49
|
# decode a compact integer
|
41
50
|
scale_bytes = Scale::Bytes.new("0x1501") # create scale_bytes object from scale encoded hex string
|
42
51
|
o = Scale::Types::Compact.decode(scale_bytes) # use scale type to decode scale_bytes object
|
43
52
|
p o.value # 69
|
53
|
+
|
54
|
+
#
|
55
|
+
type = Scale::Types::get("Vec<U8>")
|
56
|
+
o = type.decode(Scale::Bytes.new("0x080001"))
|
57
|
+
assert_eq o.value, [Scale::Types::U8.new(0), Scale::Types::U8.new(1)]
|
44
58
|
```
|
45
59
|
|
46
60
|
2. encode
|
@@ -48,8 +62,37 @@ p o.value # 69
|
|
48
62
|
```ruby
|
49
63
|
require "scale"
|
50
64
|
|
65
|
+
Scale::TypeRegistry.instance.load
|
66
|
+
|
51
67
|
o = Scale::Types::Compact.new(69)
|
52
68
|
p o.encode # "1501"
|
69
|
+
|
70
|
+
type = Scale::Types::get("Vec<U8>")
|
71
|
+
o = type.new([Scale::Types::U8.new(0), Scale::Types::U8.new(1)])
|
72
|
+
p o.encode # "080001"
|
73
|
+
```
|
74
|
+
|
75
|
+
3. client
|
76
|
+
```ruby
|
77
|
+
require "scale"
|
78
|
+
client = SubstrateClient.new "wss://rpc.darwinia.network"
|
79
|
+
|
80
|
+
v = Scale::Types.get("EthereumTransactionIndex")
|
81
|
+
.new(
|
82
|
+
[
|
83
|
+
Scale::Types::H256.new("0x803054c2beacabc36e15c3147bb87d8320a02e9b601be28820a622dedd1c7717"),
|
84
|
+
Scale::Types::U64.new(266)
|
85
|
+
]
|
86
|
+
)
|
87
|
+
|
88
|
+
storage = client.get_storage("EthereumBacking", "VerifiedProof", [v])
|
89
|
+
puts storage.to_human
|
90
|
+
|
91
|
+
# get the raw data
|
92
|
+
key = client.generate_storage_key("EthereumBacking", "VerifiedProof", [v])[0]
|
93
|
+
storage_raw = client.state_getStorageAt(key)
|
94
|
+
puts storage_raw
|
95
|
+
|
53
96
|
```
|
54
97
|
Please go to `spec` dir for more examples.
|
55
98
|
|
data/Rakefile
CHANGED
data/exe/scale
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "thor"
|
4
|
+
require "scale"
|
5
|
+
|
6
|
+
class ScaleCli < Thor
|
7
|
+
desc "list-types WS_ENDPOINT ", "list all types in metadata"
|
8
|
+
def list_types(ws)
|
9
|
+
client = SubstrateClient.new ws
|
10
|
+
metadata = client.get_metadata.value.to_human.to_json
|
11
|
+
metadata = JSON.parse(metadata)
|
12
|
+
|
13
|
+
types = []
|
14
|
+
metadata["metadata"]["modules"].each do |m|
|
15
|
+
if m["storage"]
|
16
|
+
m["storage"]["items"].each do |storage|
|
17
|
+
type = storage["type"]
|
18
|
+
if type["Plain"]
|
19
|
+
types << type["Plain"].gsub("\n ", "").gsub("\n", "")
|
20
|
+
elsif type["Map"]
|
21
|
+
types << type["Map"]["key"].gsub("\n", "")
|
22
|
+
types << type["Map"]["value"].gsub("\n", "")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
if m["calls"]
|
28
|
+
m["calls"].each do |call|
|
29
|
+
call["args"].each do |arg|
|
30
|
+
types << arg["type"].gsub("\n", "")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
if m["events"]
|
36
|
+
m["events"].each do |event|
|
37
|
+
event["args"].each do |arg|
|
38
|
+
types << arg.gsub("\n", "")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
types.uniq!
|
45
|
+
puts types
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
ScaleCli.start(ARGV)
|
data/lib/helper.rb
CHANGED
@@ -18,16 +18,30 @@ class SubstrateClient::Helper
|
|
18
18
|
return_type = map[:value]
|
19
19
|
# TODO: decode to account id if param is address
|
20
20
|
# params[0] = decode(params[0]) if map[:key] == "AccountId"
|
21
|
+
|
21
22
|
type = Scale::Types.get(map[:key])
|
22
|
-
params[0]
|
23
|
+
if params[0].class != type
|
24
|
+
raise Scale::StorageInputTypeError.new("The type of first param is not equal to the type from metadata: #{map[:key]} => #{type}")
|
25
|
+
end
|
26
|
+
params[0] = params[0].encode
|
23
27
|
elsif map = storage_item[:type][:DoubleMap]
|
24
28
|
raise "Storage call of type \"DoubleMapType\" requires 2 parameters" if params.nil? || params.length != 2
|
25
29
|
|
26
30
|
hasher = map[:hasher]
|
27
31
|
hasher2 = map[:key2Hasher]
|
28
32
|
return_type = map[:value]
|
29
|
-
|
30
|
-
|
33
|
+
|
34
|
+
type1 = Scale::Types.get(map[:key1])
|
35
|
+
if params[0].class != type1
|
36
|
+
raise Scale::StorageInputTypeError.new("The type of 1st param is not equal to the type from metadata: #{map[:key1]} => #{type1.class.name}")
|
37
|
+
end
|
38
|
+
params[0] = params[0].encode
|
39
|
+
|
40
|
+
type2 = Scale::Types.get(map[:key2])
|
41
|
+
if params[1].class != type2
|
42
|
+
raise Scale::StorageInputTypeError.new("The type of 2nd param is not equal to the type from metadata: #{map[:key2]} => #{type2.class.name}")
|
43
|
+
end
|
44
|
+
params[1] = params[1].encode
|
31
45
|
else
|
32
46
|
raise NotImplementedError
|
33
47
|
end
|
@@ -41,7 +55,8 @@ class SubstrateClient::Helper
|
|
41
55
|
hasher2,
|
42
56
|
metadata.value.value[:metadata][:version]
|
43
57
|
)
|
44
|
-
[
|
58
|
+
storage_modifier = storage_item[:modifier]
|
59
|
+
[storage_key, return_type, storage_item]
|
45
60
|
end
|
46
61
|
|
47
62
|
def generate_storage_key(module_name, storage_name, params = nil, hasher = nil, hasher2 = nil, metadata_version = nil)
|
data/lib/metadata/metadata.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
module Scale
|
2
2
|
module Types
|
3
3
|
class Metadata
|
4
|
-
include
|
4
|
+
include Base
|
5
5
|
attr_accessor :version
|
6
6
|
def self.decode(scale_bytes)
|
7
7
|
bytes = scale_bytes.get_next_bytes(4)
|
8
8
|
if bytes.bytes_to_utf8 == "meta"
|
9
|
-
|
9
|
+
version_enum = {
|
10
|
+
"type" => "enum",
|
11
|
+
"value_list" => %w[MetadataV0 MetadataV1 MetadataV2 MetadataV3 MetadataV4 MetadataV5 MetadataV6 MetadataV7 MetadataV8 MetadataV9 MetadataV10 MetadataV11 MetadataV12 MetadataV13]
|
12
|
+
}
|
13
|
+
metadata_version = Scale::Types.get(version_enum).decode(scale_bytes).value
|
10
14
|
metadata = Metadata.new "Scale::Types::#{metadata_version}".constantize2.decode(scale_bytes)
|
11
15
|
metadata.version = metadata_version[9..].to_i
|
12
16
|
else
|
@@ -48,7 +52,7 @@ module Scale
|
|
48
52
|
end
|
49
53
|
|
50
54
|
class MetadataModule
|
51
|
-
include
|
55
|
+
include Base
|
52
56
|
def self.decode(scale_bytes)
|
53
57
|
name = String.decode(scale_bytes).value
|
54
58
|
prefix = String.decode(scale_bytes).value
|
@@ -60,19 +64,19 @@ module Scale
|
|
60
64
|
|
61
65
|
has_storage = Bool.decode(scale_bytes).value
|
62
66
|
if has_storage
|
63
|
-
storages = Scale::Types.
|
67
|
+
storages = Scale::Types.get("Vec<MetadataModuleStorage>").decode(scale_bytes).value
|
64
68
|
result[:storage] = storages.map(&:value)
|
65
69
|
end
|
66
70
|
|
67
71
|
has_calls = Bool.decode(scale_bytes).value
|
68
72
|
if has_calls
|
69
|
-
calls = Scale::Types.
|
73
|
+
calls = Scale::Types.get("Vec<MetadataModuleCall>").decode(scale_bytes).value
|
70
74
|
result[:calls] = calls.map(&:value)
|
71
75
|
end
|
72
76
|
|
73
77
|
has_events = Bool.decode(scale_bytes).value
|
74
78
|
if has_events
|
75
|
-
events = Scale::Types.
|
79
|
+
events = Scale::Types.get("Vec<MetadataModuleEvent>").decode(scale_bytes).value
|
76
80
|
result[:events] = events.map(&:value)
|
77
81
|
end
|
78
82
|
|
@@ -85,11 +89,17 @@ module Scale
|
|
85
89
|
end
|
86
90
|
|
87
91
|
class MetadataModuleStorage
|
88
|
-
include
|
92
|
+
include Base
|
89
93
|
def self.decode(scale_bytes)
|
94
|
+
name = String.decode(scale_bytes).value
|
95
|
+
enum = {
|
96
|
+
"type" => "enum",
|
97
|
+
"value_list" => ["Optional", "Default"]
|
98
|
+
}
|
99
|
+
modifier = Scale::Types.get(enum).decode(scale_bytes).value
|
90
100
|
result = {
|
91
|
-
name:
|
92
|
-
modifier:
|
101
|
+
name: name,
|
102
|
+
modifier: modifier
|
93
103
|
}
|
94
104
|
|
95
105
|
is_key_value = Bool.decode(scale_bytes).value
|
@@ -108,25 +118,25 @@ module Scale
|
|
108
118
|
end
|
109
119
|
|
110
120
|
result[:fallback] = Hex.decode(scale_bytes).value
|
111
|
-
result[:documentation] = Scale::Types.
|
121
|
+
result[:documentation] = Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)
|
112
122
|
|
113
123
|
MetadataModuleStorage.new(result)
|
114
124
|
end
|
115
125
|
end
|
116
126
|
|
117
127
|
class MetadataModuleCall
|
118
|
-
include
|
128
|
+
include Base
|
119
129
|
def self.decode(scale_bytes)
|
120
130
|
result = {}
|
121
131
|
result[:name] = String.decode(scale_bytes).value
|
122
|
-
result[:args] = Scale::Types.
|
123
|
-
result[:documentation] = Scale::Types.
|
132
|
+
result[:args] = Scale::Types.get("Vec<MetadataModuleCallArgument>").decode(scale_bytes).value.map(&:value)
|
133
|
+
result[:documentation] = Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)
|
124
134
|
MetadataModuleCall.new(result)
|
125
135
|
end
|
126
136
|
end
|
127
137
|
|
128
138
|
class MetadataModuleCallArgument
|
129
|
-
include
|
139
|
+
include Base
|
130
140
|
def self.decode(scale_bytes)
|
131
141
|
result = {}
|
132
142
|
result[:name] = String.decode(scale_bytes).value
|
@@ -137,12 +147,12 @@ module Scale
|
|
137
147
|
end
|
138
148
|
|
139
149
|
class MetadataModuleEvent
|
140
|
-
include
|
150
|
+
include Base
|
141
151
|
def self.decode(scale_bytes)
|
142
152
|
result = {}
|
143
153
|
result[:name] = String.decode(scale_bytes).value
|
144
|
-
result[:args] = Scale::Types.
|
145
|
-
result[:documentation] = Scale::Types.
|
154
|
+
result[:args] = Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)
|
155
|
+
result[:documentation] = Scale::Types.get("Vec<String>").decode(scale_bytes).value.map(&:value)
|
146
156
|
|
147
157
|
MetadataModuleEvent.new(result)
|
148
158
|
end
|