Compare commits

...

19 Commits

Author SHA1 Message Date
Tommy Verrall 852e1ace7e stage vesting schema change 2023-08-16 10:58:33 +02:00
Tommy Verrall cc3cfbfdc1 updating the change logs and relevant versions 2023-08-16 10:31:42 +02:00
Jędrzej Stuczyński d0ba4056d6 Bugfix/contract types serde (#3753)
* additional logs in abci queries

* added serde aliases for deserialization of contract types using their old format

* installing rust toolchain during the schema CI

* making the workflow be executed on our custom runner

* checking for diff only in the schema directory
2023-08-14 10:05:16 +01:00
Fouad c81a5ac002 Reset gateway performance on disconnect (#3620)
* rest gateway performance on disconnect

* update mobile context
2023-08-14 10:42:27 +02:00
Tommy Verrall 93a8e2a9bf Merge pull request #3662 from nymtech/dependabot/npm_and_yarn/nym-api/tests/semver-6.3.1
Bump semver from 6.3.0 to 6.3.1 in /nym-api/tests
2023-08-14 10:29:18 +02:00
Tommy Verrall 83d5cc9bf4 Merge pull request #3757 from nymtech/feature/nc_user_feedback
feat(nc-desktop): add user feedback page
2023-08-11 12:42:47 +02:00
pierre 9a5ce73dfd close send feedback modal on click 2023-08-11 12:23:44 +02:00
pierre af51ab3f71 add max chars limit to feedback text 2023-08-11 11:55:01 +02:00
mx 0e37c572f0 Update ci-dev.yml
added workflow_dispatch
2023-08-11 08:53:12 +00:00
pierre d57e8efff2 revert upstream changes 2023-08-10 16:10:46 +02:00
pierre c4c4355a54 add feedback note 2023-08-10 16:05:44 +02:00
pierre aaef36a5d7 display a notice to enable error reporting first 2023-08-10 16:05:44 +02:00
pierre 062f4911e1 add user feedback page 2023-08-10 16:05:44 +02:00
twofaktor 59e4567342 Update minibolt_pp.png 2023-08-10 16:05:44 +02:00
⚡️2FakTor⚡️ de2b106568 Update community-applications-and-guides.md 2023-08-10 16:05:44 +02:00
Bogdan-Ștefan Neacşu 60ab58998d Print warning when coconut verif endpoint doesn't work (#3755) 2023-08-09 18:12:59 +03:00
Bogdan-Ștefan Neacşu be88a9b277 Remove stale BBC env var (#3720) 2023-08-08 16:33:50 +01:00
Tommy Verrall fce2c704af Merge pull request #3750 from nymtech/release/v1.1.26
Release/v1.1.26
2023-08-08 16:04:32 +02:00
dependabot[bot] 60264486fd Bump semver from 6.3.0 to 6.3.1 in /nym-api/tests
Bumps [semver](https://github.com/npm/node-semver) from 6.3.0 to 6.3.1.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/v6.3.1/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v6.3.0...v6.3.1)

---
updated-dependencies:
- dependency-name: semver
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-02 08:37:23 +00:00
57 changed files with 398 additions and 209 deletions
+9 -3
View File
@@ -13,13 +13,19 @@ on:
jobs:
check-schema:
name: Generate and check schema
runs-on: ubuntu-latest
runs-on: custom-runner-linux
steps:
- name: Check out repository code
uses: actions/checkout@v2
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
- name: Generate the schema
run: make contract-schema
- name: Check for diff
run: git diff --exit-code
run: git diff --exit-code -- contracts/*/schema
+1
View File
@@ -1,6 +1,7 @@
name: CI dev-portal
on:
workflow_dispatch:
push:
branches-ignore: master
paths:
+12
View File
@@ -4,6 +4,18 @@ Post 1.0.0 release, the changelog format is based on [Keep a Changelog](https://
## [Unreleased]
## [1.1.27] (2023-08-16)
- fix serialisation of contract types ([#3752])
- Investigate spending credentials from the main API (coconut enabled to a gateway) from feature/ephemera branch ([#3741])
- NymConnect UI stuck in showing "Gateway has issues" ([#3594])
- [UPDATE] Update MiniBolt community-applications-and-guides dev docs ([#3754])
[#3752]: https://github.com/nymtech/nym/issues/3752
[#3741]: https://github.com/nymtech/nym/issues/3741
[#3594]: https://github.com/nymtech/nym/issues/3594
[#3754]: https://github.com/nymtech/nym/pull/3754
## [v1.1.24] (2023-08-08)
- Latency based gateway selection is serial and slow ([#3710])
Generated
+9 -9
View File
@@ -1896,7 +1896,7 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
[[package]]
name = "explorer-api"
version = "1.1.24"
version = "1.1.25"
dependencies = [
"chrono",
"clap 4.2.7",
@@ -3530,7 +3530,7 @@ dependencies = [
[[package]]
name = "nym-api"
version = "1.1.25"
version = "1.1.26"
dependencies = [
"anyhow",
"async-trait",
@@ -3667,7 +3667,7 @@ dependencies = [
[[package]]
name = "nym-cli"
version = "1.1.24"
version = "1.1.25"
dependencies = [
"anyhow",
"base64 0.13.1",
@@ -3733,7 +3733,7 @@ dependencies = [
[[package]]
name = "nym-client"
version = "1.1.24"
version = "1.1.25"
dependencies = [
"clap 4.2.7",
"dirs 4.0.0",
@@ -4021,7 +4021,7 @@ dependencies = [
[[package]]
name = "nym-gateway"
version = "1.1.24"
version = "1.1.25"
dependencies = [
"anyhow",
"async-trait",
@@ -4176,7 +4176,7 @@ dependencies = [
[[package]]
name = "nym-mixnode"
version = "1.1.25"
version = "1.1.26"
dependencies = [
"anyhow",
"bs58 0.4.0",
@@ -4293,7 +4293,7 @@ dependencies = [
[[package]]
name = "nym-network-requester"
version = "1.1.24"
version = "1.1.25"
dependencies = [
"anyhow",
"async-file-watcher",
@@ -4340,7 +4340,7 @@ dependencies = [
[[package]]
name = "nym-network-statistics"
version = "1.1.24"
version = "1.1.25"
dependencies = [
"dirs 4.0.0",
"log",
@@ -4497,7 +4497,7 @@ dependencies = [
[[package]]
name = "nym-socks5-client"
version = "1.1.24"
version = "1.1.25"
dependencies = [
"clap 4.2.7",
"lazy_static",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "nym-client"
version = "1.1.24"
version = "1.1.25"
authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>", "Jędrzej Stuczyński <andrew@nymtech.net>"]
description = "Implementation of the Nym Client"
edition = "2021"
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "nym-socks5-client"
version = "1.1.24"
version = "1.1.25"
authors = ["Dave Hrycyszyn <futurechimp@users.noreply.github.com>"]
description = "A SOCKS5 localhost proxy that converts incoming messages to Sphinx and sends them to a Nym address"
edition = "2021"
@@ -28,6 +28,7 @@ use cosmrs::proto::cosmwasm::wasm::v1::{
};
use cosmrs::tendermint::{block, chain, Hash};
use cosmrs::{AccountId, Coin as CosmosCoin, Tx};
use log::trace;
use prost::Message;
use serde::{Deserialize, Serialize};
use std::convert::TryFrom;
@@ -69,6 +70,9 @@ pub trait CosmWasmClient: TendermintClient {
Req: Message,
Res: Message + Default,
{
if let Some(ref abci_path) = path {
trace!("performing query on abci path {abci_path}")
}
let mut buf = Vec::with_capacity(req.encoded_len());
req.encode(&mut buf)?;
@@ -477,6 +481,7 @@ pub trait CosmWasmClient: TendermintClient {
.make_abci_query::<_, QuerySmartContractStateResponse>(path, req)
.await?;
trace!("raw query response: {}", String::from_utf8_lossy(&res.data));
Ok(serde_json::from_slice(&res.data)?)
}
@@ -78,7 +78,6 @@ pub struct Config {
// however, I'd really prefer to use something more strongly typed (i.e. AccountId vs String)
pub(crate) mixnet_contract_address: Option<AccountId>,
pub(crate) vesting_contract_address: Option<AccountId>,
pub(crate) bandwidth_claim_contract_address: Option<AccountId>,
pub(crate) coconut_bandwidth_contract_address: Option<AccountId>,
pub(crate) group_contract_address: Option<AccountId>,
pub(crate) multisig_contract_address: Option<AccountId>,
@@ -126,10 +125,6 @@ impl Config {
details.contracts.vesting_contract_address.as_ref(),
prefix,
)?,
bandwidth_claim_contract_address: Self::parse_optional_account(
details.contracts.bandwidth_claim_contract_address.as_ref(),
prefix,
)?,
coconut_bandwidth_contract_address: Self::parse_optional_account(
details
.contracts
@@ -548,10 +543,6 @@ impl<C> NyxdClient<C> {
self.config.vesting_contract_address = Some(address);
}
pub fn set_bandwidth_claim_contract_address(&mut self, address: AccountId) {
self.config.bandwidth_claim_contract_address = Some(address);
}
pub fn set_coconut_bandwidth_contract_address(&mut self, address: AccountId) {
self.config.coconut_bandwidth_contract_address = Some(address);
}
@@ -580,17 +571,6 @@ impl<C> NyxdClient<C> {
self.config.vesting_contract_address.as_ref().unwrap()
}
// TODO: this should get changed into Result<&AccountId, NyxdError> (or Option<&AccountId> in future commits
// note: what unwrap is doing here is just moving a failure that would have normally
// occurred in `connect` when attempting to parse an empty address,
// so it's not introducing new source of failure (just moves it)
pub fn bandwidth_claim_contract_address(&self) -> &AccountId {
self.config
.bandwidth_claim_contract_address
.as_ref()
.unwrap()
}
// TODO: this should get changed into Result<&AccountId, NyxdError> (or Option<&AccountId> in future commits
// note: what unwrap is doing here is just moving a failure that would have normally
// occurred in `connect` when attempting to parse an empty address,
@@ -39,7 +39,9 @@ impl SpendCredentialData {
#[cw_serde]
#[derive(Copy)]
pub enum SpendCredentialStatus {
#[serde(alias = "InProgress")]
InProgress,
#[serde(alias = "Spent")]
Spent,
}
@@ -159,10 +159,12 @@ impl EpochStatus {
pub enum EpochState {
/// Represents the state of an epoch that's in progress (well, duh.)
/// All actions are allowed to be issued.
#[serde(alias = "InProgress")]
InProgress,
/// Represents the state of an epoch when the rewarding entity has been decided on,
/// and the mixnodes are in the process of being rewarded for their work in this epoch.
#[serde(alias = "Rewarding")]
Rewarding {
/// The id of the last node that has already received its rewards.
last_rewarded: MixId,
@@ -174,10 +176,12 @@ pub enum EpochState {
/// Represents the state of an epoch when all mixnodes have already been rewarded for their work in this epoch
/// and all issued actions should now get resolved before being allowed to advance into the next epoch.
#[serde(alias = "ReconcilingEvents")]
ReconcilingEvents,
/// Represents the state of an epoch when all mixnodes have already been rewarded for their work in this epoch,
/// all issued actions got resolved and the epoch should now be advanced whilst assigning new rewarded set.
#[serde(alias = "AdvancingEpoch")]
AdvancingEpoch,
}
@@ -26,9 +26,11 @@ use serde_repr::{Deserialize_repr, Serialize_repr};
#[derive(Copy)]
pub enum RewardedSetNodeStatus {
/// Node that is currently active, i.e. is expected to be used by clients for mixing packets.
#[serde(alias = "Active")]
Active,
/// Node that is currently in standby, i.e. it's present in the rewarded set but is not active.
#[serde(alias = "Standby")]
Standby,
}
@@ -37,6 +37,7 @@ pub enum PendingEpochEventKind {
// `cumulative_reward_ratio` ahead of time
/// Request to create a delegation towards particular mixnode.
/// Note that if such delegation already exists, it will get updated with the provided token amount.
#[serde(alias = "Delegate")]
Delegate {
/// The address of the owner of the delegation.
owner: Addr,
@@ -53,6 +54,7 @@ pub enum PendingEpochEventKind {
},
/// Request to remove delegation from particular mixnode.
#[serde(alias = "Undelegate")]
Undelegate {
/// The address of the owner of the delegation.
owner: Addr,
@@ -66,6 +68,7 @@ pub enum PendingEpochEventKind {
},
/// Request to pledge more tokens (by the node operator) towards its node.
#[serde(alias = "PledgeMore")]
PledgeMore {
/// The id of the mixnode that will have its pledge updated.
mix_id: MixId,
@@ -75,6 +78,7 @@ pub enum PendingEpochEventKind {
},
/// Request to decrease amount of pledged tokens (by the node operator) from its node.
#[serde(alias = "DecreasePledge")]
DecreasePledge {
/// The id of the mixnode that will have its pledge updated.
mix_id: MixId,
@@ -84,12 +88,14 @@ pub enum PendingEpochEventKind {
},
/// Request to unbond a mixnode and completely remove it from the network.
#[serde(alias = "UnbondMixnode")]
UnbondMixnode {
/// The id of the mixnode that will get unbonded.
mix_id: MixId,
},
/// Request to update the current size of the active set.
#[serde(alias = "UpdateActiveSetSize")]
UpdateActiveSetSize {
/// The new desired size of the active set.
new_size: u32,
@@ -138,6 +144,7 @@ pub struct PendingIntervalEventData {
#[cw_serde]
pub enum PendingIntervalEventKind {
/// Request to update cost parameters of given mixnode.
#[serde(alias = "PendingIntervalEventKind")]
ChangeMixCostParams {
/// The id of the mixnode that will have its cost parameters updated.
mix_id: MixId,
@@ -147,12 +154,14 @@ pub enum PendingIntervalEventKind {
},
/// Request to update the underlying rewarding parameters used by the system
#[serde(alias = "UpdateRewardingParams")]
UpdateRewardingParams {
/// The detailed specification of the update.
update: IntervalRewardingParamsUpdate,
},
/// Request to change the next interval configuration.
#[serde(alias = "UpdateIntervalConfig")]
UpdateIntervalConfig {
/// The new number of epochs in intervals.
epochs_in_interval: u32,
@@ -16,12 +16,15 @@ use std::str::FromStr;
/// The vesting period.
pub enum Period {
/// Defines a pre-vesting period.
#[serde(alias = "Before")]
Before,
/// Defines currently active vesting period.
#[serde(alias = "In")]
In(usize),
/// Defines a post-vesting period.
#[serde(alias = "After")]
After,
}
@@ -53,9 +56,11 @@ impl PledgeData {
#[cw_serde]
pub enum PledgeCap {
/// Specifies a percent-based pledge cap, i.e. only given % of tokens could be pledged/staked.
#[serde(alias = "Percent")]
Percent(Percent),
/// Specifies an absolute pledge cap, i.e. an explicit value that could be pledged/staked.
#[serde(alias = "Absolute")]
Absolute(Uint128), // This has to be in unym
}
-14
View File
@@ -25,7 +25,6 @@ pub struct ChainDetails {
pub struct NymContracts {
pub mixnet_contract_address: Option<String>,
pub vesting_contract_address: Option<String>,
pub bandwidth_claim_contract_address: Option<String>,
pub coconut_bandwidth_contract_address: Option<String>,
pub group_contract_address: Option<String>,
pub multisig_contract_address: Option<String>,
@@ -112,10 +111,6 @@ impl NymNetworkDetails {
.with_vesting_contract(Some(
var(var_names::VESTING_CONTRACT_ADDRESS).expect("vesting contract not set"),
))
.with_bandwidth_claim_contract(Some(
var(var_names::BANDWIDTH_CLAIM_CONTRACT_ADDRESS)
.expect("bandwidth claim contract not set"),
))
.with_coconut_bandwidth_contract(Some(
var(var_names::COCONUT_BANDWIDTH_CONTRACT_ADDRESS)
.expect("coconut bandwidth contract not set"),
@@ -151,9 +146,6 @@ impl NymNetworkDetails {
contracts: NymContracts {
mixnet_contract_address: parse_optional_str(mainnet::MIXNET_CONTRACT_ADDRESS),
vesting_contract_address: parse_optional_str(mainnet::VESTING_CONTRACT_ADDRESS),
bandwidth_claim_contract_address: parse_optional_str(
mainnet::BANDWIDTH_CLAIM_CONTRACT_ADDRESS,
),
coconut_bandwidth_contract_address: parse_optional_str(
mainnet::COCONUT_BANDWIDTH_CONTRACT_ADDRESS,
),
@@ -216,12 +208,6 @@ impl NymNetworkDetails {
self
}
#[must_use]
pub fn with_bandwidth_claim_contract<S: Into<String>>(mut self, contract: Option<S>) -> Self {
self.contracts.bandwidth_claim_contract_address = contract.map(Into::into);
self
}
#[must_use]
pub fn with_coconut_bandwidth_contract<S: Into<String>>(mut self, contract: Option<S>) -> Self {
self.contracts.coconut_bandwidth_contract_address = contract.map(Into::into);
-10
View File
@@ -13,8 +13,6 @@ pub const MIXNET_CONTRACT_ADDRESS: &str =
"n17srjznxl9dvzdkpwpw24gg668wc73val88a6m5ajg6ankwvz9wtst0cznr";
pub const VESTING_CONTRACT_ADDRESS: &str =
"n1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrq73f2nw";
pub(crate) const BANDWIDTH_CLAIM_CONTRACT_ADDRESS: &str =
"n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0";
pub(crate) const COCONUT_BANDWIDTH_CONTRACT_ADDRESS: &str =
"n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0";
pub(crate) const GROUP_CONTRACT_ADDRESS: &str = "n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0";
@@ -70,10 +68,6 @@ pub fn export_to_env() {
var_names::VESTING_CONTRACT_ADDRESS,
VESTING_CONTRACT_ADDRESS,
);
set_var_to_default(
var_names::BANDWIDTH_CLAIM_CONTRACT_ADDRESS,
BANDWIDTH_CLAIM_CONTRACT_ADDRESS,
);
set_var_to_default(
var_names::COCONUT_BANDWIDTH_CONTRACT_ADDRESS,
COCONUT_BANDWIDTH_CONTRACT_ADDRESS,
@@ -115,10 +109,6 @@ pub fn export_to_env_if_not_set() {
var_names::VESTING_CONTRACT_ADDRESS,
VESTING_CONTRACT_ADDRESS,
);
set_var_conditionally_to_default(
var_names::BANDWIDTH_CLAIM_CONTRACT_ADDRESS,
BANDWIDTH_CLAIM_CONTRACT_ADDRESS,
);
set_var_conditionally_to_default(
var_names::COCONUT_BANDWIDTH_CONTRACT_ADDRESS,
COCONUT_BANDWIDTH_CONTRACT_ADDRESS,
-1
View File
@@ -12,7 +12,6 @@ pub const STAKE_DENOM_DISPLAY: &str = "STAKE_DENOM_DISPLAY";
pub const DENOMS_EXPONENT: &str = "DENOMS_EXPONENT";
pub const MIXNET_CONTRACT_ADDRESS: &str = "MIXNET_CONTRACT_ADDRESS";
pub const VESTING_CONTRACT_ADDRESS: &str = "VESTING_CONTRACT_ADDRESS";
pub const BANDWIDTH_CLAIM_CONTRACT_ADDRESS: &str = "BANDWIDTH_CLAIM_CONTRACT_ADDRESS";
pub const COCONUT_BANDWIDTH_CONTRACT_ADDRESS: &str = "COCONUT_BANDWIDTH_CONTRACT_ADDRESS";
pub const GROUP_CONTRACT_ADDRESS: &str = "GROUP_CONTRACT_ADDRESS";
pub const MULTISIG_CONTRACT_ADDRESS: &str = "MULTISIG_CONTRACT_ADDRESS";
+7 -1
View File
@@ -1,6 +1,12 @@
# Changelog
## Unreleased
## [Unreleased]
## [v1.5.0] (2023-08-16)
- Generate json schema for all used contracts #3693 ([#3693])
[#3233]: https://github.com/nymtech/nym/pull/3693
## [v1.4.0] (2023-04-25)
- Allow mixnode operators to decrease their bond amount without having to rebond (will require a lot of testing EXACT reward values to make sure the "unit delegation" isn't broken afterwards) ([#3233])
+2 -8
View File
@@ -290,12 +290,6 @@ dependencies = [
"libc",
]
[[package]]
name = "crunchy"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
[[package]]
name = "crypto-bigint"
version = "0.4.9"
@@ -1278,7 +1272,7 @@ dependencies = [
[[package]]
name = "nym-mixnet-contract"
version = "1.4.0"
version = "1.5.0"
dependencies = [
"bs58",
"cosmwasm-derive",
@@ -1426,7 +1420,7 @@ dependencies = [
[[package]]
name = "nym-vesting-contract"
version = "1.4.0"
version = "1.5.0"
dependencies = [
"base64 0.21.0",
"cosmwasm-crypto",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "nym-mixnet-contract"
version = "1.4.0"
version = "1.5.0"
description = "Nym mixnet contract"
edition = { workspace = true }
authors = { workspace = true }
@@ -1,6 +1,6 @@
{
"contract_name": "nym-mixnet-contract",
"contract_version": "1.4.0",
"contract_version": "1.5.0",
"idl_version": "1.0.0",
"instantiate": {
"$schema": "http://json-schema.org/draft-07/schema#",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "nym-vesting-contract"
version = "1.4.0"
version = "1.5.0"
description = "Nym vesting contract"
edition = { workspace = true }
authors = { workspace = true }
@@ -1,6 +1,6 @@
{
"contract_name": "nym-vesting-contract",
"contract_version": "1.4.0",
"contract_version": "1.5.0",
"idl_version": "1.0.0",
"instantiate": {
"$schema": "http://json-schema.org/draft-07/schema#",
@@ -20,7 +20,6 @@ DENOMS_EXPONENT=6
REWARDING_VALIDATOR_ADDRESS="nymt1mxuweurc066kprnngtm8zmvam7m2nw26yatpmv"
MIXNET_CONTRACT_ADDRESS="nymt1dlsvvgey26ernlj0sq2afjluh3qd4ap0k9eerekfkw5algqrwqksaf2qf7"
VESTING_CONTRACT_ADDRESS="nymt19g9xuqrvz2frv905v3fc7puryfypluhg383q9zwsmedrlqekfgys62ykm4"
BANDWIDTH_CLAIM_CONTRACT_ADDRESS="nymt1rhmk9udessnv3r8f3eh2s03f45svnjaczpmcqz"
MULTISIG_CONTRACT_ADDRESS="nymt142dkm8xe9f0ytyarp7ww4kvclva65705jphxsk9exn3nqdsm8jkqnp06ac"
COCONUT_BANDWIDTH_CONTRACT_ADDRESS="nymt1ty0frysegskh6ndm3v96z5xdq66qzcu0aw7xcxlgp54jg0mjwlgqplc6v0"
COCONUT_DKG_CONTRACT_ADDRESS="nymt1gwk6muhmzeuxje7df7rjvqwl2vex0kj4t2hwuzmyx5k62kfusu5qk4k5z4"
-1
View File
@@ -11,7 +11,6 @@ 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
GROUP_CONTRACT_ADDRESS=n1rw8fw2mpcpzzq3jpa4e52ufawnmj5a4u68p35umvgskewuw0nlzsaa5w4m
MULTISIG_CONTRACT_ADDRESS=n1rw8fw2mpcpzzq3jpa4e52ufawnmj5a4u68p35umvgskewuw0nlzsaa5w4m
-1
View File
@@ -11,7 +11,6 @@ STAKE_DENOM_DISPLAY=nyx
DENOMS_EXPONENT=6
MIXNET_CONTRACT_ADDRESS=n17srjznxl9dvzdkpwpw24gg668wc73val88a6m5ajg6ankwvz9wtst0cznr
VESTING_CONTRACT_ADDRESS=n1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrq73f2nw
BANDWIDTH_CLAIM_CONTRACT_ADDRESS=n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0
COCONUT_BANDWIDTH_CONTRACT_ADDRESS=n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0
GROUP_CONTRACT_ADDRESS=n1rw8fw2mpcpzzq3jpa4e52ufawnmj5a4u68p35umvgskewuw0nlzsaa5w4m
MULTISIG_CONTRACT_ADDRESS=n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0
-1
View File
@@ -11,7 +11,6 @@ STAKE_DENOM_DISPLAY=nyx
DENOMS_EXPONENT=6
MIXNET_CONTRACT_ADDRESS=n14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9sjyvg3g
VESTING_CONTRACT_ADDRESS=n1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrq73f2nw
BANDWIDTH_CLAIM_CONTRACT_ADDRESS=n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0
COCONUT_BANDWIDTH_CONTRACT_ADDRESS=n19d2nwj7fdhxqmyvgy8lf3ad49a6vmww4shryhrkj2mqk36att66s6xzszw
GROUP_CONTRACT_ADDRESS=n1fqquzw4mk0pkamgr2ywt2v7h2j9nuyjjn4gvpy8zlpp6xn0uyuzqfm28l5
MULTISIG_CONTRACT_ADDRESS=n1gaq3666chd5348apj8cka8t2mckv7azp9espyr7wgpxyuzur5d0sazpysy
-1
View File
@@ -11,7 +11,6 @@ STAKE_DENOM_DISPLAY=nyx
DENOMS_EXPONENT=6
MIXNET_CONTRACT_ADDRESS=n1rjzps6qrmdqmf0xz4cn4x4rcmqeqzq6hnzqg4wcvd0r2lyasdq5sepn5s8
VESTING_CONTRACT_ADDRESS=n1xr3rq8yvd7qplsw5yx90ftsr2zdhg4e9z60h5duusgxpv72hud3sjkxkav
BANDWIDTH_CLAIM_CONTRACT_ADDRESS=n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0
COCONUT_BANDWIDTH_CONTRACT_ADDRESS=n1ghd753shjuwexxywmgs4xz7x2q732vcn7ty4yw
GROUP_CONTRACT_ADDRESS=n1rw8fw2mpcpzzq3jpa4e52ufawnmj5a4u68p35umvgskewuw0nlzsaa5w4m
MULTISIG_CONTRACT_ADDRESS=n17p9rzwnnfxcjp32un9ug7yhhzgtkhvl988qccs
-1
View File
@@ -13,7 +13,6 @@ DENOMS_EXPONENT=6
REWARDING_VALIDATOR_ADDRESS=n1pefc2utwpy5w78p2kqdsfmpjxfwmn9d39k5mqa
MIXNET_CONTRACT_ADDRESS=n1xr3rq8yvd7qplsw5yx90ftsr2zdhg4e9z60h5duusgxpv72hud3sjkxkav
VESTING_CONTRACT_ADDRESS=n1unyuj8qnmygvzuex3dwmg9yzt9alhvyeat0uu0jedg2wj33efl5qackslz
BANDWIDTH_CLAIM_CONTRACT_ADDRESS=n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0
COCONUT_BANDWIDTH_CONTRACT_ADDRESS=n16a32stm6kknhq5cc8rx77elr66pygf2hfszw7wvpq746x3uffylqkjar4l
GROUP_CONTRACT_ADDRESS=n1pd7kfgvr5tpcv0xnlv46c4jsq9jg2r799xxrcwqdm4l2jhq2pjwqrmz5ju
MULTISIG_CONTRACT_ADDRESS=n14ph4e660eyqz0j36zlkaey4zgzexm5twkmjlqaequxr2cjm9eprqsmad6k
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "explorer-api"
version = "1.1.24"
version = "1.1.25"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+1 -1
View File
@@ -3,7 +3,7 @@
[package]
name = "nym-gateway"
version = "1.1.24"
version = "1.1.25"
authors = [
"Dave Hrycyszyn <futurechimp@users.noreply.github.com>",
"Jędrzej Stuczyński <andrew@nymtech.net>",
@@ -118,8 +118,15 @@ impl CoconutVerifier {
revoke_fee.clone(),
)
.await?;
if !ret?.verification_result {
debug!("Validator {} didn't accept the credential. It will probably vote No on the spending proposal", client.api_client.nym_api_client.current_url());
match ret {
Ok(res) => {
if !res.verification_result {
debug!("Validator {} didn't accept the credential. It will probably vote No on the spending proposal", client.api_client.nym_api_client.current_url());
}
}
Err(e) => {
warn!("Validator {} could not be reached. There might be a problem with the coconut endpoint - {:?}", client.api_client.nym_api_client.current_url(), e);
}
}
}
+1 -1
View File
@@ -3,7 +3,7 @@
[package]
name = "nym-mixnode"
version = "1.1.25"
version = "1.1.26"
authors = [
"Dave Hrycyszyn <futurechimp@users.noreply.github.com>",
"Jędrzej Stuczyński <andrew@nymtech.net>",
+1 -1
View File
@@ -3,7 +3,7 @@
[package]
name = "nym-api"
version = "1.1.25"
version = "1.1.26"
authors = [
"Dave Hrycyszyn <futurechimp@users.noreply.github.com>",
"Jędrzej Stuczyński <andrew@nymtech.net>",
+30 -30
View File
@@ -103,9 +103,9 @@
}
},
"node_modules/@babel/core/node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -158,9 +158,9 @@
}
},
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -2883,9 +2883,9 @@
}
},
"node_modules/istanbul-lib-instrument/node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -3653,9 +3653,9 @@
}
},
"node_modules/make-dir/node_modules/semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
"bin": {
"semver": "bin/semver.js"
@@ -4273,9 +4273,9 @@
"dev": true
},
"node_modules/semver": {
"version": "7.3.7",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
"integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
"version": "7.5.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -4918,9 +4918,9 @@
},
"dependencies": {
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
}
}
@@ -4962,9 +4962,9 @@
},
"dependencies": {
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
}
}
@@ -6970,9 +6970,9 @@
},
"dependencies": {
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
}
}
@@ -7559,9 +7559,9 @@
},
"dependencies": {
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true
}
}
@@ -7984,9 +7984,9 @@
"dev": true
},
"semver": {
"version": "7.3.7",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
"integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
"version": "7.5.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
+6 -6
View File
@@ -2566,16 +2566,16 @@ safe-buffer@~5.1.1:
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
semver@7.x, semver@^7.3.5, semver@^7.3.7:
version "7.3.7"
resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz"
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
version "7.5.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
dependencies:
lru-cache "^6.0.0"
semver@^6.0.0, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
version "6.3.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
shebang-command@^2.0.0:
version "2.0.0"
+8
View File
@@ -2,6 +2,14 @@
## [Unreleased]
## [1.1.27] (2023-08-16)
- Add a "Send us your feedback" section in NC (on the main screen) to collect user feedback using Sentry ([#3619])
- NC native android - deploy on FDroid ([#3483])
[#3619]: https://github.com/nymtech/nym/issues/3619
[#3483]: https://github.com/nymtech/nym/issues/3483
## [v1.1.16] (2023-08-08)
- Uncouple network-requester <-> gateway in nym-connect and harbourmaster ([#3472])
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@nym/nym-connect",
"version": "1.1.16",
"version": "1.1.17",
"main": "index.js",
"license": "MIT",
"scripts": {
@@ -47,7 +47,7 @@
"react-markdown": "^8.0.4",
"react-router-dom": "^6.7.0",
"semver": "^6.3.0",
"yup": "^0.32.9"
"yup": "^1.2.0"
},
"devDependencies": {
"@babel/core": "^7.15.0",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "nym-connect"
version = "1.1.16"
version = "1.1.17"
description = "nym-connect"
authors = ["Nym Technologies SA"]
license = ""
@@ -1,7 +1,7 @@
{
"package": {
"productName": "nym-connect",
"version": "1.1.16"
"version": "1.1.17"
},
"build": {
"distDir": "../dist",
+12
View File
@@ -33,6 +33,7 @@ export type TClientContext = {
userDefinedSPAddress: UserDefinedSPAddress;
serviceProviders?: ServiceProvider[];
gateways?: Gateway[];
showFeedbackNote: boolean;
setMode: (mode: ModeType) => void;
clearError: () => void;
setConnectionStatus: (connectionStatus: ConnectionStatusKind) => void;
@@ -47,6 +48,7 @@ export type TClientContext = {
setUserDefinedSPAddress: React.Dispatch<React.SetStateAction<UserDefinedSPAddress>>;
setMonitoring: (value: boolean) => Promise<void>;
setPrivacyLevel: (value: PrivacyLevel) => Promise<void>;
setShowFeedbackNote: (value: boolean) => void;
};
function getRandomFromList<T>(items: T[]): T {
@@ -77,6 +79,7 @@ export const ClientContextProvider: FCWithChildren = ({ children }) => {
address: undefined,
});
const [userData, setUserData] = useState<UserData>();
const [showFeedbackNote, setShowFeedbackNote] = useState(true);
const getAppVersion = async () => {
const version = await getVersion();
@@ -161,9 +164,15 @@ export const ClientContextProvider: FCWithChildren = ({ children }) => {
}
}, []);
const afterDisconnection = useCallback(async () => {
setGatewayPerformance('Good');
setConnectedSince(undefined);
}, []);
const startDisconnecting = useCallback(async () => {
try {
await invoke('start_disconnecting');
afterDisconnection();
} catch (e) {
console.log(e);
Sentry.captureException(e);
@@ -240,6 +249,7 @@ export const ClientContextProvider: FCWithChildren = ({ children }) => {
serviceProviders,
connectedSince,
userData,
showFeedbackNote,
setConnectedSince,
setServiceProvider,
setGateway,
@@ -253,6 +263,7 @@ export const ClientContextProvider: FCWithChildren = ({ children }) => {
setUserDefinedSPAddress,
setMonitoring,
setPrivacyLevel,
setShowFeedbackNote,
}),
[
mode,
@@ -270,6 +281,7 @@ export const ClientContextProvider: FCWithChildren = ({ children }) => {
userDefinedGateway,
userDefinedSPAddress,
userData,
showFeedbackNote,
],
);
@@ -12,6 +12,7 @@ const mockValues: TClientContext = {
userDefinedGateway: { isActive: false, gateway: '' },
userDefinedSPAddress: { isActive: false, address: '' },
userData: { monitoring: false, privacy_level: 'High' },
showFeedbackNote: false,
setShowInfoModal: () => {},
setMode: () => {},
clearError: () => {},
@@ -26,6 +27,7 @@ const mockValues: TClientContext = {
setUserDefinedSPAddress: () => {},
setMonitoring: async () => {},
setPrivacyLevel: async () => {},
setShowFeedbackNote: () => {},
};
export const MockProvider: FCWithChildren<{
@@ -1,5 +1,6 @@
import React from 'react';
import { Stack, Typography } from '@mui/material';
import { Alert, Link, Stack, Typography } from '@mui/material';
import { Link as RouterLink } from 'react-router-dom';
import { ConnectionStatus } from 'src/components/ConnectionStatus';
import { ConnectionTimer } from 'src/components/ConntectionTimer';
import { InfoModal } from 'src/components/InfoModal';
@@ -10,6 +11,7 @@ import { ConnectionStatusKind } from 'src/types';
import { PowerButton } from 'src/components/PowerButton/PowerButton';
import { Box } from '@mui/system';
import { ConnectionLayout } from 'src/layouts/ConnectionLayout';
import { useClientContext } from '../../context/main';
export const Disconnected: FCWithChildren<{
error?: Error;
@@ -20,32 +22,53 @@ export const Disconnected: FCWithChildren<{
serviceProvider?: ServiceProvider;
clearError: () => void;
onConnectClick: (status: ConnectionStatusKind) => void;
}> = ({ status, error, onConnectClick, clearError }) => (
<>
{error && <InfoModal show title={error.title} description={error.message} onClose={clearError} />}
<ConnectionLayout
TopContent={
<Box>
<ConnectionStatus status={ConnectionStatusKind.disconnected} gatewayPerformance="Good" />
<ConnectionTimer />
</Box>
}
ConnectButton={<PowerButton onClick={onConnectClick} status={status} disabled={status === 'connecting'} />}
BottomContent={
<Stack justifyContent="space-between" pt={1}>
<Typography
fontWeight={600}
textTransform="uppercase"
textAlign="center"
fontSize="12px"
sx={{ wordSpacing: 1.5, letterSpacing: 1.5 }}
color="warning.main"
>
You are not protected
</Typography>
<ExperimentalWarning />
</Stack>
}
/>
</>
);
}> = ({ status, error, onConnectClick, clearError }) => {
const { showFeedbackNote, setShowFeedbackNote } = useClientContext();
return (
<>
{error && <InfoModal show title={error.title} description={error.message} onClose={clearError} />}
<ConnectionLayout
TopContent={
<Box>
<ConnectionStatus status={ConnectionStatusKind.disconnected} gatewayPerformance="Good" />
<ConnectionTimer />
</Box>
}
ConnectButton={<PowerButton onClick={onConnectClick} status={status} disabled={status === 'connecting'} />}
BottomContent={
<Stack justifyContent="space-between" pt={1}>
<Typography
fontWeight={600}
textTransform="uppercase"
textAlign="center"
fontSize="12px"
sx={{ wordSpacing: 1.5, letterSpacing: 1.5 }}
color="warning.main"
>
You are not protected
</Typography>
{showFeedbackNote ? (
<Alert variant="outlined" icon={false} onClose={() => setShowFeedbackNote(false)}>
Help improve NymConnect
<br />
<Link
to="/menu/reporting/user-feedback"
onClick={() => setShowFeedbackNote(false)}
component={RouterLink}
color="secondary"
underline="hover"
>
Send feedback
</Link>
</Alert>
) : (
<ExperimentalWarning />
)}
</Stack>
}
/>
</>
);
};
@@ -1,7 +1,7 @@
import React, { ChangeEvent, useState } from 'react';
import * as Sentry from '@sentry/react';
import { Box, FormControl, FormControlLabel, FormHelperText, Stack, Switch, Typography } from '@mui/material';
import { useClientContext } from 'src/context/main';
import { useClientContext } from '../../context/main';
export const PrivacyLevelSettings = () => {
const { userData, setPrivacyLevel } = useClientContext();
+1 -1
View File
@@ -8,8 +8,8 @@ const menuSchema = [
{ title: 'Supported apps', icon: Apps, path: 'apps' },
{ title: 'How to connect guide', icon: HelpOutline, path: 'guide' },
{ title: 'Privacy level', icon: PrivacyTip, path: 'privacy-level' },
{ title: 'Please help us improve the app', icon: BugReport, path: 'monitoring' },
{ title: 'Settings', icon: Settings, path: 'settings' },
{ title: 'Help improve the app', icon: BugReport, path: 'reporting' },
];
export const Menu = () => (
@@ -1,9 +1,8 @@
import React, { ChangeEvent, useState } from 'react';
import { Warning as WarningIcon } from '@mui/icons-material';
import { Box, FormControl, FormControlLabel, FormHelperText, Stack, Switch, Typography } from '@mui/material';
import { useClientContext } from 'src/context/main';
import { useClientContext } from '../../../context/main';
export const MonitoringSettings = () => {
export const ErrorReporting = () => {
const { userData, setMonitoring } = useClientContext();
const [enabled, setEnabled] = useState(userData?.monitoring || false);
const [loading, setLoading] = useState(false);
@@ -20,7 +19,7 @@ export const MonitoringSettings = () => {
<Stack justifyContent="space-between" height="100%">
<Box>
<Typography fontWeight="bold" variant="body2" mb={2}>
Error reporting and performance monitoring
Turn on error reporting and performance monitoring
</Typography>
<FormControl fullWidth>
<FormControlLabel
@@ -33,20 +32,17 @@ export const MonitoringSettings = () => {
sx={{ ml: 1, mr: 1 }}
/>
}
label="Enable"
label={enabled ? 'On' : 'Off'}
/>
<FormHelperText sx={{ m: 0, my: 2 }}>
Help Nym developers to fix errors, crashes and improve the application by enabling this option. If errors
occur or if the app crashes, it will automatically send a report. Also it tracks various performance
metrics. We use sentry.io service to handle this.
Help Nym developers fix errors, crashes and improve the application by enabling this option. If errors
occur or if the app crashes, it will automatically send a report. It also tracks various performance
metrics. We use Sentry.io service to handle this.
</FormHelperText>
</FormControl>
<Stack direction="row" gap={1} alignItems="center">
<WarningIcon color="warning" fontSize="small" />
<Typography variant="caption" color="warning.main">
You must restart the application for the change to take effect.
</Typography>
</Stack>
<Typography variant="caption" color="warning.main" fontWeight="bold">
You must restart the application for the change to take effect.
</Typography>
</Box>
</Stack>
</Box>
@@ -0,0 +1,124 @@
import React, { useState } from 'react';
import { Link as RouterLink } from 'react-router-dom';
import { Alert, Box, Button, FormControl, Link, Snackbar, Stack, TextField, Typography } from '@mui/material';
import * as Sentry from '@sentry/react';
import { Controller, SubmitHandler, useForm } from 'react-hook-form';
import { object, string } from 'yup';
import { yupResolver } from '@hookform/resolvers/yup';
import { useClientContext } from '../../../context/main';
type FormValues = {
email?: string;
feedback: string;
};
const schema = object({
email: string().email(),
feedback: string().required().min(20).max(512),
}).required();
export const UserFeedback = () => {
const [isBusy, setIsBusy] = useState(false);
const { userData } = useClientContext();
const {
handleSubmit,
control,
formState: { errors },
reset,
} = useForm({
defaultValues: {
email: '',
feedback: '',
},
// inferred type is fucked, so use `any` to make TS happy
resolver: yupResolver(schema as any),
});
const onSubmit: SubmitHandler<FormValues> = (data) => {
const eventId = Sentry.captureMessage('user feedback');
Sentry.captureUserFeedback({
event_id: eventId,
name: 'nym',
email: data.email,
comments: data.feedback,
});
setIsBusy(true);
reset();
};
const handleClose = () => {
setIsBusy(false);
};
if (!userData?.monitoring) {
return (
<Stack mt={3}>
<Typography variant="caption" color="warning.main" fontWeight="bold">
The error reporting option must be enabled in order to report feedback. Turn it on{' '}
<Link to="/menu/reporting/error-reporting" component={RouterLink} color="secondary" underline="hover">
here
</Link>
.
</Typography>
</Stack>
);
}
return (
<Box height="100%">
<Snackbar open={isBusy} autoHideDuration={6000} onClose={handleClose}>
<Alert onClose={handleClose} severity="success" sx={{ width: '100%' }}>
Feedback sent successfuly
</Alert>
</Snackbar>
<Stack justifyContent="space-between" height="100%">
<Box>
<Typography fontWeight="bold" variant="body2">
Send us your feedback about the app
</Typography>
<form onSubmit={handleSubmit(onSubmit)}>
<FormControl sx={{ mt: 2 }} fullWidth>
<Controller
render={({ field }) => (
<TextField
size="small"
placeholder="E-mail address (optional)"
error={Boolean(errors.email)}
helperText={errors.email && errors.email.message}
{...field}
/>
)}
name="email"
control={control}
/>
</FormControl>
<FormControl sx={{ mt: 2 }} fullWidth>
<Controller
render={({ field }) => (
<TextField
size="small"
placeholder="Feedback text"
rows={8}
multiline
required
error={Boolean(errors.feedback)}
helperText={errors.feedback && errors.feedback.message}
{...field}
/>
)}
name="feedback"
control={control}
/>
</FormControl>
<Stack>
<Button color="primary" variant="contained" size="medium" type="submit" sx={{ mt: 2 }} disabled={isBusy}>
Send
</Button>
</Stack>
</form>
</Box>
</Stack>
</Box>
);
};
@@ -0,0 +1,26 @@
import React from 'react';
import { Link as RouterLink } from 'react-router-dom';
import { Link, List, ListItem, ListItemButton, ListItemText, Stack } from '@mui/material';
import { AppVersion } from 'src/components/AppVersion';
const menuSchema = [
{ title: 'Turn on error reporting', path: 'error-reporting' },
{ title: 'Send us your feedback', path: 'user-feedback' },
];
export const ReportingMenu = () => (
<Stack justifyContent="space-between" height="100%">
<List dense disablePadding>
{menuSchema.map((item) => (
<Link component={RouterLink} to={item.path} underline="none" color="white" key={item.title}>
<ListItem disablePadding>
<ListItemButton>
<ListItemText>{item.title}</ListItemText>
</ListItemButton>
</ListItem>
</Link>
))}
</List>
<AppVersion />
</Stack>
);
+9 -3
View File
@@ -8,9 +8,11 @@ import { HelpGuide } from 'src/pages/menu/Guide';
import { SettingsMenu } from 'src/pages/menu/settings';
import { GatewaySettings } from 'src/pages/menu/settings/GatewaySettings';
import { ServiceProviderSettings } from 'src/pages/menu/settings/ServiceProviderSettings';
import { MonitoringSettings } from '../pages/menu/settings/MonitoringSettings';
import { PrivacyLevelSettings } from '../pages/menu/settings/PrivacyLevelSettings';
import { ErrorReporting } from '../pages/menu/reporting/ErrorReporting';
import { PrivacyLevelSettings } from '../pages/menu/PrivacyLevelSettings';
import { useClientContext } from '../context/main';
import { ReportingMenu } from '../pages/menu/reporting';
import { UserFeedback } from '../pages/menu/reporting/UserFeedback';
const SentryRoutes = Sentry.withSentryReactRouterV6Routing(Routes);
@@ -27,12 +29,16 @@ export const AppRoutes = () => {
<Route path="apps" element={<CompatibleApps />} />
<Route path="guide" element={<HelpGuide />} />
<Route path="privacy-level" element={<PrivacyLevelSettings />} />
<Route path="monitoring" element={<MonitoringSettings />} />
<Route path="settings">
<Route index element={<SettingsMenu />} />
<Route path="gateway" element={<GatewaySettings />} />
<Route path="service-provider" element={<ServiceProviderSettings />} />
</Route>
<Route path="reporting">
<Route index element={<ReportingMenu />} />
<Route path="error-reporting" element={<ErrorReporting />} />
<Route path="user-feedback" element={<UserFeedback />} />
</Route>
</Route>
</RoutesContainer>
);
+6
View File
@@ -116,9 +116,15 @@ export const ClientContextProvider: FCWithChildren = ({ children }) => {
}
}, []);
const afterDisconnection = useCallback(async () => {
setGatewayPerformance('Good');
setConnectedSince(undefined);
}, []);
const startDisconnecting = useCallback(async () => {
try {
await invoke('start_disconnecting');
afterDisconnection();
} catch (e) {
console.log(e);
}
@@ -13,8 +13,6 @@ pub(crate) const MIXNET_CONTRACT_ADDRESS: &str =
"n10qt8wg0n7z740ssvf3urmvgtjhxpyp74hxqvqt7z226gykuus7eq5u9pvq";
pub(crate) const VESTING_CONTRACT_ADDRESS: &str =
"n1vguuxez2h5ekltfj9gjd62fs5k4rl2zy5hfrncasykzw08rezpfstk9xtk";
pub(crate) const BANDWIDTH_CLAIM_CONTRACT_ADDRESS: &str =
"n19lc9u84cz0yz3fww5283nucc9yvr8gsjmgeul0";
pub(crate) const COCONUT_BANDWIDTH_CONTRACT_ADDRESS: &str =
"n1ghd753shjuwexxywmgs4xz7x2q732vcn7ty4yw";
pub(crate) const GROUP_CONTRACT_ADDRESS: &str =
@@ -48,7 +46,6 @@ pub(crate) fn network_details() -> nym_network_defaults::NymNetworkDetails {
contracts: NymContracts {
mixnet_contract_address: parse_optional_str(MIXNET_CONTRACT_ADDRESS),
vesting_contract_address: parse_optional_str(VESTING_CONTRACT_ADDRESS),
bandwidth_claim_contract_address: parse_optional_str(BANDWIDTH_CLAIM_CONTRACT_ADDRESS),
coconut_bandwidth_contract_address: parse_optional_str(
COCONUT_BANDWIDTH_CONTRACT_ADDRESS,
),
@@ -11,8 +11,6 @@ pub(crate) const STAKE_DENOM: DenomDetails = DenomDetails::new("unyxt", "nyxt",
pub(crate) const MIXNET_CONTRACT_ADDRESS: &str = "nymt1ghd753shjuwexxywmgs4xz7x2q732vcnstz02j";
pub(crate) const VESTING_CONTRACT_ADDRESS: &str = "nymt14ejqjyq8um4p3xfqj74yld5waqljf88fn549lh";
pub(crate) const BANDWIDTH_CLAIM_CONTRACT_ADDRESS: &str =
"nymt17p9rzwnnfxcjp32un9ug7yhhzgtkhvl9f8xzkv";
pub(crate) const COCONUT_BANDWIDTH_CONTRACT_ADDRESS: &str =
"nymt1nz0r0au8aj6dc00wmm3ufy4g4k86rjzlgq608r";
pub(crate) const GROUP_CONTRACT_ADDRESS: &str = "nymt1k8re7jwz6rnnwrktnejdwkwnncte7ek7kk6fvg";
@@ -39,7 +37,6 @@ pub(crate) fn network_details() -> nym_network_defaults::NymNetworkDetails {
contracts: NymContracts {
mixnet_contract_address: parse_optional_str(MIXNET_CONTRACT_ADDRESS),
vesting_contract_address: parse_optional_str(VESTING_CONTRACT_ADDRESS),
bandwidth_claim_contract_address: parse_optional_str(BANDWIDTH_CLAIM_CONTRACT_ADDRESS),
coconut_bandwidth_contract_address: parse_optional_str(
COCONUT_BANDWIDTH_CONTRACT_ADDRESS,
),
-20
View File
@@ -237,15 +237,6 @@ impl Config {
.expect("Wrong format for vesting contract address")
}
pub fn get_bandwidth_claim_contract_address(&self, network: WalletNetwork) -> CosmosAccountId {
self.base
.networks
.bandwidth_claim_contract_address(&network)
.expect("No bandwidth claim contract address found in config")
.parse()
.expect("Wrong format for bandwidth claim contract address")
}
pub fn set_default_nyxd_urls(&mut self, urls: &HashMap<WalletNetwork, Url>) {
for (network, url) in urls {
self.set_default_nyxd_url(url.to_owned(), network);
@@ -499,12 +490,6 @@ impl SupportedNetworks {
.map(|network_details| network_details.vesting_contract_address.as_str())
}
fn bandwidth_claim_contract_address(&self, network: &WalletNetwork) -> Option<&str> {
self.networks
.get(network)
.map(|network_details| network_details.bandwidth_claim_contract_address.as_str())
}
fn validators(&self, network: &WalletNetwork) -> impl Iterator<Item = &ValidatorDetails> {
self.networks
.get(network)
@@ -522,7 +507,6 @@ struct NetworkDetails {
stake_denom: DenomDetailsOwned,
mixnet_contract_address: String,
vesting_contract_address: String,
bandwidth_claim_contract_address: String,
statistics_service_url: String,
validators: Vec<ValidatorDetails>,
}
@@ -543,10 +527,6 @@ impl From<NymNetworkDetails> for NetworkDetails {
.contracts
.vesting_contract_address
.unwrap_or_default(),
bandwidth_claim_contract_address: details
.contracts
.bandwidth_claim_contract_address
.unwrap_or_default(),
statistics_service_url: "".to_string(),
validators: details.endpoints,
}
@@ -282,12 +282,7 @@ fn create_clients(
let network_details = NymNetworkDetails::from(network)
.clone()
.with_mixnet_contract(Some(config.get_mixnet_contract_address(network).as_ref()))
.with_vesting_contract(Some(config.get_vesting_contract_address(network).as_ref()))
.with_bandwidth_claim_contract(Some(
config
.get_bandwidth_claim_contract_address(network)
.as_ref(),
));
.with_vesting_contract(Some(config.get_vesting_contract_address(network).as_ref()));
let config = nym_validator_client::Config::try_from_nym_network_details(&network_details)?
.with_urls(nyxd_url, api_url);
@@ -3,7 +3,7 @@
[package]
name = "nym-network-requester"
version = "1.1.24"
version = "1.1.25"
authors.workspace = true
edition.workspace = true
rust-version = "1.65"
@@ -1,6 +1,6 @@
[package]
name = "nym-network-statistics"
version = "1.1.24"
version = "1.1.25"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "nym-cli"
version = "1.1.24"
version = "1.1.25"
authors.workspace = true
edition = "2021"
+16 -1
View File
@@ -17413,7 +17413,7 @@ prop-types@^15.0.0, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2,
object-assign "^4.1.1"
react-is "^16.13.1"
property-expr@^2.0.4:
property-expr@^2.0.4, property-expr@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.5.tgz#278bdb15308ae16af3e3b9640024524f4dc02cb4"
integrity sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==
@@ -20018,6 +20018,11 @@ timers-ext@^0.1.7:
es5-ext "~0.10.46"
next-tick "1"
tiny-case@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03"
integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==
tiny-warning@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754"
@@ -21786,6 +21791,16 @@ yup@^0.32.9:
property-expr "^2.0.4"
toposort "^2.0.2"
yup@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/yup/-/yup-1.2.0.tgz#9e51af0c63bdfc9be0fdc6c10aa0710899d8aff6"
integrity sha512-PPqYKSAXjpRCgLgLKVGPA33v5c/WgEx3wi6NFjIiegz90zSwyMpvTFp/uGcVnnbx6to28pgnzp/q8ih3QRjLMQ==
dependencies:
property-expr "^2.0.5"
tiny-case "^1.0.3"
toposort "^2.0.2"
type-fest "^2.19.0"
zod@^3.21.4:
version "3.21.4"
resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db"