mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 11:41:02 +00:00
Compare digests item-by-item (#869)
* compare digest item-by-item * update comment
This commit is contained in:
committed by
Gav Wood
parent
4d18c50e67
commit
187c232629
@@ -108,7 +108,7 @@ impl<Hash, AuthorityId> DigestItem<Hash, AuthorityId> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<Hash: Member, AuthorityId: Member> traits::DigestItem for DigestItem<Hash, AuthorityId> {
|
impl<Hash: Codec + Member, AuthorityId: Codec + Member> traits::DigestItem for DigestItem<Hash, AuthorityId> {
|
||||||
type Hash = Hash;
|
type Hash = Hash;
|
||||||
type AuthorityId = AuthorityId;
|
type AuthorityId = AuthorityId;
|
||||||
|
|
||||||
|
|||||||
@@ -333,6 +333,24 @@ impl CheckEqual for substrate_primitives::H256 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<I> CheckEqual for I where I: DigestItem {
|
||||||
|
#[cfg(feature = "std")]
|
||||||
|
fn check_equal(&self, other: &Self) {
|
||||||
|
if self != other {
|
||||||
|
println!("DigestItem: given={:?}, expected={:?}", self, other);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "std"))]
|
||||||
|
fn check_equal(&self, other: &Self) {
|
||||||
|
if self != other {
|
||||||
|
runtime_io::print("DigestItem not equal");
|
||||||
|
runtime_io::print(&Encode::encode(self)[..]);
|
||||||
|
runtime_io::print(&Encode::encode(other)[..]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
pub trait MaybeSerializeDebugButNotDeserialize: Serialize + Debug {}
|
pub trait MaybeSerializeDebugButNotDeserialize: Serialize + Debug {}
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
@@ -491,7 +509,7 @@ pub trait Digest: Member + Default {
|
|||||||
/// for casting member to 'system' log items, known to substrate.
|
/// for casting member to 'system' log items, known to substrate.
|
||||||
///
|
///
|
||||||
/// If the runtime does not supports some 'system' items, use `()` as a stub.
|
/// If the runtime does not supports some 'system' items, use `()` as a stub.
|
||||||
pub trait DigestItem: Member {
|
pub trait DigestItem: Codec + Member {
|
||||||
type Hash: Member;
|
type Hash: Member;
|
||||||
type AuthorityId: Member;
|
type AuthorityId: Member;
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ use rstd::prelude::*;
|
|||||||
use rstd::marker::PhantomData;
|
use rstd::marker::PhantomData;
|
||||||
use rstd::result;
|
use rstd::result;
|
||||||
use primitives::traits::{self, Header, Zero, One, Checkable, Applyable, CheckEqual, OnFinalise,
|
use primitives::traits::{self, Header, Zero, One, Checkable, Applyable, CheckEqual, OnFinalise,
|
||||||
MakePayment, Hash, As};
|
MakePayment, Hash, As, Digest};
|
||||||
use runtime_support::Dispatchable;
|
use runtime_support::Dispatchable;
|
||||||
use codec::{Codec, Encode};
|
use codec::{Codec, Encode};
|
||||||
use system::extrinsics_root;
|
use system::extrinsics_root;
|
||||||
@@ -204,10 +204,17 @@ impl<
|
|||||||
// remove temporaries.
|
// remove temporaries.
|
||||||
let new_header = <system::Module<System>>::finalise();
|
let new_header = <system::Module<System>>::finalise();
|
||||||
|
|
||||||
// check digest. uncomment next two lines to figure out next digest hash for tests.
|
// check digest.
|
||||||
// runtime_io::print(&header.digest().encode()[..]);
|
assert_eq!(
|
||||||
// runtime_io::print(&new_header.digest().encode()[..]);
|
header.digest().logs().len(),
|
||||||
assert!(header.digest() == new_header.digest());
|
new_header.digest().logs().len(),
|
||||||
|
"Number of digest items must match that calculated."
|
||||||
|
);
|
||||||
|
let items_zip = header.digest().logs().iter().zip(new_header.digest().logs().iter());
|
||||||
|
for (header_item, computed_item) in items_zip {
|
||||||
|
header_item.check_equal(&computed_item);
|
||||||
|
assert!(header_item == computed_item, "Digest item must match that calculated.");
|
||||||
|
}
|
||||||
|
|
||||||
// check storage root.
|
// check storage root.
|
||||||
let storage_root = System::Hashing::storage_root();
|
let storage_root = System::Hashing::storage_root();
|
||||||
|
|||||||
Reference in New Issue
Block a user