From eacefd369788b05f6f0cc5374c94b2dd44cfc4a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jon=20H=C3=A4ggblad?= Date: Wed, 19 Apr 2023 16:56:30 +0200 Subject: [PATCH] nym-cli: add announce and delete service provider --- Cargo.lock | 1 + common/commands/Cargo.toml | 1 + .../src/validator/mixnet/operators/mod.rs | 3 ++ .../mixnet/operators/service/announce.rs | 33 +++++++++++++++++++ .../mixnet/operators/service/delete.rs | 23 +++++++++++++ .../validator/mixnet/operators/service/mod.rs | 19 +++++++++++ .../service-provider-directory/src/lib.rs | 2 ++ .../src/validator/mixnet/operators/mod.rs | 2 ++ .../mixnet/operators/services/mod.rs | 14 ++++++++ 9 files changed, 98 insertions(+) create mode 100644 common/commands/src/validator/mixnet/operators/service/announce.rs create mode 100644 common/commands/src/validator/mixnet/operators/service/delete.rs create mode 100644 common/commands/src/validator/mixnet/operators/service/mod.rs create mode 100644 tools/nym-cli/src/validator/mixnet/operators/services/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 86a90d91b2..22e57068cd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3191,6 +3191,7 @@ dependencies = [ "nym-mixnet-contract-common", "nym-multisig-contract-common", "nym-network-defaults", + "nym-service-provider-directory-common", "nym-validator-client", "nym-vesting-contract-common", "rand 0.6.5", diff --git a/common/commands/Cargo.toml b/common/commands/Cargo.toml index f81ee756c6..3e3a99f712 100644 --- a/common/commands/Cargo.toml +++ b/common/commands/Cargo.toml @@ -38,3 +38,4 @@ nym-vesting-contract-common = { path = "../cosmwasm-smart-contracts/vesting-cont nym-coconut-bandwidth-contract-common = { path = "../cosmwasm-smart-contracts/coconut-bandwidth-contract" } nym-coconut-dkg-common = { path = "../cosmwasm-smart-contracts/coconut-dkg" } nym-multisig-contract-common = { path = "../cosmwasm-smart-contracts/multisig-contract" } +nym-service-provider-directory-common = { path = "../cosmwasm-smart-contracts/service-provider-directory" } diff --git a/common/commands/src/validator/mixnet/operators/mod.rs b/common/commands/src/validator/mixnet/operators/mod.rs index a38479ba65..aa8af7d314 100644 --- a/common/commands/src/validator/mixnet/operators/mod.rs +++ b/common/commands/src/validator/mixnet/operators/mod.rs @@ -5,6 +5,7 @@ use clap::{Args, Subcommand}; pub mod gateway; pub mod mixnode; +pub mod service; #[derive(Debug, Args)] #[clap(args_conflicts_with_subcommands = true, subcommand_required = true)] @@ -19,4 +20,6 @@ pub enum MixnetOperatorsCommands { Mixnode(mixnode::MixnetOperatorsMixnode), /// Manage your gateway Gateway(gateway::MixnetOperatorsGateway), + /// Manage your service + ServiceProvider(service::MixnetOperatorsService), } diff --git a/common/commands/src/validator/mixnet/operators/service/announce.rs b/common/commands/src/validator/mixnet/operators/service/announce.rs new file mode 100644 index 0000000000..178993f203 --- /dev/null +++ b/common/commands/src/validator/mixnet/operators/service/announce.rs @@ -0,0 +1,33 @@ +use clap::Parser; +use log::info; +use nym_service_provider_directory_common::{Coin, NymAddress, ServiceType}; +use nym_validator_client::nyxd::traits::SpDirectorySigningClient; + +use crate::context::SigningClient; + +#[derive(Debug, Parser)] +pub struct Args { + #[clap(long)] + pub nym_address: String, + + /// Deposit to be made to the service provider directory, in curent DENOMINATION (e.g. 'unym') + #[clap(long)] + pub deposit: u128, +} + +pub async fn announce(args: Args, client: SigningClient) { + info!("Annoucing service provider"); + + let nym_address = NymAddress::Address(args.nym_address); + let service_type = ServiceType::NetworkRequester; + + let denom = client.current_chain_details().mix_denom.base.as_str(); + let deposit = Coin::new(args.deposit, denom); + + let res = client + .announce_service_provider(nym_address, service_type, deposit.into(), None) + .await + .expect("Failed to announce service provider"); + + info!("Announced service provider: {res:?}"); +} diff --git a/common/commands/src/validator/mixnet/operators/service/delete.rs b/common/commands/src/validator/mixnet/operators/service/delete.rs new file mode 100644 index 0000000000..eb86f4028f --- /dev/null +++ b/common/commands/src/validator/mixnet/operators/service/delete.rs @@ -0,0 +1,23 @@ +use clap::Parser; +use log::info; +use nym_service_provider_directory_common::ServiceId; +use nym_validator_client::nyxd::traits::SpDirectorySigningClient; + +use crate::context::SigningClient; + +#[derive(Debug, Parser)] +pub struct Args { + #[clap(long)] + pub id: ServiceId, +} + +pub async fn delete(args: Args, client: SigningClient) { + info!("Deleting service provider with id {}", args.id); + + let res = client + .delete_service_provider_by_id(args.id, None) + .await + .expect("Failed to delete service provider"); + + info!("Deleted: {res:?}"); +} diff --git a/common/commands/src/validator/mixnet/operators/service/mod.rs b/common/commands/src/validator/mixnet/operators/service/mod.rs new file mode 100644 index 0000000000..4007909404 --- /dev/null +++ b/common/commands/src/validator/mixnet/operators/service/mod.rs @@ -0,0 +1,19 @@ +use clap::{Args, Subcommand}; + +pub mod announce; +pub mod delete; + +#[derive(Debug, Args)] +#[clap(args_conflicts_with_subcommands = true, subcommand_required = true)] +pub struct MixnetOperatorsService { + #[clap(subcommand)] + pub command: MixnetOperatorsServiceCommands, +} + +#[derive(Debug, Subcommand)] +pub enum MixnetOperatorsServiceCommands { + /// Announce service provider to the world + Announce(announce::Args), + /// Delete entry for service provider from the directory + Delete(delete::Args), +} diff --git a/common/cosmwasm-smart-contracts/service-provider-directory/src/lib.rs b/common/cosmwasm-smart-contracts/service-provider-directory/src/lib.rs index f456db01aa..4609473c60 100644 --- a/common/cosmwasm-smart-contracts/service-provider-directory/src/lib.rs +++ b/common/cosmwasm-smart-contracts/service-provider-directory/src/lib.rs @@ -5,3 +5,5 @@ pub mod types; // Re-export all types at the top-level pub use types::*; + +pub use cosmwasm_std::{Addr, Coin, Decimal, Fraction}; diff --git a/tools/nym-cli/src/validator/mixnet/operators/mod.rs b/tools/nym-cli/src/validator/mixnet/operators/mod.rs index a79b432872..780886e40c 100644 --- a/tools/nym-cli/src/validator/mixnet/operators/mod.rs +++ b/tools/nym-cli/src/validator/mixnet/operators/mod.rs @@ -6,6 +6,7 @@ use nym_network_defaults::NymNetworkDetails; pub(crate) mod gateways; pub(crate) mod mixnodes; +pub(crate) mod services; pub(crate) async fn execute( global_args: ClientArgs, @@ -19,6 +20,7 @@ pub(crate) async fn execute( nym_cli_commands::validator::mixnet::operators::MixnetOperatorsCommands::Mixnode( mixnode, ) => mixnodes::execute(global_args, mixnode, network_details).await?, + nym_cli_commands::validator::mixnet::operators::MixnetOperatorsCommands::ServiceProvider(service) => services::execute(global_args, service, network_details).await?, } Ok(()) } diff --git a/tools/nym-cli/src/validator/mixnet/operators/services/mod.rs b/tools/nym-cli/src/validator/mixnet/operators/services/mod.rs new file mode 100644 index 0000000000..09df9b6a55 --- /dev/null +++ b/tools/nym-cli/src/validator/mixnet/operators/services/mod.rs @@ -0,0 +1,14 @@ +use nym_cli_commands::context::{create_signing_client, ClientArgs}; +use nym_network_defaults::NymNetworkDetails; + +pub(crate) async fn execute( + global_args: ClientArgs, + service: nym_cli_commands::validator::mixnet::operators::service::MixnetOperatorsService, + network_details: &NymNetworkDetails, +) -> anyhow::Result<()> { + match service.command { + nym_cli_commands::validator::mixnet::operators::service::MixnetOperatorsServiceCommands::Announce(announce) => nym_cli_commands::validator::mixnet::operators::service::announce::announce(announce, create_signing_client(global_args, network_details)?).await, + nym_cli_commands::validator::mixnet::operators::service::MixnetOperatorsServiceCommands::Delete(delete) => nym_cli_commands::validator::mixnet::operators::service::delete::delete(delete, create_signing_client(global_args, network_details)?).await, + } + Ok(()) +}