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::de::Visitor;
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 {
@ -87,6 +87,7 @@ macro_rules! impl_hash {
impl_hash!(H64, Hash64);
impl_hash!(Address, Hash160);
impl_hash!(H256, Hash256);
impl_hash!(H520, Hash520);
impl_hash!(Bloom, Hash2048);
#[cfg(test)]

View File

@ -33,7 +33,7 @@ pub use self::builtin::{Builtin, Pricing, Linear};
pub use self::genesis::Genesis;
pub use self::params::Params;
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::state::State;
pub use self::ethash::{Ethash, EthashParams};

View File

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