Merge pull request #94 from ethcore/reg_genesis
Added support for regnet && testnet genesis blocks
This commit is contained in:
commit
8d2a7e6aa5
|
@ -2,6 +2,7 @@
|
|||
//! https://www.anintegratedworld.com/unravelling-the-mysterious-block-chain-magic-number/
|
||||
|
||||
use ser::{Stream, Serializable};
|
||||
use chain::Block;
|
||||
use Error;
|
||||
|
||||
const MAGIC_MAINNET: u32 = 0xD9B4BEF9;
|
||||
|
@ -53,6 +54,14 @@ impl Magic {
|
|||
Magic::Regtest => 18443,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn genesis_block(&self) -> Block {
|
||||
match *self {
|
||||
Magic::Mainnet => "0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000".into(),
|
||||
Magic::Testnet => "0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000".into(),
|
||||
Magic::Regtest => "0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff7f20020000000101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000".into(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Serializable for Magic {
|
||||
|
|
|
@ -4,9 +4,9 @@ use config::Config;
|
|||
use util::{open_db, init_db};
|
||||
|
||||
pub fn import(cfg: Config, matches: &ArgMatches) -> Result<(), String> {
|
||||
let db = open_db(cfg.use_disk_database);
|
||||
let db = open_db(&cfg);
|
||||
// TODO: this might be unnecessary here!
|
||||
init_db(&db);
|
||||
init_db(&cfg, &db);
|
||||
|
||||
let mut writer = create_sync_blocks_writer(db);
|
||||
|
||||
|
|
|
@ -7,6 +7,9 @@ use {config, p2p};
|
|||
pub fn start(cfg: config::Config) -> Result<(), String> {
|
||||
let mut el = p2p::event_loop();
|
||||
|
||||
let db = open_db(&cfg);
|
||||
init_db(&cfg, &db);
|
||||
|
||||
let p2p_cfg = p2p::Config {
|
||||
threads: 4,
|
||||
protocol_minimum: 70001,
|
||||
|
@ -26,9 +29,6 @@ pub fn start(cfg: config::Config) -> Result<(), String> {
|
|||
node_table_path: node_table_path(),
|
||||
};
|
||||
|
||||
let db = open_db(cfg.use_disk_database);
|
||||
init_db(&db);
|
||||
|
||||
let sync_handle = el.handle();
|
||||
let sync_connection_factory = create_sync_connection_factory(&sync_handle, db);
|
||||
|
||||
|
|
20
pbtc/util.rs
20
pbtc/util.rs
|
@ -1,11 +1,12 @@
|
|||
use std::sync::Arc;
|
||||
use std::path::PathBuf;
|
||||
use app_dirs::{app_dir, AppDataType};
|
||||
use chain::Block;
|
||||
use chain::RepresentH256;
|
||||
use {db, APP_INFO};
|
||||
use config::Config;
|
||||
|
||||
pub fn open_db(use_disk_database: bool) -> Arc<db::Store> {
|
||||
match use_disk_database {
|
||||
pub fn open_db(cfg: &Config) -> Arc<db::Store> {
|
||||
match cfg.use_disk_database {
|
||||
true => {
|
||||
let db_path = app_dir(AppDataType::UserData, &APP_INFO, "db").expect("Failed to get app dir");
|
||||
Arc::new(db::Storage::new(db_path).expect("Failed to open database"))
|
||||
|
@ -22,12 +23,13 @@ pub fn node_table_path() -> PathBuf {
|
|||
node_table
|
||||
}
|
||||
|
||||
pub fn init_db(db: &Arc<db::Store>) {
|
||||
pub fn init_db(cfg: &Config, db: &Arc<db::Store>) {
|
||||
// insert genesis block if db is empty
|
||||
if db.best_block().is_none() {
|
||||
// TODO: move to config
|
||||
let genesis_block: Block = "0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000".into();
|
||||
db.insert_block(&genesis_block)
|
||||
.expect("Failed to insert genesis block to the database");
|
||||
let genesis_block = cfg.magic.genesis_block();
|
||||
match db.block_hash(0) {
|
||||
Some(ref db_genesis_block_hash) if db_genesis_block_hash != &genesis_block.hash() => panic!("Trying to open database with incompatible genesis block"),
|
||||
Some(_) => (),
|
||||
None => db.insert_block(&genesis_block)
|
||||
.expect("Failed to insert genesis block to the database"),
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue