Skip to content

Commit

Permalink
fix(extras)
Browse files Browse the repository at this point in the history
- fix bug in resolve helper looking into the runtime twice
- fix decoding for types where module names don't match
  • Loading branch information
Andrew Plaza committed Sep 20, 2020
1 parent 4abffd8 commit 11c594a
Show file tree
Hide file tree
Showing 14 changed files with 30 additions and 13 deletions.
6 changes: 0 additions & 6 deletions core/src/decoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -726,7 +726,6 @@ impl Decoder {
match ty {
"Data" => {
let data: pallet_identity::Data = Decode::decode(&mut &data[*cursor..])?;

// 1 byte for the enum
*cursor += 1;
match &data {
Expand All @@ -735,11 +734,6 @@ impl Decoder {
_ => *cursor += 32
}
Ok(Some(SubstrateType::Data(data)))
// let len = Self::scale_length(&data[*cursor..])?;
// let data: Vec<u8> = Decode::decode(&mut &data[*cursor..])?;
// *cursor += len.0 + len.1;
// let data = data.into_iter().map(|d| SubstrateType::U8(d)).collect();
// Ok(Some(SubstrateType::Composite(data)))
}
"Call" | "GenericCall" => {
let types = self.decode_call(spec, data, cursor)?;
Expand Down
12 changes: 5 additions & 7 deletions extras/src/resolver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -162,15 +162,13 @@ impl TypeResolver {

/// Try to resolve a type pointer from the default definitions (definitions.json)
fn resolve_helper(&self, module: &str, ty_pointer: &str) -> Option<&RustTypeMarker> {
log::trace!("Helper resolving {}, {}", module, ty_pointer);
if self.mods.get(module).is_none() {
log::debug!("Module None, Trying Runtime for type {}", ty_pointer);
self.mods.get_type("runtime", ty_pointer)
} else if let Some(t) = self.mods.get_type(module, ty_pointer) {
log::debug!("Trying module {}", module);
log::debug!("Helper resolving {}, {}", module, ty_pointer);

if let Some(t) = self.mods.get_type(module, ty_pointer) {
log::info!("Type {} found in module {}", ty_pointer, module);
Some(t)
} else if let Some(t) = self.mods.get_type("runtime", ty_pointer) {
log::debug!("Trying Runtime for type {}", ty_pointer);
log::debug!("Type not found in {}, trying `runtime` for type {}", module, ty_pointer);
Some(t)
} else if let Some(t) = self.check_other_modules(ty_pointer) {
log::debug!("trying other modules");
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
21 changes: 21 additions & 0 deletions integration_tests/tests/extrinsics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -347,3 +347,24 @@ fn should_decode_ext_779410_ksm() {
println!("{}", serde_json::to_string(&decoded).unwrap());
}
}

#[test]
fn should_decode_ext_899638_ksm() {
init();
let types = extras::TypeResolver::default();
let mut decoder = Decoder::new(types, Chain::Kusama);

let (meta, ext) = test_suite::extrinsics_block899638();
let meta = Metadata::new(meta.as_slice());

decoder.register_version(1042, &meta);
for e in ext.iter() {
println!("{:?}", e);
println!("{:X?}", e);
let decoded = decoder
.decode_extrinsic(1042, e.as_slice())
.expect("should decode");
println!("{}", decoded);
println!("{}", serde_json::to_string(&decoded).unwrap());
}
}
4 changes: 4 additions & 0 deletions integration_tests/tests/test_suite.rs
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,10 @@ pub fn extrinsics_block779410() -> (Vec<u8>, Vec<Vec<u8>>) {
extrinsic_test("1042".to_string(), "779410".to_string(), 4)
}

pub fn extrinsics_block899638() -> (Vec<u8>, Vec<Vec<u8>>) {
extrinsic_test("1042".to_string(), "899638".to_string(), 4)
}

/// Get the runtime metadata from KusamaCC3 from block 3,901,874
/// Block hash 0x1d65a4c67817c4f32f99f7247f070a2f3fd58baf81d4e533c9be9d1aa8c4e65a
///
Expand Down

0 comments on commit 11c594a

Please sign in to comment.