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.
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.9"
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"
@@ -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.value
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
  {
@@ -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.10
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: 2020-11-01 00:00:00.000000000 Z
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.9
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.9
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: activesupport
42
+ name: thor
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 4.0.0
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: 4.0.0
54
+ version: 0.19.0
55
55
  - !ruby/object:Gem::Dependency
56
- name: thor
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.19.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.19.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