1
0
Fork 0
mirror of https://github.com/romanz/electrs.git synced 2025-02-24 06:57:53 +01:00

Add support for testnet BTC

This commit is contained in:
Roman Zeyde 2018-05-07 09:28:58 +03:00
parent 15971dcfef
commit d9ddfc4289
No known key found for this signature in database
GPG key ID: 87CAE5FA46917CBB

View file

@ -4,41 +4,75 @@ extern crate argparse;
extern crate crossbeam;
extern crate indexrs;
use argparse::{ArgumentParser, StoreFalse};
use argparse::{ArgumentParser, StoreFalse, StoreTrue};
use std::fs::OpenOptions;
use indexrs::{daemon, index, query, rpc, store, waiter};
fn setup_logging() {
use simplelog::*;
let mut cfg = Config::default();
cfg.time_format = Some("%F %H:%M:%S%.3f");
CombinedLogger::init(vec![
TermLogger::new(LevelFilter::Info, cfg.clone()).unwrap(),
WriteLogger::new(
LevelFilter::Debug,
cfg.clone(),
OpenOptions::new()
.create(true)
.append(true)
.open("indexrs.log")
.unwrap(),
),
]).unwrap();
}
const DB_PATH: &str = "./db/mainnet";
struct Config {
log_file: String,
enable_indexing: bool,
testnet: bool,
}
fn run_server(config: Config) {
impl Config {
pub fn from_args() -> Config {
let mut config = Config {
log_file: "indexrs.log".to_string(),
enable_indexing: true,
testnet: false,
};
{
let mut parser = ArgumentParser::new();
parser.set_description("Bitcoin indexing server.");
parser.refer(&mut config.enable_indexing).add_option(
&["--disable-indexing"],
StoreFalse,
"Disable indexing server (allow queries on existing DB)",
);
parser.refer(&mut config.testnet).add_option(
&["--testnet"],
StoreTrue,
"Connect to a testnet bitcoind instance",
);
parser.parse_args_or_exit();
}
config
}
pub fn rpc_addr(&self) -> &'static str {
// for serving Electrum clients
match self.testnet {
false => "localhost:50001",
true => "localhost:60001",
}
}
pub fn db_path(&self) -> &'static str {
match self.testnet {
false => "./db/mainnet",
true => "./db/testnet",
}
}
pub fn daemon_url(&self) -> &'static str {
match self.testnet {
false => "http://localhost:8332",
true => "http://localhost:18332",
}
}
pub fn zmq_endpoint(&self) -> &'static str {
"tcp://localhost:28332"
}
}
fn run_server(config: &Config) {
let index = index::Index::new();
let waiter = waiter::Waiter::new("tcp://localhost:28332");
let daemon = daemon::Daemon::new("http://localhost:8332");
let waiter = waiter::Waiter::new(config.zmq_endpoint());
let daemon = daemon::Daemon::new(config.daemon_url());
{
let store = store::Store::open(
DB_PATH,
config.db_path(),
store::StoreOptions {
// compact manually after the first run has finished successfully
auto_compact: false,
@ -50,13 +84,13 @@ fn run_server(config: Config) {
}
}
let store = store::Store::open(DB_PATH, store::StoreOptions { auto_compact: true });
let store = store::Store::open(config.db_path(), store::StoreOptions { auto_compact: true });
let query = query::Query::new(&store, &daemon, &index);
crossbeam::scope(|scope| {
let chan = rpc::Channel::new();
let tx = chan.sender();
scope.spawn(|| rpc::serve("localhost:50001", &query, chan));
scope.spawn(|| rpc::serve(config.rpc_addr(), &query, chan));
loop {
let blockhash = waiter.wait();
if config.enable_indexing {
@ -67,21 +101,26 @@ fn run_server(config: Config) {
});
}
fn main() {
let mut config = Config {
enable_indexing: true,
};
{
let mut parser = ArgumentParser::new();
parser.set_description("Bitcoin indexing server.");
parser.refer(&mut config.enable_indexing).add_option(
&["--disable-indexing"],
StoreFalse,
"Disable indexing server (allow queries on existing DB)",
);
parser.parse_args_or_exit();
}
setup_logging();
run_server(config)
fn setup_logging(config: &Config) {
use simplelog::*;
let mut cfg = Config::default();
cfg.time_format = Some("%F %H:%M:%S%.3f");
CombinedLogger::init(vec![
TermLogger::new(LevelFilter::Info, cfg.clone()).unwrap(),
WriteLogger::new(
LevelFilter::Debug,
cfg.clone(),
OpenOptions::new()
.create(true)
.append(true)
.open(&config.log_file)
.unwrap(),
),
]).unwrap();
}
fn main() {
let config = Config::from_args();
setup_logging(&config);
run_server(&config)
}