@ -1661,7 +1661,7 @@ fn is_pubkey(string: String) -> Result<(), String> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return an error if a pubkey cannot be parsed.
|
// Return an error if a keypair file cannot be parsed.
|
||||||
fn is_keypair(string: String) -> Result<(), String> {
|
fn is_keypair(string: String) -> Result<(), String> {
|
||||||
read_keypair(&string)
|
read_keypair(&string)
|
||||||
.map(|_| ())
|
.map(|_| ())
|
||||||
|
@ -15,7 +15,7 @@ use std::error;
|
|||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
|
|
||||||
fn pubkey_validator(pubkey: String) -> Result<(), String> {
|
fn is_pubkey(pubkey: String) -> Result<(), String> {
|
||||||
match pubkey.parse::<Pubkey>() {
|
match pubkey.parse::<Pubkey>() {
|
||||||
Ok(_) => Ok(()),
|
Ok(_) => Ok(()),
|
||||||
Err(err) => Err(format!("{:?}", err)),
|
Err(err) => Err(format!("{:?}", err)),
|
||||||
@ -38,6 +38,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
|||||||
.value_name("HOST:PORT")
|
.value_name("HOST:PORT")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.default_value(&entrypoint_string)
|
.default_value(&entrypoint_string)
|
||||||
|
.validator(solana_netutil::is_host_port)
|
||||||
.global(true)
|
.global(true)
|
||||||
.help("Rendezvous with the cluster at this entry point"),
|
.help("Rendezvous with the cluster at this entry point"),
|
||||||
)
|
)
|
||||||
@ -81,7 +82,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
|||||||
.long("pubkey")
|
.long("pubkey")
|
||||||
.value_name("PUBKEY")
|
.value_name("PUBKEY")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.validator(pubkey_validator)
|
.validator(is_pubkey)
|
||||||
.help("Public key of a specific node to wait for"),
|
.help("Public key of a specific node to wait for"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
@ -101,7 +102,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
|||||||
.index(1)
|
.index(1)
|
||||||
.required(true)
|
.required(true)
|
||||||
.value_name("PUBKEY")
|
.value_name("PUBKEY")
|
||||||
.validator(pubkey_validator)
|
.validator(is_pubkey)
|
||||||
.help("Public key of a specific node to stop"),
|
.help("Public key of a specific node to stop"),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -8,6 +8,13 @@ use std::path::PathBuf;
|
|||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
// Return an error if a keypair file cannot be parsed.
|
||||||
|
fn is_keypair(string: String) -> Result<(), String> {
|
||||||
|
read_keypair(&string)
|
||||||
|
.map(|_| ())
|
||||||
|
.map_err(|err| format!("{:?}", err))
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
|
|
||||||
@ -20,6 +27,7 @@ fn main() {
|
|||||||
.long("identity")
|
.long("identity")
|
||||||
.value_name("PATH")
|
.value_name("PATH")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
|
.validator(is_keypair)
|
||||||
.help("File containing an identity (keypair)"),
|
.help("File containing an identity (keypair)"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
@ -29,6 +37,7 @@ fn main() {
|
|||||||
.value_name("HOST:PORT")
|
.value_name("HOST:PORT")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.required(true)
|
.required(true)
|
||||||
|
.validator(solana_netutil::is_host_port)
|
||||||
.help("Rendezvous with the cluster at this entry point"),
|
.help("Rendezvous with the cluster at this entry point"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
@ -47,6 +56,7 @@ fn main() {
|
|||||||
.value_name("PATH")
|
.value_name("PATH")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.required(true)
|
.required(true)
|
||||||
|
.validator(is_keypair)
|
||||||
.help("File containing the storage account keypair"),
|
.help("File containing the storage account keypair"),
|
||||||
)
|
)
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
@ -104,6 +104,11 @@ pub fn parse_host_port(host_port: &str) -> Result<SocketAddr, String> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_host_port(string: String) -> Result<(), String> {
|
||||||
|
parse_host_port(&string)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(windows)]
|
#[cfg(windows)]
|
||||||
fn udp_socket(_reuseaddr: bool) -> io::Result<Socket> {
|
fn udp_socket(_reuseaddr: bool) -> io::Result<Socket> {
|
||||||
let sock = Socket::new(Domain::ipv4(), Type::dgram(), None)?;
|
let sock = Socket::new(Domain::ipv4(), Type::dgram(), None)?;
|
||||||
|
@ -50,6 +50,13 @@ fn is_pubkey(string: String) -> Result<(), String> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return an error if a keypair file cannot be parsed.
|
||||||
|
fn is_keypair(string: String) -> Result<(), String> {
|
||||||
|
read_keypair(&string)
|
||||||
|
.map(|_| ())
|
||||||
|
.map_err(|err| format!("{:?}", err))
|
||||||
|
}
|
||||||
|
|
||||||
// Return an error if a url cannot be parsed.
|
// Return an error if a url cannot be parsed.
|
||||||
fn is_url(string: String) -> Result<(), String> {
|
fn is_url(string: String) -> Result<(), String> {
|
||||||
match url::Url::parse(&string) {
|
match url::Url::parse(&string) {
|
||||||
@ -187,6 +194,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
|
|||||||
.value_name("KEYPAIR")
|
.value_name("KEYPAIR")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.required(true)
|
.required(true)
|
||||||
|
.validator(is_keypair)
|
||||||
.help("/path/to/validator-keypair.json"),
|
.help("/path/to/validator-keypair.json"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
|
@ -211,6 +211,13 @@ fn initialize_ledger_path(
|
|||||||
Ok(genesis_blockhash)
|
Ok(genesis_blockhash)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return an error if a keypair file cannot be parsed.
|
||||||
|
fn is_keypair(string: String) -> Result<(), String> {
|
||||||
|
read_keypair(&string)
|
||||||
|
.map(|_| ())
|
||||||
|
.map_err(|err| format!("{:?}", err))
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
solana_logger::setup_with_filter("solana=info");
|
solana_logger::setup_with_filter("solana=info");
|
||||||
solana_metrics::set_panic_hook("validator");
|
solana_metrics::set_panic_hook("validator");
|
||||||
@ -233,6 +240,7 @@ fn main() {
|
|||||||
.long("identity")
|
.long("identity")
|
||||||
.value_name("PATH")
|
.value_name("PATH")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
|
.validator(is_keypair)
|
||||||
.help("File containing the identity keypair for the validator"),
|
.help("File containing the identity keypair for the validator"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
@ -240,6 +248,7 @@ fn main() {
|
|||||||
.long("voting-keypair")
|
.long("voting-keypair")
|
||||||
.value_name("PATH")
|
.value_name("PATH")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
|
.validator(is_keypair)
|
||||||
.help("File containing the authorized voting keypair. Default is an ephemeral keypair"),
|
.help("File containing the authorized voting keypair. Default is an ephemeral keypair"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
@ -247,6 +256,7 @@ fn main() {
|
|||||||
.long("vote-account")
|
.long("vote-account")
|
||||||
.value_name("PUBKEY")
|
.value_name("PUBKEY")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
|
.validator(is_keypair)
|
||||||
.help("Public key of the vote account to vote with. Default is the public key of the voting keypair"),
|
.help("Public key of the vote account to vote with. Default is the public key of the voting keypair"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
@ -254,6 +264,7 @@ fn main() {
|
|||||||
.long("storage-keypair")
|
.long("storage-keypair")
|
||||||
.value_name("PATH")
|
.value_name("PATH")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
|
.validator(is_keypair)
|
||||||
.help("File containing the storage account keypair. Default is an ephemeral keypair"),
|
.help("File containing the storage account keypair. Default is an ephemeral keypair"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
@ -278,6 +289,7 @@ fn main() {
|
|||||||
.long("entrypoint")
|
.long("entrypoint")
|
||||||
.value_name("HOST:PORT")
|
.value_name("HOST:PORT")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
|
.validator(solana_netutil::is_host_port)
|
||||||
.help("Rendezvous with the cluster at this entry point"),
|
.help("Rendezvous with the cluster at this entry point"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
@ -324,6 +336,7 @@ fn main() {
|
|||||||
.long("rpc-drone-address")
|
.long("rpc-drone-address")
|
||||||
.value_name("HOST:PORT")
|
.value_name("HOST:PORT")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
|
.validator(solana_netutil::is_host_port)
|
||||||
.help("Enable the JSON RPC 'requestAirdrop' API with this drone address."),
|
.help("Enable the JSON RPC 'requestAirdrop' API with this drone address."),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
@ -332,6 +345,7 @@ fn main() {
|
|||||||
.value_name("HOST:PORT")
|
.value_name("HOST:PORT")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.hidden(true) // Don't document this argument to discourage its use
|
.hidden(true) // Don't document this argument to discourage its use
|
||||||
|
.validator(solana_netutil::is_host_port)
|
||||||
.help("Rendezvous with the vote signer at this RPC end point"),
|
.help("Rendezvous with the vote signer at this RPC end point"),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
|
Reference in New Issue
Block a user