scale.rb 0.2.10 → 0.2.16
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 +9 -18
- 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 +45 -12
- 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/scale.gemspec +2 -2
- data/scripts/block_events.rb +2 -3
- data/src/lib.rs +42 -1
- data/src/storage_key.rs +41 -0
- metadata +17 -13
- data/.DS_Store +0 -0
data/scale.gemspec
CHANGED
@@ -33,10 +33,10 @@ 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
37
|
spec.add_dependency "json", "~> 2.3.0"
|
38
|
-
spec.add_dependency "activesupport", ">= 4.0.0"
|
39
38
|
spec.add_dependency "thor", "~> 0.19.0"
|
39
|
+
spec.add_dependency "kontena-websocket-client", "~> 0.1.1"
|
40
40
|
|
41
41
|
spec.add_development_dependency "bundler", "~> 1.17"
|
42
42
|
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.16
|
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-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: substrate_common.rb
|
@@ -16,14 +16,14 @@ 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
28
|
name: json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,33 +39,33 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 2.3.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: thor
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.19.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: 0.19.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: kontena-websocket-client
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
61
|
+
version: 0.1.1
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.1.1
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -144,7 +144,6 @@ executables:
|
|
144
144
|
extensions: []
|
145
145
|
extra_rdoc_files: []
|
146
146
|
files:
|
147
|
-
- ".DS_Store"
|
148
147
|
- ".dockerignore"
|
149
148
|
- ".gitignore"
|
150
149
|
- Cargo.lock
|
@@ -160,6 +159,7 @@ files:
|
|
160
159
|
- bin/setup
|
161
160
|
- exe/scale
|
162
161
|
- grants_badge.png
|
162
|
+
- lib/helper.rb
|
163
163
|
- lib/metadata/metadata.rb
|
164
164
|
- lib/metadata/metadata_v0.rb
|
165
165
|
- lib/metadata/metadata_v1.rb
|
@@ -177,8 +177,11 @@ files:
|
|
177
177
|
- lib/scale.rb
|
178
178
|
- lib/scale/base.rb
|
179
179
|
- lib/scale/block.rb
|
180
|
+
- lib/scale/trie.rb
|
180
181
|
- lib/scale/types.rb
|
181
182
|
- lib/scale/version.rb
|
183
|
+
- lib/substrate_client.rb
|
184
|
+
- lib/type_registry/crab.json
|
182
185
|
- lib/type_registry/darwinia.json
|
183
186
|
- lib/type_registry/default.json
|
184
187
|
- lib/type_registry/edgeware.json
|
@@ -194,6 +197,7 @@ files:
|
|
194
197
|
- scripts/block_events.rb
|
195
198
|
- scripts/example.rb
|
196
199
|
- src/lib.rs
|
200
|
+
- src/storage_key.rs
|
197
201
|
homepage: https://github.com/itering/scale.rb
|
198
202
|
licenses:
|
199
203
|
- MIT
|
data/.DS_Store
DELETED
Binary file
|