55 lines
1.6 KiB
Rust
55 lines
1.6 KiB
Rust
|
use crate::config::Config;
|
||
|
use crate::error;
|
||
|
use crate::rpc::start_server;
|
||
|
use beacon_chain::BeaconChain;
|
||
|
use bls::create_proof_of_possession;
|
||
|
use db::{
|
||
|
stores::{BeaconBlockStore, BeaconStateStore},
|
||
|
ClientDB, DBType, DiskDB, MemoryDB,
|
||
|
};
|
||
|
use fork_choice::{BitwiseLMDGhost, ForkChoiceAlgorithm};
|
||
|
use futures::sync::oneshot;
|
||
|
use network::NetworkConfiguration;
|
||
|
use slog::{error, info};
|
||
|
use slot_clock::SystemTimeSlotClock;
|
||
|
use std::cell::RefCell;
|
||
|
use std::sync::Arc;
|
||
|
use tokio::runtime::{Builder, Runtime, TaskExecutor};
|
||
|
use types::{ChainSpec, Deposit, DepositData, DepositInput, Eth1Data, Hash256, Keypair};
|
||
|
|
||
|
pub fn run_beacon_node(config: Config, log: &slog::Logger) -> error::Result<()> {
|
||
|
let mut runtime = Builder::new()
|
||
|
.name_prefix("main-")
|
||
|
.build()
|
||
|
.map_err(|e| format!("{:?}", e))?;
|
||
|
|
||
|
// Log configuration
|
||
|
info!(log, "";
|
||
|
"data_dir" => &config.data_dir.to_str(),
|
||
|
"port" => &config.net_conf.listen_port);
|
||
|
|
||
|
// run service until ctrl-c
|
||
|
let (ctrlc_send, ctrlc) = oneshot::channel();
|
||
|
let ctrlc_send_c = RefCell::new(Some(ctrlc_send));
|
||
|
ctrlc::set_handler(move || {
|
||
|
if let Some(ctrlc_send) = ctrlc_send_c.try_borrow_mut().unwrap().take() {
|
||
|
ctrlc_send
|
||
|
.send(())
|
||
|
.expect("Error sending termination message");
|
||
|
}
|
||
|
});
|
||
|
|
||
|
let executor = runtime.executor();
|
||
|
|
||
|
start(config, log, executor);
|
||
|
|
||
|
runtime.block_on(ctrlc);
|
||
|
|
||
|
info!(log, "Shutting down.");
|
||
|
//TODO: handle shutdown of processes gracefully
|
||
|
|
||
|
Ok(())
|
||
|
}
|
||
|
|
||
|
fn start(config: Config, log: &slog::Logger, executor: TaskExecutor) {}
|