Resolve merge conflicts

This commit is contained in:
durch
2022-12-06 20:30:57 +01:00
parent 2f7d9254b8
commit 940427776c
7 changed files with 57 additions and 83 deletions
+2 -4
View File
@@ -47,14 +47,12 @@ impl SocketClient {
let mut client_config =
validator_client::Config::try_from_nym_network_details(&details)
.expect("failed to construct validator client config");
let nymd_url = self
.config
let nymd_url = config
.get_base()
.get_validator_endpoints()
.pop()
.expect("No nymd validator endpoint provided");
let api_url = self
.config
let api_url = config
.get_base()
.get_validator_api_endpoints()
.pop()
+2 -4
View File
@@ -57,14 +57,12 @@ impl NymClient {
let mut client_config =
validator_client::Config::try_from_nym_network_details(&details)
.expect("failed to construct validator client config");
let nymd_url = self
.config
let nymd_url = config
.get_base()
.get_validator_endpoints()
.pop()
.expect("No nymd validator endpoint provided");
let api_url = self
.config
let api_url = config
.get_base()
.get_validator_api_endpoints()
.pop()
+3 -3
View File
@@ -630,7 +630,7 @@ dependencies = [
[[package]]
name = "client-core"
version = "1.1.1"
version = "1.1.2"
dependencies = [
"client-connections",
"config",
@@ -3319,7 +3319,7 @@ dependencies = [
[[package]]
name = "nym-connect"
version = "1.1.0"
version = "1.1.2"
dependencies = [
"bip39",
"client-core",
@@ -3352,7 +3352,7 @@ dependencies = [
[[package]]
name = "nym-socks5-client"
version = "1.1.1"
version = "1.1.2"
dependencies = [
"clap",
"client-connections",
+1 -1
View File
@@ -2937,7 +2937,7 @@ dependencies = [
[[package]]
name = "nym_wallet"
version = "1.1.1"
version = "1.1.2"
dependencies = [
"aes-gcm",
"argon2 0.3.4",
+18 -57
View File
@@ -5,8 +5,6 @@ use crate::nymd_client::Client;
use ::time::OffsetDateTime;
use anyhow::Result;
use mixnet_contract_common::families::FamilyHead;
use mixnet_contract_common::mixnode::MixNodeDetails;
use mixnet_contract_common::reward_params::{Performance, RewardingParams};
use mixnet_contract_common::{
mixnode::MixNodeDetails, reward_params::RewardingParams, GatewayBond, IdentityKey, Interval,
MixId, MixNodeBond, RewardedSetNodeStatus,
@@ -64,6 +62,8 @@ struct ValidatorCacheInner {
current_reward_params: Cache<Option<RewardingParams>>,
current_interval: Cache<Option<Interval>>,
mix_to_family: Cache<Vec<(IdentityKey, FamilyHead)>>,
}
fn current_unix_timestamp() -> i64 {
@@ -126,57 +126,6 @@ impl<C> ValidatorCacheRefresher<C> {
self.update_notifier.subscribe()
}
async fn annotate_node_with_details(
&self,
mixnodes: Vec<MixNodeDetails>,
interval_reward_params: RewardingParams,
current_interval: Interval,
rewarded_set: &HashMap<MixId, RewardedSetNodeStatus>,
) -> Vec<MixNodeBondAnnotated> {
let mut annotated = Vec::new();
for mixnode in mixnodes {
let stake_saturation = mixnode
.rewarding_details
.bond_saturation(&interval_reward_params);
let uncapped_stake_saturation = mixnode
.rewarding_details
.uncapped_bond_saturation(&interval_reward_params);
let performance = self
.get_performance(mixnode.mix_id(), current_interval)
.await
.unwrap_or_default();
let rewarded_set_status = rewarded_set.get(&mixnode.mix_id()).cloned();
let reward_estimate = reward_estimate::compute_reward_estimate(
&mixnode,
performance,
rewarded_set_status,
interval_reward_params,
current_interval,
);
let (estimated_operator_apy, estimated_delegators_apy) =
reward_estimate::compute_apy_from_reward(
&mixnode,
reward_estimate,
current_interval,
);
annotated.push(MixNodeBondAnnotated {
mixnode_details: mixnode,
stake_saturation,
uncapped_stake_saturation,
performance,
estimated_operator_apy,
estimated_delegators_apy,
});
}
annotated
}
async fn get_rewarded_set_map(&self) -> HashMap<MixId, RewardedSetNodeStatus>
where
C: CosmWasmClient + Sync + Send,
@@ -217,11 +166,9 @@ impl<C> ValidatorCacheRefresher<C> {
let mixnodes = self.nymd_client.get_mixnodes().await?;
let gateways = self.nymd_client.get_gateways().await?;
let rewarded_set = self.get_rewarded_set_map().await;
let mix_to_family = self.nymd_client.get_all_family_members().await?;
let mixnodes = self
.annotate_node_with_details(mixnodes, rewarding_params, current_interval, &rewarded_set)
.await;
let rewarded_set_map = self.get_rewarded_set_map().await;
let (rewarded_set, active_set) =
Self::collect_rewarded_and_active_set_details(&mixnodes, &rewarded_set_map);
@@ -240,6 +187,7 @@ impl<C> ValidatorCacheRefresher<C> {
active_set,
rewarding_params,
current_interval,
mix_to_family,
)
.await;
@@ -322,6 +270,7 @@ impl ValidatorCache {
active_set: Vec<MixNodeDetails>,
rewarding_params: RewardingParams,
current_interval: Interval,
mix_to_family: Vec<(IdentityKey, FamilyHead)>,
) {
match time::timeout(Duration::from_millis(100), self.inner.write()).await {
Ok(mut cache) => {
@@ -331,6 +280,7 @@ impl ValidatorCache {
cache.active_set.update(active_set);
cache.current_reward_params.update(Some(rewarding_params));
cache.current_interval.update(Some(current_interval));
cache.mix_to_family.update(mix_to_family)
}
Err(e) => {
error!("{}", e);
@@ -504,6 +454,16 @@ impl ValidatorCache {
}
}
pub async fn mix_to_family(&self) -> Cache<Vec<(IdentityKey, FamilyHead)>> {
match time::timeout(Duration::from_millis(100), self.inner.read()).await {
Ok(cache) => cache.mix_to_family.clone(),
Err(e) => {
error!("{}", e);
Cache::new(Vec::new())
}
}
}
pub(crate) async fn interval_reward_params(&self) -> Cache<Option<RewardingParams>> {
match time::timeout(Duration::from_millis(100), self.inner.read()).await {
Ok(cache) => cache.current_reward_params.clone(),
@@ -578,6 +538,7 @@ impl ValidatorCacheInner {
gateways_blacklist: Cache::default(),
current_interval: Cache::default(),
current_reward_params: Cache::default(),
mix_to_family: Cache::default(),
}
}
}
+17 -13
View File
@@ -16,17 +16,17 @@ use crate::contract_cache::ValidatorCache;
use crate::nymd_client::Client;
use crate::storage::models::RewardingReport;
use crate::storage::ValidatorApiStorage;
use mixnet_contract_common::families::FamilyHead;
use mixnet_contract_common::{
reward_params::Performance, CurrentIntervalResponse, ExecuteMsg, Interval, MixId,
};
use mixnet_contract_common::{Layer, LayerAssignment};
use mixnet_contract_common::{IdentityKey, Layer, LayerAssignment, MixNodeDetails};
use rand::prelude::SliceRandom;
use rand::rngs::OsRng;
use std::collections::HashMap;
use std::collections::HashSet;
use std::time::Duration;
use tokio::time::sleep;
use validator_api_requests::models::MixNodeBondAnnotated;
use validator_client::nymd::SigningNymdClient;
pub(crate) mod error;
@@ -90,7 +90,7 @@ impl RewardedSetUpdater {
async fn determine_layers(
&self,
rewarded_set: &[MixNodeBondAnnotated],
rewarded_set: &[MixNodeDetails],
) -> Result<(Vec<LayerAssignment>, HashMap<String, Layer>), RewardingError> {
let mut families_in_layer: HashMap<String, Layer> = HashMap::new();
let mut assignments = vec![];
@@ -98,12 +98,16 @@ impl RewardedSetUpdater {
let mut rng = OsRng;
let layers = vec![Layer::One, Layer::Two, Layer::Three];
let mix_to_family = self.validator_cache.mix_to_family().await.to_vec();
let mix_to_family = mix_to_family
.into_iter()
.collect::<HashMap<IdentityKey, FamilyHead>>();
for mix in rewarded_set {
let family = mix_to_family.get(&mix.bond_information.identity().to_owned());
// Get layer already assigned to nodes family, if any
let family_layer = mix
.family
.as_ref()
.and_then(|h| families_in_layer.get(h.identity()));
let family_layer = family.and_then(|h| families_in_layer.get(h.identity()));
// Same node families are always assigned to the same layer, otherwise layer selected by a random weighted choice
let layer = if let Some(layer) = family_layer {
@@ -119,7 +123,7 @@ impl RewardedSetUpdater {
// layer accounting
let layer_entry = layer_assignments.entry(layer).or_insert(0.);
*layer_entry += 1.;
if let Some(ref family) = mix.family {
if let Some(family) = family {
families_in_layer.insert(family.identity().to_string(), layer);
}
}
@@ -129,9 +133,9 @@ impl RewardedSetUpdater {
fn determine_rewarded_set(
&self,
mixnodes: &[MixNodeBondAnnotated],
mixnodes: &[MixNodeDetails],
nodes_to_select: u32,
) -> Result<Vec<MixNodeBondAnnotated>, RewardingError> {
) -> Result<Vec<MixNodeDetails>, RewardingError> {
if mixnodes.is_empty() {
return Ok(Vec::new());
}
@@ -142,7 +146,7 @@ impl RewardedSetUpdater {
let choices = mixnodes
.iter()
.map(|mix| {
let total_stake = stake_to_f64(mix.mixnode_details.total_stake());
let total_stake = stake_to_f64(mix.total_stake());
(mix.to_owned(), total_stake)
})
.collect::<Vec<_>>();
@@ -236,7 +240,7 @@ impl RewardedSetUpdater {
async fn update_rewarded_set_and_advance_epoch(
&self,
all_mixnodes: &[MixNodeBondAnnotated],
all_mixnodes: &[MixNodeDetails],
) -> Result<(), RewardingError> {
// we grab rewarding parameters here as they might have gotten updated when performing epoch actions
let rewarding_parameters = self.nymd_client.get_current_rewarding_parameters().await?;
@@ -273,7 +277,7 @@ impl RewardedSetUpdater {
let epoch_end = interval.current_epoch_end();
let all_mixnodes = self.validator_cache.mixnodes_detailed().await;
let all_mixnodes = self.validator_cache.mixnodes().await;
if all_mixnodes.is_empty() {
log::warn!("there don't seem to be any mixnodes on the network!")
}
+14 -1
View File
@@ -3,9 +3,10 @@
use crate::contract_cache::{Cache, CacheNotification, ValidatorCache};
use crate::storage::ValidatorApiStorage;
use mixnet_contract_common::families::FamilyHead;
use mixnet_contract_common::reward_params::Performance;
use mixnet_contract_common::{
Interval, MixId, MixNodeDetails, RewardedSetNodeStatus, RewardingParams,
IdentityKey, Interval, MixId, MixNodeDetails, RewardedSetNodeStatus, RewardingParams,
};
use rocket::fairing::AdHoc;
use std::collections::HashMap;
@@ -238,6 +239,7 @@ impl NodeStatusCacheRefresher {
let rewarded_set = self.contract_cache.rewarded_set().await;
let active_set = self.contract_cache.active_set().await;
let mix_to_family = self.contract_cache.mix_to_family().await;
let interval_reward_params =
interval_reward_params.ok_or(NodeStatusCacheError::SourceDataMissing)?;
@@ -261,6 +263,7 @@ impl NodeStatusCacheRefresher {
interval_reward_params,
current_interval,
&rewarded_set_node_status,
mix_to_family.to_vec(),
)
.await;
@@ -301,7 +304,12 @@ impl NodeStatusCacheRefresher {
interval_reward_params: RewardingParams,
current_interval: Interval,
rewarded_set: &HashMap<MixId, RewardedSetNodeStatus>,
mix_to_family: Vec<(IdentityKey, FamilyHead)>,
) -> Vec<MixNodeBondAnnotated> {
let mix_to_family = mix_to_family
.into_iter()
.collect::<HashMap<IdentityKey, FamilyHead>>();
let mut annotated = Vec::new();
for mixnode in mixnodes {
let stake_saturation = mixnode
@@ -332,6 +340,10 @@ impl NodeStatusCacheRefresher {
let (estimated_operator_apy, estimated_delegators_apy) =
compute_apy_from_reward(&mixnode, reward_estimate, current_interval);
let family = mix_to_family
.get(&mixnode.bond_information.identity().to_string())
.cloned();
annotated.push(MixNodeBondAnnotated {
mixnode_details: mixnode,
stake_saturation,
@@ -339,6 +351,7 @@ impl NodeStatusCacheRefresher {
performance,
estimated_operator_apy,
estimated_delegators_apy,
family,
});
}
annotated