deserialize new seal

This commit is contained in:
keorn 2016-12-14 12:14:04 +01:00
parent 1a9a142a69
commit 8509a183ed
3 changed files with 21 additions and 11 deletions

View File

@ -20,7 +20,7 @@ use std::str::FromStr;
use serde::{Deserialize, Deserializer, Serialize, Serializer, Error}; use serde::{Deserialize, Deserializer, Serialize, Serializer, Error};
use serde::de::Visitor; use serde::de::Visitor;
use rustc_serialize::hex::ToHex; use rustc_serialize::hex::ToHex;
use util::hash::{H64 as Hash64, H160 as Hash160, H256 as Hash256, H2048 as Hash2048}; use util::hash::{H64 as Hash64, H160 as Hash160, H256 as Hash256, H520 as Hash520, H2048 as Hash2048};
macro_rules! impl_hash { macro_rules! impl_hash {
@ -87,6 +87,7 @@ macro_rules! impl_hash {
impl_hash!(H64, Hash64); impl_hash!(H64, Hash64);
impl_hash!(Address, Hash160); impl_hash!(Address, Hash160);
impl_hash!(H256, Hash256); impl_hash!(H256, Hash256);
impl_hash!(H520, Hash520);
impl_hash!(Bloom, Hash2048); impl_hash!(Bloom, Hash2048);
#[cfg(test)] #[cfg(test)]

View File

@ -33,7 +33,7 @@ pub use self::builtin::{Builtin, Pricing, Linear};
pub use self::genesis::Genesis; pub use self::genesis::Genesis;
pub use self::params::Params; pub use self::params::Params;
pub use self::spec::Spec; pub use self::spec::Spec;
pub use self::seal::{Seal, Ethereum, Generic}; pub use self::seal::{Seal, Ethereum, AuthorityRoundSeal};
pub use self::engine::Engine; pub use self::engine::Engine;
pub use self::state::State; pub use self::state::State;
pub use self::ethash::{Ethash, EthashParams}; pub use self::ethash::{Ethash, EthashParams};

View File

@ -16,7 +16,8 @@
//! Spec seal deserialization. //! Spec seal deserialization.
use hash::{H64, H256}; use hash::*;
use uint::Uint;
use bytes::Bytes; use bytes::Bytes;
/// Ethereum seal. /// Ethereum seal.
@ -29,11 +30,13 @@ pub struct Ethereum {
pub mix_hash: H256, pub mix_hash: H256,
} }
/// Generic seal. /// AuthorityRound seal.
#[derive(Debug, PartialEq, Deserialize)] #[derive(Debug, PartialEq, Deserialize)]
pub struct Generic { pub struct AuthorityRoundSeal {
/// Seal rlp. /// Seal step.
pub rlp: Bytes, pub step: Uint,
/// Seal signature.
pub signature: H520,
} }
/// Seal variants. /// Seal variants.
@ -42,9 +45,12 @@ pub enum Seal {
/// Ethereum seal. /// Ethereum seal.
#[serde(rename="ethereum")] #[serde(rename="ethereum")]
Ethereum(Ethereum), Ethereum(Ethereum),
/// AuthorityRound seal.
#[serde(rename="authority_round")]
AuthorityRound(AuthorityRoundSeal),
/// Generic seal. /// Generic seal.
#[serde(rename="generic")] #[serde(rename="generic")]
Generic(Generic), Generic(Bytes),
} }
#[cfg(test)] #[cfg(test)]
@ -53,15 +59,18 @@ mod tests {
use spec::Seal; use spec::Seal;
#[test] #[test]
fn builtin_deserialization() { fn seal_deserialization() {
let s = r#"[{ let s = r#"[{
"ethereum": { "ethereum": {
"nonce": "0x0000000000000042", "nonce": "0x0000000000000042",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000" "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
} }
},{ },{
"generic": { "generic": "0xe011bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa"
"rlp": "0xe011bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa" },{
"authority_round": {
"step": "0x0",
"signature": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
} }
}]"#; }]"#;
let _deserialized: Vec<Seal> = serde_json::from_str(s).unwrap(); let _deserialized: Vec<Seal> = serde_json::from_str(s).unwrap();