Stub for DkgClient

This commit is contained in:
Jędrzej Stuczyński
2022-05-06 10:19:11 +01:00
parent ff9cdba941
commit f85ac03cda
8 changed files with 96 additions and 1 deletions
Generated
+1
View File
@@ -6203,6 +6203,7 @@ dependencies = [
"async-trait",
"base64",
"bip39",
"coconut-dkg-common",
"coconut-interface",
"colored",
"config",
@@ -12,6 +12,7 @@ base64 = "0.13"
colored = "2.0"
mixnet-contract-common = { path= "../../cosmwasm-smart-contracts/mixnet-contract" }
vesting-contract-common = { path= "../../cosmwasm-smart-contracts/vesting-contract" }
coconut-dkg-common = { path = "../../cosmwasm-smart-contracts/coconut-dkg-contract", optional = true }
vesting-contract = { path = "../../../contracts/vesting" }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
@@ -54,3 +55,4 @@ nymd-client = [
"itertools",
"cosmwasm-std",
]
dkg = ["nymd-client", "coconut-dkg-common"]
@@ -42,6 +42,8 @@ pub struct Config {
mixnet_contract_address: Option<cosmrs::AccountId>,
vesting_contract_address: Option<cosmrs::AccountId>,
erc20_bridge_contract_address: Option<cosmrs::AccountId>,
#[cfg(feature = "dkg")]
coconut_dkg_contract_address: Option<cosmrs::AccountId>,
mixnode_page_limit: Option<u32>,
gateway_page_limit: Option<u32>,
@@ -65,6 +67,8 @@ impl Config {
mixnet_contract_address,
vesting_contract_address,
erc20_bridge_contract_address,
#[cfg(feature = "dkg")]
coconut_dkg_contract_address: None,
api_url,
mixnode_page_limit: None,
gateway_page_limit: None,
@@ -92,6 +96,15 @@ impl Config {
self.rewarded_set_page_limit = limit;
self
}
#[cfg(feature = "dkg")]
pub fn with_coconut_dkg_contract(
mut self,
coconut_dkg_contract_address: Option<cosmrs::AccountId>,
) -> Config {
self.coconut_dkg_contract_address = coconut_dkg_contract_address;
self
}
}
#[cfg(feature = "nymd-client")]
@@ -100,6 +113,8 @@ pub struct Client<C> {
mixnet_contract_address: Option<cosmrs::AccountId>,
vesting_contract_address: Option<cosmrs::AccountId>,
erc20_bridge_contract_address: Option<cosmrs::AccountId>,
#[cfg(feature = "dkg")]
coconut_dkg_contract_address: Option<cosmrs::AccountId>,
mnemonic: Option<bip39::Mnemonic>,
mixnode_page_limit: Option<u32>,
@@ -134,6 +149,8 @@ impl Client<SigningNymdClient> {
mixnet_contract_address: config.mixnet_contract_address,
vesting_contract_address: config.vesting_contract_address,
erc20_bridge_contract_address: config.erc20_bridge_contract_address,
#[cfg(feature = "dkg")]
coconut_dkg_contract_address: config.coconut_dkg_contract_address,
mnemonic: Some(mnemonic),
mixnode_page_limit: config.mixnode_page_limit,
gateway_page_limit: config.gateway_page_limit,
@@ -192,6 +209,8 @@ impl Client<QueryNymdClient> {
mixnet_contract_address: config.mixnet_contract_address,
vesting_contract_address: config.vesting_contract_address,
erc20_bridge_contract_address: config.erc20_bridge_contract_address,
#[cfg(feature = "dkg")]
coconut_dkg_contract_address: config.coconut_dkg_contract_address,
mnemonic: None,
mixnode_page_limit: config.mixnode_page_limit,
gateway_page_limit: config.gateway_page_limit,
@@ -219,6 +238,16 @@ impl<C> Client<C> {
self.validator_api.change_url(new_endpoint)
}
#[cfg(feature = "dkg")]
pub fn set_coconut_dkg_contract(
&mut self,
coconut_dkg_contract_address: Option<cosmrs::AccountId>,
) {
self.nymd
.set_coconut_dkg_contract_address(coconut_dkg_contract_address.clone());
self.coconut_dkg_contract_address = coconut_dkg_contract_address;
}
// use case: somebody initialised client without a contract in order to upload and initialise one
// and now they want to actually use it without making new client
pub fn set_mixnet_contract_address(&mut self, mixnet_contract_address: cosmrs::AccountId) {
@@ -58,6 +58,8 @@ pub struct NymdClient<C> {
mixnet_contract_address: Option<AccountId>,
vesting_contract_address: Option<AccountId>,
erc20_bridge_contract_address: Option<AccountId>,
#[cfg(feature = "dkg")]
coconut_dkg_contract_address: Option<AccountId>,
client_address: Option<Vec<AccountId>>,
custom_gas_limits: HashMap<Operation, Gas>,
simulated_gas_multiplier: f32,
@@ -78,6 +80,8 @@ impl NymdClient<QueryNymdClient> {
mixnet_contract_address,
vesting_contract_address,
erc20_bridge_contract_address,
#[cfg(feature = "dkg")]
coconut_dkg_contract_address: None,
client_address: None,
custom_gas_limits: HashMap::default(),
simulated_gas_multiplier: DEFAULT_SIMULATED_GAS_MULTIPLIER,
@@ -112,6 +116,8 @@ impl NymdClient<SigningNymdClient> {
mixnet_contract_address,
vesting_contract_address,
erc20_bridge_contract_address,
#[cfg(feature = "dkg")]
coconut_dkg_contract_address: None,
client_address: Some(client_address),
custom_gas_limits: HashMap::default(),
simulated_gas_multiplier: DEFAULT_SIMULATED_GAS_MULTIPLIER,
@@ -145,6 +151,8 @@ impl NymdClient<SigningNymdClient> {
mixnet_contract_address,
vesting_contract_address,
erc20_bridge_contract_address,
#[cfg(feature = "dkg")]
coconut_dkg_contract_address: None,
client_address: Some(client_address),
custom_gas_limits: HashMap::default(),
simulated_gas_multiplier: DEFAULT_SIMULATED_GAS_MULTIPLIER,
@@ -171,6 +179,21 @@ impl<C> NymdClient<C> {
.ok_or(NymdError::NoContractAddressAvailable)
}
#[cfg(feature = "dkg")]
pub fn set_coconut_dkg_contract_address(
&mut self,
coconut_dkg_contract_address: Option<AccountId>,
) {
self.coconut_dkg_contract_address = coconut_dkg_contract_address;
}
#[cfg(feature = "dkg")]
pub fn coconut_dkg_contract_address(&self) -> Result<&AccountId, NymdError> {
self.coconut_dkg_contract_address
.as_ref()
.ok_or(NymdError::NoContractAddressAvailable)
}
pub fn set_simulated_gas_multiplier(&mut self, multiplier: f32) {
self.simulated_gas_multiplier = multiplier;
}
@@ -0,0 +1,26 @@
// Copyright 2022 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: Apache-2.0
use crate::nymd::error::NymdError;
use crate::nymd::{NymdClient, SigningCosmWasmClient};
use async_trait::async_trait;
use coconut_dkg_common::msg::QueryMsg as DkgQueryMsg;
use coconut_dkg_common::types::Epoch;
#[async_trait]
pub trait DkgClient {
async fn get_current_dkg_epoch(&self) -> Result<Epoch, NymdError>;
}
#[async_trait]
impl<C> DkgClient for NymdClient<C>
where
C: SigningCosmWasmClient + Send + Sync,
{
async fn get_current_dkg_epoch(&self) -> Result<Epoch, NymdError> {
let request = DkgQueryMsg::GetCurrentEpoch {};
self.client
.query_contract_smart(self.coconut_dkg_contract_address()?, &request)
.await
}
}
@@ -1,8 +1,12 @@
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
// SPDX-License-Identifier: Apache-2.0
#[cfg(feature = "dkg")]
mod dkg_client;
mod vesting_query_client;
mod vesting_signing_client;
#[cfg(feature = "dkg")]
pub use dkg_client::DkgClient;
pub use vesting_query_client::VestingQueryClient;
pub use vesting_signing_client::VestingSigningClient;
+1 -1
View File
@@ -65,7 +65,7 @@ mixnet-contract-common = { path= "../common/cosmwasm-smart-contracts/mixnet-cont
nymsphinx = { path="../common/nymsphinx" }
topology = { path="../common/topology" }
validator-api-requests = { path = "validator-api-requests" }
validator-client = { path="../common/client-libs/validator-client", features = ["nymd-client"] }
validator-client = { path="../common/client-libs/validator-client", features = ["nymd-client", "dkg"] }
version-checker = { path="../common/version-checker" }
coconut-interface = { path = "../common/coconut-interface", optional = true }
credentials = { path = "../common/credentials", optional = true }
+10
View File
@@ -5,6 +5,7 @@ use crate::config::Config;
use crate::rewarded_set_updater::error::RewardingError;
#[cfg(feature = "coconut")]
use async_trait::async_trait;
use coconut_dkg_common::types::Epoch as DkgEpoch;
use config::defaults::{DEFAULT_NETWORK, DEFAULT_VALIDATOR_API_PORT};
use mixnet_contract_common::Interval;
use mixnet_contract_common::{
@@ -16,6 +17,8 @@ use std::sync::Arc;
use std::time::Duration;
use tokio::sync::RwLock;
use tokio::time::sleep;
use validator_client::nymd::error::NymdError;
use validator_client::nymd::traits::DkgClient;
use validator_client::nymd::{
hash::{Hash, SHA256_HASH_SIZE},
CosmWasmClient, CosmosCoin, Fee, QueryNymdClient, SigningCosmWasmClient, SigningNymdClient,
@@ -404,6 +407,13 @@ impl<C> Client<C> {
}
}
}
async fn get_dkg_epoch(&self) -> Result<DkgEpoch, NymdError>
where
C: SigningCosmWasmClient + Send + Sync,
{
self.0.read().await.nymd.get_current_dkg_epoch().await
}
}
#[async_trait]