From c6a7f4e0ef431ba155c46d6e135a56cc9b13491c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20H=C3=A4ggblad?= Date: Tue, 20 Sep 2022 12:02:49 +0200 Subject: [PATCH] validator-api-client and wallet: compute mixnode reward estimation --- .../validator-client/src/validator_api/mod.rs | 24 +++++++++++++++++-- .../src/validator_api/routes.rs | 1 + contracts/Cargo.lock | 4 ++-- nym-connect/Cargo.lock | 2 +- nym-wallet/src-tauri/src/main.rs | 1 + .../src/operations/validator_api/status.rs | 24 +++++++++++++++++-- validator-api/src/node_status_api/routes.rs | 15 +++--------- .../validator-api-requests/src/models.rs | 8 +++++++ 8 files changed, 60 insertions(+), 19 deletions(-) diff --git a/common/client-libs/validator-client/src/validator_api/mod.rs b/common/client-libs/validator-client/src/validator_api/mod.rs index 1fa3a50862..b5f5e36cc7 100644 --- a/common/client-libs/validator-client/src/validator_api/mod.rs +++ b/common/client-libs/validator-client/src/validator_api/mod.rs @@ -12,8 +12,9 @@ use validator_api_requests::coconut::{ VerifyCredentialBody, VerifyCredentialResponse, }; use validator_api_requests::models::{ - CoreNodeStatusResponse, InclusionProbabilityResponse, MixNodeBondAnnotated, - MixnodeStatusResponse, RewardEstimationResponse, StakeSaturationResponse, UptimeResponse, + ComputeRewardEstParam, CoreNodeStatusResponse, InclusionProbabilityResponse, + MixNodeBondAnnotated, MixnodeStatusResponse, RewardEstimationResponse, StakeSaturationResponse, + UptimeResponse, }; pub mod error; @@ -262,6 +263,25 @@ impl Client { .await } + pub async fn compute_mixnode_reward_estimation( + &self, + identity: IdentityKeyRef<'_>, + request_body: &ComputeRewardEstParam, + ) -> Result { + self.post_validator_api( + &[ + routes::API_VERSION, + routes::STATUS_ROUTES, + routes::MIXNODE, + identity, + routes::COMPUTE_REWARD_ESTIMATION, + ], + NO_PARAMS, + request_body, + ) + .await + } + pub async fn get_mixnode_stake_saturation( &self, identity: IdentityKeyRef<'_>, diff --git a/common/client-libs/validator-client/src/validator_api/routes.rs b/common/client-libs/validator-client/src/validator_api/routes.rs index 8f1a125c80..4b9ebaa9f9 100644 --- a/common/client-libs/validator-client/src/validator_api/routes.rs +++ b/common/client-libs/validator-client/src/validator_api/routes.rs @@ -29,6 +29,7 @@ pub const SINCE_ARG: &str = "since"; pub const STATUS: &str = "status"; pub const REWARD_ESTIMATION: &str = "reward-estimation"; +pub const COMPUTE_REWARD_ESTIMATION: &str = "compute-reward-estimation"; pub const AVG_UPTIME: &str = "avg_uptime"; pub const STAKE_SATURATION: &str = "stake-saturation"; pub const INCLUSION_CHANCE: &str = "inclusion-probability"; diff --git a/contracts/Cargo.lock b/contracts/Cargo.lock index e0676f0832..5f2beb9d03 100644 --- a/contracts/Cargo.lock +++ b/contracts/Cargo.lock @@ -1050,7 +1050,7 @@ checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "mixnet-contract" -version = "1.0.1" +version = "1.0.2" dependencies = [ "az", "bs58", @@ -1852,7 +1852,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "vesting-contract" -version = "1.0.1" +version = "1.0.2" dependencies = [ "cosmwasm-std", "cw-storage-plus", diff --git a/nym-connect/Cargo.lock b/nym-connect/Cargo.lock index 2944a49719..b21da0e2c9 100644 --- a/nym-connect/Cargo.lock +++ b/nym-connect/Cargo.lock @@ -6498,7 +6498,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "vesting-contract" -version = "1.0.1" +version = "1.0.2" dependencies = [ "cosmwasm-std", "cw-storage-plus", diff --git a/nym-wallet/src-tauri/src/main.rs b/nym-wallet/src-tauri/src/main.rs index 59b215f890..fbddf11942 100644 --- a/nym-wallet/src-tauri/src/main.rs +++ b/nym-wallet/src-tauri/src/main.rs @@ -90,6 +90,7 @@ fn main() { utils::owns_mixnode, utils::get_env, utils::get_old_and_incorrect_hardcoded_fee, + validator_api::status::compute_mixnode_reward_estimation, validator_api::status::gateway_core_node_status, validator_api::status::mixnode_core_node_status, validator_api::status::mixnode_inclusion_probability, diff --git a/nym-wallet/src-tauri/src/operations/validator_api/status.rs b/nym-wallet/src-tauri/src/operations/validator_api/status.rs index 7ff60d3e6b..7e1eb281da 100644 --- a/nym-wallet/src-tauri/src/operations/validator_api/status.rs +++ b/nym-wallet/src-tauri/src/operations/validator_api/status.rs @@ -5,8 +5,8 @@ use crate::api_client; use crate::error::BackendError; use crate::state::WalletState; use validator_client::models::{ - CoreNodeStatusResponse, InclusionProbabilityResponse, MixnodeStatusResponse, - RewardEstimationResponse, StakeSaturationResponse, + ComputeRewardEstParam, CoreNodeStatusResponse, InclusionProbabilityResponse, + MixnodeStatusResponse, RewardEstimationResponse, StakeSaturationResponse, }; #[tauri::command] @@ -49,6 +49,26 @@ pub async fn mixnode_reward_estimation( .await?) } +#[tauri::command] +pub async fn compute_mixnode_reward_estimation( + identity: &str, + uptime: Option, + is_active: Option, + pledge_amount: Option, + total_delegation: Option, + state: tauri::State<'_, WalletState>, +) -> Result { + let request_body = ComputeRewardEstParam { + uptime, + is_active, + pledge_amount, + total_delegation, + }; + Ok(api_client!(state) + .compute_mixnode_reward_estimation(identity, &request_body) + .await?) +} + #[tauri::command] pub async fn mixnode_stake_saturation( identity: &str, diff --git a/validator-api/src/node_status_api/routes.rs b/validator-api/src/node_status_api/routes.rs index bd71b78c59..de03258f20 100644 --- a/validator-api/src/node_status_api/routes.rs +++ b/validator-api/src/node_status_api/routes.rs @@ -14,11 +14,10 @@ use rocket::http::Status; use rocket::serde::json::Json; use rocket::State; use rocket_okapi::openapi; -use schemars::JsonSchema; -use serde::Deserialize; use validator_api_requests::models::{ - AllInclusionProbabilitiesResponse, CoreNodeStatusResponse, InclusionProbabilityResponse, - MixnodeStatusResponse, RewardEstimationResponse, StakeSaturationResponse, UptimeResponse, + AllInclusionProbabilitiesResponse, ComputeRewardEstParam, CoreNodeStatusResponse, + InclusionProbabilityResponse, MixnodeStatusResponse, RewardEstimationResponse, + StakeSaturationResponse, UptimeResponse, }; use super::models::Uptime; @@ -197,14 +196,6 @@ pub(crate) async fn get_mixnode_reward_estimation( } } -#[derive(Deserialize, JsonSchema)] -pub(crate) struct ComputeRewardEstParam { - uptime: Option, - is_active: Option, - pledge_amount: Option, - total_delegation: Option, -} - #[openapi(tag = "status")] #[post( "/mixnode//compute-reward-estimation", diff --git a/validator-api/validator-api-requests/src/models.rs b/validator-api/validator-api-requests/src/models.rs index a2af343a59..14db30d9a0 100644 --- a/validator-api/validator-api-requests/src/models.rs +++ b/validator-api/validator-api-requests/src/models.rs @@ -168,3 +168,11 @@ pub struct InclusionProbability { pub in_active: f64, pub in_reserve: f64, } + +#[derive(Clone, Serialize, Deserialize, schemars::JsonSchema)] +pub struct ComputeRewardEstParam { + pub uptime: Option, + pub is_active: Option, + pub pledge_amount: Option, + pub total_delegation: Option, +}