Feature/configurable dkg signup (#2809)
* Refactored consts to config structure * Nym-cli generate init for dkg contract
This commit is contained in:
committed by
GitHub
parent
8d3aea969e
commit
ad8fdbdddf
@@ -3,8 +3,10 @@
|
||||
|
||||
use clap::Parser;
|
||||
use log::{debug, info};
|
||||
use std::str::FromStr;
|
||||
|
||||
use coconut_dkg_common::msg::InstantiateMsg;
|
||||
use coconut_dkg_common::types::TimeConfiguration;
|
||||
|
||||
#[derive(Debug, Parser)]
|
||||
pub struct Args {
|
||||
@@ -14,6 +16,24 @@ pub struct Args {
|
||||
#[clap(long)]
|
||||
pub multisig_addr: Option<String>,
|
||||
|
||||
#[clap(long)]
|
||||
pub public_key_submission_time_secs: Option<u64>,
|
||||
|
||||
#[clap(long)]
|
||||
pub dealing_exchange_time_secs: Option<u64>,
|
||||
|
||||
#[clap(long)]
|
||||
pub verification_key_submission_time_secs: Option<u64>,
|
||||
|
||||
#[clap(long)]
|
||||
pub verification_key_validation_time_secs: Option<u64>,
|
||||
|
||||
#[clap(long)]
|
||||
pub verification_key_finalization_time_secs: Option<u64>,
|
||||
|
||||
#[clap(long)]
|
||||
pub in_progress_time_secs: Option<u64>,
|
||||
|
||||
#[clap(long)]
|
||||
pub mix_denom: Option<String>,
|
||||
}
|
||||
@@ -32,9 +52,42 @@ pub async fn generate(args: Args) {
|
||||
std::env::var(network_defaults::var_names::MIX_DENOM).expect("Mix denom has to be set")
|
||||
});
|
||||
|
||||
let mut time_configuration =
|
||||
if let Ok(config) = std::env::var(network_defaults::var_names::DKG_TIME_CONFIGURATION) {
|
||||
TimeConfiguration::from_str(&config).expect("Invalid env variable value")
|
||||
} else {
|
||||
TimeConfiguration::default()
|
||||
};
|
||||
if let Some(public_key_submission_time_secs) = args.public_key_submission_time_secs {
|
||||
time_configuration.public_key_submission_time_secs = public_key_submission_time_secs;
|
||||
}
|
||||
if let Some(dealing_exchange_time_secs) = args.dealing_exchange_time_secs {
|
||||
time_configuration.dealing_exchange_time_secs = dealing_exchange_time_secs;
|
||||
}
|
||||
if let Some(verification_key_submission_time_secs) = args.verification_key_submission_time_secs
|
||||
{
|
||||
time_configuration.verification_key_submission_time_secs =
|
||||
verification_key_submission_time_secs;
|
||||
}
|
||||
if let Some(verification_key_validation_time_secs) = args.verification_key_validation_time_secs
|
||||
{
|
||||
time_configuration.verification_key_validation_time_secs =
|
||||
verification_key_validation_time_secs;
|
||||
}
|
||||
if let Some(verification_key_finalization_time_secs) =
|
||||
args.verification_key_finalization_time_secs
|
||||
{
|
||||
time_configuration.verification_key_finalization_time_secs =
|
||||
verification_key_finalization_time_secs;
|
||||
}
|
||||
if let Some(in_progress_time_secs) = args.in_progress_time_secs {
|
||||
time_configuration.in_progress_time_secs = in_progress_time_secs;
|
||||
}
|
||||
|
||||
let instantiate_msg = InstantiateMsg {
|
||||
group_addr: args.group_addr,
|
||||
multisig_addr,
|
||||
time_configuration: Some(time_configuration),
|
||||
mix_denom,
|
||||
};
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::types::{ContractSafeBytes, EncodedBTEPublicKeyWithProof};
|
||||
use crate::types::{ContractSafeBytes, EncodedBTEPublicKeyWithProof, TimeConfiguration};
|
||||
use crate::verification_key::VerificationKeyShare;
|
||||
use cosmwasm_std::Addr;
|
||||
use schemars::JsonSchema;
|
||||
@@ -11,6 +11,7 @@ use serde::{Deserialize, Serialize};
|
||||
pub struct InstantiateMsg {
|
||||
pub group_addr: String,
|
||||
pub multisig_addr: String,
|
||||
pub time_configuration: Option<TimeConfiguration>,
|
||||
pub mix_denom: String,
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
// Copyright 2022 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use schemars::JsonSchema;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::fmt::{Display, Formatter};
|
||||
use std::str::FromStr;
|
||||
|
||||
pub use crate::dealer::{DealerDetails, PagedDealerResponse};
|
||||
pub use contracts_common::dealings::ContractSafeBytes;
|
||||
@@ -12,37 +14,91 @@ pub type EncodedBTEPublicKeyWithProof = String;
|
||||
pub type EncodedBTEPublicKeyWithProofRef<'a> = &'a str;
|
||||
pub type NodeIndex = u64;
|
||||
|
||||
// The time sign-up is open for dealers to join (2 minutes)
|
||||
pub const PUBLIC_KEY_SUBMISSION_TIME_SECS: u64 = 60 * 2;
|
||||
pub const DEALING_EXCHANGE_TIME_SECS: u64 = 60 * 5;
|
||||
pub const VERIFICATION_KEY_SUBMISSION_TIME_SECS: u64 = 60 * 5;
|
||||
pub const VERIFICATION_KEY_VALIDATION_TIME_SECS: u64 = 60;
|
||||
pub const VERIFICATION_KEY_FINALIZATION_TIME_SECS: u64 = 60;
|
||||
// The time an epoch lasts (2 weeks)
|
||||
pub const IN_PROGRESS_TIME_SECS: u64 = 60 * 60 * 24 * 14;
|
||||
|
||||
// 2 public attributes, 2 private attributes, 1 fixed for coconut credential
|
||||
pub const TOTAL_DEALINGS: usize = 2 + 2 + 1;
|
||||
|
||||
#[derive(
|
||||
Serialize, Deserialize, Clone, Copy, Debug, PartialEq, Eq, Ord, PartialOrd, JsonSchema,
|
||||
)]
|
||||
pub struct TimeConfiguration {
|
||||
// The time sign-up is open for dealers to join
|
||||
pub public_key_submission_time_secs: u64,
|
||||
pub dealing_exchange_time_secs: u64,
|
||||
pub verification_key_submission_time_secs: u64,
|
||||
pub verification_key_validation_time_secs: u64,
|
||||
pub verification_key_finalization_time_secs: u64,
|
||||
// The time an epoch lasts
|
||||
pub in_progress_time_secs: u64,
|
||||
}
|
||||
|
||||
impl FromStr for TimeConfiguration {
|
||||
type Err = String;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
let times = s
|
||||
.split(',')
|
||||
.map(|t| t.parse())
|
||||
.collect::<Result<Vec<u64>, _>>()
|
||||
.map_err(|_| String::from("Could not parse string"))?;
|
||||
if times.len() != 6 {
|
||||
Err(String::from("Not enough time specified"))
|
||||
} else {
|
||||
Ok(TimeConfiguration {
|
||||
public_key_submission_time_secs: times[0],
|
||||
dealing_exchange_time_secs: times[1],
|
||||
verification_key_submission_time_secs: times[2],
|
||||
verification_key_validation_time_secs: times[3],
|
||||
verification_key_finalization_time_secs: times[4],
|
||||
in_progress_time_secs: times[5],
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for TimeConfiguration {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
public_key_submission_time_secs: 60 * 10, // 10 minutes
|
||||
dealing_exchange_time_secs: 60 * 5, // 5 minutes
|
||||
verification_key_submission_time_secs: 60 * 5, // 5 minutes
|
||||
verification_key_validation_time_secs: 60, // 1 minute
|
||||
verification_key_finalization_time_secs: 60, // 1 minute
|
||||
in_progress_time_secs: 60 * 60 * 24 * 14, // 2 weeks
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Default, Clone, Copy, Debug, PartialEq, Eq, Ord, PartialOrd)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub struct Epoch {
|
||||
pub state: EpochState,
|
||||
pub time_configuration: TimeConfiguration,
|
||||
pub finish_timestamp: Timestamp,
|
||||
}
|
||||
|
||||
impl Epoch {
|
||||
pub fn new(state: EpochState, current_timestamp: Timestamp) -> Self {
|
||||
pub fn new(
|
||||
state: EpochState,
|
||||
time_configuration: TimeConfiguration,
|
||||
current_timestamp: Timestamp,
|
||||
) -> Self {
|
||||
let duration = match state {
|
||||
EpochState::PublicKeySubmission => PUBLIC_KEY_SUBMISSION_TIME_SECS,
|
||||
EpochState::DealingExchange => DEALING_EXCHANGE_TIME_SECS,
|
||||
EpochState::VerificationKeySubmission => VERIFICATION_KEY_SUBMISSION_TIME_SECS,
|
||||
EpochState::VerificationKeyValidation => VERIFICATION_KEY_VALIDATION_TIME_SECS,
|
||||
EpochState::VerificationKeyFinalization => VERIFICATION_KEY_FINALIZATION_TIME_SECS,
|
||||
EpochState::InProgress => IN_PROGRESS_TIME_SECS,
|
||||
EpochState::PublicKeySubmission => time_configuration.public_key_submission_time_secs,
|
||||
EpochState::DealingExchange => time_configuration.dealing_exchange_time_secs,
|
||||
EpochState::VerificationKeySubmission => {
|
||||
time_configuration.verification_key_submission_time_secs
|
||||
}
|
||||
EpochState::VerificationKeyValidation => {
|
||||
time_configuration.verification_key_validation_time_secs
|
||||
}
|
||||
EpochState::VerificationKeyFinalization => {
|
||||
time_configuration.verification_key_finalization_time_secs
|
||||
}
|
||||
EpochState::InProgress => time_configuration.in_progress_time_secs,
|
||||
};
|
||||
Epoch {
|
||||
state,
|
||||
time_configuration,
|
||||
finish_timestamp: current_timestamp.plus_seconds(duration),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,8 @@ pub const STATISTICS_SERVICE_DOMAIN_ADDRESS: &str = "STATISTICS_SERVICE_DOMAIN_A
|
||||
pub const NYXD: &str = "NYXD";
|
||||
pub const NYM_API: &str = "NYM_API";
|
||||
|
||||
pub const DKG_TIME_CONFIGURATION: &str = "DKG_TIME_CONFIGURATION";
|
||||
|
||||
// we don't want to explicitly tag those with `#[deprecated]` because then our CI would be red and sad : (
|
||||
pub const DEPRECATED_NYMD_VALIDATOR: &str = "NYMD_VALIDATOR";
|
||||
pub const DEPRECATED_API_VALIDATOR: &str = "API_VALIDATOR";
|
||||
|
||||
@@ -52,7 +52,11 @@ pub fn instantiate(
|
||||
|
||||
CURRENT_EPOCH.save(
|
||||
deps.storage,
|
||||
&Epoch::new(EpochState::default(), env.block.time),
|
||||
&Epoch::new(
|
||||
EpochState::default(),
|
||||
msg.time_configuration.unwrap_or_default(),
|
||||
env.block.time,
|
||||
),
|
||||
)?;
|
||||
|
||||
Ok(Response::default())
|
||||
@@ -163,6 +167,7 @@ mod tests {
|
||||
let msg = InstantiateMsg {
|
||||
group_addr: group_contract_addr.to_string(),
|
||||
multisig_addr: MULTISIG_CONTRACT.to_string(),
|
||||
time_configuration: None,
|
||||
mix_denom: TEST_MIX_DENOM.to_string(),
|
||||
};
|
||||
app.instantiate_contract(
|
||||
@@ -197,6 +202,7 @@ mod tests {
|
||||
let msg = InstantiateMsg {
|
||||
group_addr: "group_addr".to_string(),
|
||||
multisig_addr: "multisig_addr".to_string(),
|
||||
time_configuration: None,
|
||||
mix_denom: "nym".to_string(),
|
||||
};
|
||||
let info = mock_info("creator", &[]);
|
||||
|
||||
@@ -71,7 +71,7 @@ pub(crate) mod tests {
|
||||
use super::*;
|
||||
use crate::epoch_state::transactions::advance_epoch_state;
|
||||
use crate::support::tests::helpers;
|
||||
use coconut_dkg_common::types::PUBLIC_KEY_SUBMISSION_TIME_SECS;
|
||||
use coconut_dkg_common::types::TimeConfiguration;
|
||||
use cosmwasm_std::testing::{mock_env, mock_info};
|
||||
|
||||
#[test]
|
||||
@@ -83,7 +83,10 @@ pub(crate) mod tests {
|
||||
let bte_key_with_proof = String::from("bte_key_with_proof");
|
||||
let announce_address = String::from("localhost:8000");
|
||||
|
||||
env.block.time = env.block.time.plus_seconds(PUBLIC_KEY_SUBMISSION_TIME_SECS);
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(TimeConfiguration::default().public_key_submission_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env).unwrap();
|
||||
|
||||
let ret = try_add_dealer(
|
||||
|
||||
@@ -43,7 +43,7 @@ pub(crate) mod tests {
|
||||
use crate::support::tests::fixtures::dealing_bytes_fixture;
|
||||
use crate::support::tests::helpers;
|
||||
use coconut_dkg_common::dealer::DealerDetails;
|
||||
use coconut_dkg_common::types::PUBLIC_KEY_SUBMISSION_TIME_SECS;
|
||||
use coconut_dkg_common::types::TimeConfiguration;
|
||||
use cosmwasm_std::testing::{mock_env, mock_info};
|
||||
use cosmwasm_std::Addr;
|
||||
|
||||
@@ -65,7 +65,10 @@ pub(crate) mod tests {
|
||||
}
|
||||
);
|
||||
|
||||
env.block.time = env.block.time.plus_seconds(PUBLIC_KEY_SUBMISSION_TIME_SECS);
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(TimeConfiguration::default().public_key_submission_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env).unwrap();
|
||||
|
||||
let ret =
|
||||
|
||||
@@ -22,7 +22,7 @@ pub(crate) fn query_current_epoch_threshold(
|
||||
pub(crate) mod test {
|
||||
use super::*;
|
||||
use crate::support::tests::helpers::init_contract;
|
||||
use coconut_dkg_common::types::{EpochState, PUBLIC_KEY_SUBMISSION_TIME_SECS};
|
||||
use coconut_dkg_common::types::{EpochState, TimeConfiguration};
|
||||
use cosmwasm_std::testing::mock_env;
|
||||
|
||||
#[test]
|
||||
@@ -35,7 +35,7 @@ pub(crate) mod test {
|
||||
mock_env()
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(PUBLIC_KEY_SUBMISSION_TIME_SECS)
|
||||
.plus_seconds(TimeConfiguration::default().public_key_submission_time_secs)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,11 @@ pub(crate) fn advance_epoch_state(deps: DepsMut<'_>, env: Env) -> Result<Respons
|
||||
let current_epoch = CURRENT_EPOCH.update::<_, ContractError>(deps.storage, |mut epoch| {
|
||||
// TODO: When defaulting to the first state, some action will probably need to be taken on the
|
||||
// rest of the contract, as we're starting with a new set of signers
|
||||
epoch = Epoch::new(epoch.state.next().unwrap_or_default(), env.block.time);
|
||||
epoch = Epoch::new(
|
||||
epoch.state.next().unwrap_or_default(),
|
||||
epoch.time_configuration,
|
||||
env.block.time,
|
||||
);
|
||||
Ok(epoch)
|
||||
})?;
|
||||
if current_epoch.state == EpochState::DealingExchange {
|
||||
@@ -40,11 +44,7 @@ pub(crate) mod tests {
|
||||
use super::*;
|
||||
use crate::error::ContractError::EarlyEpochStateAdvancement;
|
||||
use crate::support::tests::helpers::init_contract;
|
||||
use coconut_dkg_common::types::{
|
||||
DealerDetails, EpochState, DEALING_EXCHANGE_TIME_SECS, IN_PROGRESS_TIME_SECS,
|
||||
PUBLIC_KEY_SUBMISSION_TIME_SECS, VERIFICATION_KEY_FINALIZATION_TIME_SECS,
|
||||
VERIFICATION_KEY_SUBMISSION_TIME_SECS, VERIFICATION_KEY_VALIDATION_TIME_SECS,
|
||||
};
|
||||
use coconut_dkg_common::types::{DealerDetails, EpochState, TimeConfiguration};
|
||||
use cosmwasm_std::testing::mock_env;
|
||||
use cosmwasm_std::Addr;
|
||||
|
||||
@@ -57,13 +57,15 @@ pub(crate) mod tests {
|
||||
assert_eq!(epoch.state, EpochState::PublicKeySubmission);
|
||||
assert_eq!(
|
||||
epoch.finish_timestamp,
|
||||
env.block.time.plus_seconds(PUBLIC_KEY_SUBMISSION_TIME_SECS)
|
||||
env.block
|
||||
.time
|
||||
.plus_seconds(epoch.time_configuration.public_key_submission_time_secs)
|
||||
);
|
||||
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(PUBLIC_KEY_SUBMISSION_TIME_SECS - 1);
|
||||
.plus_seconds(epoch.time_configuration.public_key_submission_time_secs - 1);
|
||||
assert_eq!(
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap_err(),
|
||||
EarlyEpochStateAdvancement(1)
|
||||
@@ -75,10 +77,15 @@ pub(crate) mod tests {
|
||||
assert_eq!(epoch.state, EpochState::DealingExchange);
|
||||
assert_eq!(
|
||||
epoch.finish_timestamp,
|
||||
env.block.time.plus_seconds(DEALING_EXCHANGE_TIME_SECS)
|
||||
env.block
|
||||
.time
|
||||
.plus_seconds(epoch.time_configuration.dealing_exchange_time_secs)
|
||||
);
|
||||
|
||||
env.block.time = env.block.time.plus_seconds(DEALING_EXCHANGE_TIME_SECS - 2);
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(epoch.time_configuration.dealing_exchange_time_secs - 2);
|
||||
assert_eq!(
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap_err(),
|
||||
EarlyEpochStateAdvancement(2)
|
||||
@@ -90,15 +97,19 @@ pub(crate) mod tests {
|
||||
assert_eq!(epoch.state, EpochState::VerificationKeySubmission);
|
||||
assert_eq!(
|
||||
epoch.finish_timestamp,
|
||||
env.block
|
||||
.time
|
||||
.plus_seconds(VERIFICATION_KEY_SUBMISSION_TIME_SECS)
|
||||
env.block.time.plus_seconds(
|
||||
epoch
|
||||
.time_configuration
|
||||
.verification_key_submission_time_secs
|
||||
)
|
||||
);
|
||||
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(VERIFICATION_KEY_SUBMISSION_TIME_SECS - 2);
|
||||
env.block.time = env.block.time.plus_seconds(
|
||||
epoch
|
||||
.time_configuration
|
||||
.verification_key_submission_time_secs
|
||||
- 2,
|
||||
);
|
||||
assert_eq!(
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap_err(),
|
||||
EarlyEpochStateAdvancement(2)
|
||||
@@ -110,15 +121,19 @@ pub(crate) mod tests {
|
||||
assert_eq!(epoch.state, EpochState::VerificationKeyValidation);
|
||||
assert_eq!(
|
||||
epoch.finish_timestamp,
|
||||
env.block
|
||||
.time
|
||||
.plus_seconds(VERIFICATION_KEY_VALIDATION_TIME_SECS)
|
||||
env.block.time.plus_seconds(
|
||||
epoch
|
||||
.time_configuration
|
||||
.verification_key_validation_time_secs
|
||||
)
|
||||
);
|
||||
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(VERIFICATION_KEY_VALIDATION_TIME_SECS - 3);
|
||||
env.block.time = env.block.time.plus_seconds(
|
||||
epoch
|
||||
.time_configuration
|
||||
.verification_key_validation_time_secs
|
||||
- 3,
|
||||
);
|
||||
assert_eq!(
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap_err(),
|
||||
EarlyEpochStateAdvancement(3)
|
||||
@@ -130,15 +145,17 @@ pub(crate) mod tests {
|
||||
assert_eq!(epoch.state, EpochState::VerificationKeyFinalization);
|
||||
assert_eq!(
|
||||
epoch.finish_timestamp,
|
||||
env.block
|
||||
.time
|
||||
.plus_seconds(VERIFICATION_KEY_FINALIZATION_TIME_SECS)
|
||||
env.block.time.plus_seconds(
|
||||
epoch
|
||||
.time_configuration
|
||||
.verification_key_finalization_time_secs
|
||||
)
|
||||
);
|
||||
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(VERIFICATION_KEY_FINALIZATION_TIME_SECS - 1);
|
||||
.plus_seconds(TimeConfiguration::default().verification_key_finalization_time_secs - 1);
|
||||
assert_eq!(
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap_err(),
|
||||
EarlyEpochStateAdvancement(1)
|
||||
@@ -150,10 +167,15 @@ pub(crate) mod tests {
|
||||
assert_eq!(epoch.state, EpochState::InProgress);
|
||||
assert_eq!(
|
||||
epoch.finish_timestamp,
|
||||
env.block.time.plus_seconds(IN_PROGRESS_TIME_SECS)
|
||||
env.block
|
||||
.time
|
||||
.plus_seconds(epoch.time_configuration.in_progress_time_secs)
|
||||
);
|
||||
|
||||
env.block.time = env.block.time.plus_seconds(IN_PROGRESS_TIME_SECS - 100);
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(epoch.time_configuration.in_progress_time_secs - 100);
|
||||
assert_eq!(
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap_err(),
|
||||
EarlyEpochStateAdvancement(100)
|
||||
@@ -171,7 +193,9 @@ pub(crate) mod tests {
|
||||
assert_eq!(epoch.state, EpochState::PublicKeySubmission);
|
||||
assert_eq!(
|
||||
epoch.finish_timestamp,
|
||||
env.block.time.plus_seconds(PUBLIC_KEY_SUBMISSION_TIME_SECS)
|
||||
env.block
|
||||
.time
|
||||
.plus_seconds(epoch.time_configuration.public_key_submission_time_secs)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -198,7 +222,10 @@ pub(crate) mod tests {
|
||||
.unwrap();
|
||||
}
|
||||
|
||||
env.block.time = env.block.time.plus_seconds(PUBLIC_KEY_SUBMISSION_TIME_SECS);
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(TimeConfiguration::default().public_key_submission_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env).unwrap();
|
||||
assert_eq!(
|
||||
THRESHOLD.may_load(deps.as_mut().storage).unwrap().unwrap(),
|
||||
|
||||
@@ -25,7 +25,7 @@ pub(crate) fn check_epoch_state(
|
||||
pub(crate) mod test {
|
||||
use super::*;
|
||||
use crate::support::tests::helpers::init_contract;
|
||||
use coconut_dkg_common::types::Epoch;
|
||||
use coconut_dkg_common::types::{Epoch, TimeConfiguration};
|
||||
use cosmwasm_std::testing::mock_env;
|
||||
|
||||
#[test]
|
||||
@@ -37,7 +37,7 @@ pub(crate) mod test {
|
||||
CURRENT_EPOCH
|
||||
.save(
|
||||
deps.as_mut().storage,
|
||||
&Epoch::new(fixed_state, env.block.time),
|
||||
&Epoch::new(fixed_state, TimeConfiguration::default(), env.block.time),
|
||||
)
|
||||
.unwrap();
|
||||
for against_state in EpochState::default().all_until(EpochState::InProgress) {
|
||||
|
||||
@@ -17,6 +17,7 @@ pub fn init_contract() -> OwnedDeps<MemoryStorage, MockApi, MockQuerier<Empty>>
|
||||
let msg = InstantiateMsg {
|
||||
group_addr: String::from(GROUP_CONTRACT),
|
||||
multisig_addr: String::from(MULTISIG_CONTRACT),
|
||||
time_configuration: None,
|
||||
mix_denom: TEST_MIX_DENOM.to_string(),
|
||||
};
|
||||
let env = mock_env();
|
||||
|
||||
@@ -77,10 +77,7 @@ mod tests {
|
||||
use crate::support::tests::helpers;
|
||||
use crate::support::tests::helpers::MULTISIG_CONTRACT;
|
||||
use coconut_dkg_common::dealer::DealerDetails;
|
||||
use coconut_dkg_common::types::{
|
||||
EpochState, DEALING_EXCHANGE_TIME_SECS, PUBLIC_KEY_SUBMISSION_TIME_SECS,
|
||||
VERIFICATION_KEY_SUBMISSION_TIME_SECS, VERIFICATION_KEY_VALIDATION_TIME_SECS,
|
||||
};
|
||||
use coconut_dkg_common::types::{EpochState, TimeConfiguration};
|
||||
use cosmwasm_std::testing::{mock_env, mock_info};
|
||||
use cw_controllers::AdminError;
|
||||
|
||||
@@ -105,9 +102,15 @@ mod tests {
|
||||
expected_state: EpochState::VerificationKeySubmission.to_string()
|
||||
}
|
||||
);
|
||||
env.block.time = env.block.time.plus_seconds(PUBLIC_KEY_SUBMISSION_TIME_SECS);
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(TimeConfiguration::default().public_key_submission_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap();
|
||||
env.block.time = env.block.time.plus_seconds(DEALING_EXCHANGE_TIME_SECS);
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(TimeConfiguration::default().dealing_exchange_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap();
|
||||
let ret = try_commit_verification_key_share(
|
||||
deps.as_mut(),
|
||||
@@ -165,19 +168,25 @@ mod tests {
|
||||
}
|
||||
);
|
||||
|
||||
env.block.time = env.block.time.plus_seconds(PUBLIC_KEY_SUBMISSION_TIME_SECS);
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap();
|
||||
env.block.time = env.block.time.plus_seconds(DEALING_EXCHANGE_TIME_SECS);
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(TimeConfiguration::default().public_key_submission_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap();
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(VERIFICATION_KEY_SUBMISSION_TIME_SECS);
|
||||
.plus_seconds(TimeConfiguration::default().dealing_exchange_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap();
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(VERIFICATION_KEY_VALIDATION_TIME_SECS);
|
||||
.plus_seconds(TimeConfiguration::default().verification_key_submission_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap();
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(TimeConfiguration::default().verification_key_validation_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env).unwrap();
|
||||
|
||||
let ret =
|
||||
@@ -203,9 +212,15 @@ mod tests {
|
||||
let share = "share".to_string();
|
||||
let multisig_info = mock_info(MULTISIG_CONTRACT, &[]);
|
||||
|
||||
env.block.time = env.block.time.plus_seconds(PUBLIC_KEY_SUBMISSION_TIME_SECS);
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(TimeConfiguration::default().public_key_submission_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap();
|
||||
env.block.time = env.block.time.plus_seconds(DEALING_EXCHANGE_TIME_SECS);
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(TimeConfiguration::default().dealing_exchange_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap();
|
||||
|
||||
let dealer_details = DealerDetails {
|
||||
@@ -223,12 +238,12 @@ mod tests {
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(VERIFICATION_KEY_SUBMISSION_TIME_SECS);
|
||||
.plus_seconds(TimeConfiguration::default().verification_key_submission_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env.clone()).unwrap();
|
||||
env.block.time = env
|
||||
.block
|
||||
.time
|
||||
.plus_seconds(VERIFICATION_KEY_VALIDATION_TIME_SECS);
|
||||
.plus_seconds(TimeConfiguration::default().verification_key_validation_time_secs);
|
||||
advance_epoch_state(deps.as_mut(), env).unwrap();
|
||||
|
||||
try_verify_verification_key_share(deps.as_mut(), multisig_info, owner.clone()).unwrap();
|
||||
|
||||
@@ -71,6 +71,7 @@ fn dkg_proposal() {
|
||||
let msg = DkgInstantiateMsg {
|
||||
group_addr: group_contract_addr.to_string(),
|
||||
multisig_addr: multisig_contract_addr.to_string(),
|
||||
time_configuration: None,
|
||||
mix_denom: TEST_COIN_DENOM.to_string(),
|
||||
};
|
||||
let coconut_dkg_contract_addr = app
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
CONFIGURED=true
|
||||
|
||||
RUST_LOG=info
|
||||
RUST_BACKTRACE=1
|
||||
|
||||
BECH32_PREFIX=n
|
||||
MIX_DENOM=unym
|
||||
MIX_DENOM_DISPLAY=nym
|
||||
STAKE_DENOM=unyx
|
||||
STAKE_DENOM_DISPLAY=nyx
|
||||
DENOMS_EXPONENT=6
|
||||
MIXNET_CONTRACT_ADDRESS=n1xsml6tm6pnx8nsuz3a54cznh55g6nuwu9ug9t92ucjkq5ewp5w9syxeqsv
|
||||
VESTING_CONTRACT_ADDRESS=n1xr3rq8yvd7qplsw5yx90ftsr2zdhg4e9z60h5duusgxpv72hud3sjkxkav
|
||||
BANDWIDTH_CLAIM_CONTRACT_ADDRESS=n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0
|
||||
COCONUT_BANDWIDTH_CONTRACT_ADDRESS=n1lp5zex6685kd22agzskhqsylpnssxnweyuvsz4edr4p4ta92qf3q3dhmsx
|
||||
MULTISIG_CONTRACT_ADDRESS=n1rw8fw2mpcpzzq3jpa4e52ufawnmj5a4u68p35umvgskewuw0nlzsaa5w4m
|
||||
COCONUT_DKG_CONTRACT_ADDRESS=n15f5e6ffz33khfzaadaug9axjt5r38xfe84v9jvlhfs0y7mv9sxvs2xt0u6
|
||||
REWARDING_VALIDATOR_ADDRESS=n1tfzd4qz3a45u8p4mr5zmzv66457uwjgcl05jdq
|
||||
STATISTICS_SERVICE_DOMAIN_ADDRESS="http://0.0.0.0"
|
||||
NYMD_VALIDATOR="http://127.0.0.1:26657"
|
||||
API_VALIDATOR="http://127.0.0.1:8000"
|
||||
+3
-1
@@ -17,5 +17,7 @@ MULTISIG_CONTRACT_ADDRESS=n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0
|
||||
COCONUT_DKG_CONTRACT_ADDRESS=n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0
|
||||
REWARDING_VALIDATOR_ADDRESS=n10yyd98e2tuwu0f7ypz9dy3hhjw7v772q6287gy
|
||||
STATISTICS_SERVICE_DOMAIN_ADDRESS="https://mainnet-stats.nymte.ch:8090"
|
||||
nyxd_VALIDATOR="https://rpc.nymtech.net";
|
||||
NYXD_VALIDATOR="https://rpc.nymtech.net";
|
||||
API_VALIDATOR="https://validator.nymtech.net/api/"
|
||||
|
||||
DKG_TIME_CONFIGURATION="259200,300,300,60,60,1209600"
|
||||
|
||||
@@ -19,3 +19,5 @@ REWARDING_VALIDATOR_ADDRESS=n10yyd98e2tuwu0f7ypz9dy3hhjw7v772q6287gy
|
||||
STATISTICS_SERVICE_DOMAIN_ADDRESS="https://mainnet-stats.nymte.ch:8090"
|
||||
NYXD_VALIDATOR="https://qwerty-validator.qa.nymte.ch/"
|
||||
API_VALIDATOR="https://qwerty-validator-api.qa.nymte.ch/api"
|
||||
|
||||
DKG_TIME_CONFIGURATION="600,300,300,60,60,1209600"
|
||||
|
||||
@@ -19,3 +19,5 @@ REWARDING_VALIDATOR_ADDRESS=n1tfzd4qz3a45u8p4mr5zmzv66457uwjgcl05jdq
|
||||
STATISTICS_SERVICE_DOMAIN_ADDRESS="http://0.0.0.0"
|
||||
NYXD_VALIDATOR="https://qa-validator.nymtech.net"
|
||||
API_VALIDATOR="https://qa-validator-api.nymtech.net/api"
|
||||
|
||||
DKG_TIME_CONFIGURATION="600,300,300,60,60,1209600"
|
||||
Reference in New Issue
Block a user