mirror of
https://github.com/hinto-janai/cuprate.git
synced 2024-12-23 03:59:37 +00:00
add cli args to RPC scanning binary
This commit is contained in:
parent
2c4cc1fb93
commit
92652b26a2
4 changed files with 76 additions and 39 deletions
|
@ -15,14 +15,12 @@ members = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
panic = 'abort'
|
|
||||||
lto = true # Build with LTO
|
lto = true # Build with LTO
|
||||||
strip = "none" # Keep panic stack traces
|
strip = "none" # Keep panic stack traces
|
||||||
codegen-units = 1 # Optimize for binary speed over compile times
|
codegen-units = 1 # Optimize for binary speed over compile times
|
||||||
opt-level = 3
|
opt-level = 3
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
panic = 'abort'
|
|
||||||
lto = false
|
lto = false
|
||||||
strip = "none"
|
strip = "none"
|
||||||
# Not much slower compile times than opt-level 0, but much faster code.
|
# Not much slower compile times than opt-level 0, but much faster code.
|
||||||
|
|
|
@ -22,7 +22,8 @@ binaries = [
|
||||||
"dep:monero-epee-bin-serde",
|
"dep:monero-epee-bin-serde",
|
||||||
"dep:monero-wire",
|
"dep:monero-wire",
|
||||||
"dep:bincode",
|
"dep:bincode",
|
||||||
"dep:dirs"
|
"dep:dirs",
|
||||||
|
"dep:clap"
|
||||||
]
|
]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
@ -56,6 +57,7 @@ serde = {version = "1", optional = true, features = ["derive"]}
|
||||||
tracing-subscriber = {version = "0.3", optional = true}
|
tracing-subscriber = {version = "0.3", optional = true}
|
||||||
bincode = {version = "2.0.0-rc.3", optional = true}
|
bincode = {version = "2.0.0-rc.3", optional = true}
|
||||||
dirs = {version="5.0", optional = true}
|
dirs = {version="5.0", optional = true}
|
||||||
|
clap = { version = "4.4.8", optional = true, features = ["derive"] }
|
||||||
# here to help cargo to pick a version - remove me
|
# here to help cargo to pick a version - remove me
|
||||||
syn = "2.0.37"
|
syn = "2.0.37"
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
use std::{ops::Range, path::PathBuf, sync::Arc};
|
use std::{ops::Range, path::PathBuf, sync::Arc};
|
||||||
|
|
||||||
|
use clap::Parser;
|
||||||
use futures::{
|
use futures::{
|
||||||
channel::{mpsc, oneshot},
|
channel::{mpsc, oneshot},
|
||||||
SinkExt, StreamExt,
|
SinkExt, StreamExt,
|
||||||
|
@ -230,24 +231,57 @@ where
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Parser)]
|
||||||
|
struct Args {
|
||||||
|
/// The log level, valid values:
|
||||||
|
/// "off", "error", "warn", "info", "debug", "trace", or a number 0-5.
|
||||||
|
#[arg(short, long, default_value = "info")]
|
||||||
|
log_level: LevelFilter,
|
||||||
|
/// The network we should scan, valid values:
|
||||||
|
/// "mainnet", "testnet", "stagenet".
|
||||||
|
#[arg(short, long, default_value = "mainnet")]
|
||||||
|
network: String,
|
||||||
|
/// A list of RPC nodes we should use.
|
||||||
|
/// Example: http://xmr-node.cakewallet.com:18081
|
||||||
|
#[arg(long)]
|
||||||
|
rpc_nodes: Vec<String>,
|
||||||
|
/// Stops the scanner from including the default list of nodes, this is not
|
||||||
|
/// recommended unless you have sufficient self defined nodes with `rpc_nodes`
|
||||||
|
#[arg(long)]
|
||||||
|
dont_use_default_nodes: bool,
|
||||||
|
/// The directory/ folder to save the scanning cache in.
|
||||||
|
/// This will default to your user cache directory.
|
||||||
|
#[arg(long)]
|
||||||
|
cache_dir: Option<PathBuf>,
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
// TODO: take this in as config options:
|
let args = Args::parse();
|
||||||
// - nodes to connect to
|
|
||||||
// - block batch size (not header)
|
if args.dont_use_default_nodes & args.rpc_nodes.is_empty() {
|
||||||
// - network
|
panic!("Can't run scanner with no RPC nodes, see `--help` ")
|
||||||
// - tracing level
|
}
|
||||||
|
|
||||||
tracing_subscriber::fmt()
|
tracing_subscriber::fmt()
|
||||||
.with_max_level(LevelFilter::INFO)
|
.with_max_level(args.log_level)
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
let network = Network::Mainnet;
|
let network = match args.network.as_str() {
|
||||||
|
"mainnet" => Network::Mainnet,
|
||||||
|
_ => panic!("Invalid network, scanner currently only supports mainnet"),
|
||||||
|
};
|
||||||
|
|
||||||
let mut file_for_cache = dirs::cache_dir().unwrap();
|
let mut file_for_cache = match args.cache_dir {
|
||||||
|
Some(dir) => dir,
|
||||||
|
None => dirs::cache_dir().unwrap(),
|
||||||
|
};
|
||||||
file_for_cache.push("cuprate_rpc_scanning_cache.bin");
|
file_for_cache.push("cuprate_rpc_scanning_cache.bin");
|
||||||
|
|
||||||
let urls = vec![
|
let mut urls = if args.dont_use_default_nodes {
|
||||||
|
vec![]
|
||||||
|
} else {
|
||||||
|
vec![
|
||||||
"http://xmr-node.cakewallet.com:18081".to_string(),
|
"http://xmr-node.cakewallet.com:18081".to_string(),
|
||||||
"https://node.sethforprivacy.com".to_string(),
|
"https://node.sethforprivacy.com".to_string(),
|
||||||
"http://nodex.monerujo.io:18081".to_string(),
|
"http://nodex.monerujo.io:18081".to_string(),
|
||||||
|
@ -271,7 +305,10 @@ async fn main() {
|
||||||
"http://38.105.209.54:18089".to_string(),
|
"http://38.105.209.54:18089".to_string(),
|
||||||
"http://68.118.241.70:18089".to_string(),
|
"http://68.118.241.70:18089".to_string(),
|
||||||
"http://145.239.97.211:18089".to_string(),
|
"http://145.239.97.211:18089".to_string(),
|
||||||
];
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
urls.extend(args.rpc_nodes.into_iter());
|
||||||
|
|
||||||
let rpc_config = RpcConfig::new(MAX_BLOCKS_IN_RANGE, MAX_BLOCKS_HEADERS_IN_RANGE);
|
let rpc_config = RpcConfig::new(MAX_BLOCKS_IN_RANGE, MAX_BLOCKS_HEADERS_IN_RANGE);
|
||||||
let rpc_config = Arc::new(std::sync::RwLock::new(rpc_config));
|
let rpc_config = Arc::new(std::sync::RwLock::new(rpc_config));
|
||||||
|
|
|
@ -130,7 +130,7 @@ where
|
||||||
fn call(&mut self, req: DatabaseRequest) -> Self::Future {
|
fn call(&mut self, req: DatabaseRequest) -> Self::Future {
|
||||||
let this = self.rpcs.clone();
|
let this = self.rpcs.clone();
|
||||||
let config_mutex = self.config.clone();
|
let config_mutex = self.config.clone();
|
||||||
let config = config_mutex.read().unwrap();
|
let config = config_mutex.clone();
|
||||||
|
|
||||||
let cache = self.cache.clone();
|
let cache = self.cache.clone();
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ where
|
||||||
DatabaseRequest::BlockBatchInRange,
|
DatabaseRequest::BlockBatchInRange,
|
||||||
DatabaseResponse::BlockBatchInRange,
|
DatabaseResponse::BlockBatchInRange,
|
||||||
resp_to_ret,
|
resp_to_ret,
|
||||||
config.max_blocks_per_node,
|
config.read().unwrap().max_blocks_per_node,
|
||||||
)
|
)
|
||||||
.boxed()
|
.boxed()
|
||||||
}
|
}
|
||||||
|
@ -183,7 +183,7 @@ where
|
||||||
DatabaseRequest::BlockExtendedHeaderInRange,
|
DatabaseRequest::BlockExtendedHeaderInRange,
|
||||||
DatabaseResponse::BlockExtendedHeaderInRange,
|
DatabaseResponse::BlockExtendedHeaderInRange,
|
||||||
resp_to_ret,
|
resp_to_ret,
|
||||||
config.max_block_headers_per_node,
|
config.read().unwrap().max_block_headers_per_node,
|
||||||
)
|
)
|
||||||
.boxed()
|
.boxed()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue