diff --git a/substrate/core/sr-primitives/src/lib.rs b/substrate/core/sr-primitives/src/lib.rs index dfd34ed01f3bd26e14bfeb3141194ffe21d79dd1..2deb05c90f57784e37b7381cd260fe9d3c82a732 100644 --- a/substrate/core/sr-primitives/src/lib.rs +++ b/substrate/core/sr-primitives/src/lib.rs @@ -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; diff --git a/substrate/node/primitives/src/lib.rs b/substrate/node/primitives/src/lib.rs index 967b0d775c040cdfe56ac0cc39b943ec54e66226..027330613468e581f5c2c7cf687148e3b91ba8fc 100644 --- a/substrate/node/primitives/src/lib.rs +++ b/substrate/node/primitives/src/lib.rs @@ -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;