From 60264486fd6000787329b2bf36454d3fbdc1721c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Aug 2023 08:37:23 +0000 Subject: [PATCH 01/20] 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] --- nym-api/tests/package-lock.json | 60 ++++++++++++++++----------------- nym-api/tests/yarn.lock | 12 +++---- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/nym-api/tests/package-lock.json b/nym-api/tests/package-lock.json index 020a0426be..f08dccfcf4 100644 --- a/nym-api/tests/package-lock.json +++ b/nym-api/tests/package-lock.json @@ -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" diff --git a/nym-api/tests/yarn.lock b/nym-api/tests/yarn.lock index 9e5476cf80..4fc3d5aa56 100644 --- a/nym-api/tests/yarn.lock +++ b/nym-api/tests/yarn.lock @@ -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" From 60ab58998d9aae026bb059fa59cd98b5feb14ae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bogdan-=C8=98tefan=20Neac=C5=9Fu?= Date: Wed, 9 Aug 2023 18:12:59 +0300 Subject: [PATCH 02/20] Print warning when coconut verif endpoint doesn't work (#3755) --- .../websocket/connection_handler/coconut.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/gateway/src/node/client_handling/websocket/connection_handler/coconut.rs b/gateway/src/node/client_handling/websocket/connection_handler/coconut.rs index cc8c552b07..e19f4a14fe 100644 --- a/gateway/src/node/client_handling/websocket/connection_handler/coconut.rs +++ b/gateway/src/node/client_handling/websocket/connection_handler/coconut.rs @@ -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); + } } } From de2b106568ade99471f460a3e67bebbb1b084768 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9A=A1=EF=B8=8F2FakTor=E2=9A=A1=EF=B8=8F?= Date: Tue, 8 Aug 2023 18:18:57 +0200 Subject: [PATCH 03/20] Update community-applications-and-guides.md --- .../community-resources/community-applications-and-guides.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/dev-portal/src/community-resources/community-applications-and-guides.md b/documentation/dev-portal/src/community-resources/community-applications-and-guides.md index 90e0801e80..cd89113896 100644 --- a/documentation/dev-portal/src/community-resources/community-applications-and-guides.md +++ b/documentation/dev-portal/src/community-resources/community-applications-and-guides.md @@ -85,9 +85,9 @@ We love seeing our developer community create applications using Nym. If you wou -## Minibolt +## MiniBolt -> Anonymize your p2p inventory messages and mempool for your Bitcoin & Lightning full nodes on consumer PCs! +> Proxies the clearnet connections of a Bitcoin node and its associated tools using the NYM mixnet! * [Github](https://github.com/minibolt-guide/minibolt) * [Documentation](https://v2.minibolt.info/bonus-guides/system/nym-mixnet#proxying-bitcoin-core) From 59e4567342e93b4a75da4a6ed8d3b63315508528 Mon Sep 17 00:00:00 2001 From: twofaktor Date: Tue, 8 Aug 2023 18:33:11 +0200 Subject: [PATCH 04/20] Update minibolt_pp.png --- .../images/profile_picture/minibolt_pp.png | Bin 13877 -> 23061 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/documentation/dev-portal/src/images/profile_picture/minibolt_pp.png b/documentation/dev-portal/src/images/profile_picture/minibolt_pp.png index ed059e6055840dcd148f5760efc06b2eb5e331d9..455243cc221e6350d5575ccc8cd8c9461cc672f4 100644 GIT binary patch literal 23061 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 literal 13877 zcmV-5HpL{T8P z03<-{jo#49+uys(IcNU3_jNx24UhyHASv+_y889&#(npm@A>VUu-5Wpv-tYm={k2si~io&o;&+W=pG>U;=z7_;<7e;eS}xT+bTk6Z_~d%f174CpUpGW>0TFGH=L z%7CrBMfHMu2K4X0S*ZHW0Ps%WH-KN|$7_8id#*PWX!!=S;zxm#KZf9vJ=4kT8LK~O z06&tQ?7zp4|N48`vp({Zz@iUi^64&qGS{I@&v^F7k%E5%IQSC`F4?mm%=Y5PhJt_6 zsrC(}=Ic$tpCa}8ybbQg)ckn1M{h}h9|eBzEo{@?h*in<=+U
  • {J-bRK*gzt^>% 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 DYWw7D From 062f4911e11ecb49b70c9c436ced614218cc6421 Mon Sep 17 00:00:00 2001 From: pierre Date: Wed, 9 Aug 2023 19:44:51 +0200 Subject: [PATCH 05/20] add user feedback page --- nym-connect/desktop/package.json | 4 +- .../{settings => }/PrivacyLevelSettings.tsx | 2 +- nym-connect/desktop/src/pages/menu/index.tsx | 2 +- .../ErrorReporting.tsx} | 24 ++-- .../src/pages/menu/reporting/UserFeedback.tsx | 104 ++++++++++++++++++ .../src/pages/menu/reporting/index.tsx | 26 +++++ nym-connect/desktop/src/routes/index.tsx | 12 +- yarn.lock | 17 ++- 8 files changed, 169 insertions(+), 22 deletions(-) rename nym-connect/desktop/src/pages/menu/{settings => }/PrivacyLevelSettings.tsx (96%) rename nym-connect/desktop/src/pages/menu/{settings/MonitoringSettings.tsx => reporting/ErrorReporting.tsx} (62%) create mode 100644 nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx create mode 100644 nym-connect/desktop/src/pages/menu/reporting/index.tsx diff --git a/nym-connect/desktop/package.json b/nym-connect/desktop/package.json index 96d9e83438..2c374a6997 100644 --- a/nym-connect/desktop/package.json +++ b/nym-connect/desktop/package.json @@ -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", @@ -115,4 +115,4 @@ "webpack-merge": "^5.8.0", "yaml-loader": "^0.8.0" } -} \ No newline at end of file +} diff --git a/nym-connect/desktop/src/pages/menu/settings/PrivacyLevelSettings.tsx b/nym-connect/desktop/src/pages/menu/PrivacyLevelSettings.tsx similarity index 96% rename from nym-connect/desktop/src/pages/menu/settings/PrivacyLevelSettings.tsx rename to nym-connect/desktop/src/pages/menu/PrivacyLevelSettings.tsx index a97e7fdfdf..9935ef8f4c 100644 --- a/nym-connect/desktop/src/pages/menu/settings/PrivacyLevelSettings.tsx +++ b/nym-connect/desktop/src/pages/menu/PrivacyLevelSettings.tsx @@ -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(); diff --git a/nym-connect/desktop/src/pages/menu/index.tsx b/nym-connect/desktop/src/pages/menu/index.tsx index 67576dc88c..285d368061 100644 --- a/nym-connect/desktop/src/pages/menu/index.tsx +++ b/nym-connect/desktop/src/pages/menu/index.tsx @@ -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 = () => ( diff --git a/nym-connect/desktop/src/pages/menu/settings/MonitoringSettings.tsx b/nym-connect/desktop/src/pages/menu/reporting/ErrorReporting.tsx similarity index 62% rename from nym-connect/desktop/src/pages/menu/settings/MonitoringSettings.tsx rename to nym-connect/desktop/src/pages/menu/reporting/ErrorReporting.tsx index 8b899cbe72..baf465944c 100644 --- a/nym-connect/desktop/src/pages/menu/settings/MonitoringSettings.tsx +++ b/nym-connect/desktop/src/pages/menu/reporting/ErrorReporting.tsx @@ -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 = () => { - Error reporting and performance monitoring + Turn on error reporting and performance monitoring { sx={{ ml: 1, mr: 1 }} /> } - label="Enable" + label={enabled ? 'On' : 'Off'} /> - 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. - - - - You must restart the application for the change to take effect. - - + + You must restart the application for the change to take effect. + diff --git a/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx b/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx new file mode 100644 index 0000000000..1295d2159b --- /dev/null +++ b/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx @@ -0,0 +1,104 @@ +import React, { useState } from 'react'; +import { Alert, Box, Button, FormControl, Snackbar, Stack, TextField, Typography } from '@mui/material'; +import * as Sentry from '@sentry/browser'; +import { Controller, SubmitHandler, useForm } from 'react-hook-form'; +import { object, string } from 'yup'; +import { yupResolver } from '@hookform/resolvers/yup'; + +type FormValues = { + email?: string; + feedback: string; +}; + +const schema = object({ + email: string().email(), + feedback: string().required().min(20), +}).required(); + +export const UserFeedback = () => { + const [isBusy, setIsBusy] = useState(false); + + 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 = (data) => { + Sentry.captureUserFeedback({ + event_id: 'user_feedback', + name: 'nym', + email: data.email, + comments: data.feedback, + }); + setIsBusy(true); + reset(); + }; + + const handleClose = () => { + setIsBusy(false); + }; + + return ( + + + + Feedback sent successfuly + + + + + + Send us your feedback about the app + +
    + + ( + + )} + name="email" + control={control} + /> + ( + + )} + name="feedback" + control={control} + /> + + +
    +
    +
    +
    + ); +}; diff --git a/nym-connect/desktop/src/pages/menu/reporting/index.tsx b/nym-connect/desktop/src/pages/menu/reporting/index.tsx new file mode 100644 index 0000000000..ccc2c0bd1f --- /dev/null +++ b/nym-connect/desktop/src/pages/menu/reporting/index.tsx @@ -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 = () => ( + + + {menuSchema.map((item) => ( + + + + {item.title} + + + + ))} + + + +); diff --git a/nym-connect/desktop/src/routes/index.tsx b/nym-connect/desktop/src/routes/index.tsx index f1e4b1da67..67bd471460 100644 --- a/nym-connect/desktop/src/routes/index.tsx +++ b/nym-connect/desktop/src/routes/index.tsx @@ -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 = () => { } /> } /> } /> - } /> } /> } /> } /> + + } /> + } /> + } /> + ); diff --git a/yarn.lock b/yarn.lock index 178152e2f1..10f93b7eaf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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" From aaef36a5d79a5e838fc67c1d48398df4b9d03722 Mon Sep 17 00:00:00 2001 From: pierre Date: Thu, 10 Aug 2023 10:48:00 +0200 Subject: [PATCH 06/20] display a notice to enable error reporting first --- .../src/pages/menu/reporting/UserFeedback.tsx | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx b/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx index 1295d2159b..d82ed27d82 100644 --- a/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx +++ b/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx @@ -1,9 +1,11 @@ import React, { useState } from 'react'; -import { Alert, Box, Button, FormControl, Snackbar, Stack, TextField, Typography } from '@mui/material'; -import * as Sentry from '@sentry/browser'; +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; @@ -17,6 +19,7 @@ const schema = object({ export const UserFeedback = () => { const [isBusy, setIsBusy] = useState(false); + const { userData } = useClientContext(); const { handleSubmit, @@ -33,8 +36,9 @@ export const UserFeedback = () => { }); const onSubmit: SubmitHandler = (data) => { + const eventId = Sentry.captureMessage('user feedback'); Sentry.captureUserFeedback({ - event_id: 'user_feedback', + event_id: eventId, name: 'nym', email: data.email, comments: data.feedback, @@ -47,6 +51,20 @@ export const UserFeedback = () => { setIsBusy(false); }; + if (!userData?.monitoring) { + return ( + + + The error reporting option must be enabled in order to report feedback. Turn it on{' '} + + here + + . + + + ); + } + return ( @@ -92,7 +110,7 @@ export const UserFeedback = () => { name="feedback" control={control} /> - From c4c4355a5421646df619deed81b86b94627942eb Mon Sep 17 00:00:00 2001 From: pierre Date: Thu, 10 Aug 2023 11:22:49 +0200 Subject: [PATCH 07/20] add feedback note --- nym-connect/desktop/src/context/main.tsx | 6 ++ .../desktop/src/context/mocks/main.tsx | 2 + .../src/pages/connection/Disconnected.tsx | 76 +++++++++++-------- .../src/pages/menu/reporting/UserFeedback.tsx | 12 +-- 4 files changed, 61 insertions(+), 35 deletions(-) diff --git a/nym-connect/desktop/src/context/main.tsx b/nym-connect/desktop/src/context/main.tsx index 46d3312fac..dfa489d30c 100644 --- a/nym-connect/desktop/src/context/main.tsx +++ b/nym-connect/desktop/src/context/main.tsx @@ -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>; setMonitoring: (value: boolean) => Promise; setPrivacyLevel: (value: PrivacyLevel) => Promise; + setShowFeedbackNote: (value: boolean) => void; }; function getRandomFromList(items: T[]): T { @@ -77,6 +79,7 @@ export const ClientContextProvider: FCWithChildren = ({ children }) => { address: undefined, }); const [userData, setUserData] = useState(); + const [showFeedbackNote, setShowFeedbackNote] = useState(true); const getAppVersion = async () => { const version = await getVersion(); @@ -240,6 +243,7 @@ export const ClientContextProvider: FCWithChildren = ({ children }) => { serviceProviders, connectedSince, userData, + showFeedbackNote, setConnectedSince, setServiceProvider, setGateway, @@ -253,6 +257,7 @@ export const ClientContextProvider: FCWithChildren = ({ children }) => { setUserDefinedSPAddress, setMonitoring, setPrivacyLevel, + setShowFeedbackNote, }), [ mode, @@ -270,6 +275,7 @@ export const ClientContextProvider: FCWithChildren = ({ children }) => { userDefinedGateway, userDefinedSPAddress, userData, + showFeedbackNote, ], ); diff --git a/nym-connect/desktop/src/context/mocks/main.tsx b/nym-connect/desktop/src/context/mocks/main.tsx index 46a5f50298..0b6db34aaf 100644 --- a/nym-connect/desktop/src/context/mocks/main.tsx +++ b/nym-connect/desktop/src/context/mocks/main.tsx @@ -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<{ diff --git a/nym-connect/desktop/src/pages/connection/Disconnected.tsx b/nym-connect/desktop/src/pages/connection/Disconnected.tsx index 127a245d4e..2fe4db5c09 100644 --- a/nym-connect/desktop/src/pages/connection/Disconnected.tsx +++ b/nym-connect/desktop/src/pages/connection/Disconnected.tsx @@ -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,46 @@ export const Disconnected: FCWithChildren<{ serviceProvider?: ServiceProvider; clearError: () => void; onConnectClick: (status: ConnectionStatusKind) => void; -}> = ({ status, error, onConnectClick, clearError }) => ( - <> - {error && } - - - - - } - ConnectButton={} - BottomContent={ - - - You are not protected - - - - } - /> - -); +}> = ({ status, error, onConnectClick, clearError }) => { + const { showFeedbackNote, setShowFeedbackNote } = useClientContext(); + + return ( + <> + {error && } + + + + + } + ConnectButton={} + BottomContent={ + + + You are not protected + + + {showFeedbackNote ? ( + setShowFeedbackNote(false)}> + Help improve NymConnect{' '} + + Send feedback + + + ) : ( + + )} + + } + /> + + ); +}; diff --git a/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx b/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx index d82ed27d82..cec6596e96 100644 --- a/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx +++ b/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx @@ -74,17 +74,16 @@ export const UserFeedback = () => { - + Send us your feedback about the app
    - + ( { name="email" control={control} /> + + ( { name="feedback" control={control} /> + + - +
    From d57e8efff25f3d7feadea83219d3d63b32185f90 Mon Sep 17 00:00:00 2001 From: pierre Date: Thu, 10 Aug 2023 16:10:46 +0200 Subject: [PATCH 08/20] revert upstream changes --- .../community-applications-and-guides.md | 4 ++-- .../images/profile_picture/minibolt_pp.png | Bin 23061 -> 13877 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/dev-portal/src/community-resources/community-applications-and-guides.md b/documentation/dev-portal/src/community-resources/community-applications-and-guides.md index cd89113896..90e0801e80 100644 --- a/documentation/dev-portal/src/community-resources/community-applications-and-guides.md +++ b/documentation/dev-portal/src/community-resources/community-applications-and-guides.md @@ -85,9 +85,9 @@ We love seeing our developer community create applications using Nym. If you wou -## MiniBolt +## Minibolt -> Proxies the clearnet connections of a Bitcoin node and its associated tools using the NYM mixnet! +> Anonymize your p2p inventory messages and mempool for your Bitcoin & Lightning full nodes on consumer PCs! * [Github](https://github.com/minibolt-guide/minibolt) * [Documentation](https://v2.minibolt.info/bonus-guides/system/nym-mixnet#proxying-bitcoin-core) diff --git a/documentation/dev-portal/src/images/profile_picture/minibolt_pp.png b/documentation/dev-portal/src/images/profile_picture/minibolt_pp.png index 455243cc221e6350d5575ccc8cd8c9461cc672f4..ed059e6055840dcd148f5760efc06b2eb5e331d9 100644 GIT binary patch literal 13877 zcmV-5HpL{T8P z03<-{jo#49+uys(IcNU3_jNx24UhyHASv+_y889&#(npm@A>VUu-5Wpv-tYm={k2si~io&o;&+W=pG>U;=z7_;<7e;eS}xT+bTk6Z_~d%f174CpUpGW>0TFGH=L z%7CrBMfHMu2K4X0S*ZHW0Ps%WH-KN|$7_8id#*PWX!!=S;zxm#KZf9vJ=4kT8LK~O z06&tQ?7zp4|N48`vp({Zz@iUi^64&qGS{I@&v^F7k%E5%IQSC`F4?mm%=Y5PhJt_6 zsrC(}=Ic$tpCa}8ybbQg)ckn1M{h}h9|eBzEo{@?h*in<=+U
  • {J-bRK*gzt^>% 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 DYWw7D literal 23061 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 From 0e37c572f02aad3c81010ce3d67a26654ebb1115 Mon Sep 17 00:00:00 2001 From: mx <33262279+mfahampshire@users.noreply.github.com> Date: Fri, 11 Aug 2023 08:53:12 +0000 Subject: [PATCH 09/20] Update ci-dev.yml added workflow_dispatch --- .github/workflows/ci-dev.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci-dev.yml b/.github/workflows/ci-dev.yml index 82068fce76..80688c2ccc 100644 --- a/.github/workflows/ci-dev.yml +++ b/.github/workflows/ci-dev.yml @@ -1,6 +1,7 @@ name: CI dev-portal on: + workflow_dispatch: push: branches-ignore: master paths: From af51ab3f71ffed544626df173d4b55bc8bbefa9d Mon Sep 17 00:00:00 2001 From: pierre Date: Fri, 11 Aug 2023 11:55:01 +0200 Subject: [PATCH 10/20] add max chars limit to feedback text --- nym-connect/desktop/src/pages/connection/Disconnected.tsx | 3 ++- nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/nym-connect/desktop/src/pages/connection/Disconnected.tsx b/nym-connect/desktop/src/pages/connection/Disconnected.tsx index 2fe4db5c09..33df98c90e 100644 --- a/nym-connect/desktop/src/pages/connection/Disconnected.tsx +++ b/nym-connect/desktop/src/pages/connection/Disconnected.tsx @@ -51,7 +51,8 @@ export const Disconnected: FCWithChildren<{ {showFeedbackNote ? ( setShowFeedbackNote(false)}> - Help improve NymConnect{' '} + Help improve NymConnect +
    Send feedback diff --git a/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx b/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx index cec6596e96..67b37fcc5f 100644 --- a/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx +++ b/nym-connect/desktop/src/pages/menu/reporting/UserFeedback.tsx @@ -14,7 +14,7 @@ type FormValues = { const schema = object({ email: string().email(), - feedback: string().required().min(20), + feedback: string().required().min(20).max(512), }).required(); export const UserFeedback = () => { From 9a5ce73dfd9f2407496c08dad7f73b499a3e4f71 Mon Sep 17 00:00:00 2001 From: pierre Date: Fri, 11 Aug 2023 12:23:44 +0200 Subject: [PATCH 11/20] close send feedback modal on click --- nym-connect/desktop/src/pages/connection/Disconnected.tsx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/nym-connect/desktop/src/pages/connection/Disconnected.tsx b/nym-connect/desktop/src/pages/connection/Disconnected.tsx index 33df98c90e..00e51b9221 100644 --- a/nym-connect/desktop/src/pages/connection/Disconnected.tsx +++ b/nym-connect/desktop/src/pages/connection/Disconnected.tsx @@ -53,7 +53,13 @@ export const Disconnected: FCWithChildren<{ setShowFeedbackNote(false)}> Help improve NymConnect
    - + setShowFeedbackNote(false)} + component={RouterLink} + color="secondary" + underline="hover" + > Send feedback
    From c81a5ac0028514004b82db73ab6f01acbcfe48ba Mon Sep 17 00:00:00 2001 From: Fouad Date: Mon, 14 Aug 2023 09:42:27 +0100 Subject: [PATCH 12/20] Reset gateway performance on disconnect (#3620) * rest gateway performance on disconnect * update mobile context --- nym-connect/desktop/src/context/main.tsx | 6 ++++++ nym-connect/mobile/src/context/main.tsx | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/nym-connect/desktop/src/context/main.tsx b/nym-connect/desktop/src/context/main.tsx index dfa489d30c..ba6377e90b 100644 --- a/nym-connect/desktop/src/context/main.tsx +++ b/nym-connect/desktop/src/context/main.tsx @@ -164,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); diff --git a/nym-connect/mobile/src/context/main.tsx b/nym-connect/mobile/src/context/main.tsx index b999b957a2..10f6525685 100644 --- a/nym-connect/mobile/src/context/main.tsx +++ b/nym-connect/mobile/src/context/main.tsx @@ -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); } From d0ba4056d682881fcbfaf9b342136372544a5c35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Stuczy=C5=84ski?= Date: Fri, 11 Aug 2023 10:15:55 +0100 Subject: [PATCH 13/20] 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 --- .github/workflows/check-contract-schema.yml | 12 +++++++++--- .../src/nyxd/cosmwasm_client/client.rs | 5 +++++ .../src/spend_credential.rs | 2 ++ .../mixnet-contract/src/interval.rs | 4 ++++ .../mixnet-contract/src/mixnode.rs | 2 ++ .../mixnet-contract/src/pending_events.rs | 9 +++++++++ .../vesting-contract/src/types.rs | 5 +++++ 7 files changed, 36 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check-contract-schema.yml b/.github/workflows/check-contract-schema.yml index 700440bdd5..6de645dfa5 100644 --- a/.github/workflows/check-contract-schema.yml +++ b/.github/workflows/check-contract-schema.yml @@ -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 diff --git a/common/client-libs/validator-client/src/nyxd/cosmwasm_client/client.rs b/common/client-libs/validator-client/src/nyxd/cosmwasm_client/client.rs index 4a512a02db..9ca497e1c8 100644 --- a/common/client-libs/validator-client/src/nyxd/cosmwasm_client/client.rs +++ b/common/client-libs/validator-client/src/nyxd/cosmwasm_client/client.rs @@ -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)?) } diff --git a/common/cosmwasm-smart-contracts/coconut-bandwidth-contract/src/spend_credential.rs b/common/cosmwasm-smart-contracts/coconut-bandwidth-contract/src/spend_credential.rs index d8fc108d14..835d6175de 100644 --- a/common/cosmwasm-smart-contracts/coconut-bandwidth-contract/src/spend_credential.rs +++ b/common/cosmwasm-smart-contracts/coconut-bandwidth-contract/src/spend_credential.rs @@ -39,7 +39,9 @@ impl SpendCredentialData { #[cw_serde] #[derive(Copy)] pub enum SpendCredentialStatus { + #[serde(alias = "InProgress")] InProgress, + #[serde(alias = "Spent")] Spent, } diff --git a/common/cosmwasm-smart-contracts/mixnet-contract/src/interval.rs b/common/cosmwasm-smart-contracts/mixnet-contract/src/interval.rs index cee4cf02be..6352c138c6 100644 --- a/common/cosmwasm-smart-contracts/mixnet-contract/src/interval.rs +++ b/common/cosmwasm-smart-contracts/mixnet-contract/src/interval.rs @@ -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, } diff --git a/common/cosmwasm-smart-contracts/mixnet-contract/src/mixnode.rs b/common/cosmwasm-smart-contracts/mixnet-contract/src/mixnode.rs index 676098fce6..a09d21dd2d 100644 --- a/common/cosmwasm-smart-contracts/mixnet-contract/src/mixnode.rs +++ b/common/cosmwasm-smart-contracts/mixnet-contract/src/mixnode.rs @@ -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, } diff --git a/common/cosmwasm-smart-contracts/mixnet-contract/src/pending_events.rs b/common/cosmwasm-smart-contracts/mixnet-contract/src/pending_events.rs index 595839c99f..fd681cbed4 100644 --- a/common/cosmwasm-smart-contracts/mixnet-contract/src/pending_events.rs +++ b/common/cosmwasm-smart-contracts/mixnet-contract/src/pending_events.rs @@ -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, diff --git a/common/cosmwasm-smart-contracts/vesting-contract/src/types.rs b/common/cosmwasm-smart-contracts/vesting-contract/src/types.rs index 60fd3c0aea..e4c1644a94 100644 --- a/common/cosmwasm-smart-contracts/vesting-contract/src/types.rs +++ b/common/cosmwasm-smart-contracts/vesting-contract/src/types.rs @@ -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 } From cc3cfbfdc1c306b772d8a0c5e4abcba9d403a71e Mon Sep 17 00:00:00 2001 From: Tommy Verrall Date: Wed, 16 Aug 2023 10:31:42 +0200 Subject: [PATCH 14/20] updating the change logs and relevant versions --- CHANGELOG.md | 12 ++++++++++++ Cargo.lock | 18 +++++++++--------- clients/native/Cargo.toml | 2 +- clients/socks5/Cargo.toml | 2 +- contracts/CHANGELOG.md | 8 +++++++- contracts/Cargo.lock | 10 ++-------- contracts/mixnet/Cargo.toml | 2 +- .../mixnet/schema/nym-mixnet-contract.json | 2 +- contracts/vesting/Cargo.toml | 2 +- explorer-api/Cargo.toml | 2 +- gateway/Cargo.toml | 2 +- mixnode/Cargo.toml | 2 +- nym-api/Cargo.toml | 2 +- nym-connect/desktop/CHANGELOG.md | 8 ++++++++ nym-connect/desktop/package.json | 4 ++-- nym-connect/desktop/src-tauri/Cargo.toml | 2 +- nym-connect/desktop/src-tauri/tauri.conf.json | 2 +- service-providers/network-requester/Cargo.toml | 2 +- .../network-statistics/Cargo.toml | 2 +- tools/nym-cli/Cargo.toml | 2 +- 20 files changed, 54 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ec4a60145..19988720df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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]) diff --git a/Cargo.lock b/Cargo.lock index 85ff104b27..dc35e48057 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/clients/native/Cargo.toml b/clients/native/Cargo.toml index 2135883752..e950db03ba 100644 --- a/clients/native/Cargo.toml +++ b/clients/native/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-client" -version = "1.1.24" +version = "1.1.25" authors = ["Dave Hrycyszyn ", "Jędrzej Stuczyński "] description = "Implementation of the Nym Client" edition = "2021" diff --git a/clients/socks5/Cargo.toml b/clients/socks5/Cargo.toml index afbf36178f..3e22c2f148 100644 --- a/clients/socks5/Cargo.toml +++ b/clients/socks5/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-socks5-client" -version = "1.1.24" +version = "1.1.25" authors = ["Dave Hrycyszyn "] description = "A SOCKS5 localhost proxy that converts incoming messages to Sphinx and sends them to a Nym address" edition = "2021" diff --git a/contracts/CHANGELOG.md b/contracts/CHANGELOG.md index ffa2dba525..dbad30e829 100644 --- a/contracts/CHANGELOG.md +++ b/contracts/CHANGELOG.md @@ -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]) diff --git a/contracts/Cargo.lock b/contracts/Cargo.lock index 0f56b6f7a9..13aa9a916d 100644 --- a/contracts/Cargo.lock +++ b/contracts/Cargo.lock @@ -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", diff --git a/contracts/mixnet/Cargo.toml b/contracts/mixnet/Cargo.toml index 999ef93c8b..a50d9c789a 100644 --- a/contracts/mixnet/Cargo.toml +++ b/contracts/mixnet/Cargo.toml @@ -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 } diff --git a/contracts/mixnet/schema/nym-mixnet-contract.json b/contracts/mixnet/schema/nym-mixnet-contract.json index 22cf2a118d..37cbc9ba65 100644 --- a/contracts/mixnet/schema/nym-mixnet-contract.json +++ b/contracts/mixnet/schema/nym-mixnet-contract.json @@ -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#", diff --git a/contracts/vesting/Cargo.toml b/contracts/vesting/Cargo.toml index 5998e5d773..f90cacd891 100644 --- a/contracts/vesting/Cargo.toml +++ b/contracts/vesting/Cargo.toml @@ -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 } diff --git a/explorer-api/Cargo.toml b/explorer-api/Cargo.toml index 04e7255d01..df5f0cf1b5 100644 --- a/explorer-api/Cargo.toml +++ b/explorer-api/Cargo.toml @@ -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 diff --git a/gateway/Cargo.toml b/gateway/Cargo.toml index 007fcca40d..589c65ec8f 100644 --- a/gateway/Cargo.toml +++ b/gateway/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "nym-gateway" -version = "1.1.24" +version = "1.1.25" authors = [ "Dave Hrycyszyn ", "Jędrzej Stuczyński ", diff --git a/mixnode/Cargo.toml b/mixnode/Cargo.toml index 8421bebb3a..a670dd4f81 100644 --- a/mixnode/Cargo.toml +++ b/mixnode/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "nym-mixnode" -version = "1.1.25" +version = "1.1.26" authors = [ "Dave Hrycyszyn ", "Jędrzej Stuczyński ", diff --git a/nym-api/Cargo.toml b/nym-api/Cargo.toml index 50568b440a..758e190be0 100644 --- a/nym-api/Cargo.toml +++ b/nym-api/Cargo.toml @@ -3,7 +3,7 @@ [package] name = "nym-api" -version = "1.1.25" +version = "1.1.26" authors = [ "Dave Hrycyszyn ", "Jędrzej Stuczyński ", diff --git a/nym-connect/desktop/CHANGELOG.md b/nym-connect/desktop/CHANGELOG.md index 8a0b86151a..13f449269e 100644 --- a/nym-connect/desktop/CHANGELOG.md +++ b/nym-connect/desktop/CHANGELOG.md @@ -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]) diff --git a/nym-connect/desktop/package.json b/nym-connect/desktop/package.json index 2c374a6997..30612c08fe 100644 --- a/nym-connect/desktop/package.json +++ b/nym-connect/desktop/package.json @@ -1,6 +1,6 @@ { "name": "@nym/nym-connect", - "version": "1.1.16", + "version": "1.1.17", "main": "index.js", "license": "MIT", "scripts": { @@ -115,4 +115,4 @@ "webpack-merge": "^5.8.0", "yaml-loader": "^0.8.0" } -} +} \ No newline at end of file diff --git a/nym-connect/desktop/src-tauri/Cargo.toml b/nym-connect/desktop/src-tauri/Cargo.toml index 0d1089132d..65c0315bc8 100644 --- a/nym-connect/desktop/src-tauri/Cargo.toml +++ b/nym-connect/desktop/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-connect" -version = "1.1.16" +version = "1.1.17" description = "nym-connect" authors = ["Nym Technologies SA"] license = "" diff --git a/nym-connect/desktop/src-tauri/tauri.conf.json b/nym-connect/desktop/src-tauri/tauri.conf.json index 5f5e86bec0..c015cf383c 100644 --- a/nym-connect/desktop/src-tauri/tauri.conf.json +++ b/nym-connect/desktop/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "package": { "productName": "nym-connect", - "version": "1.1.16" + "version": "1.1.17" }, "build": { "distDir": "../dist", diff --git a/service-providers/network-requester/Cargo.toml b/service-providers/network-requester/Cargo.toml index d1d7367d85..a7b2f416c6 100644 --- a/service-providers/network-requester/Cargo.toml +++ b/service-providers/network-requester/Cargo.toml @@ -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" diff --git a/service-providers/network-statistics/Cargo.toml b/service-providers/network-statistics/Cargo.toml index 7c0138ca8f..8c5d7784f0 100644 --- a/service-providers/network-statistics/Cargo.toml +++ b/service-providers/network-statistics/Cargo.toml @@ -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 diff --git a/tools/nym-cli/Cargo.toml b/tools/nym-cli/Cargo.toml index 9f3c0d6a2a..a693b9aa12 100644 --- a/tools/nym-cli/Cargo.toml +++ b/tools/nym-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-cli" -version = "1.1.24" +version = "1.1.25" authors.workspace = true edition = "2021" From 852e1ace7ed3c0d42f4e5bc9f6846436d4ec461e Mon Sep 17 00:00:00 2001 From: Tommy Verrall Date: Wed, 16 Aug 2023 10:58:33 +0200 Subject: [PATCH 15/20] stage vesting schema change --- contracts/vesting/schema/nym-vesting-contract.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/vesting/schema/nym-vesting-contract.json b/contracts/vesting/schema/nym-vesting-contract.json index 87967fb410..b091be7f12 100644 --- a/contracts/vesting/schema/nym-vesting-contract.json +++ b/contracts/vesting/schema/nym-vesting-contract.json @@ -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#", From d33d9d44099694e422df4100fcd5cf46e87df928 Mon Sep 17 00:00:00 2001 From: Tommy Verrall <60836166+tommyv1987@users.noreply.github.com> Date: Wed, 16 Aug 2023 11:15:15 +0200 Subject: [PATCH 16/20] update package.json for windows build --- package.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/package.json b/package.json index 523db5363f..bb8cd492ab 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,6 @@ "ts-packages/*", "nym-wallet", "nym-connect/**", - "nym-browser-extension", "explorer", "types", "clients/validator" @@ -30,8 +29,7 @@ "types:lint:fix": "lerna run lint:fix --scope @nymproject/types --scope @nymproject/nym-wallet-app", "audit:fix": "npm_config_yes=true npx yarn-audit-fix -- --dry-run", "preinstall": "yarn install:copy-placeholders && yarn install:copy-storage-placeholders", - "install:copy-placeholders": "cp scripts/build/yarn/wasm-placeholder/package.json sdk/typescript/packages/nym-client-wasm", - "install:copy-storage-placeholders": "mkdir -p nym-browser-extension/storage/pkg && cp scripts/build/yarn/storage-placeholder/package.json nym-browser-extension/storage/pkg" + "install:copy-placeholders": "cp scripts/build/yarn/wasm-placeholder/package.json sdk/typescript/packages/nym-client-wasm" }, "devDependencies": { "lerna": "^6.6.2", From e9789681cc4ba8023f58b7fa6879b8a91f7db2e9 Mon Sep 17 00:00:00 2001 From: Tommy Verrall <60836166+tommyv1987@users.noreply.github.com> Date: Wed, 16 Aug 2023 11:20:04 +0200 Subject: [PATCH 17/20] update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bb8cd492ab..cad6eaf88d 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "tsc": "lerna run tsc --stream", "types:lint:fix": "lerna run lint:fix --scope @nymproject/types --scope @nymproject/nym-wallet-app", "audit:fix": "npm_config_yes=true npx yarn-audit-fix -- --dry-run", - "preinstall": "yarn install:copy-placeholders && yarn install:copy-storage-placeholders", + "preinstall": "yarn install:copy-placeholders", "install:copy-placeholders": "cp scripts/build/yarn/wasm-placeholder/package.json sdk/typescript/packages/nym-client-wasm" }, "devDependencies": { From 55bf5ce5b0291d5b6e88e6366b19b58b81d06d27 Mon Sep 17 00:00:00 2001 From: Tommy Verrall Date: Wed, 16 Aug 2023 11:36:41 +0200 Subject: [PATCH 18/20] change version to minor in the update files --- contracts/Cargo.lock | 2 +- contracts/vesting/Cargo.toml | 2 +- contracts/vesting/schema/nym-vesting-contract.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/Cargo.lock b/contracts/Cargo.lock index 13aa9a916d..a790f12047 100644 --- a/contracts/Cargo.lock +++ b/contracts/Cargo.lock @@ -1420,7 +1420,7 @@ dependencies = [ [[package]] name = "nym-vesting-contract" -version = "1.5.0" +version = "1.4.1" dependencies = [ "base64 0.21.0", "cosmwasm-crypto", diff --git a/contracts/vesting/Cargo.toml b/contracts/vesting/Cargo.toml index f90cacd891..053aeedd15 100644 --- a/contracts/vesting/Cargo.toml +++ b/contracts/vesting/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nym-vesting-contract" -version = "1.5.0" +version = "1.4.1" description = "Nym vesting contract" edition = { workspace = true } authors = { workspace = true } diff --git a/contracts/vesting/schema/nym-vesting-contract.json b/contracts/vesting/schema/nym-vesting-contract.json index b091be7f12..6dd3678fd3 100644 --- a/contracts/vesting/schema/nym-vesting-contract.json +++ b/contracts/vesting/schema/nym-vesting-contract.json @@ -1,6 +1,6 @@ { "contract_name": "nym-vesting-contract", - "contract_version": "1.5.0", + "contract_version": "1.4.1", "idl_version": "1.0.0", "instantiate": { "$schema": "http://json-schema.org/draft-07/schema#", From a97004b6e0c99321ebd4f91bf004d31f2ce22caf Mon Sep 17 00:00:00 2001 From: Tommy Verrall <60836166+tommyv1987@users.noreply.github.com> Date: Wed, 16 Aug 2023 11:42:00 +0200 Subject: [PATCH 19/20] update contracts-build.yml needs to use 1.69.0 to build contracts --- .github/workflows/contracts-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/contracts-build.yml b/.github/workflows/contracts-build.yml index f44f291f1b..8a0a5d4122 100644 --- a/.github/workflows/contracts-build.yml +++ b/.github/workflows/contracts-build.yml @@ -14,7 +14,7 @@ jobs: - name: Install Rust stable uses: actions-rs/toolchain@v1 with: - toolchain: stable + toolchain: 1.69.0 target: wasm32-unknown-unknown override: true components: rustfmt, clippy From 53b653d9cfac1d7ba252ee6c5b866aa804ca1997 Mon Sep 17 00:00:00 2001 From: Tommy Verrall Date: Wed, 16 Aug 2023 15:45:19 +0200 Subject: [PATCH 20/20] revert package json change --- package.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index cad6eaf88d..a18fc8c35a 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "ts-packages/*", "nym-wallet", "nym-connect/**", + "nym-browser-extension", "explorer", "types", "clients/validator" @@ -28,11 +29,12 @@ "tsc": "lerna run tsc --stream", "types:lint:fix": "lerna run lint:fix --scope @nymproject/types --scope @nymproject/nym-wallet-app", "audit:fix": "npm_config_yes=true npx yarn-audit-fix -- --dry-run", - "preinstall": "yarn install:copy-placeholders", - "install:copy-placeholders": "cp scripts/build/yarn/wasm-placeholder/package.json sdk/typescript/packages/nym-client-wasm" + "preinstall": "yarn install:copy-placeholders && yarn install:copy-storage-placeholders", + "install:copy-placeholders": "cp scripts/build/yarn/wasm-placeholder/package.json sdk/typescript/packages/nym-client-wasm", + "install:copy-storage-placeholders": "mkdir -p nym-browser-extension/storage/pkg && cp scripts/build/yarn/storage-placeholder/package.json nym-browser-extension/storage/pkg" }, "devDependencies": { "lerna": "^6.6.2", "npm-run-all": "^4.1.5" } -} +} \ No newline at end of file