diff --git a/beacon_node/beacon_chain/Cargo.toml b/beacon_node/beacon_chain/Cargo.toml index 54902ddd68..e124765536 100644 --- a/beacon_node/beacon_chain/Cargo.toml +++ b/beacon_node/beacon_chain/Cargo.toml @@ -13,7 +13,9 @@ failure = "0.1" failure_derive = "0.1" genesis = { path = "../../eth2/genesis" } hashing = { path = "../../eth2/utils/hashing" } +serde = "1.0" serde_derive = "1.0" +serde_json = "1.0" slot_clock = { path = "../../eth2/utils/slot_clock" } ssz = { path = "../../eth2/utils/ssz" } types = { path = "../../eth2/types" } diff --git a/beacon_node/beacon_chain/src/dump.rs b/beacon_node/beacon_chain/src/dump.rs index e4cb0844a8..1f1df9ea26 100644 --- a/beacon_node/beacon_chain/src/dump.rs +++ b/beacon_node/beacon_chain/src/dump.rs @@ -1,7 +1,8 @@ use super::{BeaconChain, ClientDB, DBError, SlotClock}; +use serde_derive::Serialize; use types::{BeaconBlock, BeaconState, Hash256}; -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Serialize)] pub struct SlotDump { pub beacon_block: BeaconBlock, pub beacon_block_root: Hash256, diff --git a/beacon_node/beacon_chain/tests/chain.rs b/beacon_node/beacon_chain/tests/chain.rs index c4d8062656..85dd4662e3 100644 --- a/beacon_node/beacon_chain/tests/chain.rs +++ b/beacon_node/beacon_chain/tests/chain.rs @@ -15,4 +15,6 @@ fn it_can_produce_blocks() { let dump = rig.chain_dump().expect("Chain dump failed."); assert_eq!(dump.len(), blocks + 1); // + 1 for genesis block. + + rig.dump_to_file("/tmp/chaindump.json".to_string(), &dump); } diff --git a/beacon_node/beacon_chain/tests/utils/test_rig.rs b/beacon_node/beacon_chain/tests/utils/test_rig.rs index a3a6417159..52d3fbdaea 100644 --- a/beacon_node/beacon_chain/tests/utils/test_rig.rs +++ b/beacon_node/beacon_chain/tests/utils/test_rig.rs @@ -6,7 +6,10 @@ use db::{ stores::{BeaconBlockStore, BeaconStateStore}, MemoryDB, }; +use serde_json::Result as SerdeResult; use slot_clock::TestingSlotClock; +use std::fs::File; +use std::io::prelude::*; use std::sync::Arc; use types::{ChainSpec, Keypair, Validator}; @@ -87,4 +90,10 @@ impl TestRig { pub fn chain_dump(&self) -> Result, DumpError> { self.beacon_chain.chain_dump() } + + pub fn dump_to_file(&self, filename: String, chain_dump: &Vec) { + let json = serde_json::to_string(chain_dump).unwrap(); + let mut file = File::create(filename).unwrap(); + file.write_all(json.as_bytes()); + } }