From 75fec4c30d81eb6f35115e98c7a69d76f1969dd4 Mon Sep 17 00:00:00 2001 From: Akshay Date: Fri, 8 Nov 2024 13:34:24 +0000 Subject: [PATCH] discard request --- kalypso-cli/src/common_deps.rs | 37 +++++++++++++++++++++++++++ kalypso-cli/src/config.json | 17 ++++++++++++ kalypso-cli/src/operations/mod.rs | 2 ++ kalypso-cli/src/operations/request.rs | 29 +++++++++++++++++++++ kalypso-cli/src/prompts.rs | 1 + 5 files changed, 86 insertions(+) create mode 100644 kalypso-cli/src/operations/request.rs diff --git a/kalypso-cli/src/common_deps.rs b/kalypso-cli/src/common_deps.rs index 197dfd6..6ffb518 100644 --- a/kalypso-cli/src/common_deps.rs +++ b/kalypso-cli/src/common_deps.rs @@ -593,3 +593,40 @@ impl CommonDeps { }) } } + +pub struct DiscardRequestInfo { + #[allow(unused)] + pub private_key_signer: LocalWallet, + pub proof_marketplace: bindings::proof_marketplace::ProofMarketplace< + SignerMiddleware, LocalWallet>, + >, + pub ask_id: U256, +} + +impl CommonDeps { + pub fn discard_request_info( + config: &std::collections::HashMap, + ) -> Result { + get_config_ref!(config, "private_key", private_key); + get_config_ref!(config, "rpc_url", rpc_url); + get_config_ref!(config, "proof_marketplace", proof_marketplace_address); + get_config_ref!(config, "chain_id", chain_id); + get_config_ref!(config, "ask_id", ask_id); + + let (proof_marketplace, private_key_signer) = get_proof_marketplace_instance( + private_key, + chain_id, + proof_marketplace_address, + rpc_url, + )?; + + let ask_id = + U256::from_dec_str(&ask_id.as_str()).map_err(|e| format!("Invalid Ask Id: {}", e))?; + + Ok(DiscardRequestInfo { + private_key_signer, + proof_marketplace, + ask_id, + }) + } +} diff --git a/kalypso-cli/src/config.json b/kalypso-cli/src/config.json index d9e4dde..eb72fd6 100644 --- a/kalypso-cli/src/config.json +++ b/kalypso-cli/src/config.json @@ -137,6 +137,12 @@ "prompt": "Enter inputs in hex string", "secret": false, "env_var": "INPUTS" + }, + { + "field": "ask_id", + "prompt": "Enter Ask ID/ Request ID", + "secret": false, + "env_var": "ASK_ID" } ], "operations": [ @@ -257,6 +263,17 @@ "max_proof_generation_time", "inputs" ] + }, + { + "name": "Discard Request", + "description": "Discard your own request using Request ID", + "required_prompts": [ + "private_key", + "rpc_url", + "chain_id", + "proof_marketplace", + "ask_id" + ] } ] } diff --git a/kalypso-cli/src/operations/mod.rs b/kalypso-cli/src/operations/mod.rs index ee506eb..616261f 100644 --- a/kalypso-cli/src/operations/mod.rs +++ b/kalypso-cli/src/operations/mod.rs @@ -7,6 +7,7 @@ pub mod create_marketplace; pub mod create_request; pub mod join_marketplace; pub mod leave_or_request_leave_marketplace; +pub mod request; pub mod stake; // ... Add other operation modules here @@ -59,6 +60,7 @@ pub fn get_operation(name: &str) -> Option> { "Create Proof Request (non confidential market)" => { Some(Box::new(create_request::NonConfidentialRequest)) } + "Discard Request" => Some(Box::new(request::DiscardRequest)), _ => unimplemented!(), } } diff --git a/kalypso-cli/src/operations/request.rs b/kalypso-cli/src/operations/request.rs new file mode 100644 index 0000000..a2e9f5c --- /dev/null +++ b/kalypso-cli/src/operations/request.rs @@ -0,0 +1,29 @@ +use std::collections::HashMap; + +use async_trait::async_trait; + +use crate::common_deps::CommonDeps; + +use super::Operation; + +pub struct DiscardRequest; + +#[async_trait] +impl Operation for DiscardRequest { + async fn execute(&self, config: HashMap) -> Result<(), String> { + let discard_request_info = CommonDeps::discard_request_info(&config)?; + + let tx_hash = CommonDeps::send_and_confirm( + discard_request_info + .proof_marketplace + .discard_request(discard_request_info.ask_id) + .send(), + ) + .await?; + + // Print the transaction hash + println!("{}", tx_hash); + + Ok(()) + } +} diff --git a/kalypso-cli/src/prompts.rs b/kalypso-cli/src/prompts.rs index 3615cb2..5d92a0f 100644 --- a/kalypso-cli/src/prompts.rs +++ b/kalypso-cli/src/prompts.rs @@ -53,6 +53,7 @@ impl<'a> Prompter<'a> { validators.insert("max_proof_generation_cost".to_string(), validate_dec_str_id); validators.insert("inputs".to_string(), validate_inputs); validators.insert("max_proof_generation_time".to_string(), validate_dec_str_id); + validators.insert("ask_id".to_string(), validate_dec_str_id); validators.insert( "confirmation".to_string(),