scale.rb 0.2.10 → 0.2.16

Sign up to get free protection for your applications and to get access to all the features.
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