scale.rb 0.2.9 → 0.2.15
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 +2007 -11
- data/Cargo.toml +9 -2
- data/Gemfile.lock +15 -9
- data/exe/scale +9 -0
- data/lib/helper.rb +126 -0
- data/lib/metadata/metadata.rb +14 -0
- data/lib/metadata/metadata_v12.rb +3 -5
- data/lib/scale.rb +28 -14
- data/lib/scale/base.rb +5 -8
- data/lib/scale/block.rb +11 -25
- data/lib/scale/trie.rb +171 -0
- data/lib/scale/types.rb +61 -31
- data/lib/scale/version.rb +1 -1
- data/lib/substrate_client.rb +159 -0
- data/lib/type_registry/crab.json +929 -0
- data/lib/type_registry/darwinia.json +701 -136
- data/lib/type_registry/default.json +0 -1
- data/scale.gemspec +3 -2
- data/scripts/block_events.rb +2 -3
- data/src/lib.rs +42 -1
- data/src/storage_key.rs +41 -0
- metadata +31 -13
- data/.DS_Store +0 -0
data/scale.gemspec
CHANGED
@@ -33,10 +33,11 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
34
34
|
spec.require_paths = ["lib"]
|
35
35
|
|
36
|
-
spec.add_dependency "substrate_common.rb", "~> 0.1.
|
36
|
+
spec.add_dependency "substrate_common.rb", "~> 0.1.10"
|
37
|
+
spec.add_dependency "activesupport", "~> 6.0.0"
|
37
38
|
spec.add_dependency "json", "~> 2.3.0"
|
38
|
-
spec.add_dependency "activesupport", ">= 4.0.0"
|
39
39
|
spec.add_dependency "thor", "~> 0.19.0"
|
40
|
+
spec.add_dependency "kontena-websocket-client", "~> 0.1.1"
|
40
41
|
|
41
42
|
spec.add_development_dependency "bundler", "~> 1.17"
|
42
43
|
spec.add_development_dependency "pry"
|
data/scripts/block_events.rb
CHANGED
@@ -2,7 +2,6 @@ require "scale"
|
|
2
2
|
|
3
3
|
|
4
4
|
client = SubstrateClient.new("ws://127.0.0.1:9944/")
|
5
|
-
client.init
|
6
5
|
metadata = client.get_metadata nil
|
7
6
|
|
8
7
|
the_module = metadata.get_module("CertificateModule")
|
@@ -23,7 +22,7 @@ puts "CertificateModule storages:"
|
|
23
22
|
puts "---------------------------------------"
|
24
23
|
puts the_module[:storage][:items]
|
25
24
|
|
26
|
-
# Scale::TypeRegistry.instance.metadata = metadata
|
25
|
+
# Scale::TypeRegistry.instance.metadata = metadata
|
27
26
|
# puts metadata.value.event_index["0400"][1]
|
28
27
|
# puts metadata.value.event_index["0401"][1]
|
29
28
|
# puts metadata.value.event_index["0402"][1]
|
@@ -31,4 +30,4 @@ puts the_module[:storage][:items]
|
|
31
30
|
# scale_bytes = Scale::Bytes.new(hex_events)
|
32
31
|
# Scale::Types.get("Vec<EventRecord>").decode(scale_bytes).value.each do |er|
|
33
32
|
# puts er.value
|
34
|
-
# end
|
33
|
+
# end
|
data/src/lib.rs
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
extern crate parity_scale_codec;
|
2
2
|
use std::slice;
|
3
|
-
use parity_scale_codec::{Decode};
|
3
|
+
use parity_scale_codec::{Encode, Decode};
|
4
|
+
use frame_support::Twox128;
|
5
|
+
use frame_support::Blake2_128Concat;
|
6
|
+
use frame_support::StorageHasher;
|
7
|
+
|
8
|
+
fn to_u8_vec(v_pointer: *const u8, len: usize) -> Vec<u8> {
|
9
|
+
let data_slice = unsafe {
|
10
|
+
assert!(!v_pointer.is_null());
|
11
|
+
slice::from_raw_parts(v_pointer, len)
|
12
|
+
};
|
13
|
+
data_slice.to_vec()
|
14
|
+
}
|
4
15
|
|
5
16
|
fn decode_from_raw_parts<T: Decode + PartialEq + std::fmt::Debug>(v_pointer: *const u8, len: usize) -> T {
|
6
17
|
let data_slice = unsafe {
|
@@ -49,6 +60,36 @@ pub extern fn parse_opt_bool(v_pointer: *const u8, len: usize, inner_value: bool
|
|
49
60
|
assert_eq!(decode_from_raw_parts::<Option<bool>>(v_pointer, len), expectation);
|
50
61
|
}
|
51
62
|
|
63
|
+
#[no_mangle]
|
64
|
+
pub extern fn assert_storage_key_for_value(
|
65
|
+
mv_pointer: *const u8, mv_len: usize,
|
66
|
+
sv_pointer: *const u8, sv_len: usize,
|
67
|
+
ev_pointer: *const u8, ev_len: usize
|
68
|
+
) {
|
69
|
+
let m = to_u8_vec(mv_pointer, mv_len);
|
70
|
+
let s = to_u8_vec(sv_pointer, sv_len);
|
71
|
+
let e = to_u8_vec(ev_pointer, ev_len);
|
72
|
+
|
73
|
+
let k = [Twox128::hash(&m), Twox128::hash(&s)].concat();
|
74
|
+
assert_eq!(k, e);
|
75
|
+
}
|
76
|
+
|
77
|
+
#[no_mangle]
|
78
|
+
pub extern fn assert_storage_key_for_map_black2128concat(
|
79
|
+
mv_pointer: *const u8, mv_len: usize,
|
80
|
+
sv_pointer: *const u8, sv_len: usize,
|
81
|
+
pv_pointer: *const u8, pv_len: usize,
|
82
|
+
ev_pointer: *const u8, ev_len: usize,
|
83
|
+
) {
|
84
|
+
let m = to_u8_vec(mv_pointer, mv_len);
|
85
|
+
let s = to_u8_vec(sv_pointer, sv_len);
|
86
|
+
let p = to_u8_vec(pv_pointer, pv_len);
|
87
|
+
let e = to_u8_vec(ev_pointer, ev_len);
|
88
|
+
let mut k = [Twox128::hash(&m), Twox128::hash(&s)].concat();
|
89
|
+
k.extend(p.using_encoded(Blake2_128Concat::hash));
|
90
|
+
assert_eq!(k, e);
|
91
|
+
}
|
92
|
+
|
52
93
|
#[test]
|
53
94
|
fn opt_bool_is_broken()
|
54
95
|
{
|
data/src/storage_key.rs
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
use frame_support::Twox128;
|
2
|
+
use parity_scale_codec::Encode;
|
3
|
+
use frame_support::{Identity, Blake2_128Concat, Twox64Concat};
|
4
|
+
use frame_support::StorageHasher;
|
5
|
+
|
6
|
+
pub fn to_hex_string(bytes: Vec<u8>) -> String {
|
7
|
+
let strs: Vec<String> = bytes.iter()
|
8
|
+
.map(|b| format!("{:02x}", b))
|
9
|
+
.collect();
|
10
|
+
strs.join("")
|
11
|
+
}
|
12
|
+
|
13
|
+
fn main() {
|
14
|
+
// value
|
15
|
+
let k = [Twox128::hash(b"Sudo"), Twox128::hash(b"Key")].concat();
|
16
|
+
println!("{}", to_hex_string(k));
|
17
|
+
|
18
|
+
// map
|
19
|
+
let mut k = [Twox128::hash(b"ModuleAbc"), Twox128::hash(b"Map1")].concat();
|
20
|
+
k.extend(vec![1u8, 0, 0, 0].using_encoded(Blake2_128Concat::hash));
|
21
|
+
println!("{}", to_hex_string(k));
|
22
|
+
|
23
|
+
let mut k = [Twox128::hash(b"ModuleAbc"), Twox128::hash(b"Map2")].concat();
|
24
|
+
k.extend(1u32.using_encoded(Twox64Concat::hash));
|
25
|
+
println!("{}", to_hex_string(k));
|
26
|
+
|
27
|
+
let mut k = [Twox128::hash(b"ModuleAbc"), Twox128::hash(b"Map3")].concat();
|
28
|
+
k.extend(1u32.using_encoded(Identity::hash));
|
29
|
+
println!("{}", to_hex_string(k));
|
30
|
+
|
31
|
+
// double map
|
32
|
+
let mut k = [Twox128::hash(b"ModuleAbc"), Twox128::hash(b"DoubleMap1")].concat();
|
33
|
+
k.extend(1u32.using_encoded(Blake2_128Concat::hash));
|
34
|
+
k.extend(2u32.using_encoded(Blake2_128Concat::hash));
|
35
|
+
println!("{}", to_hex_string(k));
|
36
|
+
|
37
|
+
let mut k = [Twox128::hash(b"ModuleAbc"), Twox128::hash(b"DoubleMap2")].concat();
|
38
|
+
k.extend(1u32.using_encoded(Blake2_128Concat::hash));
|
39
|
+
k.extend(2u32.using_encoded(Twox64Concat::hash));
|
40
|
+
println!("{}", to_hex_string(k));
|
41
|
+
}
|
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.2.
|
4
|
+
version: 0.2.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wu Minzhe
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: substrate_common.rb
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.1.
|
19
|
+
version: 0.1.10
|
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.
|
26
|
+
version: 0.1.10
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 6.0.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 6.0.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: json
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.3.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.3.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: thor
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.19.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: kontena-websocket-client
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.1.1
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.1.1
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: bundler
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -144,7 +158,6 @@ executables:
|
|
144
158
|
extensions: []
|
145
159
|
extra_rdoc_files: []
|
146
160
|
files:
|
147
|
-
- ".DS_Store"
|
148
161
|
- ".dockerignore"
|
149
162
|
- ".gitignore"
|
150
163
|
- Cargo.lock
|
@@ -160,6 +173,7 @@ files:
|
|
160
173
|
- bin/setup
|
161
174
|
- exe/scale
|
162
175
|
- grants_badge.png
|
176
|
+
- lib/helper.rb
|
163
177
|
- lib/metadata/metadata.rb
|
164
178
|
- lib/metadata/metadata_v0.rb
|
165
179
|
- lib/metadata/metadata_v1.rb
|
@@ -177,8 +191,11 @@ files:
|
|
177
191
|
- lib/scale.rb
|
178
192
|
- lib/scale/base.rb
|
179
193
|
- lib/scale/block.rb
|
194
|
+
- lib/scale/trie.rb
|
180
195
|
- lib/scale/types.rb
|
181
196
|
- lib/scale/version.rb
|
197
|
+
- lib/substrate_client.rb
|
198
|
+
- lib/type_registry/crab.json
|
182
199
|
- lib/type_registry/darwinia.json
|
183
200
|
- lib/type_registry/default.json
|
184
201
|
- lib/type_registry/edgeware.json
|
@@ -194,6 +211,7 @@ files:
|
|
194
211
|
- scripts/block_events.rb
|
195
212
|
- scripts/example.rb
|
196
213
|
- src/lib.rs
|
214
|
+
- src/storage_key.rs
|
197
215
|
homepage: https://github.com/itering/scale.rb
|
198
216
|
licenses:
|
199
217
|
- MIT
|
data/.DS_Store
DELETED
Binary file
|