mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-05-30 05:51: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 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")]
|
||||
pub trait MaybeSerializeDebugButNotDeserialize: Serialize + Debug {}
|
||||
#[cfg(feature = "std")]
|
||||
@@ -491,7 +509,7 @@ pub trait Digest: Member + Default {
|
||||
/// for casting member to 'system' log items, known to substrate.
|
||||
///
|
||||
/// 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 AuthorityId: Member;
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ use rstd::prelude::*;
|
||||
use rstd::marker::PhantomData;
|
||||
use rstd::result;
|
||||
use primitives::traits::{self, Header, Zero, One, Checkable, Applyable, CheckEqual, OnFinalise,
|
||||
MakePayment, Hash, As};
|
||||
MakePayment, Hash, As, Digest};
|
||||
use runtime_support::Dispatchable;
|
||||
use codec::{Codec, Encode};
|
||||
use system::extrinsics_root;
|
||||
@@ -204,10 +204,17 @@ impl<
|
||||
// remove temporaries.
|
||||
let new_header = <system::Module<System>>::finalise();
|
||||
|
||||
// check digest. uncomment next two lines to figure out next digest hash for tests.
|
||||
// runtime_io::print(&header.digest().encode()[..]);
|
||||
// runtime_io::print(&new_header.digest().encode()[..]);
|
||||
assert!(header.digest() == new_header.digest());
|
||||
// check digest.
|
||||
assert_eq!(
|
||||
header.digest().logs().len(),
|
||||
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.
|
||||
let storage_root = System::Hashing::storage_root();
|
||||
|
||||
Reference in New Issue
Block a user