Skip to content
Snippets Groups Projects
Commit 039741c9 authored by Gav Wood's avatar Gav Wood Committed by GitHub
Browse files

Ensure opaque extr serialise is same as transparent (#1388)

* Ensure opaque extr serialise is same as transparent

Fixes #889

* Fix wasm compile
parent 9acda28c
No related merge requests found
......@@ -525,6 +525,25 @@ impl CheckInherentError {
}
}
/// Simple blob to hold an extrinsic without commiting to its format and ensure it is serialized
/// correctly.
#[derive(PartialEq, Eq, Clone, Default, Encode, Decode)]
#[cfg_attr(feature = "std", derive(Debug))]
pub struct OpaqueExtrinsic(pub Vec<u8>);
#[cfg(feature = "std")]
impl ::serde::Serialize for OpaqueExtrinsic {
fn serialize<S>(&self, seq: S) -> Result<S::Ok, S::Error> where S: ::serde::Serializer {
::codec::Encode::using_encoded(&self.0, |bytes| seq.serialize_bytes(bytes))
}
}
impl traits::Extrinsic for OpaqueExtrinsic {
fn is_signed(&self) -> Option<bool> {
None
}
}
#[cfg(test)]
mod tests {
use substrate_primitives::hash::H256;
......
......@@ -22,21 +22,18 @@
#![cfg_attr(not(feature = "std"), feature(alloc))]
#[cfg(feature = "std")]
#[macro_use]
extern crate serde_derive;
extern crate serde;
#[macro_use]
extern crate parity_codec_derive;
extern crate parity_codec as codec;
extern crate sr_std as rstd;
extern crate sr_primitives as runtime_primitives;
extern crate substrate_primitives as primitives;
use rstd::prelude::*;
use runtime_primitives::generic;
#[cfg(feature = "std")]
use primitives::bytes;
use runtime_primitives::traits::{BlakeTwo256, self};
use runtime_primitives::{OpaqueExtrinsic, traits::BlakeTwo256};
pub use runtime_primitives::BasicInherentData as InherentData;
......@@ -78,12 +75,4 @@ pub type Block = generic::Block<Header, UncheckedExtrinsic>;
pub type BlockId = generic::BlockId<Block>;
/// Opaque, encoded, unchecked extrinsic.
#[derive(PartialEq, Eq, Clone, Default, Encode, Decode)]
#[cfg_attr(feature = "std", derive(Serialize, Debug))]
pub struct UncheckedExtrinsic(#[cfg_attr(feature = "std", serde(with="bytes"))] pub Vec<u8>);
impl traits::Extrinsic for UncheckedExtrinsic {
fn is_signed(&self) -> Option<bool> {
None
}
}
pub type UncheckedExtrinsic = OpaqueExtrinsic;
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment