Make the contract optional

This commit is contained in:
Jon Häggblad
2023-04-19 10:37:59 +02:00
parent 0ebc395df9
commit 2c4aee63bf
7 changed files with 43 additions and 13 deletions
@@ -117,7 +117,7 @@ async fn test_nyxd_connection(
);
code == 18
}
Ok(Err(error @ NyxdError::NoContractAddressAvailable)) => {
Ok(Err(error @ NyxdError::NoContractAddressAvailable(_))) => {
log::debug!("Checking: nyxd url: {url}: {}: {error}", "failed".red());
false
}
@@ -22,7 +22,7 @@ use std::{io, time::Duration};
#[derive(Debug, Error)]
pub enum NyxdError {
#[error("No contract address is available to perform the call")]
NoContractAddressAvailable,
NoContractAddressAvailable(String),
#[error(transparent)]
WalletError(#[from] DirectSecp256k1HdWalletError),
@@ -316,11 +316,9 @@ impl<C> NyxdClient<C> {
self.config.coconut_dkg_contract_address.as_ref().unwrap()
}
pub fn service_provider_contract_address(&self) -> &AccountId {
self.config
.service_provider_contract_address
.as_ref()
.expect("no service provider contract address set")
// The service provider directory contract is optional, so we return an Option not a Result
pub fn service_provider_contract_address(&self) -> Option<&AccountId> {
self.config.service_provider_contract_address.as_ref()
}
pub fn set_simulated_gas_multiplier(&mut self, multiplier: f32) {
@@ -94,7 +94,14 @@ where
for<'a> T: Deserialize<'a>,
{
self.client
.query_contract_smart(self.service_provider_contract_address(), &query)
.query_contract_smart(
self.service_provider_contract_address().ok_or(
NyxdError::NoContractAddressAvailable(
"service provider directory contract".to_string(),
),
)?,
&query,
)
.await
}
}
@@ -96,7 +96,11 @@ where
self.client
.execute(
self.address(),
self.service_provider_contract_address(),
self.service_provider_contract_address().ok_or(
NyxdError::NoContractAddressAvailable(
"service provider directory contract".to_string(),
),
)?,
&msg,
fee,
memo,