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:
parent
15971dcfef
commit
d9ddfc4289
1 changed files with 83 additions and 44 deletions
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue