Tauri wallet

This commit is contained in:
fmtabbara
2021-10-14 16:30:09 +01:00
committed by Mark Sinclair
parent 673e13ec57
commit 1a0c6eed27
17 changed files with 307 additions and 162 deletions
+82 -71
View File
@@ -53,9 +53,9 @@ dependencies = [
[[package]]
name = "anyhow"
version = "1.0.44"
version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1"
checksum = "28ae2b3dec75a406790005a200b1bd89785afc02517a00ca99ecfe093ee9e6cf"
[[package]]
name = "arrayref"
@@ -302,18 +302,18 @@ dependencies = [
[[package]]
name = "bstr"
version = "0.2.17"
version = "0.2.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
checksum = "90682c8d613ad3373e66de8c6411e0ae2ab2571e879d2efbf73558cc66f21279"
dependencies = [
"memchr",
]
[[package]]
name = "bumpalo"
version = "3.7.1"
version = "3.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9df67f7bf9ef8498769f994239c45613ef0c5899415fb58e9add412d2c1a538"
checksum = "9c59e7af012c713f529e7a3ee57ce9b31ddd858d4b512923602f74608b009631"
[[package]]
name = "byte-tools"
@@ -356,9 +356,9 @@ dependencies = [
[[package]]
name = "cairo-rs"
version = "0.14.7"
version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9164355c892b026d6257e696dde5f3cb39beb3718297f0f161b562fe2ee3ab86"
checksum = "f859ade407c19810ae920b4fafab92189ed312adad490d08fb16b5f49f1e2207"
dependencies = [
"bitflags",
"cairo-sys-rs",
@@ -551,9 +551,9 @@ dependencies = [
[[package]]
name = "const-oid"
version = "0.6.1"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdab415d6744056100f40250a66bc430c1a46f7a02e20bc11c94c79a0f0464df"
checksum = "44c32f031ea41b4291d695026c023b95d59db2d8a2c7640800ed56bc8f510f22"
[[package]]
name = "constant_time_eq"
@@ -796,9 +796,9 @@ checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
[[package]]
name = "crypto-bigint"
version = "0.2.10"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d12477e115c0d570c12a2dfd859f80b55b60ddb5075df210d3af06d133a69f45"
checksum = "e49339137316df1914fdb54a5eae75a73f45068fd0d2178fe235b11d93238a6e"
dependencies = [
"generic-array 0.14.4",
"rand_core 0.6.3",
@@ -922,9 +922,9 @@ dependencies = [
[[package]]
name = "der"
version = "0.4.3"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2adca118c71ecd9ae094d4b68257b3fdfcb711a612b9eec7b5a0d27a5a70a5b4"
checksum = "31e21d2d0f22cde6e88694108429775c0219760a07779bf96503b434a03d7412"
dependencies = [
"const-oid",
]
@@ -1237,9 +1237,9 @@ dependencies = [
[[package]]
name = "flate2"
version = "1.0.22"
version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f"
checksum = "80edafed416a46fb378521624fab1cfa2eb514784fd8921adbe8a8d8321da811"
dependencies = [
"cfg-if 1.0.0",
"crc32fast",
@@ -1558,9 +1558,9 @@ checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7"
[[package]]
name = "gio"
version = "0.14.6"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f3a29d8062af72045518271a2cd98b4e1617ce43f5b4223ad0fb9a0eff8f718c"
checksum = "81a4c12fcba7a6402ae843a0085ec16d3658a87901763b6a7f0a7c5d60e555a5"
dependencies = [
"bitflags",
"futures-channel",
@@ -1626,7 +1626,7 @@ checksum = "2aad66361f66796bfc73f530c51ef123970eb895ffba991a234fcf7bea89e518"
dependencies = [
"anyhow",
"heck",
"proc-macro-crate 1.1.0",
"proc-macro-crate 1.0.0",
"proc-macro-error",
"proc-macro2",
"quote",
@@ -1749,7 +1749,7 @@ checksum = "21de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79"
dependencies = [
"anyhow",
"heck",
"proc-macro-crate 1.1.0",
"proc-macro-crate 1.0.0",
"proc-macro-error",
"proc-macro2",
"quote",
@@ -1884,9 +1884,9 @@ dependencies = [
[[package]]
name = "http"
version = "0.2.5"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b"
checksum = "527e8c9ac747e28542699a951517aa9a6945af506cd1f2e1b53a576c17b6cc11"
dependencies = [
"bytes",
"fnv",
@@ -1940,9 +1940,9 @@ dependencies = [
[[package]]
name = "hyper"
version = "0.14.13"
version = "0.14.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "15d1cfb9e4f68655fa04c01f59edb405b6074a0f7118ea881e5026e4a1cd8593"
checksum = "13f67199e765030fa08fe0bd581af683f0d5bc04ea09c2b1102012c5fb90e7fd"
dependencies = [
"bytes",
"futures-channel",
@@ -2091,9 +2091,9 @@ dependencies = [
[[package]]
name = "instant"
version = "0.1.11"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "716d3d89f35ac6a34fd0eed635395f4c3b76fa889338a4632e5231a8684216bd"
checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d"
dependencies = [
"cfg-if 1.0.0",
]
@@ -2223,9 +2223,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.102"
version = "0.2.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2a5ac8f984bfcf3a823267e5fde638acc3325f6496633a5da6bb6eb2171e103"
checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21"
[[package]]
name = "lock_api"
@@ -2551,7 +2551,7 @@ version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "486ea01961c4a818096de679a8b740b26d9033146ac5291b1c98557658f8cdd9"
dependencies = [
"proc-macro-crate 1.1.0",
"proc-macro-crate 1.0.0",
"proc-macro2",
"quote",
"syn",
@@ -2660,9 +2660,9 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
[[package]]
name = "openssl-sys"
version = "0.9.67"
version = "0.9.66"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69df2d8dfc6ce3aaf44b40dec6f487d5a886516cf6879c49e98e0710f310a058"
checksum = "1996d2d305e561b70d1ee0c53f1542833f4e1ac6ce9a6708b6ff2738ca67dc82"
dependencies = [
"autocfg 1.0.1",
"cc",
@@ -2935,9 +2935,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pkcs8"
version = "0.7.6"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee3ef9b64d26bad0536099c816c6734379e45bbd5f14798def6809e5cc350447"
checksum = "fbee84ed13e44dd82689fa18348a49934fa79cc774a344c42fc9b301c71b140a"
dependencies = [
"der",
"spki",
@@ -2945,9 +2945,9 @@ dependencies = [
[[package]]
name = "pkg-config"
version = "0.3.20"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c9b1041b4387893b91ee6746cddfc28516aff326a3519fb2adf820932c5e6cb"
checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
[[package]]
name = "pmutil"
@@ -3007,9 +3007,9 @@ dependencies = [
[[package]]
name = "proc-macro-crate"
version = "1.1.0"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83"
checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92"
dependencies = [
"thiserror",
"toml",
@@ -3550,9 +3550,9 @@ dependencies = [
[[package]]
name = "schemars"
version = "0.8.6"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7a48d098c2a7fdf5740b19deb1181b4fb8a9e68e03ae517c14cde04b5725409"
checksum = "bc6ab463ae35acccb5cba66c0084c985257b797d288b6050cc2f6ac1b266cb78"
dependencies = [
"dyn-clone",
"schemars_derive",
@@ -3562,9 +3562,9 @@ dependencies = [
[[package]]
name = "schemars_derive"
version = "0.8.6"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a9ea2a613fe4cd7118b2bb101a25d8ae6192e1975179b67b2f17afd11e70ac8"
checksum = "902fdfbcf871ae8f653bddf4b2c05905ddaabc08f69d32a915787e3be0d31356"
dependencies = [
"proc-macro2",
"quote",
@@ -3712,9 +3712,9 @@ dependencies = [
[[package]]
name = "serde_json"
version = "1.0.68"
version = "1.0.67"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8"
checksum = "a7f9e390c27c3c0ce8bc5d725f6e4d30a29d26659494aa4b17535f7522c5c950"
dependencies = [
"itoa",
"ryu",
@@ -3855,9 +3855,9 @@ checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
[[package]]
name = "socket2"
version = "0.4.2"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516"
checksum = "765f090f0e423d2b55843402a07915add955e7d60657db13707a159727326cad"
dependencies = [
"libc",
"winapi",
@@ -3886,9 +3886,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
[[package]]
name = "spki"
version = "0.4.1"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c01a0c15da1b0b0e1494112e7af814a678fec9bd157881b49beac661e9b6f32"
checksum = "987637c5ae6b3121aba9d513f869bd2bff11c4cc086c22473befd6649c0bd521"
dependencies = [
"der",
]
@@ -4501,6 +4501,15 @@ dependencies = [
"utf-8",
]
[[package]]
name = "termcolor"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
dependencies = [
"winapi-util",
]
[[package]]
name = "thin-slice"
version = "0.1.1"
@@ -4564,9 +4573,9 @@ checksum = "25eb0ca3468fc0acc11828786797f6ef9aa1555e4a211a60d64cc8e4d1be47d6"
[[package]]
name = "tokio"
version = "1.12.0"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2c2416fdedca8443ae44b4527de1ea633af61d8f7169ffa6e72c5b53d24efcc"
checksum = "b4efe6fc2395938c8155973d7be49fe8d03a843726e285e100a8a383cc0154ce"
dependencies = [
"autocfg 1.0.1",
"bytes",
@@ -4642,9 +4651,9 @@ checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
[[package]]
name = "tracing"
version = "0.1.28"
version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "84f96e095c0c82419687c20ddf5cb3eadb61f4e1405923c9dc8e53a1adacbda8"
checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d"
dependencies = [
"cfg-if 1.0.0",
"pin-project-lite",
@@ -4654,9 +4663,9 @@ dependencies = [
[[package]]
name = "tracing-attributes"
version = "0.1.16"
version = "0.1.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98863d0dd09fa59a1b79c6750ad80dbda6b75f4e71c437a6a1a8cb91a8bcbd77"
checksum = "c42e6fa53307c8a17e4ccd4dc81cf5ec38db9209f59b222210375b54ee40d1e2"
dependencies = [
"proc-macro2",
"quote",
@@ -4665,9 +4674,9 @@ dependencies = [
[[package]]
name = "tracing-core"
version = "0.1.20"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "46125608c26121c81b0c6d693eab5a420e416da7e43c426d2e8f7df8da8a3acf"
checksum = "2ca517f43f0fb96e0c3072ed5c275fe5eece87e8cb52f4a77b69226d3b1c9df8"
dependencies = [
"lazy_static",
]
@@ -4680,9 +4689,9 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
[[package]]
name = "ts-rs"
version = "3.1.0"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "369e48de67506679b3a576b0faf666fa9f9acf2fd00b4c61e28bdb6c8e08ec06"
checksum = "89634b937615f3e50462b9529a36aa309d557c893eb79ce8a93d7e1915820859"
dependencies = [
"dprint-plugin-typescript",
"ts-rs-macros",
@@ -4690,14 +4699,15 @@ dependencies = [
[[package]]
name = "ts-rs-macros"
version = "3.1.0"
version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f269e8fd28e26b4cdbd01f81f345aaf666131511e54a735a76a614b5062d0a5a"
checksum = "117c837b4f78dbaa8e7d06aefae35267f49cb0a47f5df4ed75b777acb83ba14d"
dependencies = [
"Inflector",
"proc-macro2",
"quote",
"syn",
"termcolor",
]
[[package]]
@@ -4747,9 +4757,9 @@ checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
[[package]]
name = "unicode-width"
version = "0.1.9"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
[[package]]
name = "unicode-xid"
@@ -5016,9 +5026,9 @@ dependencies = [
[[package]]
name = "webview2"
version = "0.1.3"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b132bb76313456e93b17037262a030d54c9fe0f11838ef1593f845e3807ef8a"
checksum = "6fab1ccfdabb098b047293c8d496c1914d1c654b68fdaa3bb77cfa47c4bca2c7"
dependencies = [
"com",
"once_cell",
@@ -5029,9 +5039,9 @@ dependencies = [
[[package]]
name = "webview2-sys"
version = "0.1.1"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24b7889e893ac4c50d7346356be3ce13a85e56512c38b8fde0526559b8012a4c"
checksum = "cc5288cef1e0cbcf7a0b961e6271e33589b8989c80b2e11078504e989b5346ff"
dependencies = [
"com",
"winapi",
@@ -5130,12 +5140,13 @@ dependencies = [
[[package]]
name = "x11-dl"
version = "2.19.1"
version = "2.18.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59"
checksum = "2bf981e3a5b3301209754218f962052d4d9ee97e478f4d26d4a6eced34c1fef8"
dependencies = [
"lazy_static",
"libc",
"maybe-uninit",
"pkg-config",
]
@@ -5150,18 +5161,18 @@ dependencies = [
[[package]]
name = "zeroize"
version = "1.4.2"
version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf68b08513768deaa790264a7fac27a58cbf2705cfcdc9448362229217d7e970"
checksum = "377db0846015f7ae377174787dd452e1c5f5a9050bc6f954911d01f116daa0cd"
dependencies = [
"zeroize_derive",
]
[[package]]
name = "zeroize_derive"
version = "1.2.0"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bdff2024a851a322b08f179173ae2ba620445aef1e838f0c196820eade4ae0c7"
checksum = "a2c1e130bebaeab2f23886bf9acbaca14b092408c452543c857f66399cd6dab1"
dependencies = [
"proc-macro2",
"quote",
+29 -9
View File
@@ -3,17 +3,37 @@ Copyright 2020 - Nym Technologies SA <contact@nymtech.net>
SPDX-License-Identifier: Apache-2.0
-->
# Nym Tauri Wallet
# Nym Tauri Wallet
A Rust and Tauri desktop wallet implementation.
A Rust and Tauri desktop wallet implementation.
## Installation prerequisites
## Installation prerequisites
* `Yarn`
* `NodeJS >= v16.8.0`
* `Rust & cargo >= v1.51`
- `Yarn`
- `NodeJS >= v16.8.0`
- `Rust & cargo >= v1.51`
## Installation & usage
## Installation
* `yarn install`
* `yarn dev`
Inside of the `tauri-wallet` folder, run the following commands
- `yarn install`
## Development mode
You can run the wallet without having to install it in development mode by running the following terminal command from the `tauri-wallet` folder
`yarn dev`
## Production mode
To build and install the wallet, run the following terminal command from the `tauri-wallet` folder
`$ yarn build`
This will build an executable file that you can use to install the wallet on your machine
## Install the wallet
Once the the building process is complete an installation file can be found in the following location `tauri-wallet/target/release/nym_wallet`
``
+4 -1
View File
@@ -5,8 +5,11 @@
"license": "MIT",
"scripts": {
"webpack:dev": "yarn webpack serve",
"webpack:build": "yarn webpack",
"tauri:dev": "yarn tauri dev",
"dev": "yarn run webpack:dev & yarn run tauri:dev "
"tauri:build": "yarn tauri build",
"dev": "yarn run webpack:dev & yarn run tauri:dev",
"build": "yarn run webpack:build & yarn run tauri:build"
},
"dependencies": {
"@babel/preset-typescript": "^7.15.0",
+3 -1
View File
@@ -57,7 +57,9 @@ fn main() {
create_new_account,
get_fee,
get_state_params,
update_state_params
update_state_params,
get_reverse_mix_delegations_paged,
get_reverse_gateway_delegations_paged,
])
.run(tauri::generate_context!())
.expect("error while running tauri application");
@@ -16,7 +16,7 @@ pub struct Account {
contract_address: String,
client_address: String,
denom: Denom,
mnemonmic: Option<String>,
mnemonic: Option<String>,
}
#[derive(TS, Serialize, Deserialize)]
@@ -54,7 +54,7 @@ pub async fn connect_with_mnemonic(
contract_address,
client_address,
denom: Denom::from_str(&denom.to_string())?,
mnemonmic: None,
mnemonic: None,
};
let mut w_state = state.write().await;
@@ -90,9 +90,9 @@ pub async fn get_balance(state: tauri::State<'_, Arc<RwLock<State>>>) -> Result<
pub async fn create_new_account(
state: tauri::State<'_, Arc<RwLock<State>>>,
) -> Result<Account, String> {
let mnemonic = random_mnemonic();
let mut client = connect_with_mnemonic(mnemonic.to_string(), state).await?;
client.mnemonmic = Some(mnemonic.to_string());
let rand_mnemonic = random_mnemonic();
let mut client = connect_with_mnemonic(rand_mnemonic.to_string(), state).await?;
client.mnemonic = Some(rand_mnemonic.to_string());
Ok(client)
}
@@ -2,6 +2,9 @@ use crate::coin::Coin;
use crate::format_err;
use crate::state::State;
use cosmwasm_std::Coin as CosmWasmCoin;
use mixnet_contract::{
Addr, PagedReverseGatewayDelegationsResponse, PagedReverseMixDelegationsResponse,
};
use serde::{Deserialize, Serialize};
use std::convert::TryInto;
use std::sync::Arc;
@@ -92,3 +95,25 @@ pub async fn undelegate_from_gateway(
Err(e) => Err(format_err!(e)),
}
}
#[tauri::command]
pub async fn get_reverse_mix_delegations_paged(
state: tauri::State<'_, Arc<RwLock<State>>>,
) -> Result<PagedReverseMixDelegationsResponse, String> {
let r_state = state.read().await;
let client = r_state.client()?;
client
.get_reverse_mix_delegations_paged(Addr::unchecked(client.address().as_ref()), None, None)
.await.map_err(|err| format_err!(err))
}
#[tauri::command]
pub async fn get_reverse_gateway_delegations_paged(
state: tauri::State<'_, Arc<RwLock<State>>>,
) -> Result<PagedReverseGatewayDelegationsResponse, String> {
let r_state = state.read().await;
let client = r_state.client()?;
client
.get_reverse_gateway_delegations_paged(Addr::unchecked(client.address().as_ref()), None, None)
.await.map_err(|err| format_err!(err))
}
+13 -11
View File
@@ -1,4 +1,4 @@
import React, { useContext } from 'react'
import React, { useContext, useEffect } from 'react'
import { Link, useLocation } from 'react-router-dom'
import {
List,
@@ -61,21 +61,13 @@ let routesSchema = [
},
]
if (process.env.NODE_ENV) {
routesSchema.push({
label: 'Docs',
route: '/docs',
Icon: <Description />,
})
}
const useStyles = makeStyles((theme: Theme) => ({
navItem: {
color: '#fff',
fontSize: 24,
fontSize: 20,
},
selected: {
color: theme.palette.primary.main,
color: theme.palette.primary.light,
},
}))
@@ -84,6 +76,16 @@ export const Nav = () => {
const { clientDetails, handleShowAdmin, logOut } = useContext(ClientContext)
const location = useLocation()
useEffect(() => {
if (clientDetails?.client_address === ADMIN_ADDRESS) {
routesSchema.push({
label: 'Docs',
route: '/docs',
Icon: <Description />,
})
}
}, [])
return (
<div
style={{
+7
View File
@@ -10,6 +10,7 @@ import {
TauriStateParams,
TauriTxResult,
TCreateAccount,
TDelegation,
TSignInWithMnemonic,
} from '../types'
@@ -83,3 +84,9 @@ export const getContractParams = async (): Promise<TauriStateParams> =>
export const setContractParams = async (
params: TauriStateParams
): Promise<TauriStateParams> => await invoke('update_state_params', { params })
export const getReverseMixDelegations = async (): Promise<TDelegation> =>
await invoke('get_reverse_mix_delegations_paged')
export const getReverseGatewayDelegations = async (): Promise<TDelegation> =>
await invoke('get_reverse_gateway_delegations_paged')
@@ -74,7 +74,7 @@ export const DelegateForm = ({
})
.then((res) => {
onSuccess(
`Successfully delegated ${data.amount} punk to ${res.source_address}`
`Successfully delegated ${data.amount} punk to ${res.target_address}`
)
getBalance.fetchBalance()
})
+3 -2
View File
@@ -1,6 +1,7 @@
import React, { useEffect, useState } from 'react'
import { Box, Button, CircularProgress, Theme } from '@material-ui/core'
import { useTheme } from '@material-ui/styles'
import { Alert, AlertTitle } from '@material-ui/lab'
import { DelegateForm } from './DelegateForm'
import { Layout } from '../../layouts'
import { NymCard } from '../../components'
@@ -8,7 +9,6 @@ import {
EnumRequestStatus,
RequestStatus,
} from '../../components/RequestStatus'
import { Alert, AlertTitle } from '@material-ui/lab'
import { TFee } from '../../types'
import { getGasFee } from '../../requests'
@@ -73,7 +73,8 @@ export const Delegate = () => {
status={status}
Error={
<Alert severity="error">
An error occurred with the request: {message}
An error occurred with the request:
<Box style={{ wordBreak: 'break-word' }}>{message}</Box>
</Alert>
}
Success={
@@ -1,10 +1,12 @@
import React, { useState } from 'react'
import React, { useContext, useState } from 'react'
import { NymCard } from '../../components'
import { ApiList } from './ApiList'
import { Layout } from '../../layouts'
import { ADMIN_ADDRESS, ClientContext } from '../../context/main'
export const InternalDocs = () => {
if (process.env.NODE_ENV == 'development') {
const { clientDetails } = useContext(ClientContext)
if (clientDetails?.client_address === ADMIN_ADDRESS) {
return (
<Layout>
<NymCard title="Docs" subheader="Internal API docs">
+1 -2
View File
@@ -202,7 +202,6 @@ const CreateAccountContent = ({ showSignIn }: { showSignIn: () => void }) => {
setIsLoading(false)
}, 2500)
} catch (e: any) {
console.log(e)
setError(e)
}
}
@@ -210,7 +209,7 @@ const CreateAccountContent = ({ showSignIn }: { showSignIn: () => void }) => {
<SignInCard>
<Typography variant="h4">Create wallet</Typography>
<Typography color="textSecondary">
Create an new wallet to start using the Nym network
Create a new wallet to start using the Nym network
</Typography>
<Grid
container
@@ -1,5 +1,5 @@
import React, { useContext } from 'react'
import { useForm } from 'react-hook-form'
import React, { useContext, useEffect } from 'react'
import { useForm, Controller } from 'react-hook-form'
import {
Button,
CircularProgress,
@@ -8,14 +8,15 @@ import {
TextField,
Theme,
} from '@material-ui/core'
import { Alert } from '@material-ui/lab'
import { Alert, Autocomplete } from '@material-ui/lab'
import { useTheme } from '@material-ui/styles'
import { yupResolver } from '@hookform/resolvers/yup'
import { validationSchema } from './validationSchema'
import { NodeTypeSelector } from '../../components/NodeTypeSelector'
import { EnumNodeType, TFee } from '../../types'
import { ClientContext } from '../../context/main'
import { minorToMajor, undelegate } from '../../requests'
import { undelegate } from '../../requests'
import { TDelegations } from '.'
type TFormData = {
nodeType: EnumNodeType
@@ -29,16 +30,18 @@ const defaultValues = {
export const UndelegateForm = ({
fees,
delegations,
onError,
onSuccess,
}: {
fees: TFee
delegations: TDelegations
onError: (message?: string) => void
onSuccess: (message?: string) => void
}) => {
const {
control,
handleSubmit,
register,
setValue,
watch,
formState: { errors, isSubmitting },
@@ -47,22 +50,27 @@ export const UndelegateForm = ({
resolver: yupResolver(validationSchema),
})
const watchNodeType = watch('nodeType')
useEffect(() => {
setValue('identity', '')
}, [watchNodeType])
const { getBalance } = useContext(ClientContext)
const theme: Theme = useTheme()
const onSubmit = async (data: TFormData) => {
await undelegate({
type: data.nodeType,
identity: data.identity,
})
.then(async (res) => {
onSuccess(`Successfully undelegated from ${res.source_address}`)
onSuccess(`Successfully undelegated from ${res.target_address}`)
getBalance.fetchBalance()
})
.catch((e) => onError(e))
}
const theme: Theme = useTheme()
return (
<FormControl fullWidth>
<div style={{ padding: theme.spacing(3, 5) }}>
@@ -72,6 +80,7 @@ export const UndelegateForm = ({
<NodeTypeSelector
nodeType={watchNodeType}
setNodeType={(nodeType) => setValue('nodeType', nodeType)}
disabled={isSubmitting}
/>
</Grid>
<Grid item>
@@ -85,26 +94,35 @@ export const UndelegateForm = ({
</Grid>
</Grid>
<Grid item xs={12}>
<TextField
{...register('identity')}
required
variant="outlined"
id="identity"
<Controller
control={control}
name="identity"
label="Node identity"
error={!!errors.identity}
helperText={errors.identity?.message}
fullWidth
render={({ field }) => (
<Autocomplete
value={field.value}
onChange={(_, value) => setValue('identity', value || '')}
options={
watchNodeType === EnumNodeType.mixnode
? delegations.mixnodes.delegated_nodes
: delegations.gateways.delegated_nodes
}
renderInput={(params) => (
<TextField
{...params}
required
variant="outlined"
id="identity"
name="identity"
label="Node identity"
error={!!errors.identity}
helperText={errors.identity?.message}
fullWidth
/>
)}
/>
)}
/>
</Grid>
{/* {allocationWarning && (
<Grid item xs={12} lg={6}>
<Alert severity={!isValidAmount ? 'error' : 'info'}>
{allocationWarning}
</Alert>
</Grid>
)} */}
</Grid>
</div>
<div
+80 -30
View File
@@ -8,31 +8,59 @@ import {
EnumRequestStatus,
RequestStatus,
} from '../../components/RequestStatus'
import { Box, CircularProgress, Theme } from '@material-ui/core'
import { getGasFee } from '../../requests'
import { TFee } from '../../types'
import { Box, Button, CircularProgress, Theme } from '@material-ui/core'
import {
getGasFee,
getReverseGatewayDelegations,
getReverseMixDelegations,
} from '../../requests'
import { TFee, TDelegation } from '../../types'
export type TDelegations = {
mixnodes: TDelegation
gateways: TDelegation
}
export const Undelegate = () => {
const [message, setMessage] = useState<string>()
const [status, setStaus] = useState<EnumRequestStatus>(
const [status, setStatus] = useState<EnumRequestStatus>(
EnumRequestStatus.initial
)
const [isLoading, setIsLoading] = useState(true)
const [fees, setFees] = useState<TFee>()
const [delegations, setDelegations] = useState<TDelegations>()
useEffect(() => {
const getFees = async () => {
const mixnode = await getGasFee('UndelegateFromMixnode')
const gateway = await getGasFee('UndelegateFromGateway')
initialize()
}, [])
const initialize = async () => {
setIsLoading(true)
try {
const [mixnodeFee, gatewayFee, mixnodeDelegations, gatewayDelegations] =
await Promise.all([
getGasFee('UndelegateFromMixnode'),
getGasFee('UndelegateFromGateway'),
getReverseMixDelegations(),
getReverseGatewayDelegations(),
])
setFees({
mixnode: mixnode,
gateway: gateway,
mixnode: mixnodeFee,
gateway: gatewayFee,
})
setIsLoading(false)
setDelegations({
mixnodes: mixnodeDelegations,
gateways: gatewayDelegations,
})
} catch {
setStatus(EnumRequestStatus.error)
setMessage('An error occured when initialising the page')
}
getFees()
}, [])
setIsLoading(false)
}
const theme: Theme = useTheme()
@@ -55,35 +83,57 @@ export const Undelegate = () => {
</Box>
)}
<>
{status === EnumRequestStatus.initial && fees && (
{status === EnumRequestStatus.initial && fees && delegations && (
<UndelegateForm
fees={fees}
delegations={delegations}
onError={(message) => {
setMessage(message)
setStaus(EnumRequestStatus.error)
setStatus(EnumRequestStatus.error)
}}
onSuccess={(message) => {
setMessage(message)
setStaus(EnumRequestStatus.success)
setStatus(EnumRequestStatus.success)
}}
/>
)}
{status !== EnumRequestStatus.initial && (
<RequestStatus
status={status}
Error={
<Alert severity="error">
An error occurred with the request: {message}
</Alert>
}
Success={
<Alert severity="success">
{' '}
<AlertTitle>Undelegation complete</AlertTitle>
{message}
</Alert>
}
/>
<>
<RequestStatus
status={status}
Error={
<Alert severity="error">
An error occurred with the request: {message}
</Alert>
}
Success={
<Alert severity="success">
{' '}
<AlertTitle>Undelegation complete</AlertTitle>
{message}
</Alert>
}
/>
<div
style={{
display: 'flex',
alignItems: 'center',
justifyContent: 'flex-end',
borderTop: `1px solid ${theme.palette.grey[200]}`,
background: theme.palette.grey[100],
padding: theme.spacing(2),
}}
>
<Button
onClick={() => {
setStatus(EnumRequestStatus.initial)
initialize()
}}
>
Finish
</Button>
</div>
</>
)}
</>
</NymCard>
+6
View File
@@ -24,3 +24,9 @@ export type TCreateAccount = {
} & TSignInWithMnemonic
export type TFee = { [key in EnumNodeType]: Coin }
export type TDelegation = {
delegated_nodes: string[]
delegation_owner: string
start_next_after: string
}
+1 -1
View File
@@ -4,5 +4,5 @@ export interface Account {
contract_address: string;
client_address: string;
denom: Denom;
mnemonmic: string | null;
mnemonic: string | null;
}
@@ -7,5 +7,4 @@ export interface TauriStateParams {
mixnode_delegation_reward_rate: string;
gateway_delegation_reward_rate: string;
mixnode_active_set_size: number;
gateway_active_set_size: number;
}