diff --git a/substrate/core/sr-primitives/src/lib.rs b/substrate/core/sr-primitives/src/lib.rs index dfd34ed01f..2deb05c90f 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); + +#[cfg(feature = "std")] +impl ::serde::Serialize for OpaqueExtrinsic { + fn serialize(&self, seq: S) -> Result 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 { + 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 967b0d775c..0273306134 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; pub type BlockId = generic::BlockId; /// 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); - -impl traits::Extrinsic for UncheckedExtrinsic { - fn is_signed(&self) -> Option { - None - } -} +pub type UncheckedExtrinsic = OpaqueExtrinsic;