diff --git a/validator-api/src/main.rs b/validator-api/src/main.rs index 6bc517e24d..842f12f15f 100644 --- a/validator-api/src/main.rs +++ b/validator-api/src/main.rs @@ -58,6 +58,9 @@ const API_VALIDATORS_ARG: &str = "api-validators"; #[cfg(feature = "coconut")] const KEYPAIR_ARG: &str = "keypair"; +#[cfg(feature = "coconut")] +const COCONUT_ONLY_FLAG: &str = "coconut-only"; + const EPOCH_LENGTH_ARG: &str = "epoch-length"; const FIRST_REWARDING_EPOCH_ARG: &str = "first-epoch"; const REWARDING_MONITOR_THRESHOLD_ARG: &str = "monitor-threshold"; @@ -162,11 +165,15 @@ fn parse_args<'a>() -> ArgMatches<'a> { ); #[cfg(feature = "coconut")] - let base_app = base_app.arg( + let base_app = base_app.arg( Arg::with_name(KEYPAIR_ARG) .help("Path to the secret key file") .takes_value(true) .long(KEYPAIR_ARG), + ).arg( + Arg::with_name(COCONUT_ONLY_FLAG) + .help("Flag to indicate whether validator api should only be used for credential issuance with no blockchain connection") + .long(COCONUT_ONLY_FLAG), ); base_app.get_matches() @@ -429,11 +436,24 @@ async fn main() -> Result<()> { }; let matches = parse_args(); + let config = override_config(config, &matches); // if we just wanted to write data to the config, exit if matches.is_present(WRITE_CONFIG_ARG) { return Ok(()); } + + #[cfg(feature = "coconut")] + if matches.is_present(COCONUT_ONLY_FLAG) { + // this simplifies everything - we just want to run coconut things + return rocket::build() + .attach(setup_cors()?) + .attach(InternalSignRequest::stage(config.keypair())) + .launch() + .await + .map_err(|err| err.into()); + } + let liftoff_notify = Arc::new(Notify::new()); // let's build our rocket!