diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f9361011d..d38173e7d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -59,6 +59,7 @@ jobs: AIRDROP_BASE_URL: ${{ secrets.BETA_AIRDROP_BASE_URL }} AIRDROP_API_BASE_URL: ${{ secrets.BETA_AIRDROP_API_BASE_URL }} AIRDROP_TWITTER_AUTH_URL: ${{ secrets.BETA_AIRDROP_TWITTER_AUTH_URL }} + AIRDROP_WEBSOCKET_CRYPTO_KEY: ${{ secrets.DEV_AIRDROP_WEBSOCKET_CRYPTO_KEY }} shell: bash run: | #set -xueo pipefail @@ -67,6 +68,7 @@ jobs: echo "AIRDROP_BASE_URL=${{ env.AIRDROP_BASE_URL }}" >> $GITHUB_ENV echo "AIRDROP_API_BASE_URL=${{ env.AIRDROP_API_BASE_URL }}" >> $GITHUB_ENV echo "AIRDROP_TWITTER_AUTH_URL=${{ env.AIRDROP_TWITTER_AUTH_URL }}" >> $GITHUB_ENV + echo "AIRDROP_WEBSOCKET_CRYPTO_KEY=${{ env.AIRDROP_WEBSOCKET_CRYPTO_KEY }}" >> $GITHUB_ENV echo "TS_FEATURES=release-ci-beta, airdrop-env" >> $GITHUB_ENV # numeric-only and cannot be greater than 65535 for msi target export BETA_DATE=$(date +%m%d) @@ -85,6 +87,8 @@ jobs: - name: RELEASE Builds - Set environment variables if: ${{ startsWith(github.ref, 'refs/heads/release') }} + env: + AIRDROP_WEBSOCKET_CRYPTO_KEY: ${{ secrets.PROD_AIRDROP_WEBSOCKET_CRYPTO_KEY }} shell: bash run: | #set -xueo pipefail @@ -94,12 +98,14 @@ jobs: #echo "releaseId=" >> $GITHUB_ENV echo "TARI_NETWORK=nextnet" >> $GITHUB_ENV echo "TARI_TARGET_NETWORK=nextnet" >> $GITHUB_ENV + echo "AIRDROP_WEBSOCKET_CRYPTO_KEY=${{ env.AIRDROP_WEBSOCKET_CRYPTO_KEY }}" >> $GITHUB_ENV cd "${GITHUB_WORKSPACE}/src-tauri" + TU_VERSION=$(jq -r .version tauri.conf.json) # Don't mess with the double quotes and inner escaped quotes yq eval ".productName = \"Tari Universe\"" -i tauri.conf.json yq eval ".mainBinaryName = \"Tari Universe\"" -i tauri.conf.json - yq eval ".app.windows[0].title = \"Tari Universe | Testnet\"" -i tauri.conf.json - yq eval ".app.windows[1].title = \"Tari Universe | Testnet\"" -i tauri.conf.json + yq eval ".app.windows[0].title = \"Tari Universe v${TU_VERSION} | Testnet\"" -i tauri.conf.json + yq eval ".app.windows[1].title = \"Tari Universe v${TU_VERSION} | Testnet\"" -i tauri.conf.json yq eval ".identifier = \"com.tari.universe\"" -i tauri.conf.json yq eval ".plugins.updater.endpoints = [\"https://raw.githubusercontent.com/tari-project/universe/main/.updater/latest.json\", \"https://cdn-universe.tari.com/tari-project/universe/updater/latest.json\"]" \ -i tauri.conf.json diff --git a/.updater/alpha-latest.json b/.updater/alpha-latest.json index a1b9cd417..8d38106d7 100644 --- a/.updater/alpha-latest.json +++ b/.updater/alpha-latest.json @@ -1,23 +1,23 @@ { - "version": "0.8.24", + "version": "0.8.30", "notes": "Tari Universe - See the assets to download this version and install", - "pub_date": "2024-12-13T16:13:58.065Z", + "pub_date": "2024-12-19T14:07:35.303Z", "platforms": { - "linux-x86_64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGRCS1A5K3c3cVlxYlFXWXgrdCt1L0s2NWcwUGJzaEZ1RXpScnpQMTM5S05va3NDcjFDWmp3TTRNYXFDb1RVSkI1eGZiNWpDUUZYZkx5NVE3aGRyQUFnPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0MTA0MTcxCWZpbGU6VGFyaSBVbml2ZXJzZV8wLjguMjRfYW1kNjQuQXBwSW1hZ2UKL3d4aTJzMHNoeFVwdmpTMU5QV2tnY0tMM1VHaXI3L2tobXJybnVFWFJTN0JjUjlTNTFZUXVsQWx1OFA2OXNOTGFHWkFvcHBrSkMyUnk3K1ZSc0hhQUE9PQo=", - "url": "https://github.com/tari-project/universe/releases/download/v0.8.24/Tari.Universe_0.8.24_amd64.AppImage" - }, - "windows-x86_64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGRRRU13V255QmZ1TnQ1YW9XeitIQjBrcE1iOHJHMEwvbXRIKzR2bHNJSUtReSt5YlJkU1lSZ3hRS21CeWJXejlHRnZJSTdjeG4wbVZBSGJoNGxVcXdvPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0MTA1MTQ4CWZpbGU6VGFyaSBVbml2ZXJzZV8wLjguMjRfeDY0X2VuLVVTLm1zaS56aXAKQzQzcThJdkJ1Q053cmhDVnVlVEo1MnNtdWZTV2QySmc3ZTVHL0Jaakt0Qk5tY1U1L0tONGdUaGFqNzRROHBZTTlwdXJsSjhMT3lHQXNGMFVPSjdqRHc9PQo=", - "url": "https://github.com/tari-project/universe/releases/download/v0.8.24/Tari.Universe_0.8.24_x64_en-US.msi.zip" - }, "darwin-aarch64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGJYNTgvNEZaVzdKMWN5akZYZDBUdXlYeUREbWtzeHdoRFdzQzMyWnpINEs1M3VQMHVVU0F5NUIrMnp5YmwwUUdReEJzLzVIbGdzMlZxaENFNktSQWdFPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0MTA2NDA4CWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CnM2OHdiMlphckxET0NtVDhmVUp5alR3YXpoNW1Xa3BWTERraXBIT1VzdERYbFYvOEE4NjhFOHZrVVFvbUtvZkdTeWpYeUY2bUJQQlZwTm96bEl2RER3PT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.8.24/Tari.Universe_universal.app.tar.gz" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFVFRkw3Y1VlbVZXekpXWFpPNWNkZ0wwU0hxMXZlRFlXL1FVbmtvdGpCRmJjQkJXV3FWUmtMalhnTmNRRitSRS9TQ0F3MFVGQjdINm44VW1ObjIyZFFFPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0NjEwNjc0CWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CjdEeEhwd1Y2VE5GdmUxQnBjcEV1ZkRTM2VoN1dCclVEN1RxUWhPY2s4OFVLZ0NFQnIwcld4aHhBZEdBc1JrOCt5QXVDS1huaitLUzJENU40ZUExT0FRPT0K", + "url": "https://github.com/tari-project/universe/releases/download/v0.8.30/Tari.Universe_universal.app.tar.gz" }, "darwin-x86_64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGJYNTgvNEZaVzdKMWN5akZYZDBUdXlYeUREbWtzeHdoRFdzQzMyWnpINEs1M3VQMHVVU0F5NUIrMnp5YmwwUUdReEJzLzVIbGdzMlZxaENFNktSQWdFPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0MTA2NDA4CWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CnM2OHdiMlphckxET0NtVDhmVUp5alR3YXpoNW1Xa3BWTERraXBIT1VzdERYbFYvOEE4NjhFOHZrVVFvbUtvZkdTeWpYeUY2bUJQQlZwTm96bEl2RER3PT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.8.24/Tari.Universe_universal.app.tar.gz" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFVFRkw3Y1VlbVZXekpXWFpPNWNkZ0wwU0hxMXZlRFlXL1FVbmtvdGpCRmJjQkJXV3FWUmtMalhnTmNRRitSRS9TQ0F3MFVGQjdINm44VW1ObjIyZFFFPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0NjEwNjc0CWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CjdEeEhwd1Y2VE5GdmUxQnBjcEV1ZkRTM2VoN1dCclVEN1RxUWhPY2s4OFVLZ0NFQnIwcld4aHhBZEdBc1JrOCt5QXVDS1huaitLUzJENU40ZUExT0FRPT0K", + "url": "https://github.com/tari-project/universe/releases/download/v0.8.30/Tari.Universe_universal.app.tar.gz" + }, + "windows-x86_64": { + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFZEZXl2d0FUQTEyNlZteENvTzNHdy9NUTN0a0Q5bmlQL1NPVm9xMld6aFNuYkd2c0hHZ0RKaHVwRDRsMkxVaDFPMTExZlBaTTNKT0tQV1FUbzNHOUF3PQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0NjExMzEyCWZpbGU6VGFyaSBVbml2ZXJzZV8wLjguMzBfeDY0X2VuLVVTLm1zaS56aXAKVXZCQ0wyYldRNUFoZWtqMGNwT1hqcE8wRS9aT1k1aTV6K1RoRmxaYWtrMzNOR1gwL2JKMnNLV3dDNjdXQUg1bVdITmV5bmhGVU9tUWFlRGR0cTNiREE9PQo=", + "url": "https://github.com/tari-project/universe/releases/download/v0.8.30/Tari.Universe_0.8.30_x64_en-US.msi.zip" + }, + "linux-x86_64": { + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFJWL0dXby9vRDltWG9OQjNwcnBpQ3hIRnhaUkRmT09BSnBBSThaakh3TUg3R0dzN1BaZnRZZnh1cWJPaXRiSk9rSWZGaHF2UVkwWDViQnNaUmlYUmdzPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0NjE3MjE5CWZpbGU6VGFyaSBVbml2ZXJzZV8wLjguMzBfYW1kNjQuQXBwSW1hZ2UKQWcwMmdsUHRpVEhkbU0xeXN3bFR6WGM2RzM4L2hwTFdOL1o3SDMxMUdKZDZiTmZiY3ZINEZPN1AwTk8vL0MvMkJJZEREV0wrNnFsZmhZWlQ5N3VYRHc9PQo=", + "url": "https://github.com/tari-project/universe/releases/download/v0.8.30/Tari.Universe_0.8.30_amd64.AppImage" } } } \ No newline at end of file diff --git a/.updater/latest.json b/.updater/latest.json index d8a69379d..2ca03c0c1 100644 --- a/.updater/latest.json +++ b/.updater/latest.json @@ -1,23 +1,23 @@ { - "version": "0.8.14", + "version": "0.8.27", "notes": "Tari Universe - See the assets to download this version and install", - "pub_date": "2024-12-12T15:32:52.685Z", + "pub_date": "2024-12-18T11:30:40.243Z", "platforms": { "linux-x86_64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOFdxc25aNzUzc3NiY1NWelVhWkZpSCtrdFU3dlpLR0dGOGdaTVF3b0FMUXpubWFaRkNTeFN1bk5zQ0lNQzBnVWdJS1lUdlNkR3dxWGlaNDJDYkdBM0EwPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0MDE2NTg4CWZpbGU6dGFyaS11bml2ZXJzZV8wLjguMTRfYW1kNjQuQXBwSW1hZ2UudGFyLmd6CjdieFJvcXJzanl5UGtBeVAzMXF5NlhVNktPb2F1RWliTDI0QUEzQW9VSUVVeitNQVd3VCtQL2EraHRvbU5veDhjaCs1VXJIWUlFaEMwY25LREM0TENRPT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.8.14/tari-universe_0.8.14_amd64.AppImage.tar.gz" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGJtOWdzNXVaUEZSekNtNUt4MUtkZGU3M2IxSm1FaGxQM2g0QmJKT0tsaUd5aWVkTkJhM2U5bER3VVlnbmh1a2RjbGhiUGZlTFpaV1JaK2pYcFQ5UVFFPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0NTE5MjQ4CWZpbGU6VGFyaSBVbml2ZXJzZV8wLjguMjdfYW1kNjQuQXBwSW1hZ2UKUXlzZmZDbW5BRk91SXY1TXZmcVQ2dGkzdUs1ZDlER3djNHF2cjYwaEVRVnRYRXJYckN4UzBvRkhQMDZsYkg3bjdPV2FwaE00TS93L0t4V0hpYnFXQVE9PQo=", + "url": "https://github.com/tari-project/universe/releases/download/v0.8.27/Tari.Universe_0.8.27_amd64.AppImage" + }, + "windows-x86_64": { + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGFNZ3JMb0hhd0JHUmxtU0xWbEhlRmM4ZkVjRGlLSE1wcXB1MlIxbDcyZ2FWNTRHYXc3TkllQWYrK3ZCaDcxY2V6LzlzMHk2VldlbVhCOXRrZFUzK0FnPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0NTIwMTYyCWZpbGU6VGFyaSBVbml2ZXJzZV8wLjguMjdfeDY0X2VuLVVTLm1zaS56aXAKY2J0QzUycXBXR3hzWmxwMUNZUUcwQTRtZm5naW41bnQzQmozM1B6YVZuKzZGYm5NZ0J6SG12dGxEanFpcWRGZWsrSWZUUXRNSFhKOTNQRFc0OGxVQXc9PQo=", + "url": "https://github.com/tari-project/universe/releases/download/v0.8.27/Tari.Universe_0.8.27_x64_en-US.msi.zip" }, "darwin-aarch64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGRXWnord2poTnQ3RnVoRkhuSjJjVTVydWhGbU1MVzh5V3dSWTNXN25BTzM5RWs1ZWMwRDBzQzh3bUwzZ3IrVWg5T3RQWml1ZWR4azg3bldqL29xVGdJPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0MDE3MTMxCWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6Ck9LSzJDSEQ3ZFFPZ2RFa3RCaTUzT2VNUVNEN2toSUJjR1FoTmVQcjYrcFl3N3NPZmhMeUtRekFrd3p2MkIwYy84V3c3cG5ONXAzRFQvWTdMZjYxTEFnPT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.8.14/Tari.Universe_universal.app.tar.gz" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGJyK2lyWmN5MlpFV3U5dFlZWk9oVS9yMUFFaXVxU29kK1NXR0crYzRWSXE2aDlCOVVFQkRJVGt5b3djOHRqSEdUUUdmWWRUUjg5OVVlc3dLT2Z3aUE0PQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0NTIxNDMxCWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CkFiblZ2STdGeFcreUFwZU14TnpUU1FKNzExVHYxUzRPY0FLVVY3eWp1MFhJcUxodWFOdFM5Q2R5dDh5dTdIdTJ6bU0zRTlTMXRCYVozY1JrZTM1ZEJ3PT0K", + "url": "https://github.com/tari-project/universe/releases/download/v0.8.27/Tari.Universe_universal.app.tar.gz" }, "darwin-x86_64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGRXWnord2poTnQ3RnVoRkhuSjJjVTVydWhGbU1MVzh5V3dSWTNXN25BTzM5RWs1ZWMwRDBzQzh3bUwzZ3IrVWg5T3RQWml1ZWR4azg3bldqL29xVGdJPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0MDE3MTMxCWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6Ck9LSzJDSEQ3ZFFPZ2RFa3RCaTUzT2VNUVNEN2toSUJjR1FoTmVQcjYrcFl3N3NPZmhMeUtRekFrd3p2MkIwYy84V3c3cG5ONXAzRFQvWTdMZjYxTEFnPT0K", - "url": "https://github.com/tari-project/universe/releases/download/v0.8.14/Tari.Universe_universal.app.tar.gz" - }, - "windows-x86_64": { - "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGVYcmZGWmV2cWZndkJTeDJDcWwxNmJLVFkrbTJueTgxTU11SlpDZytKd1lTZUJXMDRkL0k3UElpdWZiMW0wR3JGS0dnL2pTNjU5R243TWF2STlZU2dzPQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0MDE3NTY3CWZpbGU6VGFyaSBVbml2ZXJzZV8wLjguMTRfeDY0X2VuLVVTLm1zaS56aXAKWVVReWR1cFQ0N0thTmlybllVT1VxcWxjN3dQK3NNamFEZFdpamN4Yk5mKzNPRFZkc21kYVNweG1IWXdpb0cveHpsR01rV1VWRlg3NThwUitrL25zQkE9PQo=", - "url": "https://github.com/tari-project/universe/releases/download/v0.8.14/Tari.Universe_0.8.14_x64_en-US.msi.zip" + "signature": "dW50cnVzdGVkIGNvbW1lbnQ6IHNpZ25hdHVyZSBmcm9tIHRhdXJpIHNlY3JldCBrZXkKUlVRbUtvKzlyYWhiOGJyK2lyWmN5MlpFV3U5dFlZWk9oVS9yMUFFaXVxU29kK1NXR0crYzRWSXE2aDlCOVVFQkRJVGt5b3djOHRqSEdUUUdmWWRUUjg5OVVlc3dLT2Z3aUE0PQp0cnVzdGVkIGNvbW1lbnQ6IHRpbWVzdGFtcDoxNzM0NTIxNDMxCWZpbGU6VGFyaSBVbml2ZXJzZS5hcHAudGFyLmd6CkFiblZ2STdGeFcreUFwZU14TnpUU1FKNzExVHYxUzRPY0FLVVY3eWp1MFhJcUxodWFOdFM5Q2R5dDh5dTdIdTJ6bU0zRTlTMXRCYVozY1JrZTM1ZEJ3PT0K", + "url": "https://github.com/tari-project/universe/releases/download/v0.8.27/Tari.Universe_universal.app.tar.gz" } } } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index e01b5944b..9b1771fc3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,42 @@ -# Tari Universe - Testnet v0.8.7: "The Deep Conclave" +# Tari Universe - Testnet v0.8.25 + +_December 17, 2024_ + +## 🎮 GPU Mining Enhancements + +- **Mac Optimization** + - Resolved 60% nonce discard issue + - Enhanced proof of work processing efficiency + - Improved true hash rate efficiency by 60% + +- **OpenSSL Updates** + - Enhanced GPU recognition system + - Fixed M Mac-specific issues + +## 🛠️ Platform Updates + +- **Framework Improvements** + - Upgraded to Tauri V2 + - Enhanced backend library integration + - Added opt-in alpha release channel in Settings + - Reduced installation error rate by 30% + +- **UI Enhancements** + - Improved p2pool statistics display + - Resolved full-screen window issues + - Added orphan chain fix suggestions + +## ⚠️ Known Issues + +- P2pool optimization pending for low hash mining (<~1000 h/s CPU) +- Latent shares may occur until next update +- 30-60 minute sync time with auto solo mining during sync +- Intermittent hash power cycling +- Minor window sizing issues persist + +--- + +# Tari Universe - Testnet v0.8.7 _December 6, 2024_ diff --git a/index.html b/index.html index b0d1330bd..dec23f7f8 100644 --- a/index.html +++ b/index.html @@ -6,21 +6,20 @@ - - - - - + + + + - - - + + - - - - + + + + + Tari Universe | Testnet @@ -67,42 +66,70 @@ url("/assets/fonts/Poppins/Poppins-Bold.ttf") format("truetype"); font-display: swap; } + + /* Druk Font Faces */ @font-face { - font-family: "Poppins"; - font-weight: 800; + font-family: "Druk"; + src: + url("/assets/fonts/Druk/DrukLCG-Bold.woff2") format("woff2"), + url("/assets/fonts/Druk/DrukLCG-Bold.woff") format("woff"), + url("/assets/fonts/Druk/DrukLCG-Bold.ttf") format("truetype"); + font-weight: 700; font-style: normal; + font-display: swap; + } + @font-face { + font-family: "DrukWide"; src: - url("/assets/fonts/Poppins/Poppins-ExtraBold.woff2") format("woff2"), - url("/assets/fonts/Poppins/Poppins-ExtraBold.woff") format("woff"), - url("/assets/fonts/Poppins/Poppins-ExtraBold.ttf") format("truetype"); + url("/assets/fonts/Druk/DrukWideLCG-Bold.woff2") format("woff2"), + url("/assets/fonts/Druk/DrukWideLCG-Bold.woff") format("woff"), + url("/assets/fonts/Druk/DrukWideLCG-Bold.ttf") format("truetype"); + font-weight: 800; + font-style: normal; font-display: swap; } - - /* Druk Font Faces */ + /* IBM Plex Mono Fonts */ @font-face { - font-family: "Druk"; - src: url("/assets/fonts/Druk/DrukLCG-Bold.ttf") format("truetype"); - font-weight: 700; + font-family: "IBM Plex Mono"; + src: url("/assets/fonts/IBMPlexMono/IBMPlexMono-Regular.woff2") format("woff2"), + url("/assets/fonts/IBMPlexMono/IBMPlexMono-Regular.woff") format("woff"), + url("/assets/fonts/IBMPlexMono/IBMPlexMono-Regular.ttf") format("truetype"); + font-weight: 400; font-style: normal; font-display: swap; } + @font-face { - font-family: "DrukWide"; - src: url("/assets/fonts/Druk/DrukWideLCG-Medium.ttf") format("truetype"); + font-family: "IBM Plex Mono"; + src: url("/assets/fonts/IBMPlexMono/IBMPlexMono-Medium.woff2") format("woff2"), + url("/assets/fonts/IBMPlexMono/IBMPlexMono-Medium.woff") format("woff"), + url("/assets/fonts/IBMPlexMono/IBMPlexMono-Medium.ttf") format("truetype"); font-weight: 500; font-style: normal; font-display: swap; } + @font-face { - font-family: "DrukWide"; - src: url("/assets/fonts/Druk/DrukWideLCG-Bold.ttf") format("truetype"); - font-weight: 700; + font-family: "IBM Plex Mono"; + src: url("/assets/fonts/IBMPlexMono/IBMPlexMono-SemiBold.woff2") format("woff2"), + url("/assets/fonts/IBMPlexMono/IBMPlexMono-SemiBold.woff") format("woff"), + url("/assets/fonts/IBMPlexMono/IBMPlexMono-SemiBold.ttf") format("truetype"); + font-weight: 600; font-style: normal; font-display: swap; } + @font-face { + font-family: "IBM Plex Mono"; + src: url("/assets/fonts/IBMPlexMono/IBMPlexMono-Bold.woff2") format("woff2"), + url("/assets/fonts/IBMPlexMono/IBMPlexMono-Bold.woff") format("woff"), + url("/assets/fonts/IBMPlexMono/IBMPlexMono-Bold.ttf") format("truetype"); + font-weight: 700; + font-style: normal; + font-display: swap; + } /* Existing styles */ body, diff --git a/package-lock.json b/package-lock.json index 6b494c1f1..764acb6d7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tari-universe", - "version": "0.8.24", + "version": "0.8.34", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tari-universe", - "version": "0.8.24", + "version": "0.8.34", "dependencies": { "@floating-ui/react": "^0.26.28", "@lottiefiles/dotlottie-react": "^0.10.1", diff --git a/package.json b/package.json index d1d7d0a30..079ff6e7f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "tari-universe", "private": true, - "version": "0.8.24", + "version": "0.8.34", "type": "module", "scripts": { "dev": "vite dev --mode development", @@ -70,4 +70,4 @@ "typescript-eslint": "^8.17.0", "vite": "^5.4.11" } -} +} \ No newline at end of file diff --git a/public/assets/fonts/AvenirLTStd-Book.otf b/public/assets/fonts/AvenirLTStd-Book.otf deleted file mode 100644 index 6117f64c5..000000000 Binary files a/public/assets/fonts/AvenirLTStd-Book.otf and /dev/null differ diff --git a/public/assets/fonts/AvenirLTStd-Heavy.otf b/public/assets/fonts/AvenirLTStd-Heavy.otf deleted file mode 100644 index 24cced143..000000000 Binary files a/public/assets/fonts/AvenirLTStd-Heavy.otf and /dev/null differ diff --git a/public/assets/fonts/AvenirLTStd-Medium.otf b/public/assets/fonts/AvenirLTStd-Medium.otf deleted file mode 100644 index e90271815..000000000 Binary files a/public/assets/fonts/AvenirLTStd-Medium.otf and /dev/null differ diff --git a/public/assets/fonts/Druk/DrukLCG-Bold.woff b/public/assets/fonts/Druk/DrukLCG-Bold.woff new file mode 100644 index 000000000..d2d2f910a Binary files /dev/null and b/public/assets/fonts/Druk/DrukLCG-Bold.woff differ diff --git a/public/assets/fonts/Druk/DrukLCG-Bold.woff2 b/public/assets/fonts/Druk/DrukLCG-Bold.woff2 new file mode 100644 index 000000000..2bdb530bf Binary files /dev/null and b/public/assets/fonts/Druk/DrukLCG-Bold.woff2 differ diff --git a/public/assets/fonts/Druk/DrukLCG-BoldItalic.ttf b/public/assets/fonts/Druk/DrukLCG-BoldItalic.ttf deleted file mode 100644 index 4cbe631f2..000000000 Binary files a/public/assets/fonts/Druk/DrukLCG-BoldItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/Druk/DrukLCG-Heavy.ttf b/public/assets/fonts/Druk/DrukLCG-Heavy.ttf deleted file mode 100644 index 0956dec81..000000000 Binary files a/public/assets/fonts/Druk/DrukLCG-Heavy.ttf and /dev/null differ diff --git a/public/assets/fonts/Druk/DrukLCG-HeavyItalic.ttf b/public/assets/fonts/Druk/DrukLCG-HeavyItalic.ttf deleted file mode 100644 index 65a9a4a4e..000000000 Binary files a/public/assets/fonts/Druk/DrukLCG-HeavyItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/Druk/DrukLCG-Medium.ttf b/public/assets/fonts/Druk/DrukLCG-Medium.ttf deleted file mode 100644 index 38d567899..000000000 Binary files a/public/assets/fonts/Druk/DrukLCG-Medium.ttf and /dev/null differ diff --git a/public/assets/fonts/Druk/DrukLCG-MediumItalic.ttf b/public/assets/fonts/Druk/DrukLCG-MediumItalic.ttf deleted file mode 100644 index a8bc12f45..000000000 Binary files a/public/assets/fonts/Druk/DrukLCG-MediumItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/Druk/DrukWideLCG-Bold.woff b/public/assets/fonts/Druk/DrukWideLCG-Bold.woff new file mode 100644 index 000000000..a38ddd9e8 Binary files /dev/null and b/public/assets/fonts/Druk/DrukWideLCG-Bold.woff differ diff --git a/public/assets/fonts/Druk/DrukWideLCG-Bold.woff2 b/public/assets/fonts/Druk/DrukWideLCG-Bold.woff2 new file mode 100644 index 000000000..0ef328826 Binary files /dev/null and b/public/assets/fonts/Druk/DrukWideLCG-Bold.woff2 differ diff --git a/public/assets/fonts/Druk/DrukWideLCG-BoldItalic.ttf b/public/assets/fonts/Druk/DrukWideLCG-BoldItalic.ttf deleted file mode 100644 index 74c1f8785..000000000 Binary files a/public/assets/fonts/Druk/DrukWideLCG-BoldItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/Druk/DrukWideLCG-Heavy.ttf b/public/assets/fonts/Druk/DrukWideLCG-Heavy.ttf deleted file mode 100644 index ebadef8aa..000000000 Binary files a/public/assets/fonts/Druk/DrukWideLCG-Heavy.ttf and /dev/null differ diff --git a/public/assets/fonts/Druk/DrukWideLCG-HeavyItalic.ttf b/public/assets/fonts/Druk/DrukWideLCG-HeavyItalic.ttf deleted file mode 100644 index 4d368aa9a..000000000 Binary files a/public/assets/fonts/Druk/DrukWideLCG-HeavyItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/Druk/DrukWideLCG-Medium.ttf b/public/assets/fonts/Druk/DrukWideLCG-Medium.ttf deleted file mode 100644 index 5fe89f02d..000000000 Binary files a/public/assets/fonts/Druk/DrukWideLCG-Medium.ttf and /dev/null differ diff --git a/public/assets/fonts/Druk/DrukWideLCG-MediumItalic.ttf b/public/assets/fonts/Druk/DrukWideLCG-MediumItalic.ttf deleted file mode 100644 index 431a89e1c..000000000 Binary files a/public/assets/fonts/Druk/DrukWideLCG-MediumItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/GT-America/GT-America-Standard-Black-Italic-Trial.otf b/public/assets/fonts/GT-America/GT-America-Standard-Black-Italic-Trial.otf deleted file mode 100644 index ec141a2c7..000000000 Binary files a/public/assets/fonts/GT-America/GT-America-Standard-Black-Italic-Trial.otf and /dev/null differ diff --git a/public/assets/fonts/GT-America/GT-America-Standard-Black-Trial.otf b/public/assets/fonts/GT-America/GT-America-Standard-Black-Trial.otf deleted file mode 100644 index e4ad0402d..000000000 Binary files a/public/assets/fonts/GT-America/GT-America-Standard-Black-Trial.otf and /dev/null differ diff --git a/public/assets/fonts/GT-America/GT-America-Standard-Bold-Italic-Trial.otf b/public/assets/fonts/GT-America/GT-America-Standard-Bold-Italic-Trial.otf deleted file mode 100644 index d998b1d14..000000000 Binary files a/public/assets/fonts/GT-America/GT-America-Standard-Bold-Italic-Trial.otf and /dev/null differ diff --git a/public/assets/fonts/GT-America/GT-America-Standard-Bold-Trial.otf b/public/assets/fonts/GT-America/GT-America-Standard-Bold-Trial.otf deleted file mode 100644 index 57ac7fe45..000000000 Binary files a/public/assets/fonts/GT-America/GT-America-Standard-Bold-Trial.otf and /dev/null differ diff --git a/public/assets/fonts/GT-America/GT-America-Standard-Light-Italic-Trial.otf b/public/assets/fonts/GT-America/GT-America-Standard-Light-Italic-Trial.otf deleted file mode 100644 index d10a251cf..000000000 Binary files a/public/assets/fonts/GT-America/GT-America-Standard-Light-Italic-Trial.otf and /dev/null differ diff --git a/public/assets/fonts/GT-America/GT-America-Standard-Light-Trial.otf b/public/assets/fonts/GT-America/GT-America-Standard-Light-Trial.otf deleted file mode 100644 index 06744a083..000000000 Binary files a/public/assets/fonts/GT-America/GT-America-Standard-Light-Trial.otf and /dev/null differ diff --git a/public/assets/fonts/GT-America/GT-America-Standard-Medium-Italic-Trial.otf b/public/assets/fonts/GT-America/GT-America-Standard-Medium-Italic-Trial.otf deleted file mode 100644 index 1a68295ad..000000000 Binary files a/public/assets/fonts/GT-America/GT-America-Standard-Medium-Italic-Trial.otf and /dev/null differ diff --git a/public/assets/fonts/GT-America/GT-America-Standard-Medium-Trial.otf b/public/assets/fonts/GT-America/GT-America-Standard-Medium-Trial.otf deleted file mode 100644 index 22e625fef..000000000 Binary files a/public/assets/fonts/GT-America/GT-America-Standard-Medium-Trial.otf and /dev/null differ diff --git a/public/assets/fonts/GT-America/GT-America-Standard-Regular-Italic-Trial.otf b/public/assets/fonts/GT-America/GT-America-Standard-Regular-Italic-Trial.otf deleted file mode 100644 index 921fd0f7f..000000000 Binary files a/public/assets/fonts/GT-America/GT-America-Standard-Regular-Italic-Trial.otf and /dev/null differ diff --git a/public/assets/fonts/GT-America/GT-America-Standard-Regular-Trial.otf b/public/assets/fonts/GT-America/GT-America-Standard-Regular-Trial.otf deleted file mode 100644 index 667208f00..000000000 Binary files a/public/assets/fonts/GT-America/GT-America-Standard-Regular-Trial.otf and /dev/null differ diff --git a/public/assets/fonts/IBMPlexMono/IBMPlexMono-Bold.ttf b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Bold.ttf new file mode 100644 index 000000000..d5230ce46 Binary files /dev/null and b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Bold.ttf differ diff --git a/public/assets/fonts/IBMPlexMono/IBMPlexMono-Bold.woff b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Bold.woff new file mode 100644 index 000000000..5d391157c Binary files /dev/null and b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Bold.woff differ diff --git a/public/assets/fonts/IBMPlexMono/IBMPlexMono-Bold.woff2 b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Bold.woff2 new file mode 100644 index 000000000..a0a5c5989 Binary files /dev/null and b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Bold.woff2 differ diff --git a/public/assets/fonts/IBMPlexMono/IBMPlexMono-Medium.ttf b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Medium.ttf new file mode 100644 index 000000000..0c0eac446 Binary files /dev/null and b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Medium.ttf differ diff --git a/public/assets/fonts/IBMPlexMono/IBMPlexMono-Medium.woff b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Medium.woff new file mode 100644 index 000000000..a952ff661 Binary files /dev/null and b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Medium.woff differ diff --git a/public/assets/fonts/IBMPlexMono/IBMPlexMono-Medium.woff2 b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Medium.woff2 new file mode 100644 index 000000000..f0ae92960 Binary files /dev/null and b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Medium.woff2 differ diff --git a/public/assets/fonts/IBMPlexMono/IBMPlexMono-Regular.ttf b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Regular.ttf new file mode 100644 index 000000000..a5f23ca92 Binary files /dev/null and b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Regular.ttf differ diff --git a/public/assets/fonts/IBMPlexMono/IBMPlexMono-Regular.woff b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Regular.woff new file mode 100644 index 000000000..cb810d53d Binary files /dev/null and b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Regular.woff differ diff --git a/public/assets/fonts/IBMPlexMono/IBMPlexMono-Regular.woff2 b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Regular.woff2 new file mode 100644 index 000000000..233ca666c Binary files /dev/null and b/public/assets/fonts/IBMPlexMono/IBMPlexMono-Regular.woff2 differ diff --git a/public/assets/fonts/IBMPlexMono/IBMPlexMono-SemiBold.ttf b/public/assets/fonts/IBMPlexMono/IBMPlexMono-SemiBold.ttf new file mode 100644 index 000000000..230705cf7 Binary files /dev/null and b/public/assets/fonts/IBMPlexMono/IBMPlexMono-SemiBold.ttf differ diff --git a/public/assets/fonts/IBMPlexMono/IBMPlexMono-SemiBold.woff b/public/assets/fonts/IBMPlexMono/IBMPlexMono-SemiBold.woff new file mode 100644 index 000000000..892c4cf0e Binary files /dev/null and b/public/assets/fonts/IBMPlexMono/IBMPlexMono-SemiBold.woff differ diff --git a/public/assets/fonts/IBMPlexMono/IBMPlexMono-SemiBold.woff2 b/public/assets/fonts/IBMPlexMono/IBMPlexMono-SemiBold.woff2 new file mode 100644 index 000000000..9be770ef9 Binary files /dev/null and b/public/assets/fonts/IBMPlexMono/IBMPlexMono-SemiBold.woff2 differ diff --git a/public/assets/fonts/Poppins/Poppins-Black.ttf b/public/assets/fonts/Poppins/Poppins-Black.ttf deleted file mode 100644 index 71c0f995e..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-Black.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-Black.woff b/public/assets/fonts/Poppins/Poppins-Black.woff deleted file mode 100644 index a2e920c55..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-Black.woff and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-Black.woff2 b/public/assets/fonts/Poppins/Poppins-Black.woff2 deleted file mode 100644 index 9e58a3cce..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-Black.woff2 and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-BlackItalic.ttf b/public/assets/fonts/Poppins/Poppins-BlackItalic.ttf deleted file mode 100644 index 7aeb58bd1..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-BlackItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-BoldItalic.ttf b/public/assets/fonts/Poppins/Poppins-BoldItalic.ttf deleted file mode 100644 index e61e8e88b..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-BoldItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-ExtraBold.ttf b/public/assets/fonts/Poppins/Poppins-ExtraBold.ttf deleted file mode 100644 index df7093608..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-ExtraBold.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-ExtraBold.woff b/public/assets/fonts/Poppins/Poppins-ExtraBold.woff deleted file mode 100644 index 3de351081..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-ExtraBold.woff and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-ExtraBold.woff2 b/public/assets/fonts/Poppins/Poppins-ExtraBold.woff2 deleted file mode 100644 index 853b9d0d6..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-ExtraBold.woff2 and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-ExtraBoldItalic.ttf b/public/assets/fonts/Poppins/Poppins-ExtraBoldItalic.ttf deleted file mode 100644 index 14d2b375d..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-ExtraBoldItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-ExtraLight.ttf b/public/assets/fonts/Poppins/Poppins-ExtraLight.ttf deleted file mode 100644 index e76ec69a6..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-ExtraLight.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-ExtraLight.woff b/public/assets/fonts/Poppins/Poppins-ExtraLight.woff deleted file mode 100644 index 2a46dee75..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-ExtraLight.woff and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-ExtraLight.woff2 b/public/assets/fonts/Poppins/Poppins-ExtraLight.woff2 deleted file mode 100644 index ee0c15e35..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-ExtraLight.woff2 and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-ExtraLightItalic.ttf b/public/assets/fonts/Poppins/Poppins-ExtraLightItalic.ttf deleted file mode 100644 index 89513d946..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-ExtraLightItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-Italic.ttf b/public/assets/fonts/Poppins/Poppins-Italic.ttf deleted file mode 100644 index 12b7b3c40..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-Italic.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-Italic.woff b/public/assets/fonts/Poppins/Poppins-Italic.woff deleted file mode 100644 index a465c1fcd..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-Italic.woff and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-Italic.woff2 b/public/assets/fonts/Poppins/Poppins-Italic.woff2 deleted file mode 100644 index 082d8633a..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-Italic.woff2 and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-Light.ttf b/public/assets/fonts/Poppins/Poppins-Light.ttf deleted file mode 100644 index bc36bcc24..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-Light.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-Light.woff b/public/assets/fonts/Poppins/Poppins-Light.woff deleted file mode 100644 index d2d37dd07..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-Light.woff and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-Light.woff2 b/public/assets/fonts/Poppins/Poppins-Light.woff2 deleted file mode 100644 index a8fc84511..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-Light.woff2 and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-LightItalic.ttf b/public/assets/fonts/Poppins/Poppins-LightItalic.ttf deleted file mode 100644 index 9e70be6a9..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-LightItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-MediumItalic.ttf b/public/assets/fonts/Poppins/Poppins-MediumItalic.ttf deleted file mode 100644 index be67410fd..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-MediumItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-SemiBoldItalic.ttf b/public/assets/fonts/Poppins/Poppins-SemiBoldItalic.ttf deleted file mode 100644 index 3e6c94223..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-SemiBoldItalic.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-Thin.ttf b/public/assets/fonts/Poppins/Poppins-Thin.ttf deleted file mode 100644 index 03e736613..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-Thin.ttf and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-Thin.woff b/public/assets/fonts/Poppins/Poppins-Thin.woff deleted file mode 100644 index bcb13412d..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-Thin.woff and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-Thin.woff2 b/public/assets/fonts/Poppins/Poppins-Thin.woff2 deleted file mode 100644 index 9f34f033f..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-Thin.woff2 and /dev/null differ diff --git a/public/assets/fonts/Poppins/Poppins-ThinItalic.ttf b/public/assets/fonts/Poppins/Poppins-ThinItalic.ttf deleted file mode 100644 index e26db5dd3..000000000 Binary files a/public/assets/fonts/Poppins/Poppins-ThinItalic.ttf and /dev/null differ diff --git a/public/locales/af/common.json b/public/locales/af/common.json index 8c5b3bc82..d57e0f9e2 100644 --- a/public/locales/af/common.json +++ b/public/locales/af/common.json @@ -8,11 +8,11 @@ "day": "Dag", "disconnect": "Ontkoppel", "hashrate": "Hashtempo", - "installation-problem": "Installation problem", + "installation-problem": "Installasieprobleem", "max-temperature": "Maksimum temperatuur", - "minimize": "Minimize", + "minimize": "Minimaliseer", "mode": "Modus", - "not-installed-in-applications-directory": "Oops! Tari Universe needs to live in the Applications directory. Mind installing it there?", + "not-installed-in-applications-directory": "Oeps! Tari Universe moet in die Toepassingsgids wees. Sal jy dit daar installeer?", "please-try-again-later": "Probeer asseblief later weer. As die probleem voortduur, kontak ons asseblief.", "resources": "Hulpbronne", "restart": "Herbegin", @@ -23,7 +23,7 @@ "temperature": "Temperatuur", "testnet": "Toetsnetwerk", "unknown": "Onbekend", - "unminimize": "Unminimize", + "unminimize": "Maak volskerm", "usage": "Gebruik", "utilization": "Benutting", "version": "Weergawe", diff --git a/public/locales/af/mining-view.json b/public/locales/af/mining-view.json index 32add90ff..2f89c9c49 100644 --- a/public/locales/af/mining-view.json +++ b/public/locales/af/mining-view.json @@ -21,13 +21,13 @@ "waiting-for-idle": "Wag tot onaktief" }, "orphan-chain-tooltip": { - "heading": "Things to try:", - "step_1": "Check your Internet connection", - "step_2": "Wait 30 mins", - "step_3": "Restart the app", - "step_4": "Try using a Tor Bridge (in Settings)", - "step_5": "Try disabling Tor (in Settings)", - "step_6": "Try an app reset (in Settings)" + "heading": "Dinge om te probeer:", + "step_1": "Kontroleer jou internetverbinding", + "step_2": "Wag 30 minute", + "step_3": "Herbegin die toepassing", + "step_4": "Probeer \"n Tor-brug gebruik (in Instellings)", + "step_5": "Probeer Tor deaktiveer (in Instellings)", + "step_6": "Probeer \"n toepassingherstel (in Instellings)" }, "you-earn-rewards-separately": "Jy verdien belonings vir die myn van CPU en GPU afsonderlik", "you-won-block": "Jy was die wenner van blok #{{ blockHeight }}", diff --git a/public/locales/af/p2p.json b/public/locales/af/p2p.json index de62f054d..d4f40ece7 100644 --- a/public/locales/af/p2p.json +++ b/public/locales/af/p2p.json @@ -1,14 +1,14 @@ { - "listener-addresses": "Listener addresses", + "listener-addresses": "Luisteraaradresse", "miners": "Myners", - "network-info": "Network info", + "network-info": "Netwerkinligting", "p2pool-chain-tip": "P2Pool Kettingwenk", "p2pool-connected": "P2Pool Verbind", "p2pool-connection-info": "Verbinding", "p2pool-connection-info-more": "Verbindingsbesonderhede", - "p2pool-peers": "P2pool peers", + "p2pool-peers": "P2pool eweknieë", "p2pool-stats": "Poel mynbou statistieke", - "randomx-stats": "RandomX Stats", - "sha3-stats": "SHA3 Stats", + "randomx-stats": "RandomX Statistieke", + "sha3-stats": "SHA3 Statistieke", "tribe": "Stam" } \ No newline at end of file diff --git a/public/locales/af/settings.json b/public/locales/af/settings.json index 79a58462c..14e373997 100644 --- a/public/locales/af/settings.json +++ b/public/locales/af/settings.json @@ -6,8 +6,8 @@ "applyInviteCode": "Pas Uitnodigingskode Toe", "cancel": "Cancel", "change-language": "Verander taal", - "confirm": "Confirm", - "confirm-action": "Confirm action", + "confirm": "Bevestig", + "confirm-action": "Bevestig aksie", "confirm-import-wallet": "Abandon current wallet?", "confirm-import-wallet-copy": "Are you sure you want to import a new wallet?", "connected-peers": "Gekoppelde Eweknieë", @@ -48,9 +48,9 @@ "title": "Tyd waarna masjien as onaktief beskou word" }, "importing-wallet": "Beursie invoer", - "importing-wallet-copy": "Tari Universe will restart automatically once your wallet has been imported", + "importing-wallet-copy": "Tari Universe sal outomaties herbegin sodra jou beursie ingevoer is", "invalid-seed-words": "Voer 24 woorde in, geskei deur spasies", - "invalid-stats-server-port": "Invalid stats server port", + "invalid-stats-server-port": "Ongeldige statistieke bedienerpoort", "inviteCode": "Uitnodigingskode", "is-on-orphan-chain": "Dit lyk of jy aan \"n vurk gekoppel is, en nie die hoofketting nie. Enige blokke wat jy wen, mag ongeldig verklaar word.", "last-block-added-time": "Tyd toe laaste blok by ketting gevoeg was", @@ -86,15 +86,15 @@ "pool-mining": "Poel Mynbou", "pool-mining-description": "Wanneer geaktiveer, sal u in \"n poel myn en by \"n groep mynwerkers aansluit.", "pre-release": { - "description": "Explore the latest features before they go live and provide feedback", - "title": "Use pre-release version" + "description": "Verken die nuutste kenmerke voordat hulle lewendig gaan en gee terugvoer", + "title": "Gebruik voorafvrystelling weergawe" }, - "pre-release-note": "You are about to switch to the pre-release version of the application. This version can offer exciting new features and enhancements, with the possibility of encountering areas that may still be under refinement.", + "pre-release-note": "Jy is op die punt om oor te skakel na die voorafvrystelling weergawe van die toepassing. Hierdie weergawe kan opwindende nuwe kenmerke en verbeterings bied, met die moontlikheid om gebiede teë te kom wat dalk nog verfyn word.", "randomx-network-hash-rate": "Randomx netwerk hashrate", "refresh-versions": "Verfris weergawes", "release-notes": { - "loading": "Loading release notes...", - "upgrade-available": "⚠️ Upgrade Available" + "loading": "Laai vrystellingsnotas...", + "upgrade-available": "⚠️ Opgradering Beskikbaar" }, "report-issue": "Rapporteer \"n probleem", "reset-permanently": "Is jy seker jy wil alle instellings permanent terugstel?", @@ -115,8 +115,8 @@ "title": "Outomatiese begin by stelsel opstart" }, "should-use-system-language": "Gebruik stelsel taal", - "stable-version-note": "By turning off the pre-release version of the application, you will revert to the stable release, which prioritizes reliability and consistency. While you may miss out on the latest features and enhancements.", - "stats-server-port": "Stats server port", + "stable-version-note": "Deur die voorafvrystelling weergawe van die toepassing af te skakel, sal jy terugkeer na die stabiele weergawe, wat betroubaarheid en konsekwentheid prioritiseer. Jy mag dalk die nuutste kenmerke en verbeterings mis.", + "stats-server-port": "Statistieke bedienerpoort", "tabs": { "airdrop": "Airdrop", "connections": "Verbindings", @@ -124,7 +124,7 @@ "general": "Algemeen", "mining": "Mynbou", "p2p": "Poel Mynbou", - "releaseNotes": "Release Notes", + "releaseNotes": "Vrystellingsnotas", "very_experimental": "Baie Eksperimenteel", "wallet": "Beursie" }, @@ -143,7 +143,7 @@ }, "use-dynamic-fail-data": "Gebruik dinamiese mislukdata", "use-random-control-port": "Gebruik ewekansige beheerpoort", - "use-random-port": "Use random port", + "use-random-port": "Gebruik ewekansige poort", "use-tor": "Gebruik Tor", "use-tor-bridges": "Gebruik Tor Brûe", "visual-mode": "Visuele modus", diff --git a/public/locales/af/sos.json b/public/locales/af/sos.json new file mode 100644 index 000000000..88074d9d2 --- /dev/null +++ b/public/locales/af/sos.json @@ -0,0 +1,55 @@ +{ + "widget": { + "prize": { + "upcomingReward": "opkomende beloning / macbook pro 16’" + }, + "timer": { + "gettingClose": "Jy kom nader", + "days": "dae", + "hours": "ure" + }, + "friends": { + "reduceTimer": "Verminder jou timer deur vriende uit te nooi", + "linkCopied": "Skakel gekopieer!", + "growCrew": "groei jou span" + } + }, + "superCharger": { + "title": "Superlaaier", + "placeholder": "Voer jou kode in", + "success": "Tydsbonus bygevoeg {{time}}.", + "error": "Ongeldige kode.", + "submit": "Gaan" + }, + "mainTimer": { + "title": "Jou Timer", + "days": "DAE", + "hours": "URE", + "minutes": "MINUTE", + "seconds": "SEKONDES" + }, + "progress": { + "message": "Jy is {{hours}} ure weg van die volgende rang. Hou aan myn!" + }, + "leaserboardEntry": { + "mining": "Nou aan die myn", + "idle": "Laas gemyn {{time}} gelede" + }, + "leaderboard": { + "title": "Leierbord", + "viewFull": "SIEN volledige LEIERBORD" + }, + "member": { + "new": "Nuut", + "nudge": "Stootjie", + "minHr": "min/uur" + }, + "crewMining": { + "title": "Spanmyn", + "rate": "+{{rate}}min/uur", + "mining": "{{current}}/{{total}} Myn" + }, + "crewList": { + "placeholder": "Nooi jou eerste spanlid" + } +} \ No newline at end of file diff --git a/public/locales/cn/common.json b/public/locales/cn/common.json index 1d08840b0..11f5d192c 100644 --- a/public/locales/cn/common.json +++ b/public/locales/cn/common.json @@ -8,11 +8,11 @@ "day": "天", "disconnect": "断开连接", "hashrate": "哈希率", - "installation-problem": "Installation problem", + "installation-problem": "安装问题", "max-temperature": "最高温度", - "minimize": "Minimize", + "minimize": "最小化", "mode": "模式", - "not-installed-in-applications-directory": "Oops! Tari Universe needs to live in the Applications directory. Mind installing it there?", + "not-installed-in-applications-directory": "哎呀!Tari Universe 需要安装在应用程序目录中。请考虑安装在那里?", "please-try-again-later": "请稍后再试。如果问题仍然存在,请联系我们。", "resources": "资源", "restart": "重启", @@ -23,7 +23,7 @@ "temperature": "温度", "testnet": "测试网", "unknown": "未知", - "unminimize": "Unminimize", + "unminimize": "取消最小化", "usage": "使用", "utilization": "利用率", "version": "版本", diff --git a/public/locales/cn/mining-view.json b/public/locales/cn/mining-view.json index 5b72b4314..3a5cbcdc2 100644 --- a/public/locales/cn/mining-view.json +++ b/public/locales/cn/mining-view.json @@ -18,13 +18,13 @@ "waiting-for-idle": "等待空闲" }, "orphan-chain-tooltip": { - "heading": "Things to try:", - "step_1": "Check your Internet connection", - "step_2": "Wait 30 mins", - "step_3": "Restart the app", - "step_4": "Try using a Tor Bridge (in Settings)", - "step_5": "Try disabling Tor (in Settings)", - "step_6": "Try an app reset (in Settings)" + "heading": "尝试以下操作:", + "step_1": "检查您的互联网连接", + "step_2": "等待 30 分钟", + "step_3": "重启应用程序", + "step_4": "尝试使用 Tor 桥接(在设置中)", + "step_5": "尝试禁用 Tor(在设置中)", + "step_6": "尝试重置应用程序(在设置中)" }, "you-earn-rewards-separately": "您分别为 CPU 和 GPU 挖矿获得奖励", "you-won-block": "您赢得了区块 #{{ blockHeight }}", diff --git a/public/locales/cn/p2p.json b/public/locales/cn/p2p.json index 6e1e4b817..46906a69c 100644 --- a/public/locales/cn/p2p.json +++ b/public/locales/cn/p2p.json @@ -1,14 +1,14 @@ { - "listener-addresses": "Listener addresses", + "listener-addresses": "监听地址", "miners": "矿工", - "network-info": "Network info", + "network-info": "网络信息", "p2pool-chain-tip": "P2Pool链顶", "p2pool-connected": "P2Pool已连接", "p2pool-connection-info": "连接", "p2pool-connection-info-more": "连接详情", - "p2pool-peers": "P2pool peers", + "p2pool-peers": "P2pool 节点", "p2pool-stats": "矿池挖矿统计", - "randomx-stats": "RandomX Stats", - "sha3-stats": "SHA3 Stats", + "randomx-stats": "RandomX 统计", + "sha3-stats": "SHA3 统计", "tribe": "部落" } \ No newline at end of file diff --git a/public/locales/cn/settings.json b/public/locales/cn/settings.json index a25b19c23..84444d0bd 100644 --- a/public/locales/cn/settings.json +++ b/public/locales/cn/settings.json @@ -6,8 +6,8 @@ "applyInviteCode": "应用邀请代码", "cancel": "取消", "change-language": "更改语言", - "confirm": "Confirm", - "confirm-action": "Confirm action", + "confirm": "确认", + "confirm-action": "确认操作", "confirm-import-wallet": "Abandon current wallet?", "confirm-import-wallet-copy": "Are you sure you want to import a new wallet?", "connected-peers": "已连接的节点", @@ -48,9 +48,9 @@ "title": "机器被视为空闲的时间" }, "importing-wallet": "正在导入钱包", - "importing-wallet-copy": "Tari Universe will restart automatically once your wallet has been imported", + "importing-wallet-copy": "钱包导入后,Tari Universe 将自动重启", "invalid-seed-words": "输入24个用空格分隔的单词", - "invalid-stats-server-port": "Invalid stats server port", + "invalid-stats-server-port": "无效的统计服务器端口", "inviteCode": "邀请代码", "is-on-orphan-chain": "您似乎连接到了一个分叉,而不是主链。您赢得的任何区块可能会被作废。", "last-block-added-time": "最后添加到链的块时间", @@ -86,15 +86,15 @@ "pool-mining": "矿池挖矿", "pool-mining-description": "启用后,您将在矿池中挖矿并加入一组矿工(部落)。", "pre-release": { - "description": "Explore the latest features before they go live and provide feedback", - "title": "Use pre-release version" + "description": "在最新功能上线前探索并提供反馈", + "title": "使用预发布版本" }, - "pre-release-note": "You are about to switch to the pre-release version of the application. This version can offer exciting new features and enhancements, with the possibility of encountering areas that may still be under refinement.", + "pre-release-note": "您即将切换到应用程序的预发布版本。此版本可能提供令人兴奋的新功能和增强,但可能会遇到仍在改进的区域。", "randomx-network-hash-rate": "Randomx 网络算力", "refresh-versions": "刷新版本", "release-notes": { - "loading": "Loading release notes...", - "upgrade-available": "⚠️ Upgrade Available" + "loading": "正在加载发布说明...", + "upgrade-available": "⚠️ 可用升级" }, "report-issue": "报告问题", "reset-permanently": "您确定要永久重置所有设置吗?", @@ -115,8 +115,8 @@ "title": "系统启动时自动启动" }, "should-use-system-language": "使用系统语言", - "stable-version-note": "By turning off the pre-release version of the application, you will revert to the stable release, which prioritizes reliability and consistency. While you may miss out on the latest features and enhancements.", - "stats-server-port": "Stats server port", + "stable-version-note": "关闭应用程序的预发布版本后,您将恢复到稳定版本,该版本优先考虑可靠性和一致性。您可能会错过最新的功能和增强。", + "stats-server-port": "统计服务器端口", "tabs": { "airdrop": "空投", "connections": "连接", @@ -124,7 +124,7 @@ "general": "常规", "mining": "挖矿", "p2p": "矿池挖矿", - "releaseNotes": "Release Notes", + "releaseNotes": "发布说明", "very_experimental": "非常实验性", "wallet": "钱包" }, @@ -143,7 +143,7 @@ }, "use-dynamic-fail-data": "使用动态失败数据", "use-random-control-port": "使用随机控制端口", - "use-random-port": "Use random port", + "use-random-port": "使用随机端口", "use-tor": "使用Tor", "use-tor-bridges": "使用Tor桥接", "visual-mode": "视觉模式", diff --git a/public/locales/cn/sos.json b/public/locales/cn/sos.json new file mode 100644 index 000000000..f105c0f07 --- /dev/null +++ b/public/locales/cn/sos.json @@ -0,0 +1,55 @@ +{ + "widget": { + "prize": { + "upcomingReward": "即将到来的奖励 / MacBook Pro 16’" + }, + "timer": { + "gettingClose": "您快到了", + "days": "天", + "hours": "小时" + }, + "friends": { + "reduceTimer": "通过邀请朋友来减少计时器", + "linkCopied": "链接已复制!", + "growCrew": "扩大您的团队" + } + }, + "superCharger": { + "title": "超级充电器", + "placeholder": "输入您的代码", + "success": "时间奖励已添加 {{time}}。", + "error": "无效的代码。", + "submit": "开始" + }, + "mainTimer": { + "title": "您的计时器", + "days": "天", + "hours": "小时", + "minutes": "分钟", + "seconds": "秒" + }, + "progress": { + "message": "您距离下一个等级还有 {{hours}} 小时。继续挖矿!" + }, + "leaserboardEntry": { + "mining": "正在挖矿", + "idle": "上次挖矿于 {{time}} 前" + }, + "leaderboard": { + "title": "排行榜", + "viewFull": "查看完整排行榜" + }, + "member": { + "new": "新", + "nudge": "提醒", + "minHr": "分钟/小时" + }, + "crewMining": { + "title": "团队挖矿", + "rate": "+{{rate}}分钟/小时", + "mining": "{{current}}/{{total}} 挖矿" + }, + "crewList": { + "placeholder": "邀请您的第一个团队成员" + } +} \ No newline at end of file diff --git a/public/locales/de/common.json b/public/locales/de/common.json index 071a7bb07..4d95f0a45 100644 --- a/public/locales/de/common.json +++ b/public/locales/de/common.json @@ -8,11 +8,11 @@ "day": "Tag", "disconnect": "Trennen", "hashrate": "Hashrate", - "installation-problem": "Installation problem", + "installation-problem": "Installationsproblem", "max-temperature": "Maximaltemperatur", - "minimize": "Minimize", + "minimize": "Minimieren", "mode": "Modus", - "not-installed-in-applications-directory": "Oops! Tari Universe needs to live in the Applications directory. Mind installing it there?", + "not-installed-in-applications-directory": "Ups! Tari Universe muss im Anwendungsverzeichnis installiert sein. Bitte dort installieren?", "please-try-again-later": "Bitte versuche es später erneut. Wenn das Problem weiterhin besteht, kontaktiere uns bitte.", "resources": "Ressourcen", "restart": "Neustarten", @@ -23,7 +23,7 @@ "temperature": "Temperatur", "testnet": "Testnet", "unknown": "Unbekannt", - "unminimize": "Unminimize", + "unminimize": "Wiederherstellen", "usage": "Nutzung", "utilization": "Auslastung", "version": "Version", diff --git a/public/locales/de/mining-view.json b/public/locales/de/mining-view.json index cdb4f11fc..ae94f23b5 100644 --- a/public/locales/de/mining-view.json +++ b/public/locales/de/mining-view.json @@ -17,13 +17,13 @@ "waiting-for-idle": "Warten auf Leerlauf" }, "orphan-chain-tooltip": { - "heading": "Things to try:", - "step_1": "Check your Internet connection", - "step_2": "Wait 30 mins", - "step_3": "Restart the app", - "step_4": "Try using a Tor Bridge (in Settings)", - "step_5": "Try disabling Tor (in Settings)", - "step_6": "Try an app reset (in Settings)" + "heading": "Dinge, die du versuchen kannst:", + "step_1": "Überprüfe deine Internetverbindung", + "step_2": "Warte 30 Minuten", + "step_3": "App neu starten", + "step_4": "Versuche, eine Tor-Bridge zu verwenden (in den Einstellungen)", + "step_5": "Versuche, Tor zu deaktivieren (in den Einstellungen)", + "step_6": "Versuche einen App-Reset (in den Einstellungen)" }, "you-earn-rewards-separately": "Sie verdienen Belohnungen für das Mining von CPU und GPU separat", "you-won-block": "Sie waren der Gewinner von Block #{{ blockHeight }}", diff --git a/public/locales/de/p2p.json b/public/locales/de/p2p.json index 14d235e62..d80541204 100644 --- a/public/locales/de/p2p.json +++ b/public/locales/de/p2p.json @@ -1,14 +1,14 @@ { - "listener-addresses": "Listener addresses", + "listener-addresses": "Listener-Adressen", "miners": "Miner", - "network-info": "Network info", + "network-info": "Netzwerkinformationen", "p2pool-chain-tip": "P2Pool-Ketten-Tipp", "p2pool-connected": "P2Pool Verbunden", "p2pool-connection-info": "Verbindung", "p2pool-connection-info-more": "Verbindungsdetails", - "p2pool-peers": "P2pool peers", + "p2pool-peers": "P2pool-Peers", "p2pool-stats": "Pool-Mining-Statistiken", - "randomx-stats": "RandomX Stats", - "sha3-stats": "SHA3 Stats", - "tribe": "Tribe" + "randomx-stats": "RandomX-Statistiken", + "sha3-stats": "SHA3-Statistiken", + "tribe": "Stamm" } \ No newline at end of file diff --git a/public/locales/de/settings.json b/public/locales/de/settings.json index 97ce82b9c..5ee2c1703 100644 --- a/public/locales/de/settings.json +++ b/public/locales/de/settings.json @@ -6,8 +6,8 @@ "applyInviteCode": "Einladungscode anwenden", "cancel": "Abbrechen", "change-language": "Sprache", - "confirm": "Confirm", - "confirm-action": "Confirm action", + "confirm": "Bestätigen", + "confirm-action": "Aktion bestätigen", "confirm-import-wallet": "Abandon current wallet?", "confirm-import-wallet-copy": "Are you sure you want to import a new wallet?", "connected-peers": "Verbundenen Peers", @@ -48,9 +48,9 @@ "title": "Zeit nach der die Maschine als inaktiv betrachtet wird" }, "importing-wallet": "Wallet wird importiert", - "importing-wallet-copy": "Tari Universe will restart automatically once your wallet has been imported", + "importing-wallet-copy": "Tari Universe wird automatisch neu starten, sobald dein Wallet importiert wurde", "invalid-seed-words": "Geben Sie 24 Wörter ein, getrennt durch Leerzeichen", - "invalid-stats-server-port": "Invalid stats server port", + "invalid-stats-server-port": "Ungültiger Statistik-Server-Port", "inviteCode": "Einladungscode", "is-on-orphan-chain": "Sie scheinen mit einem Fork verbunden zu sein und nicht mit der Hauptkette. Alle gewonnenen Blöcke könnten ungültig werden.", "last-block-added-time": "Letzte Blockzeit, die zur Kette hinzugefügt wurde", @@ -86,15 +86,15 @@ "pool-mining": "Pool-Mining", "pool-mining-description": "Wenn aktiviert, wirst du in einem Pool minen und einer Gruppe von Minern beitreten.", "pre-release": { - "description": "Explore the latest features before they go live and provide feedback", - "title": "Use pre-release version" + "description": "Erkunde die neuesten Funktionen, bevor sie live gehen, und gib Feedback", + "title": "Vorabversion verwenden" }, - "pre-release-note": "You are about to switch to the pre-release version of the application. This version can offer exciting new features and enhancements, with the possibility of encountering areas that may still be under refinement.", + "pre-release-note": "Du bist dabei, zur Vorabversion der Anwendung zu wechseln. Diese Version kann spannende neue Funktionen und Verbesserungen bieten, mit der Möglichkeit, auf Bereiche zu stoßen, die noch in der Verfeinerung sind.", "randomx-network-hash-rate": "Randomx-Netzwerk-Hashrate", "refresh-versions": "Versionen aktualisieren", "release-notes": { - "loading": "Loading release notes...", - "upgrade-available": "⚠️ Upgrade Available" + "loading": "Lade Versionshinweise...", + "upgrade-available": "⚠️ Upgrade verfügbar" }, "report-issue": "Ein Problem melden", "reset-permanently": "Bist du sicher, dass du alle Einstellungen dauerhaft zurücksetzen möchtest?", @@ -115,8 +115,8 @@ "title": "Automatischer Start beim Systemstart" }, "should-use-system-language": "Systemsprache verwenden", - "stable-version-note": "By turning off the pre-release version of the application, you will revert to the stable release, which prioritizes reliability and consistency. While you may miss out on the latest features and enhancements.", - "stats-server-port": "Stats server port", + "stable-version-note": "Wenn du die Vorabversion der Anwendung ausschaltest, kehrst du zur stabilen Version zurück, die Zuverlässigkeit und Konsistenz priorisiert. Dabei könntest du die neuesten Funktionen und Verbesserungen verpassen.", + "stats-server-port": "Statistik-Server-Port", "tabs": { "airdrop": "Airdrop", "connections": "Verbindungen", @@ -124,7 +124,7 @@ "general": "Allgemein", "mining": "Mining", "p2p": "Pool-Mining", - "releaseNotes": "Release Notes", + "releaseNotes": "Versionshinweise", "very_experimental": "Sehr experimentell", "wallet": "Wallet" }, @@ -143,7 +143,7 @@ }, "use-dynamic-fail-data": "Dynamische Fehlerdaten verwenden", "use-random-control-port": "Zufälligen Steuerport verwenden", - "use-random-port": "Use random port", + "use-random-port": "Zufälligen Port verwenden", "use-tor": "Tor verwenden", "use-tor-bridges": "Tor-Brücken verwenden", "visual-mode": "Visueller Modus", diff --git a/public/locales/de/sidebar.json b/public/locales/de/sidebar.json index d03c6a059..6cd6375ea 100644 --- a/public/locales/de/sidebar.json +++ b/public/locales/de/sidebar.json @@ -1,5 +1,5 @@ { - "auto-miner": "Auto Miner", + "auto-miner": "Auto-Miner", "auto-miner-description": "Der Auto Miner aktiviert deinen Miner, wenn deine Maschine im Leerlauf ist", "block": "Block", "hide-history": "Verlauf ausblenden", diff --git a/public/locales/de/sos.json b/public/locales/de/sos.json new file mode 100644 index 000000000..f7fb0e0ce --- /dev/null +++ b/public/locales/de/sos.json @@ -0,0 +1,55 @@ +{ + "widget": { + "prize": { + "upcomingReward": "kommende Belohnung / MacBook Pro 16’" + }, + "timer": { + "gettingClose": "Du kommst näher", + "days": "Tage", + "hours": "Stunden" + }, + "friends": { + "reduceTimer": "Verkürze deinen Timer, indem du Freunde einlädst", + "linkCopied": "Link kopiert!", + "growCrew": "erweitere dein Team" + } + }, + "superCharger": { + "title": "Super-Ladegerät", + "placeholder": "Gib deinen Code ein", + "success": "Zeitbonus hinzugefügt {{time}}.", + "error": "Ungültiger Code.", + "submit": "Los" + }, + "mainTimer": { + "title": "Dein Timer", + "days": "TAGE", + "hours": "STUNDEN", + "minutes": "MINUTEN", + "seconds": "SEKUNDEN" + }, + "progress": { + "message": "Du bist {{hours}} Stunden vom nächsten Rang entfernt. Weiter minen!" + }, + "leaserboardEntry": { + "mining": "Jetzt minen", + "idle": "Zuletzt vor {{time}} gemined" + }, + "leaderboard": { + "title": "Bestenliste", + "viewFull": "VOLLE BESTENLISTE ANZEIGEN" + }, + "member": { + "new": "Neu", + "nudge": "Anstupsen", + "minHr": "min/Std" + }, + "crewMining": { + "title": "Team-Mining", + "rate": "+{{rate}}min/Std", + "mining": "{{current}}/{{total}} Mining" + }, + "crewList": { + "placeholder": "Lade dein erstes Teammitglied ein" + } +} \ No newline at end of file diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 939002009..3a07d36dd 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -8,11 +8,11 @@ "day": "Jour", "disconnect": "Déconnecter", "hashrate": "Taux de hachage", - "installation-problem": "Installation problem", + "installation-problem": "Problème d\"installation", "max-temperature": "Température maximale", - "minimize": "Minimize", + "minimize": "Minimiser", "mode": "Mode", - "not-installed-in-applications-directory": "Oops! Tari Universe needs to live in the Applications directory. Mind installing it there?", + "not-installed-in-applications-directory": "Oups ! Tari Universe doit être dans le répertoire Applications. Pourriez-vous l\"installer là-bas ?", "please-try-again-later": "Réessaye plus tard s'il te plaît. Si le problème persiste, contacte-nous s'il te plaît.", "resources": "Ressources", "restart": "Redémarrer", @@ -23,7 +23,7 @@ "temperature": "Température", "testnet": "Testnet", "unknown": "Inconnu", - "unminimize": "Unminimize", + "unminimize": "Démagnifier", "usage": "Utilisation", "utilization": "Utilisation", "version": "Version", diff --git a/public/locales/fr/mining-view.json b/public/locales/fr/mining-view.json index d08321cc1..e9971daf8 100644 --- a/public/locales/fr/mining-view.json +++ b/public/locales/fr/mining-view.json @@ -17,13 +17,13 @@ "waiting-for-idle": "En attente d'inactivité" }, "orphan-chain-tooltip": { - "heading": "Things to try:", - "step_1": "Check your Internet connection", - "step_2": "Wait 30 mins", - "step_3": "Restart the app", - "step_4": "Try using a Tor Bridge (in Settings)", - "step_5": "Try disabling Tor (in Settings)", - "step_6": "Try an app reset (in Settings)" + "heading": "Choses à essayer :", + "step_1": "Vérifiez votre connexion Internet", + "step_2": "Attendez 30 minutes", + "step_3": "Redémarrez l\"application", + "step_4": "Essayez d\"utiliser un pont Tor (dans les paramètres)", + "step_5": "Essayez de désactiver Tor (dans les paramètres)", + "step_6": "Essayez de réinitialiser l\"application (dans les paramètres)" }, "you-earn-rewards-separately": "Vous gagnez des récompenses pour le minage CPU et GPU séparément", "you-won-block": "Vous avez gagné le bloc #{{ blockHeight }}", diff --git a/public/locales/fr/p2p.json b/public/locales/fr/p2p.json index 42ae94414..c3755420d 100644 --- a/public/locales/fr/p2p.json +++ b/public/locales/fr/p2p.json @@ -1,14 +1,14 @@ { - "listener-addresses": "Listener addresses", + "listener-addresses": "Adresses des auditeurs", "miners": "Mineurs", - "network-info": "Network info", + "network-info": "Infos réseau", "p2pool-chain-tip": "Conseil de chaîne P2Pool", "p2pool-connected": "P2Pool Connecté", "p2pool-connection-info": "Connexion", "p2pool-connection-info-more": "Détails de la connexion", - "p2pool-peers": "P2pool peers", + "p2pool-peers": "Pairs P2pool", "p2pool-stats": "Statistiques de minage en pool", - "randomx-stats": "RandomX Stats", - "sha3-stats": "SHA3 Stats", + "randomx-stats": "Statistiques RandomX", + "sha3-stats": "Statistiques SHA3", "tribe": "Tribu" } \ No newline at end of file diff --git a/public/locales/fr/settings.json b/public/locales/fr/settings.json index 093fae309..2feaeef39 100644 --- a/public/locales/fr/settings.json +++ b/public/locales/fr/settings.json @@ -6,8 +6,8 @@ "applyInviteCode": "Appliquer le code d\"invitation", "cancel": "Cancel", "change-language": "Langue", - "confirm": "Confirm", - "confirm-action": "Confirm action", + "confirm": "Confirmer", + "confirm-action": "Confirmer l\"action", "confirm-import-wallet": "Abandon current wallet?", "confirm-import-wallet-copy": "Are you sure you want to import a new wallet?", "connected-peers": "Pairs connectés", @@ -48,9 +48,9 @@ "title": "Temps après lequel la machine est considérée comme inactive" }, "importing-wallet": "Importation du portefeuille", - "importing-wallet-copy": "Tari Universe will restart automatically once your wallet has been imported", + "importing-wallet-copy": "Tari Universe redémarrera automatiquement une fois que votre portefeuille aura été importé", "invalid-seed-words": "Entrez 24 mots séparés par des espaces", - "invalid-stats-server-port": "Invalid stats server port", + "invalid-stats-server-port": "Port du serveur de statistiques invalide", "inviteCode": "Code d\"invitation", "is-on-orphan-chain": "Vous semblez être connecté à une branche secondaire, et non à la chaîne principale. Tout bloc que vous gagnez pourrait être invalidé.", "last-block-added-time": "Heure du dernier bloc ajouté à la chaîne", @@ -86,15 +86,15 @@ "pool-mining": "Minage en pool", "pool-mining-description": "Lorsqu\"il est activé, vous minerez dans un pool et rejoindrez un groupe de mineurs.", "pre-release": { - "description": "Explore the latest features before they go live and provide feedback", - "title": "Use pre-release version" + "description": "Explorez les dernières fonctionnalités avant leur mise en ligne et donnez votre avis", + "title": "Utiliser la version préliminaire" }, - "pre-release-note": "You are about to switch to the pre-release version of the application. This version can offer exciting new features and enhancements, with the possibility of encountering areas that may still be under refinement.", + "pre-release-note": "Vous êtes sur le point de passer à la version préliminaire de l\"application. Cette version peut offrir de nouvelles fonctionnalités et améliorations passionnantes, avec la possibilité de rencontrer des zones qui peuvent encore être en cours de perfectionnement.", "randomx-network-hash-rate": "Taux de hachage du réseau Randomx", "refresh-versions": "Rafraîchir les versions", "release-notes": { - "loading": "Loading release notes...", - "upgrade-available": "⚠️ Upgrade Available" + "loading": "Chargement des notes de version...", + "upgrade-available": "⚠️ Mise à jour disponible" }, "report-issue": "Signaler un problème", "reset-permanently": "Êtes-vous sûr de vouloir réinitialiser tous les paramètres de manière permanente ?", @@ -115,8 +115,8 @@ "title": "Démarrage automatique au démarrage du système" }, "should-use-system-language": "Utiliser la langue du système", - "stable-version-note": "By turning off the pre-release version of the application, you will revert to the stable release, which prioritizes reliability and consistency. While you may miss out on the latest features and enhancements.", - "stats-server-port": "Stats server port", + "stable-version-note": "En désactivant la version préliminaire de l\"application, vous reviendrez à la version stable, qui privilégie la fiabilité et la cohérence. Vous pourriez manquer les dernières fonctionnalités et améliorations.", + "stats-server-port": "Port du serveur de statistiques", "tabs": { "airdrop": "Airdrop", "connections": "Connexions", @@ -124,7 +124,7 @@ "general": "Général", "mining": "Minage", "p2p": "Minage en pool", - "releaseNotes": "Release Notes", + "releaseNotes": "Notes de version", "very_experimental": "Très Expérimental", "wallet": "Portefeuille" }, @@ -143,7 +143,7 @@ }, "use-dynamic-fail-data": "Utiliser des données d\"échec dynamiques", "use-random-control-port": "Utiliser un port de contrôle aléatoire", - "use-random-port": "Use random port", + "use-random-port": "Utiliser un port aléatoire", "use-tor": "Utiliser Tor", "use-tor-bridges": "Utiliser les ponts Tor", "visual-mode": "Mode visuel", diff --git a/public/locales/fr/sos.json b/public/locales/fr/sos.json new file mode 100644 index 000000000..68db96cc5 --- /dev/null +++ b/public/locales/fr/sos.json @@ -0,0 +1,55 @@ +{ + "widget": { + "prize": { + "upcomingReward": "récompense à venir / macbook pro 16’" + }, + "timer": { + "gettingClose": "Vous vous rapprochez", + "days": "jours", + "hours": "heures" + }, + "friends": { + "reduceTimer": "Réduisez votre minuteur en invitant des amis", + "linkCopied": "Lien copié !", + "growCrew": "agrandissez votre équipe" + } + }, + "superCharger": { + "title": "Super Chargeur", + "placeholder": "Entrez votre code", + "success": "Bonus de temps ajouté {{time}}.", + "error": "Code invalide.", + "submit": "Aller" + }, + "mainTimer": { + "title": "Votre Minuteur", + "days": "JOURS", + "hours": "HEURES", + "minutes": "MINUTES", + "seconds": "SECONDES" + }, + "progress": { + "message": "Vous êtes à {{hours}} heures du prochain rang. Continuez à miner !" + }, + "leaserboardEntry": { + "mining": "Minage en cours", + "idle": "Dernier minage il y a {{time}}" + }, + "leaderboard": { + "title": "Classement", + "viewFull": "VOIR le CLASSEMENT complet" + }, + "member": { + "new": "Nouveau", + "nudge": "Encourager", + "minHr": "min/hr" + }, + "crewMining": { + "title": "Minage en équipe", + "rate": "+{{rate}}min/hr", + "mining": "{{current}}/{{total}} Minage" + }, + "crewList": { + "placeholder": "Invitez votre premier membre d\"équipe" + } +} \ No newline at end of file diff --git a/public/locales/hi/common.json b/public/locales/hi/common.json index 496edb6aa..5f8fc8d58 100644 --- a/public/locales/hi/common.json +++ b/public/locales/hi/common.json @@ -8,11 +8,11 @@ "day": "दिन", "disconnect": "डिस्कनेक्ट करें", "hashrate": "हैश दर", - "installation-problem": "Installation problem", + "installation-problem": "स्थापना समस्या", "max-temperature": "अधिकतम तापमान", - "minimize": "Minimize", + "minimize": "मिनिमाइज़", "mode": "मोड", - "not-installed-in-applications-directory": "Oops! Tari Universe needs to live in the Applications directory. Mind installing it there?", + "not-installed-in-applications-directory": "ओह! Tari Universe को एप्लिकेशन डायरेक्टरी में होना चाहिए। क्या आप इसे वहां स्थापित करना चाहेंगे?", "please-try-again-later": "कृपया बाद में पुनः प्रयास करें। यदि समस्या बनी रहती है, तो कृपया हमसे संपर्क करें।", "resources": "संसाधन", "restart": "पुनः आरंभ करें", @@ -23,7 +23,7 @@ "temperature": "तापमान", "testnet": "टेस्टनेट", "unknown": "अज्ञात", - "unminimize": "Unminimize", + "unminimize": "अनमिनिमाइज़", "usage": "उपयोग", "utilization": "उपयोग", "version": "संस्करण", diff --git a/public/locales/hi/mining-view.json b/public/locales/hi/mining-view.json index 7348b079e..5e6985409 100644 --- a/public/locales/hi/mining-view.json +++ b/public/locales/hi/mining-view.json @@ -18,13 +18,13 @@ "waiting-for-idle": "निष्क्रिय होने की प्रतीक्षा" }, "orphan-chain-tooltip": { - "heading": "Things to try:", - "step_1": "Check your Internet connection", - "step_2": "Wait 30 mins", - "step_3": "Restart the app", - "step_4": "Try using a Tor Bridge (in Settings)", - "step_5": "Try disabling Tor (in Settings)", - "step_6": "Try an app reset (in Settings)" + "heading": "कोशिश करने के लिए चीजें:", + "step_1": "अपना इंटरनेट कनेक्शन जांचें", + "step_2": "30 मिनट प्रतीक्षा करें", + "step_3": "ऐप को पुनः आरंभ करें", + "step_4": "Tor ब्रिज का उपयोग करने का प्रयास करें (सेटिंग्स में)", + "step_5": "Tor को अक्षम करने का प्रयास करें (सेटिंग्स में)", + "step_6": "ऐप रीसेट करने का प्रयास करें (सेटिंग्स में)" }, "you-earn-rewards-separately": "आप CPU और GPU माइनिंग के लिए अलग-अलग पुरस्कार अर्जित करते हैं", "you-won-block": "आप ब्लॉक #{{ blockHeight }} के विजेता थे", diff --git a/public/locales/hi/p2p.json b/public/locales/hi/p2p.json index 442b4223f..f84185898 100644 --- a/public/locales/hi/p2p.json +++ b/public/locales/hi/p2p.json @@ -1,14 +1,14 @@ { - "listener-addresses": "Listener addresses", + "listener-addresses": "श्रोता पते", "miners": "माइनर्स", - "network-info": "Network info", + "network-info": "नेटवर्क जानकारी", "p2pool-chain-tip": "P2Pool चेन टिप", "p2pool-connected": "P2Pool कनेक्टेड", "p2pool-connection-info": "कनेक्शन", "p2pool-connection-info-more": "कनेक्शन विवरण", - "p2pool-peers": "P2pool peers", + "p2pool-peers": "P2pool सहकर्मी", "p2pool-stats": "पूल माइनिंग आँकड़े", - "randomx-stats": "RandomX Stats", - "sha3-stats": "SHA3 Stats", + "randomx-stats": "RandomX सांख्यिकी", + "sha3-stats": "SHA3 सांख्यिकी", "tribe": "जनजाति" } \ No newline at end of file diff --git a/public/locales/hi/settings.json b/public/locales/hi/settings.json index 44135d491..aaed71b7a 100644 --- a/public/locales/hi/settings.json +++ b/public/locales/hi/settings.json @@ -6,8 +6,8 @@ "applyInviteCode": "आमंत्रण कोड लागू करें", "cancel": "रद्द करें", "change-language": "भाषा", - "confirm": "Confirm", - "confirm-action": "Confirm action", + "confirm": "पुष्टि करें", + "confirm-action": "क्रिया की पुष्टि करें", "confirm-import-wallet": "Abandon current wallet?", "confirm-import-wallet-copy": "Are you sure you want to import a new wallet?", "connected-peers": "जुड़े हुए सहकर्मी", @@ -48,9 +48,9 @@ "title": "समय जिसके बाद मशीन को निष्क्रिय माना जाता है" }, "importing-wallet": "वॉलेट आयात किया जा रहा है", - "importing-wallet-copy": "Tari Universe will restart automatically once your wallet has been imported", + "importing-wallet-copy": "एक बार आपका वॉलेट आयात हो जाने पर Tari Universe स्वचालित रूप से पुनः आरंभ होगा", "invalid-seed-words": "24 शब्दों को स्पेस से अलग करके दर्ज करें", - "invalid-stats-server-port": "Invalid stats server port", + "invalid-stats-server-port": "अमान्य सांख्यिकी सर्वर पोर्ट", "inviteCode": "आमंत्रण कोड", "is-on-orphan-chain": "आप एक फोर्क से जुड़े हुए प्रतीत होते हैं, और मुख्य चेन से नहीं। आपके द्वारा जीते गए किसी भी ब्लॉक को अमान्य किया जा सकता है।", "last-block-added-time": "श्रृंखला में जोड़ा गया अंतिम ब्लॉक समय", @@ -86,15 +86,15 @@ "pool-mining": "पूल माइनिंग", "pool-mining-description": "सक्षम होने पर, आप एक पूल में माइन करेंगे और माइनर्स के समूह में शामिल होंगे।", "pre-release": { - "description": "Explore the latest features before they go live and provide feedback", - "title": "Use pre-release version" + "description": "नवीनतम सुविधाओं का अन्वेषण करें इससे पहले कि वे लाइव हों और प्रतिक्रिया दें", + "title": "पूर्व-रिलीज़ संस्करण का उपयोग करें" }, - "pre-release-note": "You are about to switch to the pre-release version of the application. This version can offer exciting new features and enhancements, with the possibility of encountering areas that may still be under refinement.", + "pre-release-note": "आप एप्लिकेशन के पूर्व-रिलीज़ संस्करण पर स्विच करने वाले हैं। यह संस्करण रोमांचक नई सुविधाएँ और संवर्द्धन प्रदान कर सकता है, जिसमें उन क्षेत्रों का सामना करने की संभावना है जो अभी भी परिष्कृत हो सकते हैं।", "randomx-network-hash-rate": "Randomx नेटवर्क हैशरेट", "refresh-versions": "संस्करण ताज़ा करें", "release-notes": { - "loading": "Loading release notes...", - "upgrade-available": "⚠️ Upgrade Available" + "loading": "रिलीज़ नोट्स लोड हो रहे हैं...", + "upgrade-available": "⚠️ उन्नयन उपलब्ध" }, "report-issue": "समस्या की रिपोर्ट करें", "reset-permanently": "क्या आप वाकई सभी सेटिंग्स को स्थायी रूप से रीसेट करना चाहते हैं?", @@ -115,8 +115,8 @@ "title": "सिस्टम बूट पर स्वचालित शुरूआत" }, "should-use-system-language": "सिस्टम भाषा का उपयोग करें", - "stable-version-note": "By turning off the pre-release version of the application, you will revert to the stable release, which prioritizes reliability and consistency. While you may miss out on the latest features and enhancements.", - "stats-server-port": "Stats server port", + "stable-version-note": "एप्लिकेशन के पूर्व-रिलीज़ संस्करण को बंद करके, आप स्थिर रिलीज़ पर लौट आएंगे, जो विश्वसनीयता और स्थिरता को प्राथमिकता देता है। जबकि आप नवीनतम सुविधाओं और संवर्द्धनों को याद कर सकते हैं।", + "stats-server-port": "सांख्यिकी सर्वर पोर्ट", "tabs": { "airdrop": "एयरड्रॉप", "connections": "कनेक्शन्स", @@ -124,7 +124,7 @@ "general": "सामान्य", "mining": "माइनिंग", "p2p": "पूल माइनिंग", - "releaseNotes": "Release Notes", + "releaseNotes": "रिलीज़ नोट्स", "very_experimental": "बहुत प्रयोगात्मक", "wallet": "वॉलेट" }, @@ -143,7 +143,7 @@ }, "use-dynamic-fail-data": "डायनामिक फेल डेटा का उपयोग करें", "use-random-control-port": "रैंडम कंट्रोल पोर्ट का उपयोग करें", - "use-random-port": "Use random port", + "use-random-port": "रैंडम पोर्ट का उपयोग करें", "use-tor": "टोर का उपयोग करें", "use-tor-bridges": "टोर ब्रिज का उपयोग करें", "visual-mode": "दृश्य मोड", diff --git a/public/locales/hi/sos.json b/public/locales/hi/sos.json new file mode 100644 index 000000000..c24527824 --- /dev/null +++ b/public/locales/hi/sos.json @@ -0,0 +1,55 @@ +{ + "widget": { + "prize": { + "upcomingReward": "आगामी पुरस्कार / मैकबुक प्रो 16’" + }, + "timer": { + "gettingClose": "आप करीब आ रहे हैं", + "days": "दिन", + "hours": "घंटे" + }, + "friends": { + "reduceTimer": "मित्रों को आमंत्रित करके अपना टाइमर कम करें", + "linkCopied": "लिंक कॉपी हो गया!", + "growCrew": "अपनी टीम बढ़ाएं" + } + }, + "superCharger": { + "title": "सुपर चार्जर", + "placeholder": "अपना कोड दर्ज करें", + "success": "समय बोनस जोड़ा गया {{time}}.", + "error": "अमान्य कोड।", + "submit": "जाएं" + }, + "mainTimer": { + "title": "आपका टाइमर", + "days": "दिन", + "hours": "घंटे", + "minutes": "मिनट", + "seconds": "सेकंड" + }, + "progress": { + "message": "आप अगले रैंक से {{hours}} घंटे दूर हैं। खनन जारी रखें!" + }, + "leaserboardEntry": { + "mining": "अभी खनन हो रहा है", + "idle": "अंतिम खनन {{time}} पहले" + }, + "leaderboard": { + "title": "लीडरबोर्ड", + "viewFull": "पूरा लीडरबोर्ड देखें" + }, + "member": { + "new": "नया", + "nudge": "हल्का धक्का", + "minHr": "मिन/घंटा" + }, + "crewMining": { + "title": "टीम खनन", + "rate": "+{{rate}}मिन/घंटा", + "mining": "{{current}}/{{total}} खनन" + }, + "crewList": { + "placeholder": "अपने पहले टीम सदस्य को आमंत्रित करें" + } +} \ No newline at end of file diff --git a/public/locales/id/common.json b/public/locales/id/common.json index b0bed0dfe..7fbdff468 100644 --- a/public/locales/id/common.json +++ b/public/locales/id/common.json @@ -8,11 +8,11 @@ "day": "Hari", "disconnect": "Putuskan Koneksi", "hashrate": "Hashrate", - "installation-problem": "Installation problem", + "installation-problem": "Masalah instalasi", "max-temperature": "Suhu maksimum", - "minimize": "Minimize", + "minimize": "Minimalkan", "mode": "Mode", - "not-installed-in-applications-directory": "Oops! Tari Universe needs to live in the Applications directory. Mind installing it there?", + "not-installed-in-applications-directory": "Ups! Tari Universe perlu berada di direktori Aplikasi. Apakah Anda keberatan menginstalnya di sana?", "please-try-again-later": "Silakan coba lagi nanti. Jika masalah berlanjut, silakan hubungi kami.", "resources": "Sumber daya", "restart": "Mulai Ulang", @@ -23,7 +23,7 @@ "temperature": "Suhu", "testnet": "Testnet", "unknown": "Tidak diketahui", - "unminimize": "Unminimize", + "unminimize": "Maksimalkan", "usage": "Penggunaan", "utilization": "Pemanfaatan", "version": "Versi", diff --git a/public/locales/id/mining-view.json b/public/locales/id/mining-view.json index 19a9bafcd..3ebd912e5 100644 --- a/public/locales/id/mining-view.json +++ b/public/locales/id/mining-view.json @@ -18,13 +18,13 @@ "waiting-for-idle": "Menunggu Tidak Aktif" }, "orphan-chain-tooltip": { - "heading": "Things to try:", - "step_1": "Check your Internet connection", - "step_2": "Wait 30 mins", - "step_3": "Restart the app", - "step_4": "Try using a Tor Bridge (in Settings)", - "step_5": "Try disabling Tor (in Settings)", - "step_6": "Try an app reset (in Settings)" + "heading": "Hal-hal yang bisa dicoba:", + "step_1": "Periksa koneksi Internet Anda", + "step_2": "Tunggu 30 menit", + "step_3": "Mulai ulang aplikasi", + "step_4": "Coba gunakan Tor Bridge (di Pengaturan)", + "step_5": "Coba nonaktifkan Tor (di Pengaturan)", + "step_6": "Coba atur ulang aplikasi (di Pengaturan)" }, "you-earn-rewards-separately": "Anda mendapatkan hadiah untuk menambang CPU dan GPU secara terpisah", "you-won-block": "Anda adalah pemenang dari blok #{{ blockHeight }}", diff --git a/public/locales/id/p2p.json b/public/locales/id/p2p.json index 42603cea0..04dc8625c 100644 --- a/public/locales/id/p2p.json +++ b/public/locales/id/p2p.json @@ -1,14 +1,14 @@ { - "listener-addresses": "Listener addresses", + "listener-addresses": "Alamat pendengar", "miners": "Penambang", - "network-info": "Network info", + "network-info": "Info jaringan", "p2pool-chain-tip": "Tip Rantai P2Pool", "p2pool-connected": "P2Pool Terhubung", "p2pool-connection-info": "Koneksi", "p2pool-connection-info-more": "Detail koneksi", - "p2pool-peers": "P2pool peers", + "p2pool-peers": "Rekan P2pool", "p2pool-stats": "Statistik penambangan pool", - "randomx-stats": "RandomX Stats", - "sha3-stats": "SHA3 Stats", - "tribe": "Tribe" + "randomx-stats": "Statistik RandomX", + "sha3-stats": "Statistik SHA3", + "tribe": "Suku" } \ No newline at end of file diff --git a/public/locales/id/settings.json b/public/locales/id/settings.json index 3d8f6559a..d037b53cd 100644 --- a/public/locales/id/settings.json +++ b/public/locales/id/settings.json @@ -6,8 +6,8 @@ "applyInviteCode": "Terapkan Kode Undangan", "cancel": "Batal", "change-language": "Bahasa", - "confirm": "Confirm", - "confirm-action": "Confirm action", + "confirm": "Konfirmasi", + "confirm-action": "Konfirmasi tindakan", "confirm-import-wallet": "Abandon current wallet?", "confirm-import-wallet-copy": "Are you sure you want to import a new wallet?", "connected-peers": "Rekan Terhubung", @@ -48,9 +48,9 @@ "title": "Waktu setelah mesin dianggap tidak aktif" }, "importing-wallet": "Mengimpor dompet", - "importing-wallet-copy": "Tari Universe will restart automatically once your wallet has been imported", + "importing-wallet-copy": "Tari Universe akan memulai ulang secara otomatis setelah dompet Anda diimpor", "invalid-seed-words": "Masukkan 24 kata yang dipisahkan oleh spasi", - "invalid-stats-server-port": "Invalid stats server port", + "invalid-stats-server-port": "Port server statistik tidak valid", "inviteCode": "Kode Undangan", "is-on-orphan-chain": "Anda tampaknya terhubung ke cabang, bukan rantai utama. Blok yang Anda menangkan mungkin akan dibatalkan.", "last-block-added-time": "Waktu blok terakhir ditambahkan ke rantai", @@ -86,15 +86,15 @@ "pool-mining": "Penambangan Pool", "pool-mining-description": "Ketika diaktifkan, Anda akan menambang dalam pool dan bergabung dengan kelompok penambang.", "pre-release": { - "description": "Explore the latest features before they go live and provide feedback", - "title": "Use pre-release version" + "description": "Jelajahi fitur terbaru sebelum diluncurkan dan berikan umpan balik", + "title": "Gunakan versi pra-rilis" }, - "pre-release-note": "You are about to switch to the pre-release version of the application. This version can offer exciting new features and enhancements, with the possibility of encountering areas that may still be under refinement.", + "pre-release-note": "Anda akan beralih ke versi pra-rilis aplikasi. Versi ini dapat menawarkan fitur dan peningkatan baru yang menarik, dengan kemungkinan menemukan area yang mungkin masih dalam penyempurnaan.", "randomx-network-hash-rate": "Hashrate jaringan Randomx", "refresh-versions": "Segarkan versi", "release-notes": { - "loading": "Loading release notes...", - "upgrade-available": "⚠️ Upgrade Available" + "loading": "Memuat catatan rilis...", + "upgrade-available": "⚠️ Pembaruan Tersedia" }, "report-issue": "Laporkan masalah", "reset-permanently": "Apakah Anda yakin ingin mengatur ulang semua pengaturan secara permanen?", @@ -115,8 +115,8 @@ "title": "Mulai otomatis saat boot sistem" }, "should-use-system-language": "Gunakan bahasa sistem", - "stable-version-note": "By turning off the pre-release version of the application, you will revert to the stable release, which prioritizes reliability and consistency. While you may miss out on the latest features and enhancements.", - "stats-server-port": "Stats server port", + "stable-version-note": "Dengan mematikan versi pra-rilis aplikasi, Anda akan kembali ke rilis stabil, yang memprioritaskan keandalan dan konsistensi. Meskipun Anda mungkin melewatkan fitur dan peningkatan terbaru.", + "stats-server-port": "Port server statistik", "tabs": { "airdrop": "Airdrop", "connections": "Koneksi", @@ -124,7 +124,7 @@ "general": "Umum", "mining": "Penambangan", "p2p": "Penambangan Pool", - "releaseNotes": "Release Notes", + "releaseNotes": "Catatan Rilis", "very_experimental": "Sangat Eksperimental", "wallet": "Dompet" }, @@ -143,7 +143,7 @@ }, "use-dynamic-fail-data": "Gunakan data gagal dinamis", "use-random-control-port": "Gunakan port kontrol acak", - "use-random-port": "Use random port", + "use-random-port": "Gunakan port acak", "use-tor": "Gunakan Tor", "use-tor-bridges": "Gunakan Jembatan Tor", "visual-mode": "Mode visual", diff --git a/public/locales/id/sos.json b/public/locales/id/sos.json new file mode 100644 index 000000000..a169e08ea --- /dev/null +++ b/public/locales/id/sos.json @@ -0,0 +1,55 @@ +{ + "widget": { + "prize": { + "upcomingReward": "hadiah mendatang / macbook pro 16’" + }, + "timer": { + "gettingClose": "Anda sudah hampir sampai", + "days": "hari", + "hours": "jam" + }, + "friends": { + "reduceTimer": "Kurangi waktu Anda dengan mengundang teman", + "linkCopied": "Tautan disalin!", + "growCrew": "kembangkan kru Anda" + } + }, + "superCharger": { + "title": "Pengisi Daya Super", + "placeholder": "Masukkan Kode Anda", + "success": "Bonus waktu ditambahkan {{time}}.", + "error": "Kode tidak valid.", + "submit": "Pergi" + }, + "mainTimer": { + "title": "Timer Anda", + "days": "HARI", + "hours": "JAM", + "minutes": "MENIT", + "seconds": "DETIK" + }, + "progress": { + "message": "Anda {{hours}} jam lagi dari peringkat berikutnya. Terus menambang!" + }, + "leaserboardEntry": { + "mining": "Sedang menambang", + "idle": "Terakhir menambang {{time}} yang lalu" + }, + "leaderboard": { + "title": "Papan Peringkat", + "viewFull": "LIHAT Papan Peringkat lengkap" + }, + "member": { + "new": "Baru", + "nudge": "Dorong", + "minHr": "menit/jam" + }, + "crewMining": { + "title": "Penambangan kru", + "rate": "+{{rate}}menit/jam", + "mining": "{{current}}/{{total}} Menambang" + }, + "crewList": { + "placeholder": "Undang anggota kru pertama Anda" + } +} \ No newline at end of file diff --git a/public/locales/ja/common.json b/public/locales/ja/common.json index fa9db31df..f7902802a 100644 --- a/public/locales/ja/common.json +++ b/public/locales/ja/common.json @@ -8,11 +8,11 @@ "day": "日", "disconnect": "切断", "hashrate": "ハッシュレート", - "installation-problem": "Installation problem", + "installation-problem": "インストールの問題", "max-temperature": "最大温度", - "minimize": "Minimize", + "minimize": "最小化", "mode": "モード", - "not-installed-in-applications-directory": "Oops! Tari Universe needs to live in the Applications directory. Mind installing it there?", + "not-installed-in-applications-directory": "おっと!Tari Universe はアプリケーションディレクトリに配置する必要があります。そこにインストールしてもらえますか?", "please-try-again-later": "後でもう一度お試しください。問題が続く場合は、お問い合わせください。", "resources": "リソース", "restart": "再起動", @@ -23,7 +23,7 @@ "temperature": "温度", "testnet": "テストネット", "unknown": "不明", - "unminimize": "Unminimize", + "unminimize": "最小化解除", "usage": "使用量", "utilization": "利用率", "version": "バージョン", diff --git a/public/locales/ja/mining-view.json b/public/locales/ja/mining-view.json index 768451a86..a899edc1b 100644 --- a/public/locales/ja/mining-view.json +++ b/public/locales/ja/mining-view.json @@ -18,13 +18,13 @@ "waiting-for-idle": "アイドル待機中" }, "orphan-chain-tooltip": { - "heading": "Things to try:", - "step_1": "Check your Internet connection", - "step_2": "Wait 30 mins", - "step_3": "Restart the app", - "step_4": "Try using a Tor Bridge (in Settings)", - "step_5": "Try disabling Tor (in Settings)", - "step_6": "Try an app reset (in Settings)" + "heading": "試すべきこと:", + "step_1": "インターネット接続を確認", + "step_2": "30分待つ", + "step_3": "アプリを再起動", + "step_4": "Torブリッジを使用してみてください(設定で)", + "step_5": "Torを無効にしてみてください(設定で)", + "step_6": "アプリをリセットしてみてください(設定で)" }, "you-earn-rewards-separately": "CPUとGPUのマイニングで別々に報酬を得ます", "you-won-block": "ブロック #{{ blockHeight }} の勝者です", diff --git a/public/locales/ja/p2p.json b/public/locales/ja/p2p.json index a6868b8d6..f66078a30 100644 --- a/public/locales/ja/p2p.json +++ b/public/locales/ja/p2p.json @@ -1,14 +1,14 @@ { - "listener-addresses": "Listener addresses", + "listener-addresses": "リスナーアドレス", "miners": "マイナー", - "network-info": "Network info", + "network-info": "ネットワーク情報", "p2pool-chain-tip": "P2Poolチェーンの先端", "p2pool-connected": "P2Poolに接続されました", "p2pool-connection-info": "接続", "p2pool-connection-info-more": "接続の詳細", - "p2pool-peers": "P2pool peers", + "p2pool-peers": "P2Pool ピア", "p2pool-stats": "プールマイニングの統計", - "randomx-stats": "RandomX Stats", - "sha3-stats": "SHA3 Stats", + "randomx-stats": "RandomX 統計", + "sha3-stats": "SHA3 統計", "tribe": "トライブ" } \ No newline at end of file diff --git a/public/locales/ja/settings.json b/public/locales/ja/settings.json index c3f904e13..b7a4d3648 100644 --- a/public/locales/ja/settings.json +++ b/public/locales/ja/settings.json @@ -6,8 +6,8 @@ "applyInviteCode": "招待コードを適用", "cancel": "キャンセル", "change-language": "言語", - "confirm": "Confirm", - "confirm-action": "Confirm action", + "confirm": "確認", + "confirm-action": "アクションを確認", "confirm-import-wallet": "Abandon current wallet?", "confirm-import-wallet-copy": "Are you sure you want to import a new wallet?", "connected-peers": "接続されたピア", @@ -48,9 +48,9 @@ "title": "マシンがアイドルと見なされるまでの時間" }, "importing-wallet": "ウォレットのインポート", - "importing-wallet-copy": "Tari Universe will restart automatically once your wallet has been imported", + "importing-wallet-copy": "ウォレットがインポートされると、Tari Universe は自動的に再起動します", "invalid-seed-words": "スペースで区切って24の単語を入力してください", - "invalid-stats-server-port": "Invalid stats server port", + "invalid-stats-server-port": "無効な統計サーバーポート", "inviteCode": "招待コード", "is-on-orphan-chain": "フォークに接続されているようです。メインチェーンではありません。獲得したブロックは無効になる可能性があります。", "last-block-added-time": "最後のブロックがチェーンに追加された時間", @@ -86,15 +86,15 @@ "pool-mining": "プールマイニング", "pool-mining-description": "有効にすると、プールでマイニングし、マイナーのグループに参加します。", "pre-release": { - "description": "Explore the latest features before they go live and provide feedback", - "title": "Use pre-release version" + "description": "最新の機能を公開前に探索し、フィードバックを提供", + "title": "プレリリース版を使用" }, - "pre-release-note": "You are about to switch to the pre-release version of the application. This version can offer exciting new features and enhancements, with the possibility of encountering areas that may still be under refinement.", + "pre-release-note": "アプリケーションのプレリリース版に切り替えようとしています。このバージョンは、エキサイティングな新機能や改善を提供する可能性がありますが、まだ改良中の部分に遭遇する可能性もあります。", "randomx-network-hash-rate": "Randomxネットワークのハッシュレート", "refresh-versions": "バージョンを更新", "release-notes": { - "loading": "Loading release notes...", - "upgrade-available": "⚠️ Upgrade Available" + "loading": "リリースノートを読み込み中...", + "upgrade-available": "⚠️ アップグレード可能" }, "report-issue": "問題を報告する", "reset-permanently": "すべての設定を永久にリセットしてもよろしいですか?", @@ -115,8 +115,8 @@ "title": "システム起動時に自動開始" }, "should-use-system-language": "システム言語を使用", - "stable-version-note": "By turning off the pre-release version of the application, you will revert to the stable release, which prioritizes reliability and consistency. While you may miss out on the latest features and enhancements.", - "stats-server-port": "Stats server port", + "stable-version-note": "アプリケーションのプレリリース版をオフにすると、信頼性と一貫性を重視した安定版に戻ります。最新の機能や改善を逃す可能性があります。", + "stats-server-port": "統計サーバーポート", "tabs": { "airdrop": "エアドロップ", "connections": "接続", @@ -124,7 +124,7 @@ "general": "一般", "mining": "マイニング", "p2p": "プールマイニング", - "releaseNotes": "Release Notes", + "releaseNotes": "リリースノート", "very_experimental": "非常に実験的", "wallet": "ウォレット" }, @@ -143,7 +143,7 @@ }, "use-dynamic-fail-data": "動的フェイルデータを使用", "use-random-control-port": "ランダムな制御ポートを使用", - "use-random-port": "Use random port", + "use-random-port": "ランダムポートを使用", "use-tor": "Torを使用する", "use-tor-bridges": "Torブリッジを使用", "visual-mode": "ビジュアルモード", diff --git a/public/locales/ja/sos.json b/public/locales/ja/sos.json new file mode 100644 index 000000000..f7f1e4f7c --- /dev/null +++ b/public/locales/ja/sos.json @@ -0,0 +1,55 @@ +{ + "widget": { + "prize": { + "upcomingReward": "次の報酬 / MacBook Pro 16’" + }, + "timer": { + "gettingClose": "もうすぐです", + "days": "日", + "hours": "時間" + }, + "friends": { + "reduceTimer": "友達を招待してタイマーを短縮", + "linkCopied": "リンクがコピーされました!", + "growCrew": "クルーを成長させる" + } + }, + "superCharger": { + "title": "スーパー チャージャー", + "placeholder": "コードを入力", + "success": "時間ボーナスが追加されました {{time}}。", + "error": "無効なコードです。", + "submit": "実行" + }, + "mainTimer": { + "title": "あなたのタイマー", + "days": "日", + "hours": "時間", + "minutes": "分", + "seconds": "秒" + }, + "progress": { + "message": "次のランクまであと{{hours}}時間です。マイニングを続けてください!" + }, + "leaserboardEntry": { + "mining": "現在マイニング中", + "idle": "最後にマイニングしたのは{{time}}前" + }, + "leaderboard": { + "title": "リーダーボード", + "viewFull": "完全なリーダーボードを表示" + }, + "member": { + "new": "新規", + "nudge": "促す", + "minHr": "分/時" + }, + "crewMining": { + "title": "クルーマイニング", + "rate": "+{{rate}}分/時", + "mining": "{{current}}/{{total}} マイニング中" + }, + "crewList": { + "placeholder": "最初のクルーメンバーを招待" + } +} \ No newline at end of file diff --git a/public/locales/ko/common.json b/public/locales/ko/common.json index 0c929b243..fc25e6044 100644 --- a/public/locales/ko/common.json +++ b/public/locales/ko/common.json @@ -8,11 +8,11 @@ "day": "일", "disconnect": "연결 해제", "hashrate": "해시레이트", - "installation-problem": "Installation problem", + "installation-problem": "설치 문제", "max-temperature": "최대 온도", - "minimize": "Minimize", + "minimize": "최소화", "mode": "모드", - "not-installed-in-applications-directory": "Oops! Tari Universe needs to live in the Applications directory. Mind installing it there?", + "not-installed-in-applications-directory": "앗! Tari Universe는 애플리케이션 디렉토리에 있어야 합니다. 거기에 설치하시겠습니까?", "please-try-again-later": "나중에 다시 시도해 주세요. 문제가 계속되면 저희에게 연락해 주세요.", "resources": "자원", "restart": "재시작", @@ -23,7 +23,7 @@ "temperature": "온도", "testnet": "테스트넷", "unknown": "알 수 없음", - "unminimize": "Unminimize", + "unminimize": "최소화 해제", "usage": "사용량", "utilization": "활용도", "version": "버전", diff --git a/public/locales/ko/mining-view.json b/public/locales/ko/mining-view.json index eb56ebd74..01dfb831d 100644 --- a/public/locales/ko/mining-view.json +++ b/public/locales/ko/mining-view.json @@ -18,13 +18,13 @@ "waiting-for-idle": "유휴 상태 대기 중" }, "orphan-chain-tooltip": { - "heading": "Things to try:", - "step_1": "Check your Internet connection", - "step_2": "Wait 30 mins", - "step_3": "Restart the app", - "step_4": "Try using a Tor Bridge (in Settings)", - "step_5": "Try disabling Tor (in Settings)", - "step_6": "Try an app reset (in Settings)" + "heading": "시도할 것들:", + "step_1": "인터넷 연결을 확인하세요", + "step_2": "30분 기다리세요", + "step_3": "앱을 재시작하세요", + "step_4": "Tor 브리지를 사용해 보세요 (설정에서)", + "step_5": "Tor를 비활성화해 보세요 (설정에서)", + "step_6": "앱을 재설정해 보세요 (설정에서)" }, "you-earn-rewards-separately": "CPU와 GPU 채굴에 대해 각각 보상을 받습니다", "you-won-block": "당신은 블록 #{{ blockHeight }}의 승자였습니다", diff --git a/public/locales/ko/p2p.json b/public/locales/ko/p2p.json index 825884ac2..bc73019ee 100644 --- a/public/locales/ko/p2p.json +++ b/public/locales/ko/p2p.json @@ -1,14 +1,14 @@ { - "listener-addresses": "Listener addresses", + "listener-addresses": "리스너 주소", "miners": "채굴자", - "network-info": "Network info", + "network-info": "네트워크 정보", "p2pool-chain-tip": "P2Pool 체인 팁", "p2pool-connected": "P2Pool 연결됨", "p2pool-connection-info": "연결", "p2pool-connection-info-more": "연결 세부 정보", - "p2pool-peers": "P2pool peers", + "p2pool-peers": "P2pool 피어", "p2pool-stats": "풀 채굴 통계", - "randomx-stats": "RandomX Stats", - "sha3-stats": "SHA3 Stats", + "randomx-stats": "RandomX 통계", + "sha3-stats": "SHA3 통계", "tribe": "부족" } \ No newline at end of file diff --git a/public/locales/ko/settings.json b/public/locales/ko/settings.json index 581529585..3ee71253b 100644 --- a/public/locales/ko/settings.json +++ b/public/locales/ko/settings.json @@ -6,8 +6,8 @@ "applyInviteCode": "초대 코드 적용", "cancel": "취소", "change-language": "언어", - "confirm": "Confirm", - "confirm-action": "Confirm action", + "confirm": "확인", + "confirm-action": "작업 확인", "confirm-import-wallet": "Abandon current wallet?", "confirm-import-wallet-copy": "Are you sure you want to import a new wallet?", "connected-peers": "연결된 피어", @@ -48,9 +48,9 @@ "title": "기기가 유휴 상태로 간주되는 시간" }, "importing-wallet": "지갑 가져오기", - "importing-wallet-copy": "Tari Universe will restart automatically once your wallet has been imported", + "importing-wallet-copy": "지갑이 가져오면 Tari Universe가 자동으로 재시작됩니다", "invalid-seed-words": "공백으로 구분된 24개의 단어를 입력하세요", - "invalid-stats-server-port": "Invalid stats server port", + "invalid-stats-server-port": "잘못된 통계 서버 포트", "inviteCode": "초대 코드", "is-on-orphan-chain": "당신은 포크에 연결된 것 같으며, 메인 체인이 아닙니다. 당신이 획득한 블록은 무효화될 수 있습니다.", "last-block-added-time": "마지막 블록 체인 추가 시간", @@ -86,15 +86,15 @@ "pool-mining": "풀 채굴", "pool-mining-description": "활성화되면 풀에서 채굴하고 마이너 그룹에 참여합니다.", "pre-release": { - "description": "Explore the latest features before they go live and provide feedback", - "title": "Use pre-release version" + "description": "최신 기능을 라이브 전에 탐색하고 피드백을 제공하세요", + "title": "사전 릴리스 버전 사용" }, - "pre-release-note": "You are about to switch to the pre-release version of the application. This version can offer exciting new features and enhancements, with the possibility of encountering areas that may still be under refinement.", + "pre-release-note": "애플리케이션의 사전 릴리스 버전으로 전환하려고 합니다. 이 버전은 흥미로운 새로운 기능과 개선 사항을 제공할 수 있으며, 아직 개선 중인 부분을 만날 가능성이 있습니다.", "randomx-network-hash-rate": "Randomx 네트워크 해시레이트", "refresh-versions": "버전 새로고침", "release-notes": { - "loading": "Loading release notes...", - "upgrade-available": "⚠️ Upgrade Available" + "loading": "릴리스 노트 로딩 중...", + "upgrade-available": "⚠️ 업그레이드 가능" }, "report-issue": "문제 보고", "reset-permanently": "모든 설정을 영구적으로 초기화하시겠습니까?", @@ -115,8 +115,8 @@ "title": "시스템 부팅 시 자동 시작" }, "should-use-system-language": "시스템 언어 사용", - "stable-version-note": "By turning off the pre-release version of the application, you will revert to the stable release, which prioritizes reliability and consistency. While you may miss out on the latest features and enhancements.", - "stats-server-port": "Stats server port", + "stable-version-note": "애플리케이션의 사전 릴리스 버전을 끄면 안정 릴리스로 돌아가며, 이는 신뢰성과 일관성을 우선시합니다. 최신 기능과 개선 사항을 놓칠 수 있습니다.", + "stats-server-port": "통계 서버 포트", "tabs": { "airdrop": "에어드롭", "connections": "연결", @@ -124,7 +124,7 @@ "general": "일반", "mining": "채굴", "p2p": "풀 채굴", - "releaseNotes": "Release Notes", + "releaseNotes": "릴리스 노트", "very_experimental": "매우 실험적", "wallet": "지갑" }, @@ -143,7 +143,7 @@ }, "use-dynamic-fail-data": "동적 실패 데이터 사용", "use-random-control-port": "랜덤 제어 포트 사용", - "use-random-port": "Use random port", + "use-random-port": "임의의 포트 사용", "use-tor": "Tor 사용하기", "use-tor-bridges": "Tor 브리지 사용", "visual-mode": "시각 모드", diff --git a/public/locales/ko/sos.json b/public/locales/ko/sos.json new file mode 100644 index 000000000..a131ab5bd --- /dev/null +++ b/public/locales/ko/sos.json @@ -0,0 +1,55 @@ +{ + "widget": { + "prize": { + "upcomingReward": "다가오는 보상 / 맥북 프로 16’" + }, + "timer": { + "gettingClose": "거의 다 왔습니다", + "days": "일", + "hours": "시간" + }, + "friends": { + "reduceTimer": "친구를 초대하여 타이머를 줄이세요", + "linkCopied": "링크가 복사되었습니다!", + "growCrew": "팀을 성장시키세요" + } + }, + "superCharger": { + "title": "슈퍼 충전기", + "placeholder": "코드를 입력하세요", + "success": "시간 보너스가 추가되었습니다 {{time}}.", + "error": "잘못된 코드입니다.", + "submit": "시작" + }, + "mainTimer": { + "title": "당신의 타이머", + "days": "일", + "hours": "시간", + "minutes": "분", + "seconds": "초" + }, + "progress": { + "message": "다음 등급까지 {{hours}} 시간 남았습니다. 계속 채굴하세요!" + }, + "leaserboardEntry": { + "mining": "현재 채굴 중", + "idle": "마지막 채굴 {{time}} 전" + }, + "leaderboard": { + "title": "리더보드", + "viewFull": "전체 리더보드 보기" + }, + "member": { + "new": "새로운", + "nudge": "살짝 밀기", + "minHr": "분/시간" + }, + "crewMining": { + "title": "팀 채굴", + "rate": "+{{rate}}분/시간", + "mining": "{{current}}/{{total}} 채굴 중" + }, + "crewList": { + "placeholder": "첫 번째 팀원을 초대하세요" + } +} \ No newline at end of file diff --git a/public/locales/pl/common.json b/public/locales/pl/common.json index bbdc2e7ae..da049492c 100644 --- a/public/locales/pl/common.json +++ b/public/locales/pl/common.json @@ -8,11 +8,11 @@ "day": "Dzień", "disconnect": "Odłącz", "hashrate": "Prędkość ( hashrate )", - "installation-problem": "Installation problem", + "installation-problem": "Problem z instalacją", "max-temperature": "Maksymalna temperatura", - "minimize": "Minimize", + "minimize": "Zminimalizuj", "mode": "Tryb", - "not-installed-in-applications-directory": "Oops! Tari Universe needs to live in the Applications directory. Mind installing it there?", + "not-installed-in-applications-directory": "Ups! Tari Universe musi być zainstalowane w katalogu Aplikacje. Czy możesz je tam zainstalować?", "please-try-again-later": "Spróbuj ponownie później. Jeśli problem będzie się powtarzał, skontaktuj się z nami.", "resources": "Zasoby", "restart": "Uruchom ponownie", @@ -23,7 +23,7 @@ "temperature": "Temperatura", "testnet": "Testnet", "unknown": "Nieznany", - "unminimize": "Unminimize", + "unminimize": "Przywróć", "usage": "Użycie", "utilization": "Wykorzystanie", "version": "Wersja", diff --git a/public/locales/pl/mining-view.json b/public/locales/pl/mining-view.json index 7dfc1bf0a..71c326594 100644 --- a/public/locales/pl/mining-view.json +++ b/public/locales/pl/mining-view.json @@ -18,13 +18,13 @@ "waiting-for-idle": "Oczekiwanie na bezczynność" }, "orphan-chain-tooltip": { - "heading": "Things to try:", - "step_1": "Check your Internet connection", - "step_2": "Wait 30 mins", - "step_3": "Restart the app", - "step_4": "Try using a Tor Bridge (in Settings)", - "step_5": "Try disabling Tor (in Settings)", - "step_6": "Try an app reset (in Settings)" + "heading": "Rzeczy do wypróbowania:", + "step_1": "Sprawdź swoje połączenie internetowe", + "step_2": "Poczekaj 30 minut", + "step_3": "Uruchom ponownie aplikację", + "step_4": "Spróbuj użyć mostu Tor (w Ustawieniach)", + "step_5": "Spróbuj wyłączyć Tor (w Ustawieniach)", + "step_6": "Spróbuj zresetować aplikację (w Ustawieniach)" }, "you-earn-rewards-separately": "Zarabiasz nagrody za kopanie CPU i GPU osobno", "you-won-block": "Byłeś zwycięzcą bloku #{{ blockHeight }}", diff --git a/public/locales/pl/p2p.json b/public/locales/pl/p2p.json index b2f575e91..16255b5b4 100644 --- a/public/locales/pl/p2p.json +++ b/public/locales/pl/p2p.json @@ -1,14 +1,14 @@ { - "listener-addresses": "Listener addresses", + "listener-addresses": "Adresy nasłuchujące", "miners": "Górnicy", - "network-info": "Network info", + "network-info": "Informacje o sieci", "p2pool-chain-tip": "Wskazówka łańcucha P2Pool", "p2pool-connected": "Połączono z P2Pool", "p2pool-connection-info": "Połączenie", "p2pool-connection-info-more": "Szczegóły połączenia", - "p2pool-peers": "P2pool peers", + "p2pool-peers": "Rówieśnicy P2pool", "p2pool-stats": "Statystyki kopania w puli", - "randomx-stats": "RandomX Stats", - "sha3-stats": "SHA3 Stats", + "randomx-stats": "Statystyki RandomX", + "sha3-stats": "Statystyki SHA3", "tribe": "Plemie" } \ No newline at end of file diff --git a/public/locales/pl/settings.json b/public/locales/pl/settings.json index acd0e61df..8cf352a41 100644 --- a/public/locales/pl/settings.json +++ b/public/locales/pl/settings.json @@ -6,8 +6,8 @@ "applyInviteCode": "Zastosuj Kod Zaproszenia", "cancel": "Anuluj", "change-language": "Zmień język", - "confirm": "Confirm", - "confirm-action": "Confirm action", + "confirm": "Potwierdź", + "confirm-action": "Potwierdź działanie", "confirm-import-wallet": "Abandon current wallet?", "confirm-import-wallet-copy": "Are you sure you want to import a new wallet?", "connected-peers": "Połączone węzły", @@ -49,9 +49,9 @@ "title": "Czas po którym urządzenie jest uważane za bezczynne" }, "importing-wallet": "Importowanie portfela", - "importing-wallet-copy": "Tari Universe will restart automatically once your wallet has been imported", + "importing-wallet-copy": "Tari Universe uruchomi się ponownie automatycznie po zaimportowaniu portfela", "invalid-seed-words": "Wprowadź 24 słowa oddzielone spacjami", - "invalid-stats-server-port": "Invalid stats server port", + "invalid-stats-server-port": "Nieprawidłowy port serwera statystyk", "inviteCode": "Kod Zaproszenia", "is-on-orphan-chain": "Wygląda na to, że jesteś połączony z rozwidleniem, a nie z głównym łańcuchem. Wszelkie wygrane bloki mogą zostać unieważnione.", "last-block-added-time": "Czas dodania ostatniego bloku do łańcucha", @@ -88,15 +88,15 @@ "pool-mining": "Kopanie w puli", "pool-mining-description": "Po włączeniu tej opcji będziesz wydobywać w puli i dołączać do grupy górników (plemienia).", "pre-release": { - "description": "Explore the latest features before they go live and provide feedback", - "title": "Use pre-release version" + "description": "Odkryj najnowsze funkcje przed ich oficjalnym wydaniem i przekaż opinię", + "title": "Użyj wersji przedpremierowej" }, - "pre-release-note": "You are about to switch to the pre-release version of the application. This version can offer exciting new features and enhancements, with the possibility of encountering areas that may still be under refinement.", + "pre-release-note": "Zamierzasz przełączyć się na wersję przedpremierową aplikacji. Ta wersja może oferować ekscytujące nowe funkcje i ulepszenia, z możliwością napotkania obszarów, które mogą być jeszcze w trakcie dopracowywania.", "randomx-network-hash-rate": "Hashrate sieci Randomx", "refresh-versions": "Odśwież wersje", "release-notes": { - "loading": "Loading release notes...", - "upgrade-available": "⚠️ Upgrade Available" + "loading": "Ładowanie notatek o wydaniu...", + "upgrade-available": "⚠️ Dostępna aktualizacja" }, "report-issue": "Zgłoś problem", "reset-permanently": "Czy na pewno chcesz trwale zresetować ustawienia?", @@ -117,8 +117,8 @@ "title": "Automatyczne uruchamianie przy starcie systemu" }, "should-use-system-language": "Użyj języka systemowego", - "stable-version-note": "By turning off the pre-release version of the application, you will revert to the stable release, which prioritizes reliability and consistency. While you may miss out on the latest features and enhancements.", - "stats-server-port": "Stats server port", + "stable-version-note": "Wyłączając wersję przedpremierową aplikacji, powrócisz do stabilnego wydania, które priorytetowo traktuje niezawodność i spójność. Możesz jednak przegapić najnowsze funkcje i ulepszenia.", + "stats-server-port": "Port serwera statystyk", "tabs": { "airdrop": "Airdrop", "connections": "Połączenia", @@ -126,7 +126,7 @@ "general": "Ogólne", "mining": "Wydobycie", "p2p": "Kopanie w puli", - "releaseNotes": "Release Notes", + "releaseNotes": "Notatki o wydaniu", "very_experimental": "Bardzo Eksperymentalne", "wallet": "Portfel" }, @@ -145,7 +145,7 @@ }, "use-dynamic-fail-data": "Użyj dynamicznych danych o błędach", "use-random-control-port": "Użyj losowego portu kontrolnego", - "use-random-port": "Use random port", + "use-random-port": "Użyj losowego portu", "use-tor": "Używaj Tor", "use-tor-bridges": "Użyj mostów Tor", "visual-mode": "Tryb wizualny", diff --git a/public/locales/pl/sos.json b/public/locales/pl/sos.json new file mode 100644 index 000000000..315b29a09 --- /dev/null +++ b/public/locales/pl/sos.json @@ -0,0 +1,55 @@ +{ + "widget": { + "prize": { + "upcomingReward": "nadchodząca nagroda / macbook pro 16’" + }, + "timer": { + "gettingClose": "Jesteś blisko", + "days": "dni", + "hours": "godziny" + }, + "friends": { + "reduceTimer": "Skróć swój czas, zapraszając znajomych", + "linkCopied": "Link skopiowany!", + "growCrew": "rozwiń swoją ekipę" + } + }, + "superCharger": { + "title": "Super Ładowarka", + "placeholder": "Wprowadź swój kod", + "success": "Dodano bonus czasowy {{time}}.", + "error": "Nieprawidłowy kod.", + "submit": "Idź" + }, + "mainTimer": { + "title": "Twój Timer", + "days": "DNI", + "hours": "GODZINY", + "minutes": "MINUTY", + "seconds": "SEKUNDY" + }, + "progress": { + "message": "Jesteś {{hours}} godzin od następnego rangi. Kontynuuj kopanie!" + }, + "leaserboardEntry": { + "mining": "Kopanie teraz", + "idle": "Ostatnio kopano {{time}} temu" + }, + "leaderboard": { + "title": "Tabela wyników", + "viewFull": "ZOBACZ pełną TABELĘ WYNIKÓW" + }, + "member": { + "new": "Nowy", + "nudge": "Szturchnij", + "minHr": "min/godz" + }, + "crewMining": { + "title": "Kopanie zespołowe", + "rate": "+{{rate}}min/godz", + "mining": "{{current}}/{{total}} Kopanie" + }, + "crewList": { + "placeholder": "Zaproś pierwszego członka załogi" + } +} \ No newline at end of file diff --git a/public/locales/ru/common.json b/public/locales/ru/common.json index 086772191..e5dd2ce8b 100644 --- a/public/locales/ru/common.json +++ b/public/locales/ru/common.json @@ -8,11 +8,11 @@ "day": "День", "disconnect": "Отключить", "hashrate": "Хэшрейт", - "installation-problem": "Installation problem", + "installation-problem": "Проблема с установкой", "max-temperature": "Максимальная температура", - "minimize": "Minimize", + "minimize": "Свернуть", "mode": "Режим", - "not-installed-in-applications-directory": "Oops! Tari Universe needs to live in the Applications directory. Mind installing it there?", + "not-installed-in-applications-directory": "Упс! Tari Universe должен находиться в каталоге Приложений. Не хотите установить его туда?", "please-try-again-later": "Пожалуйста, попробуйте позже. Если проблема сохраняется, свяжитесь с нами.", "resources": "Ресурсы", "restart": "Перезапустить", @@ -23,7 +23,7 @@ "temperature": "Температура", "testnet": "Тестовая сеть", "unknown": "Неизвестно", - "unminimize": "Unminimize", + "unminimize": "Развернуть", "usage": "Использование", "utilization": "Использование", "version": "Версия", diff --git a/public/locales/ru/mining-view.json b/public/locales/ru/mining-view.json index da82da207..59b4d55d1 100644 --- a/public/locales/ru/mining-view.json +++ b/public/locales/ru/mining-view.json @@ -18,13 +18,13 @@ "waiting-for-idle": "Ожидание простоя" }, "orphan-chain-tooltip": { - "heading": "Things to try:", - "step_1": "Check your Internet connection", - "step_2": "Wait 30 mins", - "step_3": "Restart the app", - "step_4": "Try using a Tor Bridge (in Settings)", - "step_5": "Try disabling Tor (in Settings)", - "step_6": "Try an app reset (in Settings)" + "heading": "Что попробовать:", + "step_1": "Проверьте ваше интернет-соединение", + "step_2": "Подождите 30 минут", + "step_3": "Перезапустите приложение", + "step_4": "Попробуйте использовать мост Tor (в Настройках)", + "step_5": "Попробуйте отключить Tor (в Настройках)", + "step_6": "Попробуйте сбросить приложение (в Настройках)" }, "you-earn-rewards-separately": "Вы получаете награды за майнинг на CPU и GPU отдельно", "you-won-block": "Вы выиграли блок #{{ blockHeight }}", diff --git a/public/locales/ru/p2p.json b/public/locales/ru/p2p.json index 881c7054a..6b08b4067 100644 --- a/public/locales/ru/p2p.json +++ b/public/locales/ru/p2p.json @@ -1,14 +1,14 @@ { - "listener-addresses": "Listener addresses", + "listener-addresses": "Адреса слушателей", "miners": "Майнеры", - "network-info": "Network info", + "network-info": "Информация о сети", "p2pool-chain-tip": "Совет цепи P2Pool", "p2pool-connected": "P2Pool подключен", "p2pool-connection-info": "Подключение", "p2pool-connection-info-more": "Детали подключения", - "p2pool-peers": "P2pool peers", + "p2pool-peers": "Участники P2pool", "p2pool-stats": "Статистика майнинга в пуле", - "randomx-stats": "RandomX Stats", - "sha3-stats": "SHA3 Stats", + "randomx-stats": "Статистика RandomX", + "sha3-stats": "Статистика SHA3", "tribe": "Племя" } \ No newline at end of file diff --git a/public/locales/ru/settings.json b/public/locales/ru/settings.json index af84d7657..e1021c5e0 100644 --- a/public/locales/ru/settings.json +++ b/public/locales/ru/settings.json @@ -6,8 +6,8 @@ "applyInviteCode": "Применить код приглашения", "cancel": "Отмена", "change-language": "Язык", - "confirm": "Confirm", - "confirm-action": "Confirm action", + "confirm": "Подтвердить", + "confirm-action": "Подтвердить действие", "confirm-import-wallet": "Abandon current wallet?", "confirm-import-wallet-copy": "Are you sure you want to import a new wallet?", "connected-peers": "Подключенные узлы", @@ -48,9 +48,9 @@ "title": "Время, после которого машина считается в простое" }, "importing-wallet": "Импорт кошелька", - "importing-wallet-copy": "Tari Universe will restart automatically once your wallet has been imported", + "importing-wallet-copy": "Tari Universe автоматически перезапустится после импорта вашего кошелька", "invalid-seed-words": "Введите 24 слова, разделенные пробелами", - "invalid-stats-server-port": "Invalid stats server port", + "invalid-stats-server-port": "Неверный порт сервера статистики", "inviteCode": "Код приглашения", "is-on-orphan-chain": "Похоже, вы подключены к форку, а не к основной цепочке. Любые выигранные вами блоки могут быть аннулированы.", "last-block-added-time": "Время добавления последнего блока в цепь", @@ -86,15 +86,15 @@ "pool-mining": "Майнинг в пуле", "pool-mining-description": "При включении вы будете майнить в пуле и присоединитесь к группе майнеров.", "pre-release": { - "description": "Explore the latest features before they go live and provide feedback", - "title": "Use pre-release version" + "description": "Изучите последние функции до их выхода и оставьте отзыв", + "title": "Использовать предварительную версию" }, - "pre-release-note": "You are about to switch to the pre-release version of the application. This version can offer exciting new features and enhancements, with the possibility of encountering areas that may still be under refinement.", + "pre-release-note": "Вы собираетесь переключиться на предварительную версию приложения. Эта версия может предложить захватывающие новые функции и улучшения, с возможностью столкнуться с областями, которые все еще могут быть в стадии доработки.", "randomx-network-hash-rate": "Хэшрейт сети Randomx", "refresh-versions": "Обновить версии", "release-notes": { - "loading": "Loading release notes...", - "upgrade-available": "⚠️ Upgrade Available" + "loading": "Загрузка примечаний к выпуску...", + "upgrade-available": "⚠️ Доступно обновление" }, "report-issue": "Сообщить о проблеме", "reset-permanently": "Вы уверены, что хотите сбросить все настройки навсегда?", @@ -115,8 +115,8 @@ "title": "Автозапуск при загрузке системы" }, "should-use-system-language": "Использовать системный язык", - "stable-version-note": "By turning off the pre-release version of the application, you will revert to the stable release, which prioritizes reliability and consistency. While you may miss out on the latest features and enhancements.", - "stats-server-port": "Stats server port", + "stable-version-note": "Отключив предварительную версию приложения, вы вернетесь к стабильному выпуску, который приоритетно обеспечивает надежность и согласованность. Однако вы можете упустить последние функции и улучшения.", + "stats-server-port": "Порт сервера статистики", "tabs": { "airdrop": "Эйрдроп", "connections": "Подключения", @@ -124,7 +124,7 @@ "general": "Общие", "mining": "Майнинг", "p2p": "Майнинг в пуле", - "releaseNotes": "Release Notes", + "releaseNotes": "Примечания к выпуску", "very_experimental": "Очень экспериментальные", "wallet": "Кошелек" }, @@ -143,7 +143,7 @@ }, "use-dynamic-fail-data": "Использовать динамические данные отказа", "use-random-control-port": "Использовать случайный управляющий порт", - "use-random-port": "Use random port", + "use-random-port": "Использовать случайный порт", "use-tor": "Использовать Tor", "use-tor-bridges": "Использовать мосты Tor", "visual-mode": "Визуальный режим", diff --git a/public/locales/ru/sos.json b/public/locales/ru/sos.json new file mode 100644 index 000000000..f51183cf2 --- /dev/null +++ b/public/locales/ru/sos.json @@ -0,0 +1,55 @@ +{ + "widget": { + "prize": { + "upcomingReward": "предстоящая награда / macbook pro 16’" + }, + "timer": { + "gettingClose": "Вы приближаетесь", + "days": "дни", + "hours": "часы" + }, + "friends": { + "reduceTimer": "Сократите таймер, пригласив друзей", + "linkCopied": "Ссылка скопирована!", + "growCrew": "расширяйте свою команду" + } + }, + "superCharger": { + "title": "Супер Зарядное Устройство", + "placeholder": "Введите ваш код", + "success": "Бонус ко времени добавлен {{time}}.", + "error": "Неверный код.", + "submit": "Вперед" + }, + "mainTimer": { + "title": "Ваш таймер", + "days": "ДНИ", + "hours": "ЧАСЫ", + "minutes": "МИНУТЫ", + "seconds": "СЕКУНДЫ" + }, + "progress": { + "message": "Вы в {{hours}} часах от следующего ранга. Продолжайте добычу!" + }, + "leaserboardEntry": { + "mining": "Добыча сейчас", + "idle": "Последняя добыча {{time}} назад" + }, + "leaderboard": { + "title": "Таблица лидеров", + "viewFull": "ПОСМОТРЕТЬ полную ТАБЛИЦУ ЛИДЕРОВ" + }, + "member": { + "new": "Новый", + "nudge": "Подтолкнуть", + "minHr": "мин/ч" + }, + "crewMining": { + "title": "Добыча в команде", + "rate": "+{{rate}}мин/ч", + "mining": "{{current}}/{{total}} Добыча" + }, + "crewList": { + "placeholder": "Пригласите первого члена команды" + } +} \ No newline at end of file diff --git a/public/locales/tr/common.json b/public/locales/tr/common.json index 907809255..8944f628a 100644 --- a/public/locales/tr/common.json +++ b/public/locales/tr/common.json @@ -8,11 +8,11 @@ "day": "Gün", "disconnect": "Bağlantıyı Kes", "hashrate": "Hashrate", - "installation-problem": "Installation problem", + "installation-problem": "Kurulum sorunu", "max-temperature": "Maks. Sıcaklık", - "minimize": "Minimize", + "minimize": "Küçült", "mode": "Mod", - "not-installed-in-applications-directory": "Oops! Tari Universe needs to live in the Applications directory. Mind installing it there?", + "not-installed-in-applications-directory": "Hata! Tari Universe, Uygulamalar dizininde bulunmalıdır. Oraya kurmayı düşünür müsünüz?", "please-try-again-later": "Lütfen daha sonra tekrar deneyin. Sorun devam ederse, lütfen bizimle iletişime geçin.", "resources": "Kaynaklar", "restart": "Yeniden Başlat", @@ -23,7 +23,7 @@ "temperature": "Sıcaklık", "testnet": "Testnet", "unknown": "Bilinmeyen", - "unminimize": "Unminimize", + "unminimize": "Küçültmeyi Geri Al", "usage": "Kullanım", "utilization": "Fayda", "version": "Versiyon", diff --git a/public/locales/tr/mining-view.json b/public/locales/tr/mining-view.json index 54df1d55c..b65ba1c5e 100644 --- a/public/locales/tr/mining-view.json +++ b/public/locales/tr/mining-view.json @@ -18,13 +18,13 @@ "waiting-for-idle": "Boşta Bekliyor" }, "orphan-chain-tooltip": { - "heading": "Things to try:", - "step_1": "Check your Internet connection", - "step_2": "Wait 30 mins", - "step_3": "Restart the app", - "step_4": "Try using a Tor Bridge (in Settings)", - "step_5": "Try disabling Tor (in Settings)", - "step_6": "Try an app reset (in Settings)" + "heading": "Denenecek şeyler:", + "step_1": "İnternet bağlantınızı kontrol edin", + "step_2": "30 dakika bekleyin", + "step_3": "Uygulamayı yeniden başlatın", + "step_4": "Tor Köprüsü kullanmayı deneyin (Ayarlar\"da)", + "step_5": "Tor\"u devre dışı bırakmayı deneyin (Ayarlar\"da)", + "step_6": "Uygulama sıfırlamayı deneyin (Ayarlar\"da)" }, "you-earn-rewards-separately": "CPU ve GPU madenciliği için ayrı ayrı ödüller kazanırsınız", "you-won-block": "blok #{{ blockHeight }} kazananı siz oldunuz", diff --git a/public/locales/tr/p2p.json b/public/locales/tr/p2p.json index 7485444f6..ecf4a2b75 100644 --- a/public/locales/tr/p2p.json +++ b/public/locales/tr/p2p.json @@ -1,14 +1,14 @@ { - "listener-addresses": "Listener addresses", + "listener-addresses": "Dinleyici adresleri", "miners": "Madenciler", - "network-info": "Network info", + "network-info": "Ağ bilgisi", "p2pool-chain-tip": "P2Pool Zincir Ucu", "p2pool-connected": "P2Pool Bağlandı", "p2pool-connection-info": "Bağlantı", "p2pool-connection-info-more": "Bağlantı detayları", - "p2pool-peers": "P2pool peers", + "p2pool-peers": "P2pool eşleri", "p2pool-stats": "Havuz madenciliği istatistikleri", - "randomx-stats": "RandomX Stats", - "sha3-stats": "SHA3 Stats", + "randomx-stats": "RandomX İstatistikleri", + "sha3-stats": "SHA3 İstatistikleri", "tribe": "Kabile" } \ No newline at end of file diff --git a/public/locales/tr/settings.json b/public/locales/tr/settings.json index 9200d6157..97ae79b60 100644 --- a/public/locales/tr/settings.json +++ b/public/locales/tr/settings.json @@ -6,8 +6,8 @@ "applyInviteCode": "Davet Kodunu Uygula", "cancel": "İptal", "change-language": "Dil Değiştir", - "confirm": "Confirm", - "confirm-action": "Confirm action", + "confirm": "Onayla", + "confirm-action": "İşlemi onayla", "confirm-import-wallet": "Abandon current wallet?", "confirm-import-wallet-copy": "Are you sure you want to import a new wallet?", "connected-peers": "Bağlı Eşler", @@ -48,9 +48,9 @@ "title": "Makinenin boşta sayılacağı süre" }, "importing-wallet": "Cüzdan İçe Aktarılıyor", - "importing-wallet-copy": "Tari Universe will restart automatically once your wallet has been imported", + "importing-wallet-copy": "Cüzdanınız içe aktarıldığında Tari Universe otomatik olarak yeniden başlayacak", "invalid-seed-words": "Boşluklarla ayrılmış 24 kelime girin", - "invalid-stats-server-port": "Invalid stats server port", + "invalid-stats-server-port": "Geçersiz istatistik sunucu portu", "inviteCode": "Davet Kodu", "is-on-orphan-chain": "Bir çatal ile bağlantılı görünüyorsunuz, ana zincirle değil. Kazandığınız bloklar geçersiz kılınabilir.", "last-block-added-time": "Zincir zamanına eklenen son blok", @@ -86,15 +86,15 @@ "pool-mining": "Havuz Madenciliği", "pool-mining-description": "Etkinleştirildiğinde, bir havuzda madencilik yapacak ve bir grup madenciye (kabileye) katılacaksınız.", "pre-release": { - "description": "Explore the latest features before they go live and provide feedback", - "title": "Use pre-release version" + "description": "En son özellikleri canlıya geçmeden önce keşfedin ve geri bildirimde bulunun", + "title": "Ön sürüm versiyonunu kullan" }, - "pre-release-note": "You are about to switch to the pre-release version of the application. This version can offer exciting new features and enhancements, with the possibility of encountering areas that may still be under refinement.", + "pre-release-note": "Uygulamanın ön sürüm versiyonuna geçmek üzeresiniz. Bu versiyon, heyecan verici yeni özellikler ve iyileştirmeler sunabilir, ancak hala geliştirilmekte olan alanlarla karşılaşma olasılığı vardır.", "randomx-network-hash-rate": "Randomx ağ hash oranı", "refresh-versions": "Sürümleri yenileyin", "release-notes": { - "loading": "Loading release notes...", - "upgrade-available": "⚠️ Upgrade Available" + "loading": "Sürüm notları yükleniyor...", + "upgrade-available": "⚠️ Güncelleme Mevcut" }, "report-issue": "Bir sorunu bildir", "reset-permanently": "Tüm ayarları kalıcı olarak sıfırlamak istediğinizden emin misiniz?", @@ -115,8 +115,8 @@ "title": "Sistem açılışında otomatik başlat" }, "should-use-system-language": "Sistem Dilini Kullan", - "stable-version-note": "By turning off the pre-release version of the application, you will revert to the stable release, which prioritizes reliability and consistency. While you may miss out on the latest features and enhancements.", - "stats-server-port": "Stats server port", + "stable-version-note": "Uygulamanın ön sürüm versiyonunu kapatarak, güvenilirlik ve tutarlılığı önceliklendiren kararlı sürüme döneceksiniz. En son özellikler ve iyileştirmeleri kaçırabilirsiniz.", + "stats-server-port": "İstatistik sunucu portu", "tabs": { "airdrop": "Airdrop", "connections": "Bağlantılar", @@ -124,7 +124,7 @@ "general": "Genel", "mining": "Madencilik", "p2p": "Havuz Madenciliği", - "releaseNotes": "Release Notes", + "releaseNotes": "Sürüm Notları", "very_experimental": "Çok Deneysel", "wallet": "Cüzdan" }, @@ -143,7 +143,7 @@ }, "use-dynamic-fail-data": "Dinamik hata verilerini kullan", "use-random-control-port": "Rastgele kontrol portu kullan", - "use-random-port": "Use random port", + "use-random-port": "Rastgele port kullan", "use-tor": "Tor Kullan", "use-tor-bridges": "Tor Köprülerini Kullan", "visual-mode": "Görsel mod", diff --git a/public/locales/tr/sos.json b/public/locales/tr/sos.json new file mode 100644 index 000000000..4289083ac --- /dev/null +++ b/public/locales/tr/sos.json @@ -0,0 +1,55 @@ +{ + "widget": { + "prize": { + "upcomingReward": "yaklaşan ödül / macbook pro 16’" + }, + "timer": { + "gettingClose": "Yaklaşıyorsunuz", + "days": "günler", + "hours": "saatler" + }, + "friends": { + "reduceTimer": "Arkadaşlarınızı davet ederek zamanlayıcınızı azaltın", + "linkCopied": "Bağlantı kopyalandı!", + "growCrew": "ekibinizi büyütün" + } + }, + "superCharger": { + "title": "Süper Şarj", + "placeholder": "Kodunuzu Girin", + "success": "Zaman bonusu eklendi {{time}}.", + "error": "Geçersiz kod.", + "submit": "Git" + }, + "mainTimer": { + "title": "Zamanlayıcınız", + "days": "GÜNLER", + "hours": "SAATLER", + "minutes": "DAKİKALAR", + "seconds": "SANİYELER" + }, + "progress": { + "message": "Bir sonraki rütbeye {{hours}} saat uzaktasınız. Madenciliğe devam edin!" + }, + "leaserboardEntry": { + "mining": "Şu anda madencilik yapılıyor", + "idle": "Son madencilik {{time}} önce yapıldı" + }, + "leaderboard": { + "title": "Lider Tablosu", + "viewFull": "TAM LİDER TABLOSUNU GÖRÜNTÜLE" + }, + "member": { + "new": "Yeni", + "nudge": "Dürt", + "minHr": "dk/sa" + }, + "crewMining": { + "title": "Ekip madenciliği", + "rate": "+{{rate}}dk/sa", + "mining": "{{current}}/{{total}} Madencilik" + }, + "crewList": { + "placeholder": "İlk ekip üyenizi davet edin" + } +} \ No newline at end of file diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 3a4645bcf..707bf3957 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -491,6 +491,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base58-monero" version = "2.0.0" @@ -1102,6 +1108,12 @@ dependencies = [ "toml 0.8.19", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "constant_time_eq" version = "0.3.1" @@ -1295,6 +1307,18 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", +] + [[package]] name = "crypto-common" version = "0.1.6" @@ -1447,6 +1471,16 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "zeroize", +] + [[package]] name = "deranged" version = "0.3.11" @@ -1733,12 +1767,51 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "elliptic-curve", + "signature", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "pkcs8", + "signature", +] + [[package]] name = "either" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "embed-resource" version = "2.5.1" @@ -2277,6 +2350,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -3138,15 +3212,6 @@ dependencies = [ "generic-array", ] -[[package]] -name = "instant" -version = "0.1.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" -dependencies = [ - "cfg-if", -] - [[package]] name = "integer-encoding" version = "3.0.4" @@ -3838,8 +3903,8 @@ dependencies = [ [[package]] name = "minotari_app_grpc" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "argon2", "base64 0.13.1", @@ -3868,8 +3933,8 @@ dependencies = [ [[package]] name = "minotari_ledger_wallet_common" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "bs58 0.5.1", ] @@ -3877,7 +3942,7 @@ dependencies = [ [[package]] name = "minotari_node_grpc_client" version = "0.1.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "minotari_app_grpc", ] @@ -3885,7 +3950,7 @@ dependencies = [ [[package]] name = "minotari_wallet_grpc_client" version = "0.1.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "minotari_app_grpc", "tari_common_types", @@ -4595,6 +4660,27 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", +] + +[[package]] +name = "p384" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", +] + [[package]] name = "pango" version = "0.18.3" @@ -4945,6 +5031,16 @@ dependencies = [ "futures-io", ] +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.31" @@ -5068,6 +5164,15 @@ dependencies = [ "syn 2.0.90", ] +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "primitive-types" version = "0.12.2" @@ -5643,6 +5748,25 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "ring-compat" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccce7bae150b815f0811db41b8312fcb74bffa4cab9cee5429ee00f356dd5bd4" +dependencies = [ + "aead", + "digest", + "ecdsa", + "ed25519", + "generic-array", + "p256", + "p384", + "pkcs8", + "rand_core 0.6.4", + "ring", + "signature", +] + [[package]] name = "roff" version = "0.2.2" @@ -5847,6 +5971,19 @@ dependencies = [ "syn 2.0.90", ] +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "subtle", + "zeroize", +] + [[package]] name = "security-framework" version = "2.11.1" @@ -5914,9 +6051,9 @@ dependencies = [ [[package]] name = "sentry" -version = "0.34.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5484316556650182f03b43d4c746ce0e3e48074a21e2f51244b648b6542e1066" +checksum = "016958f51b96861dead7c1e02290f138411d05e94fad175c8636a835dee6e51e" dependencies = [ "httpdate", "native-tls", @@ -5933,9 +6070,9 @@ dependencies = [ [[package]] name = "sentry-backtrace" -version = "0.34.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40aa225bb41e2ec9d7c90886834367f560efc1af028f1c5478a6cce6a59c463a" +checksum = "e57712c24e99252ef175b4b06c485294f10ad6bc5b5e1567ff3803ee7a0b7d3f" dependencies = [ "backtrace", "once_cell", @@ -5945,9 +6082,9 @@ dependencies = [ [[package]] name = "sentry-contexts" -version = "0.34.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a8dd746da3d16cb8c39751619cefd4fcdbd6df9610f3310fd646b55f6e39910" +checksum = "eba8754ec3b9279e00aa6d64916f211d44202370a1699afde1db2c16cbada089" dependencies = [ "hostname 0.4.0", "libc", @@ -5959,9 +6096,9 @@ dependencies = [ [[package]] name = "sentry-core" -version = "0.34.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "161283cfe8e99c8f6f236a402b9ccf726b201f365988b5bb637ebca0abbd4a30" +checksum = "f9f8b6dcd4fbae1e3e22b447f32670360b27e31b62ab040f7fb04e0f80c04d92" dependencies = [ "once_cell", "rand 0.8.5", @@ -5972,9 +6109,9 @@ dependencies = [ [[package]] name = "sentry-debug-images" -version = "0.34.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc6b25e945fcaa5e97c43faee0267eebda9f18d4b09a251775d8fef1086238a" +checksum = "8982a69133d3f5e4efdbfa0776937fca43c3a2e275a8fe184f50b1b0aa92e07c" dependencies = [ "findshlibs", "once_cell", @@ -5983,9 +6120,9 @@ dependencies = [ [[package]] name = "sentry-panic" -version = "0.34.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc74f229c7186dd971a9491ffcbe7883544aa064d1589bd30b83fb856cd22d63" +checksum = "de296dae6f01e931b65071ee5fe28d66a27909857f744018f107ed15fd1f6b25" dependencies = [ "sentry-backtrace", "sentry-core", @@ -5993,20 +6130,20 @@ dependencies = [ [[package]] name = "sentry-rust-minidump" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1356f9564dba35a7269402415ed1f3d6598a8ed51e62e8d8e75da1b4361b3f5" +checksum = "b3b211916a3aed3398125b02b98a5cd4fc530c5626dd28a3c86865fe6cd93935" dependencies = [ "minidumper-child", "sentry", - "thiserror 1.0.69", + "thiserror 2.0.6", ] [[package]] name = "sentry-tracing" -version = "0.34.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd3c5faf2103cd01eeda779ea439b68c4ee15adcdb16600836e97feafab362ec" +checksum = "263f73c757ed7915d3e1e34625eae18cad498a95b4261603d4ce3f87b159a6f0" dependencies = [ "sentry-backtrace", "sentry-core", @@ -6016,9 +6153,9 @@ dependencies = [ [[package]] name = "sentry-types" -version = "0.34.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d68cdf6bc41b8ff3ae2a9c4671e97426dcdd154cc1d4b6b72813f285d6b163f" +checksum = "a71ed3a389948a6a6d92b98e997a2723ca22f09660c5a7b7388ecd509a70a527" dependencies = [ "debugid", "hex", @@ -6269,6 +6406,15 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "rand_core 0.6.4", +] + [[package]] name = "simd-adler32" version = "0.3.7" @@ -6421,6 +6567,16 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -6661,9 +6817,9 @@ dependencies = [ [[package]] name = "tao" -version = "0.30.8" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6682a07cf5bab0b8a2bd20d0a542917ab928b5edb75ebd4eda6b05cbaab872da" +checksum = "cc6b53216f32e60efc27dfa111268481e4dfba53e553e4cdebcaed9db36c11bb" dependencies = [ "bitflags 2.6.0", "cocoa", @@ -6676,7 +6832,6 @@ dependencies = [ "gdkwayland-sys", "gdkx11-sys", "gtk", - "instant", "jni", "lazy_static", "libc", @@ -6744,7 +6899,7 @@ dependencies = [ [[package]] name = "tari-universe" -version = "0.8.24" +version = "0.8.34" dependencies = [ "anyhow", "async-trait", @@ -6753,6 +6908,7 @@ dependencies = [ "base64 0.22.1", "blake2", "chrono", + "der", "device_query", "dirs 5.0.1", "dunce", @@ -6762,6 +6918,7 @@ dependencies = [ "flate2", "futures-lite", "futures-util", + "hex", "jsonwebtoken", "keyring", "libsqlite3-sys", @@ -6778,6 +6935,8 @@ dependencies = [ "rand 0.8.5", "regex", "reqwest", + "ring", + "ring-compat", "sanitize-filename", "semver", "serde", @@ -6796,7 +6955,7 @@ dependencies = [ "tari_shutdown", "tari_utilities", "tauri", - "tauri-build", + "tauri-build 2.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "tauri-plugin-os", "tauri-plugin-process", "tauri-plugin-sentry", @@ -6834,8 +6993,8 @@ dependencies = [ [[package]] name = "tari_common" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "anyhow", "config", @@ -6858,8 +7017,8 @@ dependencies = [ [[package]] name = "tari_common_sqlite" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "diesel", "diesel_migrations", @@ -6872,8 +7031,8 @@ dependencies = [ [[package]] name = "tari_common_types" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "base64 0.21.7", "bitflags 2.6.0", @@ -6898,8 +7057,8 @@ dependencies = [ [[package]] name = "tari_comms" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "anyhow", "async-trait", @@ -6942,8 +7101,8 @@ dependencies = [ [[package]] name = "tari_comms_dht" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "anyhow", "bitflags 2.6.0", @@ -6977,8 +7136,8 @@ dependencies = [ [[package]] name = "tari_comms_rpc_macros" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "proc-macro2", "quote", @@ -6987,8 +7146,8 @@ dependencies = [ [[package]] name = "tari_core" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "anyhow", "async-trait", @@ -7081,13 +7240,13 @@ dependencies = [ [[package]] name = "tari_features" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" [[package]] name = "tari_hashing" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "borsh", "digest", @@ -7096,8 +7255,8 @@ dependencies = [ [[package]] name = "tari_key_manager" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "argon2", "async-trait", @@ -7129,8 +7288,8 @@ dependencies = [ [[package]] name = "tari_max_size" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "borsh", "serde", @@ -7140,8 +7299,8 @@ dependencies = [ [[package]] name = "tari_mmr" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "borsh", "digest", @@ -7154,8 +7313,8 @@ dependencies = [ [[package]] name = "tari_p2p" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "anyhow", "fs2", @@ -7186,8 +7345,8 @@ dependencies = [ [[package]] name = "tari_script" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "blake2", "borsh", @@ -7204,8 +7363,8 @@ dependencies = [ [[package]] name = "tari_service_framework" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "anyhow", "async-trait", @@ -7219,16 +7378,16 @@ dependencies = [ [[package]] name = "tari_shutdown" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "futures 0.3.31", ] [[package]] name = "tari_storage" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "bincode", "lmdb-zero", @@ -7239,8 +7398,8 @@ dependencies = [ [[package]] name = "tari_test_utils" -version = "1.9.1-pre.0" -source = "git+https://github.com/tari-project/tari.git?rev=37c30be#37c30be6bd6df026dc16eec5f4d8cfaf2225f9c6" +version = "1.9.1-rc.1" +source = "git+https://github.com/tari-project/tari.git?tag=v1.9.1-rc.1#65a61008a5f7c05c34453535894b9a24132d2665" dependencies = [ "futures 0.3.31", "rand 0.8.5", @@ -7272,8 +7431,7 @@ dependencies = [ [[package]] name = "tauri" version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e545de0a2dfe296fa67db208266cd397c5a55ae782da77973ef4c4fac90e9f2c" +source = "git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25#67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25" dependencies = [ "anyhow", "bytes 1.9.0", @@ -7304,13 +7462,14 @@ dependencies = [ "serde_repr", "serialize-to-javascript", "swift-rs", - "tauri-build", + "tauri-build 2.0.3 (git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25)", "tauri-macros", "tauri-runtime", "tauri-runtime-wry", - "tauri-utils", + "tauri-utils 2.1.0 (git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25)", "thiserror 2.0.6", "tokio", + "tracing", "tray-icon", "url", "urlpattern", @@ -7336,7 +7495,28 @@ dependencies = [ "semver", "serde", "serde_json", - "tauri-utils", + "tauri-utils 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tauri-winres", + "toml 0.8.19", + "walkdir", +] + +[[package]] +name = "tauri-build" +version = "2.0.3" +source = "git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25#67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25" +dependencies = [ + "anyhow", + "cargo_toml", + "dirs 5.0.1", + "glob", + "heck 0.5.0", + "json-patch", + "schemars", + "semver", + "serde", + "serde_json", + "tauri-utils 2.1.0 (git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25)", "tauri-winres", "toml 0.8.19", "walkdir", @@ -7345,8 +7525,7 @@ dependencies = [ [[package]] name = "tauri-codegen" version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf79faeecf301d3e969b1fae977039edb77a4c1f25cc0a961be298b54bff97cf" +source = "git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25#67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25" dependencies = [ "base64 0.22.1", "brotli", @@ -7361,7 +7540,7 @@ dependencies = [ "serde_json", "sha2", "syn 2.0.90", - "tauri-utils", + "tauri-utils 2.1.0 (git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25)", "thiserror 2.0.6", "time", "url", @@ -7372,15 +7551,14 @@ dependencies = [ [[package]] name = "tauri-macros" version = "2.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c52027c8c5afb83166dacddc092ee8fff50772f9646d461d8c33ee887e447a03" +source = "git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25#67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", "syn 2.0.90", "tauri-codegen", - "tauri-utils", + "tauri-utils 2.1.0 (git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25)", ] [[package]] @@ -7395,7 +7573,7 @@ dependencies = [ "schemars", "serde", "serde_json", - "tauri-utils", + "tauri-utils 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "toml 0.8.19", "walkdir", ] @@ -7403,8 +7581,7 @@ dependencies = [ [[package]] name = "tauri-plugin-os" version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dda2d571a9baf0664c1f2088db227e3072f9028602fafa885deade7547c3b738" +source = "git+https://github.com/tari-project/tauri-plugins-workspace?rev=09f29b0abe2cb1eb81365b65a3aa3f73325e4e17#09f29b0abe2cb1eb81365b65a3aa3f73325e4e17" dependencies = [ "gethostname", "log", @@ -7421,8 +7598,7 @@ dependencies = [ [[package]] name = "tauri-plugin-process" version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40cc553ab29581c8c43dfa5fb0c9d5aee8ba962ad3b42908eea26c79610441b7" +source = "git+https://github.com/tari-project/tauri-plugins-workspace?rev=09f29b0abe2cb1eb81365b65a3aa3f73325e4e17#09f29b0abe2cb1eb81365b65a3aa3f73325e4e17" dependencies = [ "tauri", "tauri-plugin", @@ -7430,9 +7606,8 @@ dependencies = [ [[package]] name = "tauri-plugin-sentry" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd62441cb95406e41c7fed4da6b24aedae52a24566133f4056dc9a1178404770" +version = "0.3.0" +source = "git+https://github.com/tari-project/sentry-tauri?rev=7554b9a8738d6442d175aa2add55ecc11c52842d#7554b9a8738d6442d175aa2add55ecc11c52842d" dependencies = [ "base64 0.22.1", "schemars", @@ -7441,14 +7616,13 @@ dependencies = [ "serde", "tauri", "tauri-plugin", - "thiserror 1.0.69", + "thiserror 2.0.6", ] [[package]] name = "tauri-plugin-shell" version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb2c50a63e60fb8925956cc5b7569f4b750ac197a4d39f13b8dd46ea8e2bad79" +source = "git+https://github.com/tari-project/tauri-plugins-workspace?rev=09f29b0abe2cb1eb81365b65a3aa3f73325e4e17#09f29b0abe2cb1eb81365b65a3aa3f73325e4e17" dependencies = [ "encoding_rs", "log", @@ -7468,8 +7642,7 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f36019ee9832dc99e4450bb55a21cfad8633b19c2c18bd17c7741939b070ede" +source = "git+https://github.com/tari-project/tauri-plugins-workspace?rev=09f29b0abe2cb1eb81365b65a3aa3f73325e4e17#09f29b0abe2cb1eb81365b65a3aa3f73325e4e17" dependencies = [ "serde", "serde_json", @@ -7483,8 +7656,7 @@ dependencies = [ [[package]] name = "tauri-plugin-updater" version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7351014c140906bcfff59d96e04b1170c8f602557f40eb37f7de356d4e7067b" +source = "git+https://github.com/tari-project/tauri-plugins-workspace?rev=09f29b0abe2cb1eb81365b65a3aa3f73325e4e17#09f29b0abe2cb1eb81365b65a3aa3f73325e4e17" dependencies = [ "base64 0.22.1", "dirs 5.0.1", @@ -7513,8 +7685,7 @@ dependencies = [ [[package]] name = "tauri-runtime" version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cce18d43f80d4aba3aa8a0c953bbe835f3d0f2370aca75e8dbb14bd4bab27958" +source = "git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25#67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25" dependencies = [ "dpi", "gtk", @@ -7523,7 +7694,7 @@ dependencies = [ "raw-window-handle", "serde", "serde_json", - "tauri-utils", + "tauri-utils 2.1.0 (git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25)", "thiserror 2.0.6", "url", "windows 0.58.0", @@ -7532,8 +7703,7 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f442a38863e10129ffe2cec7bd09c2dcf8a098a3a27801a476a304d5bb991d2" +source = "git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25#67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25" dependencies = [ "gtk", "http", @@ -7547,7 +7717,8 @@ dependencies = [ "softbuffer", "tao", "tauri-runtime", - "tauri-utils", + "tauri-utils 2.1.0 (git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25)", + "tracing", "url", "webkit2gtk", "webview2-com", @@ -7560,6 +7731,41 @@ name = "tauri-utils" version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9271a88f99b4adea0dc71d0baca4505475a0bbd139fb135f62958721aaa8fe54" +dependencies = [ + "cargo_metadata", + "ctor", + "dunce", + "glob", + "html5ever", + "http", + "infer", + "json-patch", + "kuchikiki", + "log", + "memchr", + "phf 0.11.2", + "proc-macro2", + "quote", + "regex", + "schemars", + "semver", + "serde", + "serde-untagged", + "serde_json", + "serde_with", + "swift-rs", + "thiserror 2.0.6", + "toml 0.8.19", + "url", + "urlpattern", + "uuid", + "walkdir", +] + +[[package]] +name = "tauri-utils" +version = "2.1.0" +source = "git+https://github.com/tari-project/tauri.git?rev=67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25#67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25" dependencies = [ "brotli", "cargo_metadata", @@ -9193,6 +9399,7 @@ dependencies = [ "soup3", "tao-macros", "thiserror 1.0.69", + "tracing", "url", "webkit2gtk", "webkit2gtk-sys", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index f33408815..35226e421 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -4,7 +4,7 @@ description = "Tari Universe" edition = "2021" name = "tari-universe" repository = "https://github.com/tari-project/universe" -version = "0.8.24" +version = "0.8.34" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -38,8 +38,8 @@ libsqlite3-sys = { version = "0.25.1", features = [ ] } # Required for tari_wallet log = "0.4.22" log4rs = "1.3.0" -minotari_node_grpc_client = { git = "https://github.com/tari-project/tari.git", rev = "37c30be" } -minotari_wallet_grpc_client = { git = "https://github.com/tari-project/tari.git", rev = "37c30be" } +minotari_node_grpc_client = { git = "https://github.com/tari-project/tari.git", tag = "v1.9.1-rc.1" } +minotari_wallet_grpc_client = { git = "https://github.com/tari-project/tari.git", tag = "v1.9.1-rc.1" } monero-address-creator = { git = "https://github.com/tari-project/monero-address-creator.git", rev = "6129ca0" } nix = { version = "0.29.0", features = ["signal"] } nvml-wrapper = "0.10.0" @@ -58,38 +58,42 @@ sha2 = "0.10.8" sys-locale = "0.3.1" sysinfo = "0.31.2" tar = "0.4.26" -tari_common = { git = "https://github.com/tari-project/tari.git", rev = "37c30be" } -tari_common_types = { git = "https://github.com/tari-project/tari.git", rev = "37c30be" } -tari_core = { git = "https://github.com/tari-project/tari.git", rev = "37c30be", features = [ +tari_common = { git = "https://github.com/tari-project/tari.git", tag = "v1.9.1-rc.1" } +tari_common_types = { git = "https://github.com/tari-project/tari.git", tag = "v1.9.1-rc.1" } +tari_core = { git = "https://github.com/tari-project/tari.git", tag = "v1.9.1-rc.1", features = [ "transactions", ] } - +tauri-plugin-single-instance = { git = "https://github.com/tari-project/tauri-plugins-workspace", rev = "09f29b0abe2cb1eb81365b65a3aa3f73325e4e17" } tari_crypto = "0.21.0" -tari_key_manager = { git = "https://github.com/tari-project/tari.git", rev = "37c30be" } -tari_shutdown = { git = "https://github.com/tari-project/tari.git", rev = "37c30be" } +tari_key_manager = { git = "https://github.com/tari-project/tari.git", tag = "v1.9.1-rc.1" } +tari_shutdown = { git = "https://github.com/tari-project/tari.git", tag = "v1.9.1-rc.1" } tari_utilities = "0.8.0" -tauri = { version = "2", features = [ +tauri = { git = "https://github.com/tari-project/tauri.git", rev = "67a06c8a9bae94f412b8059dfa8b4d8dd8ea0a25", features = [ "macos-private-api", "image-png", "image-ico", "tray-icon", - + "devtools", # TODO: Remove this before mainnet + "tracing", # TODO: Remove this before mainnet ] } -tauri-plugin-os = "2" -tauri-plugin-sentry = "0.2.0" -tauri-plugin-shell = "2" -tauri-plugin-single-instance = "^2" -tauri-plugin-updater = "^2" +tauri-plugin-os = { git = "https://github.com/tari-project/tauri-plugins-workspace", rev = "09f29b0abe2cb1eb81365b65a3aa3f73325e4e17" } +tauri-plugin-sentry = { git = "https://github.com/tari-project/sentry-tauri", rev = "7554b9a8738d6442d175aa2add55ecc11c52842d" } +tauri-plugin-shell = { git = "https://github.com/tari-project/tauri-plugins-workspace", rev = "09f29b0abe2cb1eb81365b65a3aa3f73325e4e17" } +tauri-plugin-updater = { git = "https://github.com/tari-project/tauri-plugins-workspace", rev = "09f29b0abe2cb1eb81365b65a3aa3f73325e4e17" } thiserror = "1.0.26" tokio = { version = "1", features = ["full"] } tokio-util = { version = "0.7.11", features = ["compat"] } xz2 = { version = "0.1.7", features = ["static"] } # static bind lzma zip = "2.2.0" dirs = "5.0.1" -tauri-plugin-process = "2" +tauri-plugin-process = { git = "https://github.com/tari-project/tauri-plugins-workspace", rev = "09f29b0abe2cb1eb81365b65a3aa3f73325e4e17" } +ring = "0.17.8" +hex = "0.4.3" # temporary fix for openssl openssl = { version = "0.10", features = ["vendored"] } +ring-compat = "0.8.0" +der = "0.7.9" [target.'cfg(windows)'.dependencies] winreg = "0.52.0" @@ -121,3 +125,10 @@ ignored = [ "xz2", "openssl", ] + +[profile.release] +debug = true + +[profile.release.package.wry] +debug = true +debug-assertions = true diff --git a/src-tauri/binaries_versions_esmeralda.json b/src-tauri/binaries_versions_esmeralda.json index ea9990422..14f14a8b7 100644 --- a/src-tauri/binaries_versions_esmeralda.json +++ b/src-tauri/binaries_versions_esmeralda.json @@ -1,10 +1,10 @@ { "binaries": { "xmrig": "=6.22.0", - "mmproxy": "=1.9.1-pre.0", - "minotari_node": "=1.9.1-pre.0", - "wallet": "=1.9.1-pre.0", - "sha-p2pool": "=0.15.4", + "mmproxy": "=1.9.1-pre.1", + "minotari_node": "=1.9.1-pre.1", + "wallet": "=1.9.1-pre.1", + "sha-p2pool": "=0.16.2", "xtrgpuminer": "=0.2.10", "tor": "=13.5.7" } diff --git a/src-tauri/binaries_versions_nextnet.json b/src-tauri/binaries_versions_nextnet.json index 3ce5a4b90..d35160105 100644 --- a/src-tauri/binaries_versions_nextnet.json +++ b/src-tauri/binaries_versions_nextnet.json @@ -1,10 +1,10 @@ { "binaries": { "xmrig": "=6.22.0", - "mmproxy": "=1.9.1-rc.0", - "minotari_node": "=1.9.1-rc.0", - "wallet": "=1.9.1-rc.0", - "sha-p2pool": "=0.15.4", + "mmproxy": "=1.9.1-rc.1", + "minotari_node": "=1.9.1-rc.1", + "wallet": "=1.9.1-rc.1", + "sha-p2pool": "=0.16.2", "xtrgpuminer": "=0.2.10", "tor": "=13.5.7" } diff --git a/src-tauri/src/app_in_memory_config.rs b/src-tauri/src/app_in_memory_config.rs index 57d6c8713..9a1072d83 100644 --- a/src-tauri/src/app_in_memory_config.rs +++ b/src-tauri/src/app_in_memory_config.rs @@ -20,6 +20,10 @@ // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE // USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +use anyhow::anyhow; +use der::{self, asn1::BitString, oid::ObjectIdentifier, Encode}; +use ring::signature::{Ed25519KeyPair, KeyPair}; +use ring_compat::pkcs8::{spki::AlgorithmIdentifier, SubjectPublicKeyInfo}; use serde::{Deserialize, Serialize}; #[cfg(feature = "airdrop-env")] @@ -73,6 +77,39 @@ impl Default for AppInMemoryConfig { } } +const AIRDROP_WEBSOCKET_CRYPTO_KEY: &str = match option_env!("AIRDROP_WEBSOCKET_CRYPTO_KEY") { + Some(value) => value, + None => "302e020100300506032b65700422042030f9f3e8ba7cac3d648b059f2fd5c5a6394caab46bdbb002e6989c883137b799", +}; + +pub fn get_websocket_key() -> anyhow::Result { + let decoded_str = hex::decode(AIRDROP_WEBSOCKET_CRYPTO_KEY)?; + match Ed25519KeyPair::from_pkcs8_maybe_unchecked(&decoded_str) { + Ok(key) => Ok(key), + Err(e) => Err(anyhow!(e.to_string())), + } +} + +pub fn get_der_encode_pub_key(key_pair: &Ed25519KeyPair) -> anyhow::Result { + let pub_key_bytes = key_pair.public_key().as_ref(); + + let algorithm_identifier: AlgorithmIdentifier<()> = AlgorithmIdentifier { + oid: ObjectIdentifier::new("1.3.101.112").map_err(|e| anyhow::anyhow!(e.to_string()))?, + parameters: None, // No parameters for Ed25519 + }; + + let subject_public_key = + BitString::from_bytes(pub_key_bytes).map_err(|e| anyhow::anyhow!(e.to_string()))?; + + let spki = SubjectPublicKeyInfo { + algorithm: algorithm_identifier, + subject_public_key, + }; + + let der_encoded = spki.to_der().map_err(|e| anyhow::anyhow!(e.to_string()))?; + Ok(hex::encode(der_encoded)) +} + impl AppInMemoryConfig { pub fn init() -> Self { #[cfg(feature = "airdrop-env")] diff --git a/src-tauri/src/binaries/binaries_manager.rs b/src-tauri/src/binaries/binaries_manager.rs index 6ea44eedb..a898c478a 100644 --- a/src-tauri/src/binaries/binaries_manager.rs +++ b/src-tauri/src/binaries/binaries_manager.rs @@ -36,7 +36,7 @@ use super::{ Binaries, }; -use log::{error, info, warn}; +use log::{debug, error, info, warn}; pub const LOG_TARGET: &str = "tari::universe::binary_manager"; @@ -102,7 +102,7 @@ impl BinaryManager { VersionReq::default() }); - info!(target: LOG_TARGET, "Version requirements for {:?}: {:?}", binary_name, version_requirement); + debug!(target: LOG_TARGET, "Version requirements for {:?}: {:?}", binary_name, version_requirement); version_requirement } @@ -514,7 +514,7 @@ impl BinaryManager { } pub async fn read_local_versions(&mut self) { - info!(target: LOG_TARGET,"Reading local versions for binary: {:?}", self.binary_name); + debug!(target: LOG_TARGET,"Reading local versions for binary: {:?}", self.binary_name); let binary_folder = match self.adapter.get_binary_folder() { Ok(path) => path, diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index fc3f05ed3..586bf330f 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -21,7 +21,9 @@ // USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. use crate::app_config::{AppConfig, GpuThreads}; -use crate::app_in_memory_config::AirdropInMemoryConfig; +use crate::app_in_memory_config::{ + get_der_encode_pub_key, get_websocket_key, AirdropInMemoryConfig, +}; use crate::auto_launcher::AutoLauncher; use crate::binaries::{Binaries, BinaryResolver}; use crate::credential_manager::{CredentialError, CredentialManager}; @@ -31,25 +33,26 @@ use crate::external_dependencies::{ use crate::gpu_miner_adapter::{GpuMinerStatus, GpuNodeSource}; use crate::hardware::hardware_status_monitor::{HardwareStatusMonitor, PublicDeviceProperties}; use crate::internal_wallet::{InternalWallet, PaperWalletConfig}; -use crate::node_manager::NodeManagerError; use crate::p2pool::models::{Connections, Stats}; use crate::progress_tracker::ProgressTracker; use crate::tor_adapter::TorConfig; use crate::utils::shutdown_utils::stop_all_processes; use crate::wallet_adapter::{TransactionInfo, WalletBalance}; use crate::wallet_manager::WalletManagerError; -use crate::{setup_inner, UniverseAppState, APPLICATION_FOLDER_ID}; +use crate::{node_adapter, setup_inner, UniverseAppState, APPLICATION_FOLDER_ID}; + +use base64::prelude::*; use keyring::Entry; use log::{debug, error, info, warn}; use monero_address_creator::Seed as MoneroSeed; use regex::Regex; -use serde::Serialize; +use serde::{Deserialize, Serialize}; +use std::fmt::Debug; use std::fs::{read_dir, remove_dir_all, remove_file, File}; use std::sync::atomic::Ordering; use std::thread::{available_parallelism, sleep}; use std::time::{Duration, Instant, SystemTime}; use tari_common::configuration::Network; -use tari_core::transactions::tari_amount::MicroMinotari; use tauri::{Manager, PhysicalPosition, PhysicalSize}; use tauri_plugin_sentry::sentry; use tauri_plugin_sentry::sentry::protocol::Event; @@ -129,14 +132,37 @@ pub struct CpuMinerConnectionStatus { // pub error: Option, } +#[derive(Deserialize, Serialize, Debug, Clone)] +#[serde(rename_all = "camelCase")] +pub struct SignWsDataResponse { + signature: String, + pub_key: String, +} + #[tauri::command] pub async fn close_splashscreen(app: tauri::AppHandle) { - let splashscreen_window = app - .get_webview_window("splashscreen") - .expect("no window labeled 'splashscreen' found"); - let main_window = app - .get_webview_window("main") - .expect("no window labeled 'main' found"); + let close_max_retries: u32 = 10; // Maximum number of retries + let retry_delay_ms: u64 = 100; // Delay between retries in milliseconds + + let mut retries = 0; + + let (splashscreen_window, main_window) = loop { + let splashscreen_window = app.get_webview_window("splashscreen"); + let main_window = app.get_webview_window("main"); + + if let (Some(splashscreen), Some(main)) = (splashscreen_window, main_window) { + break (splashscreen, main); + } + + retries += 1; + if retries >= close_max_retries { + error!(target: "LOG_TARGET", "Failed to fetch both 'splashscreen' and 'main' windows after {} retries", close_max_retries); + return; + } + + info!(target: "LOG_TARGET", "Failed to fetch both 'splashscreen' and 'main' windows. Retrying in {}ms", retry_delay_ms); + tokio::time::sleep(Duration::from_millis(retry_delay_ms)).await; + }; if let (Ok(window_position), Ok(window_size)) = ( splashscreen_window.outer_position(), @@ -158,6 +184,7 @@ pub async fn close_splashscreen(app: tauri::AppHandle) { main_window.show().expect("could not show"); } } + #[tauri::command] pub async fn download_and_start_installer( _missing_dependency: ExternalDependency, @@ -369,18 +396,27 @@ pub async fn get_miner_metrics( } state.is_getting_miner_metrics.store(true, Ordering::SeqCst); - let (sha_hash_rate, randomx_hash_rate, block_reward, block_height, block_time, is_synced) = state.node_manager - .get_network_hash_rate_and_block_reward().await - .unwrap_or_else(|e| { - if !matches!(e, NodeManagerError::NodeNotStarted) { - warn!(target: LOG_TARGET, "Error getting network hash rate and block reward: {}", e); - } - (0, 0, MicroMinotari(0), 0, 0, false) - }); + let node_status = state.base_node_latest_status.borrow().clone(); + let node_adapter::BaseNodeStatus { + sha_network_hashrate, + randomx_network_hashrate, + block_height, + block_time, + is_synced, + block_reward, + } = node_status; + // let (sha_hash_rate, randomx_hash_rate, block_reward, block_height, block_time, is_synced) = state.node_manager + // .get_network_hash_rate_and_block_reward().await + // .unwrap_or_else(|e| { + // if !matches!(e, NodeManagerError::NodeNotStarted) { + // warn!(target: LOG_TARGET, "Error getting network hash rate and block reward: {}", e); + // } + // (0, 0, MicroMinotari(0), 0, 0, false) + // }); let cpu_miner = state.cpu_miner.read().await; let cpu_mining_status = match cpu_miner - .status(randomx_hash_rate, block_reward) + .status(randomx_network_hashrate, block_reward) .await .map_err(|e| e.to_string()) { @@ -395,18 +431,7 @@ pub async fn get_miner_metrics( }; drop(cpu_miner); - let gpu_miner = state.gpu_miner.read().await; - let gpu_mining_status = match gpu_miner.status(sha_hash_rate, block_reward).await { - Ok(gpu) => gpu, - Err(e) => { - warn!(target: LOG_TARGET, "Error getting gpu miner status: {:?}", e); - state - .is_getting_miner_metrics - .store(false, Ordering::SeqCst); - return Err(e.to_string()); - } - }; - drop(gpu_miner); + let gpu_mining_status = state.gpu_latest_status.borrow().clone(); let gpu_public_parameters = HardwareStatusMonitor::current() .get_gpu_devices_public_properties() @@ -424,8 +449,8 @@ pub async fn get_miner_metrics( } let metrics_ret = MinerMetrics { - sha_network_hash_rate: sha_hash_rate, - randomx_network_hash_rate: randomx_hash_rate, + sha_network_hash_rate: sha_network_hashrate, + randomx_network_hash_rate: randomx_network_hashrate, cpu: CpuMinerMetrics { // hardware: cpu_public_parameters.clone(), mining: cpu_mining_status, @@ -641,43 +666,16 @@ pub async fn get_tari_wallet_details( state: tauri::State<'_, UniverseAppState>, ) -> Result { let timer = Instant::now(); - if state.is_getting_wallet_balance.load(Ordering::SeqCst) { - let read = state.cached_wallet_details.read().await; - if let Some(details) = &*read { - warn!(target: LOG_TARGET, "Already getting wallet balance, returning cached value"); - return Ok(details.clone()); - } - warn!(target: LOG_TARGET, "Already getting wallet balance"); - return Err("Already getting wallet balance".to_string()); - } - state - .is_getting_wallet_balance - .store(true, Ordering::SeqCst); - let wallet_balance = match state.wallet_manager.get_balance().await { - Ok(w) => Some(w), - Err(e) => { - if !matches!(e, WalletManagerError::WalletNotStarted) { - warn!(target: LOG_TARGET, "Error getting wallet balance: {}", e); - } - - None - } - }; let tari_address = state.tari_address.read().await; - - if timer.elapsed() > MAX_ACCEPTABLE_COMMAND_TIME { - warn!(target: LOG_TARGET, "get_tari_wallet_details took too long: {:?}", timer.elapsed()); - } + let wallet_balance = state.wallet_latest_balance.borrow().clone(); let result = TariWalletDetails { wallet_balance, tari_address_base58: tari_address.to_base58(), tari_address_emoji: tari_address.to_emoji_string(), }; - let mut lock = state.cached_wallet_details.write().await; - *lock = Some(result.clone()); - state - .is_getting_wallet_balance - .store(false, Ordering::SeqCst); + if timer.elapsed() > MAX_ACCEPTABLE_COMMAND_TIME { + warn!(target: LOG_TARGET, "get_tari_wallet_details took too long: {:?}", timer.elapsed()); + } Ok(result) } @@ -1047,6 +1045,31 @@ pub async fn set_cpu_mining_enabled<'r>( Ok(()) } +#[tauri::command] +pub async fn sign_ws_data(data: String) -> Result { + let key: ring::signature::Ed25519KeyPair = get_websocket_key().map_err(|e| { + warn!(target: LOG_TARGET, + "error ws key handling:{:?}", + e.to_string() + ); + "sign_ws_data: error ws key handling" + })?; + let pub_key = get_der_encode_pub_key(&key).map_err(|e| { + warn!(target: LOG_TARGET, + "error ws pub key handling:{:?}", + e.to_string() + ); + "sign_ws_data: error ws pub key handling" + })?; + + let signature = key.sign(data.as_bytes()); + + return Ok(SignWsDataResponse { + signature: BASE64_STANDARD.encode(signature.as_ref()), + pub_key, + }); +} + #[tauri::command] pub async fn set_display_mode( display_mode: String, diff --git a/src-tauri/src/gpu_miner.rs b/src-tauri/src/gpu_miner.rs index f12767e78..6aa518af0 100644 --- a/src-tauri/src/gpu_miner.rs +++ b/src-tauri/src/gpu_miner.rs @@ -20,14 +20,13 @@ // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE // USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -use std::{path::PathBuf, sync::Arc}; - use log::info; use serde::Deserialize; +use std::time::Duration; +use std::{path::PathBuf, sync::Arc}; use tari_common_types::tari_address::TariAddress; -use tari_core::transactions::tari_amount::MicroMinotari; use tari_shutdown::ShutdownSignal; -use tokio::sync::RwLock; +use tokio::sync::{watch, RwLock}; use crate::app_config::GpuThreads; use crate::binaries::{Binaries, BinaryResolver}; @@ -39,7 +38,6 @@ use crate::{ process_watcher::ProcessWatcher, }; -const SHA_BLOCKS_PER_DAY: u64 = 360; const LOG_TARGET: &str = "tari::universe::gpu_miner"; #[derive(Debug, Deserialize)] @@ -66,9 +64,12 @@ pub(crate) struct GpuMiner { } impl GpuMiner { - pub fn new() -> Self { - let adapter = GpuMinerAdapter::new(vec![]); - let process_watcher = ProcessWatcher::new(adapter); + pub fn new(status_broadcast: watch::Sender) -> Self { + let adapter = GpuMinerAdapter::new(vec![], status_broadcast); + let mut process_watcher = ProcessWatcher::new(adapter); + process_watcher.health_timeout = Duration::from_secs(9); + process_watcher.poll_time = Duration::from_secs(10); + Self { watcher: Arc::new(RwLock::new(process_watcher)), is_available: false, @@ -119,6 +120,13 @@ impl GpuMiner { pub async fn stop(&self) -> Result<(), anyhow::Error> { info!(target: LOG_TARGET, "Stopping xtrgpuminer"); let mut process_watcher = self.watcher.write().await; + let _res = process_watcher + .adapter + .latest_status_broadcast + .send(GpuMinerStatus { + is_mining: false, + ..GpuMinerStatus::default() + }); process_watcher.status_monitor = None; process_watcher.stop().await?; info!(target: LOG_TARGET, "xtrgpuminer stopped"); @@ -135,53 +143,6 @@ impl GpuMiner { lock.is_pid_file_exists(base_path) } - pub async fn status( - &self, - network_hash_rate: u64, - block_reward: MicroMinotari, - ) -> Result { - let process_watcher = self.watcher.read().await; - if !process_watcher.is_running() { - return Ok(GpuMinerStatus { - hash_rate: 0, - estimated_earnings: 0, - is_mining: false, - is_available: self.is_available, - }); - } - match &process_watcher.status_monitor { - Some(status_monitor) => { - let mut status = status_monitor.status().await?; - let hash_rate = status.hash_rate; - let estimated_earnings = if network_hash_rate == 0 { - 0 - } else { - #[allow(clippy::cast_possible_truncation)] - { - ((block_reward.as_u64() as f64) - * (hash_rate as f64 / network_hash_rate as f64) - * (SHA_BLOCKS_PER_DAY as f64)) - .floor() as u64 - } - }; - // Can't be more than the max reward for a day - let estimated_earnings = std::cmp::min( - estimated_earnings, - block_reward.as_u64() * SHA_BLOCKS_PER_DAY, - ); - status.estimated_earnings = estimated_earnings; - status.is_available = self.is_available; - Ok(status) - } - None => Ok(GpuMinerStatus { - hash_rate: 0, - estimated_earnings: 0, - is_mining: false, - is_available: self.is_available, - }), - } - } - pub async fn detect(&mut self, config_dir: PathBuf) -> Result<(), anyhow::Error> { info!(target: LOG_TARGET, "Verify if gpu miner can work on the system"); diff --git a/src-tauri/src/gpu_miner_adapter.rs b/src-tauri/src/gpu_miner_adapter.rs index 6dfa4a6bb..0ebe91dce 100644 --- a/src-tauri/src/gpu_miner_adapter.rs +++ b/src-tauri/src/gpu_miner_adapter.rs @@ -36,6 +36,7 @@ use std::time::Instant; use tari_common::configuration::Network; use tari_common_types::tari_address::TariAddress; use tari_shutdown::Shutdown; +use tokio::sync::watch; #[cfg(target_os = "windows")] use crate::utils::setup_utils::setup_utils::add_firewall_rule; @@ -60,10 +61,14 @@ pub(crate) struct GpuMinerAdapter { pub(crate) coinbase_extra: String, pub(crate) excluded_gpu_devices: Vec, pub(crate) gpu_devices: Vec, + pub(crate) latest_status_broadcast: watch::Sender, } impl GpuMinerAdapter { - pub fn new(gpu_devices: Vec) -> Self { + pub fn new( + gpu_devices: Vec, + latest_status_broadcast: watch::Sender, + ) -> Self { Self { tari_address: TariAddress::default(), gpu_grid_size: gpu_devices @@ -77,6 +82,7 @@ impl GpuMinerAdapter { coinbase_extra: "tari-universe".to_string(), excluded_gpu_devices: vec![], gpu_devices, + latest_status_broadcast, } } @@ -233,6 +239,7 @@ impl ProcessAdapter for GpuMinerAdapter { GpuMinerStatusMonitor { http_api_port, start_time: Instant::now(), + latest_status_broadcast: self.latest_status_broadcast.clone(), }, )) } @@ -250,12 +257,14 @@ impl ProcessAdapter for GpuMinerAdapter { pub struct GpuMinerStatusMonitor { http_api_port: u16, start_time: Instant, + latest_status_broadcast: watch::Sender, } #[async_trait] impl StatusMonitor for GpuMinerStatusMonitor { async fn check_health(&self) -> HealthStatus { if let Ok(status) = self.status().await { + let _result = self.latest_status_broadcast.send(status.clone()); // GPU returns 0 for first 10 seconds until it has an average if status.hash_rate > 0 || self.start_time.elapsed().as_secs() < 11 { HealthStatus::Healthy @@ -285,14 +294,12 @@ impl GpuMinerStatusMonitor { is_mining: false, hash_rate: 0, estimated_earnings: 0, - is_available: false, }); } return Ok(GpuMinerStatus { is_mining: false, hash_rate: 0, estimated_earnings: 0, - is_available: false, }); } }; @@ -305,7 +312,6 @@ impl GpuMinerStatusMonitor { is_mining: false, hash_rate: 0, estimated_earnings: 0, - is_available: false, }); } }; @@ -314,7 +320,6 @@ impl GpuMinerStatusMonitor { is_mining: true, estimated_earnings: 0, hash_rate: body.total_hashrate.ten_seconds.unwrap_or(0.0) as u64, - is_available: true, }) } } @@ -334,10 +339,9 @@ pub(crate) struct AverageHashrate { one_minute: Option, } -#[derive(Debug, Serialize, Clone)] +#[derive(Debug, Serialize, Clone, Default)] pub(crate) struct GpuMinerStatus { pub is_mining: bool, pub hash_rate: u64, pub estimated_earnings: u64, - pub is_available: bool, } diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index ba5596c56..9eeb7d0af 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -24,13 +24,16 @@ #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] use auto_launcher::AutoLauncher; +use gpu_miner_adapter::GpuMinerStatus; use hardware::hardware_status_monitor::HardwareStatusMonitor; use log::trace; use log::{debug, error, info, warn}; +use node_adapter::BaseNodeStatus; use p2pool::models::Connections; -use std::fs::{create_dir_all, remove_dir_all, remove_file, File}; +use std::fs::{remove_dir_all, remove_file}; use tokio::sync::watch::{self}; use updates_manager::UpdatesManager; +use wallet_adapter::WalletBalance; use log4rs::config::RawConfig; use serde::Serialize; @@ -60,7 +63,7 @@ use telemetry_manager::TelemetryManager; use crate::cpu_miner::CpuMiner; use crate::app_config::WindowSettings; -use crate::commands::{CpuMinerConnection, MinerMetrics, TariWalletDetails}; +use crate::commands::{CpuMinerConnection, MinerMetrics}; #[allow(unused_imports)] use crate::external_dependencies::ExternalDependencies; use crate::feedback::Feedback; @@ -562,7 +565,9 @@ async fn setup_inner( #[derive(Clone)] struct UniverseAppState { stop_start_mutex: Arc>, - is_getting_wallet_balance: Arc, + base_node_latest_status: Arc>, + wallet_latest_balance: Arc>>, + gpu_latest_status: Arc>, is_getting_p2pool_stats: Arc, is_getting_p2pool_connections: Arc, is_getting_miner_metrics: Arc, @@ -586,7 +591,6 @@ struct UniverseAppState { updates_manager: UpdatesManager, cached_p2pool_stats: Arc>>>, cached_p2pool_connections: Arc>>>, - cached_wallet_details: Arc>>, cached_miner_metrics: Arc>>, setup_counter: Arc>>, } @@ -618,8 +622,10 @@ fn main() { // NOTE: Nothing is started at this point, so ports are not known. You can only start settings ports // and addresses once the different services have been started. // A better way is to only provide the config when we start the service. - let node_manager = NodeManager::new(); - let wallet_manager = WalletManager::new(node_manager.clone()); + let (base_node_watch_tx, base_node_watch_rx) = watch::channel(BaseNodeStatus::default()); + let node_manager = NodeManager::new(base_node_watch_tx); + let (wallet_watch_tx, wallet_watch_rx) = watch::channel::>(None); + let wallet_manager = WalletManager::new(node_manager.clone(), wallet_watch_tx); let wallet_manager2 = wallet_manager.clone(); let p2pool_manager = P2poolManager::new(); @@ -636,20 +642,21 @@ fn main() { let app_in_memory_config = Arc::new(RwLock::new(app_in_memory_config::AppInMemoryConfig::init())); + let (gpu_status_tx, gpu_status_rx) = watch::channel(GpuMinerStatus::default()); let cpu_miner: Arc> = Arc::new(CpuMiner::new().into()); - let gpu_miner: Arc> = Arc::new(GpuMiner::new().into()); + let gpu_miner: Arc> = Arc::new(GpuMiner::new(gpu_status_tx).into()); let app_config_raw = AppConfig::new(); let app_config = Arc::new(RwLock::new(app_config_raw.clone())); let telemetry_manager: TelemetryManager = TelemetryManager::new( - node_manager.clone(), cpu_miner.clone(), - gpu_miner.clone(), app_config.clone(), app_in_memory_config.clone(), Some(Network::default()), p2pool_manager.clone(), + gpu_status_rx.clone(), + base_node_watch_rx.clone(), ); let updates_manager = UpdatesManager::new(app_config.clone(), shutdown.to_signal()); @@ -662,7 +669,9 @@ fn main() { is_getting_miner_metrics: Arc::new(AtomicBool::new(false)), is_getting_p2pool_stats: Arc::new(AtomicBool::new(false)), is_getting_p2pool_connections: Arc::new(AtomicBool::new(false)), - is_getting_wallet_balance: Arc::new(AtomicBool::new(false)), + base_node_latest_status: Arc::new(base_node_watch_rx), + wallet_latest_balance: Arc::new(wallet_watch_rx), + gpu_latest_status: Arc::new(gpu_status_rx), is_setup_finished: Arc::new(RwLock::new(false)), is_getting_transaction_history: Arc::new(AtomicBool::new(false)), config: app_config.clone(), @@ -683,7 +692,6 @@ fn main() { updates_manager, cached_p2pool_stats: Arc::new(RwLock::new(None)), cached_p2pool_connections: Arc::new(RwLock::new(None)), - cached_wallet_details: Arc::new(RwLock::new(None)), cached_miner_metrics: Arc::new(RwLock::new(None)), setup_counter: Arc::new(RwLock::new(AutoRollback::new(false))), }; @@ -712,14 +720,8 @@ fn main() { // Remove this after it's been rolled out for a few versions let log_path = app.path().app_log_dir().map_err(|e| e.to_string())?; let logs_cleared_file = log_path.join("logs_cleared"); - if !logs_cleared_file.exists() { - match remove_dir_all(&log_path) { - Ok(()) => { - create_dir_all(&log_path).map_err(|e| e.to_string())?; - File::create(&logs_cleared_file).map_err(|e| e.to_string())?; - }, - Err(e) => warn!(target: LOG_TARGET, "Could not clear log folder: {}", e) - } + if logs_cleared_file.exists() { + remove_file(&logs_cleared_file).map_err(|e| e.to_string())?; } let contents = setup_logging( @@ -898,6 +900,8 @@ fn main() { commands::set_pre_release, commands::check_for_updates, commands::try_update, + commands::get_network, + commands::sign_ws_data, ]) .build(tauri::generate_context!()) .inspect_err( diff --git a/src-tauri/src/node_adapter.rs b/src-tauri/src/node_adapter.rs index 24169aafc..5802c6aae 100644 --- a/src-tauri/src/node_adapter.rs +++ b/src-tauri/src/node_adapter.rs @@ -30,7 +30,7 @@ use crate::utils::logging_utils::setup_logging; use crate::ProgressTracker; use anyhow::{anyhow, Error}; use async_trait::async_trait; -use log::info; +use log::{info, warn}; use minotari_node_grpc_client::grpc::{ BlockHeader, Empty, GetBlocksRequest, HeightRequest, NewBlockTemplateRequest, Peer, PowAlgo, SyncState, @@ -44,6 +44,7 @@ use tari_core::transactions::tari_amount::MicroMinotari; use tari_crypto::ristretto::RistrettoPublicKey; use tari_shutdown::{Shutdown, ShutdownSignal}; use tari_utilities::ByteArray; +use tokio::sync::watch; #[cfg(target_os = "windows")] use crate::utils::setup_utils::setup_utils::add_firewall_rule; @@ -57,10 +58,11 @@ pub(crate) struct MinotariNodeAdapter { pub(crate) use_pruned_mode: bool, pub(crate) tor_control_port: Option, required_initial_peers: u32, + latest_status_broadcast: watch::Sender, } impl MinotariNodeAdapter { - pub fn new() -> Self { + pub fn new(status_broadcast: watch::Sender) -> Self { let port = PortAllocator::new().assign_port_with_fallback(); let tcp_listener_port = PortAllocator::new().assign_port_with_fallback(); Self { @@ -70,6 +72,7 @@ impl MinotariNodeAdapter { required_initial_peers: 3, use_tor: false, tor_control_port: None, + latest_status_broadcast: status_broadcast, } } } @@ -209,9 +212,7 @@ impl ProcessAdapter for MinotariNodeAdapter { grpc_port: self.grpc_port, required_sync_peers: self.required_initial_peers, shutdown_signal: status_shutdown, - last_block_height: 0, - last_sha3_estimated_hashrate: 0, - last_randomx_estimated_hashrate: 0, + latest_status_broadcast: self.latest_status_broadcast.clone(), }, )) } @@ -233,52 +234,77 @@ pub enum MinotariNodeStatusMonitorError { NodeNotStarted, } +#[derive(Clone, Debug, Default)] +pub(crate) struct BaseNodeStatus { + pub sha_network_hashrate: u64, + pub randomx_network_hashrate: u64, + pub block_reward: MicroMinotari, + pub block_height: u64, + pub block_time: u64, + pub is_synced: bool, +} + #[derive(Clone)] pub struct MinotariNodeStatusMonitor { grpc_port: u16, required_sync_peers: u32, shutdown_signal: ShutdownSignal, - last_block_height: u64, - last_sha3_estimated_hashrate: u64, - last_randomx_estimated_hashrate: u64, + latest_status_broadcast: watch::Sender, } #[async_trait] impl StatusMonitor for MinotariNodeStatusMonitor { async fn check_health(&self) -> HealthStatus { - if self.get_identity().await.is_ok() { - HealthStatus::Healthy - } else { - HealthStatus::Unhealthy + match self.get_network_hash_rate_and_block_reward().await { + Ok(res) => { + let _res = self.latest_status_broadcast.send(res); + HealthStatus::Healthy + } + Err(e) => { + warn!(target: LOG_TARGET, "Error checking base node health: {:?}", e); + HealthStatus::Unhealthy + } } } } impl MinotariNodeStatusMonitor { pub async fn get_network_hash_rate_and_block_reward( - &mut self, - ) -> Result<(u64, u64, MicroMinotari, u64, u64, bool), MinotariNodeStatusMonitorError> { - // TODO: use GRPC port returned from process + &self, + ) -> Result { let mut client = BaseNodeGrpcClient::connect(format!("http://127.0.0.1:{}", self.grpc_port)) .await .map_err(|_| MinotariNodeStatusMonitorError::NodeNotStarted)?; - let res = client - .get_new_block_template(NewBlockTemplateRequest { - algo: Some(PowAlgo { pow_algo: 1 }), - max_weight: 0, - }) - .await - .map_err(|e| MinotariNodeStatusMonitorError::UnknownError(e.into()))?; - let res = res.into_inner(); + let mut reward = 0; + // The base node returns a stupid error if the template is out of sync, so try multiple times + let max_template_retries = 5; - let reward = res - .miner_data - .ok_or_else(|| { - MinotariNodeStatusMonitorError::UnknownError(anyhow!("No miner data found")) - })? - .reward; + for _ in 0..max_template_retries { + let res = match client + .get_new_block_template(NewBlockTemplateRequest { + algo: Some(PowAlgo { pow_algo: 1 }), + max_weight: 0, + }) + .await + { + Ok(r) => r, + Err(e) => { + warn!(target: LOG_TARGET, "Failed to get new block template: {}", e); + continue; + } + }; + let res = res.into_inner(); + + reward = res + .miner_data + .ok_or_else(|| { + MinotariNodeStatusMonitorError::UnknownError(anyhow!("No miner data found")) + })? + .reward; + break; + } let res = client .get_tip_info(Empty {}) @@ -300,16 +326,16 @@ impl MinotariNodeStatusMonitor { metadata.timestamp, ); - if sync_achieved && (block_height <= self.last_block_height) { - return Ok(( - self.last_sha3_estimated_hashrate, - self.last_randomx_estimated_hashrate, - MicroMinotari(reward), - block_height, - block_time, - sync_achieved, - )); - } + // if sync_achieved && (block_height <= self.last_block_height) { + // return Ok(( + // self.last_sha3_estimated_hashrate, + // self.last_randomx_estimated_hashrate, + // MicroMinotari(reward), + // block_height, + // block_time, + // sync_achieved, + // )); + // } // First try with 10 blocks let blocks = [10, 100]; @@ -342,23 +368,20 @@ impl MinotariNodeStatusMonitor { last_randomx_estimated_hashrate = difficulty.randomx_estimated_hash_rate; } - result = Ok(( - last_sha3_estimated_hashrate, - last_randomx_estimated_hashrate, - MicroMinotari(reward), + result = Ok(BaseNodeStatus { + sha_network_hashrate: last_sha3_estimated_hashrate, + randomx_network_hashrate: last_randomx_estimated_hashrate, + block_reward: MicroMinotari(reward), block_height, block_time, - sync_achieved, - )); + is_synced: sync_achieved, + }); } if last_randomx_estimated_hashrate != 0 && last_sha3_estimated_hashrate != 0 { - self.last_sha3_estimated_hashrate = last_sha3_estimated_hashrate; - self.last_randomx_estimated_hashrate = last_randomx_estimated_hashrate; break; } } - self.last_block_height = block_height; Ok(result?) } @@ -406,16 +429,27 @@ impl MinotariNodeStatusMonitor { } #[allow(clippy::too_many_lines)] - pub async fn wait_synced(&self, progress_tracker: ProgressTracker) -> Result<(), Error> { + pub async fn wait_synced( + &self, + progress_tracker: ProgressTracker, + ) -> Result<(), MinotariNodeStatusMonitorError> { let mut client = - BaseNodeGrpcClient::connect(format!("http://127.0.0.1:{}", self.grpc_port)).await?; + BaseNodeGrpcClient::connect(format!("http://127.0.0.1:{}", self.grpc_port)) + .await + .map_err(|_e| MinotariNodeStatusMonitorError::NodeNotStarted)?; loop { if self.shutdown_signal.is_triggered() { break Ok(()); } - let tip = client.get_tip_info(Empty {}).await?; - let sync_progress = client.get_sync_progress(Empty {}).await?; + let tip = client + .get_tip_info(Empty {}) + .await + .map_err(|e| MinotariNodeStatusMonitorError::UnknownError(e.into()))?; + let sync_progress = client + .get_sync_progress(Empty {}) + .await + .map_err(|e| MinotariNodeStatusMonitorError::UnknownError(e.into()))?; let tip_res = tip.into_inner(); let sync_progress = sync_progress.into_inner(); if tip_res.initial_sync_achieved { diff --git a/src-tauri/src/node_manager.rs b/src-tauri/src/node_manager.rs index 325b5f4d8..2aff328db 100644 --- a/src-tauri/src/node_manager.rs +++ b/src-tauri/src/node_manager.rs @@ -22,24 +22,23 @@ use std::path::{Path, PathBuf}; use std::sync::Arc; -use std::time::SystemTime; +use std::time::{Duration, SystemTime}; use chrono::{NaiveDateTime, TimeZone, Utc}; use log::{error, info}; use minotari_node_grpc_client::grpc::Peer; use serde_json::json; use tari_common::configuration::Network; -use tari_core::transactions::tari_amount::MicroMinotari; use tari_crypto::ristretto::RistrettoPublicKey; use tari_shutdown::ShutdownSignal; use tari_utilities::hex::Hex; use tauri_plugin_sentry::sentry; use tauri_plugin_sentry::sentry::protocol::Event; use tokio::fs; -use tokio::sync::RwLock; +use tokio::sync::{watch, RwLock}; use crate::network_utils::{get_best_block_from_block_scan, get_block_info_from_block_scan}; -use crate::node_adapter::{MinotariNodeAdapter, MinotariNodeStatusMonitorError}; +use crate::node_adapter::{BaseNodeStatus, MinotariNodeAdapter, MinotariNodeStatusMonitorError}; use crate::process_watcher::ProcessWatcher; use crate::ProgressTracker; @@ -68,7 +67,7 @@ impl Clone for NodeManager { } impl NodeManager { - pub fn new() -> Self { + pub fn new(status_broadcast: watch::Sender) -> Self { // TODO: wire up to front end // let mut use_tor = true; @@ -78,8 +77,11 @@ impl NodeManager { // use_tor = false; // } - let adapter = MinotariNodeAdapter::new(); - let process_watcher = ProcessWatcher::new(adapter); + let adapter = MinotariNodeAdapter::new(status_broadcast); + let mut process_watcher = ProcessWatcher::new(adapter); + process_watcher.poll_time = Duration::from_secs(10); + process_watcher.health_timeout = Duration::from_secs(9); + process_watcher.expected_startup_time = Duration::from_secs(120); Self { watcher: Arc::new(RwLock::new(process_watcher)), @@ -162,7 +164,19 @@ impl NodeManager { .status_monitor .as_ref() .ok_or_else(|| anyhow::anyhow!("wait_synced: Node not started"))?; - status_monitor.wait_synced(progress_tracker).await + loop { + match status_monitor.wait_synced(progress_tracker.clone()).await { + Ok(_) => return Ok(()), + Err(e) => match e { + MinotariNodeStatusMonitorError::NodeNotStarted => { + continue; + } + _ => { + return Err(NodeManagerError::UnknownError(e.into()).into()); + } + }, + } + } } pub async fn wait_ready(&self) -> Result<(), NodeManagerError> { @@ -196,27 +210,6 @@ impl NodeManager { Ok(0) } - /// Returns Sha hashrate, Rx hashrate and block reward - pub async fn get_network_hash_rate_and_block_reward( - &self, - ) -> Result<(u64, u64, MicroMinotari, u64, u64, bool), NodeManagerError> { - let mut status_monitor_lock = self.watcher.write().await; - let status_monitor = status_monitor_lock - .status_monitor - .as_mut() - .ok_or_else(|| NodeManagerError::NodeNotStarted)?; - status_monitor - .get_network_hash_rate_and_block_reward() - .await - .map_err(|e| { - if matches!(e, MinotariNodeStatusMonitorError::NodeNotStarted) { - NodeManagerError::NodeNotStarted - } else { - NodeManagerError::UnknownError(e.into()) - } - }) - } - pub async fn get_identity(&self) -> Result { let status_monitor_lock = self.watcher.read().await; let status_monitor = status_monitor_lock @@ -246,12 +239,16 @@ impl NodeManager { &self, report_to_sentry: bool, ) -> Result { - let mut status_monitor_lock = self.watcher.write().await; + let status_monitor_lock = self.watcher.read().await; let status_monitor = status_monitor_lock .status_monitor - .as_mut() - .ok_or_else(|| anyhow::anyhow!("Node not started"))?; - let (_, _, _, local_tip, _, is_synced) = status_monitor + .as_ref() + .ok_or_else(|| anyhow::anyhow!("check_if_is_orphan_chain: Node not started"))?; + let BaseNodeStatus { + is_synced, + block_height: local_tip, + .. + } = status_monitor .get_network_hash_rate_and_block_reward() .await .map_err(|e| { diff --git a/src-tauri/src/process_watcher.rs b/src-tauri/src/process_watcher.rs index 128ccd959..745710da2 100644 --- a/src-tauri/src/process_watcher.rs +++ b/src-tauri/src/process_watcher.rs @@ -38,6 +38,7 @@ pub struct ProcessWatcher { watcher_task: Option>>, internal_shutdown: Shutdown, pub poll_time: tokio::time::Duration, + /// Health timeout should always be less than poll time otherwise you will have overlapping calls pub health_timeout: tokio::time::Duration, pub expected_startup_time: tokio::time::Duration, pub(crate) status_monitor: Option, @@ -76,7 +77,6 @@ impl ProcessWatcher { log_path: PathBuf, binary: Binaries, ) -> Result<(), anyhow::Error> { - info!(target: LOG_TARGET, "App shutdown triggered or terminated status for {} = {} | {}", self.adapter.name(),app_shutdown.is_triggered(),app_shutdown.is_terminated()); if app_shutdown.is_terminated() || app_shutdown.is_triggered() { return Ok(()); } @@ -221,7 +221,7 @@ async fn do_health_check( } } HealthStatus::Unhealthy => { - error!(target: LOG_TARGET, "{} is not healthy. Health check returned false", name); + warn!(target: LOG_TARGET, "{} is not healthy. Health check returned false", name); } } } diff --git a/src-tauri/src/telemetry_manager.rs b/src-tauri/src/telemetry_manager.rs index 56e5e6298..0639fd919 100644 --- a/src-tauri/src/telemetry_manager.rs +++ b/src-tauri/src/telemetry_manager.rs @@ -21,13 +21,13 @@ // USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. use crate::app_in_memory_config::AppInMemoryConfig; +use crate::gpu_miner_adapter::GpuMinerStatus; use crate::hardware::hardware_status_monitor::HardwareStatusMonitor; +use crate::node_adapter::BaseNodeStatus; use crate::p2pool_manager::{self, P2poolManager}; use crate::{ app_config::{AppConfig, MiningMode}, cpu_miner::CpuMiner, - gpu_miner::GpuMiner, - node_manager::NodeManager, }; use anyhow::Result; use base64::prelude::*; @@ -46,10 +46,9 @@ use std::ops::Div; use std::pin::Pin; use std::{sync::Arc, thread::sleep, time::Duration}; use tari_common::configuration::Network; -use tari_core::transactions::tari_amount::MicroMinotari; use tari_utilities::encoding::MBase58; use tauri::Emitter; -use tokio::sync::RwLock; +use tokio::sync::{watch, RwLock}; use tokio_util::sync::CancellationToken; const LOG_TARGET: &str = "tari::universe::telemetry_manager"; @@ -195,41 +194,42 @@ pub struct TelemetryData { pub gpu_tribe_name: Option, pub gpu_tribe_id: Option, pub extra_data: HashMap, + pub current_os: String, } pub struct TelemetryManager { - node_manager: NodeManager, cpu_miner: Arc>, - gpu_miner: Arc>, config: Arc>, in_memory_config: Arc>, pub cancellation_token: CancellationToken, node_network: Option, p2pool_manager: P2poolManager, airdrop_access_token: Arc>>, + gpu_status: watch::Receiver, + node_status: watch::Receiver, } impl TelemetryManager { pub fn new( - node_manager: NodeManager, cpu_miner: Arc>, - gpu_miner: Arc>, config: Arc>, in_memory_config: Arc>, network: Option, p2pool_manager: P2poolManager, + gpu_status: watch::Receiver, + node_status: watch::Receiver, ) -> Self { let cancellation_token = CancellationToken::new(); Self { - node_manager, cpu_miner, - gpu_miner, config, cancellation_token, node_network: network, in_memory_config, p2pool_manager, airdrop_access_token: Arc::new(RwLock::new(None)), + gpu_status, + node_status, } } @@ -261,7 +261,8 @@ impl TelemetryManager { let mut sha256_hasher = sha2::Sha256::new(); sha2::Digest::update(&mut sha256_hasher, id_as_bytes); let id_sha256 = sha256_hasher.finalize(); - let id_base64_sha256 = BASE64_STANDARD.encode(id_sha256); + let id_base64_sha256 = BASE64_STANDARD_NO_PAD.encode(id_sha256); + let unique_string = format!( "v3,{},{},{}", buf.to_monero_base58(), @@ -294,9 +295,9 @@ impl TelemetryManager { timeout: Duration, window: tauri::Window, ) -> Result<(), TelemetryManagerError> { - let node_manager = self.node_manager.clone(); let cpu_miner = self.cpu_miner.clone(); - let gpu_miner = self.gpu_miner.clone(); + let gpu_status = self.gpu_status.clone(); + let node_status = self.node_status.clone(); let config = self.config.clone(); let cancellation_token: CancellationToken = self.cancellation_token.clone(); let network = self.node_network; @@ -312,7 +313,7 @@ impl TelemetryManager { let telemetry_collection_enabled = config_cloned.read().await.allow_telemetry(); if telemetry_collection_enabled { let airdrop_access_token_validated = validate_jwt(airdrop_access_token.clone()).await; - let telemetry_data = get_telemetry_data(cpu_miner.clone(), gpu_miner.clone(), node_manager.clone(), p2pool_manager_cloned.clone(), config.clone(), network).await; + let telemetry_data = get_telemetry_data(&cpu_miner, &gpu_status, &node_status, &p2pool_manager_cloned, &config, network).await; let airdrop_api_url = in_memory_config_cloned.read().await.airdrop_api_url.clone(); handle_telemetry_data(telemetry_data, airdrop_api_url, airdrop_access_token_validated, window.clone()).await; } @@ -368,40 +369,33 @@ fn decode_jwt_claims(t: &str) -> Option { #[allow(clippy::too_many_lines)] async fn get_telemetry_data( - cpu_miner: Arc>, - gpu_miner: Arc>, - node_manager: NodeManager, - p2pool_manager: p2pool_manager::P2poolManager, - config: Arc>, + cpu_miner: &RwLock, + gpu_latest_miner_stats: &watch::Receiver, + node_latest_status: &watch::Receiver, + p2pool_manager: &p2pool_manager::P2poolManager, + config: &RwLock, network: Option, ) -> Result { - let (sha_hash_rate, randomx_hash_rate, block_reward, block_height, _block_time, is_synced) = - node_manager - .get_network_hash_rate_and_block_reward() - .await - .unwrap_or((0, 0, MicroMinotari(0), 0, 0, false)); + let BaseNodeStatus { + randomx_network_hashrate, + block_reward, + block_height, + is_synced, + .. + } = node_latest_status.borrow().clone(); let cpu_miner = cpu_miner.read().await; - let cpu = match cpu_miner.status(randomx_hash_rate, block_reward).await { + let cpu = match cpu_miner + .status(randomx_network_hashrate, block_reward) + .await + { Ok(cpu) => cpu, Err(e) => { warn!(target: LOG_TARGET, "Error getting cpu miner status: {:?}", e); return Err(TelemetryManagerError::Other(e)); } }; - let gpu_miner_lock = gpu_miner.read().await; - let gpu_status = match gpu_miner_lock.status(sha_hash_rate, block_reward).await { - Ok(gpu) => gpu, - Err(e) => { - warn!(target: LOG_TARGET, "Error getting gpu miner status: {:?}", e); - return Err(TelemetryManagerError::Other(e)); - } - }; - - // let hardware_status = HardwareMonitor::current() - // .write() - // .await - // .read_hardware_parameters(); + let gpu_status = gpu_latest_miner_stats.borrow().clone(); let gpu_hardware_parameters = HardwareStatusMonitor::current() .get_gpu_public_properties() @@ -576,6 +570,7 @@ async fn get_telemetry_data( gpu_tribe_name: None, gpu_tribe_id: None, extra_data, + current_os: std::env::consts::OS.to_string(), }) } diff --git a/src-tauri/src/wallet_adapter.rs b/src-tauri/src/wallet_adapter.rs index 40e0f6d99..cdb8638d6 100644 --- a/src-tauri/src/wallet_adapter.rs +++ b/src-tauri/src/wallet_adapter.rs @@ -39,6 +39,7 @@ use tari_core::transactions::tari_amount::MicroMinotari; use tari_crypto::ristretto::RistrettoPublicKey; use tari_shutdown::Shutdown; use tari_utilities::hex::Hex; +use tokio::sync::watch; #[cfg(target_os = "windows")] use crate::utils::setup_utils::setup_utils::add_firewall_rule; @@ -53,10 +54,11 @@ pub struct WalletAdapter { pub(crate) spend_key: String, pub(crate) tcp_listener_port: u16, pub(crate) grpc_port: u16, + balance_broadcast: watch::Sender>, } impl WalletAdapter { - pub fn new(use_tor: bool) -> Self { + pub fn new(use_tor: bool, balance_broadcast: watch::Sender>) -> Self { let tcp_listener_port = PortAllocator::new().assign_port_with_fallback(); let grpc_port = PortAllocator::new().assign_port_with_fallback(); Self { @@ -67,6 +69,7 @@ impl WalletAdapter { spend_key: "".to_string(), tcp_listener_port, grpc_port, + balance_broadcast, } } } @@ -196,6 +199,7 @@ impl ProcessAdapter for WalletAdapter { }, WalletStatusMonitor { grpc_port: self.grpc_port, + latest_balance_broadcast: self.balance_broadcast.clone(), }, )) } @@ -222,15 +226,21 @@ pub enum WalletStatusMonitorError { #[derive(Clone)] pub struct WalletStatusMonitor { grpc_port: u16, + latest_balance_broadcast: watch::Sender>, } #[async_trait] impl StatusMonitor for WalletStatusMonitor { async fn check_health(&self) -> HealthStatus { - if self.get_balance().await.is_ok() { - HealthStatus::Healthy - } else { - HealthStatus::Unhealthy + match self.get_balance().await { + Ok(b) => { + let _result = self.latest_balance_broadcast.send(Some(b)); + HealthStatus::Healthy + } + Err(e) => { + warn!(target: LOG_TARGET, "Wallet health check failed: {}", e); + HealthStatus::Unhealthy + } } } } @@ -255,8 +265,8 @@ pub struct TransactionInfo { pub is_cancelled: bool, pub excess_sig: String, pub timestamp: u64, - pub message: String, pub payment_id: String, + pub mined_in_block_height: u64, } impl WalletStatusMonitor { @@ -314,8 +324,8 @@ impl WalletStatusMonitor { is_cancelled: tx.is_cancelled, excess_sig: tx.excess_sig.to_hex(), timestamp: tx.timestamp, - message: tx.message, payment_id: tx.payment_id.to_hex(), + mined_in_block_height: tx.mined_in_block_height, }); } Ok(transactions) diff --git a/src-tauri/src/wallet_manager.rs b/src-tauri/src/wallet_manager.rs index 564d8892f..be1d0c4cb 100644 --- a/src-tauri/src/wallet_manager.rs +++ b/src-tauri/src/wallet_manager.rs @@ -30,6 +30,7 @@ use futures_util::future::FusedFuture; use std::path::PathBuf; use std::sync::Arc; use tari_shutdown::ShutdownSignal; +use tokio::sync::watch; use tokio::sync::RwLock; #[derive(thiserror::Error, Debug)] @@ -57,11 +58,14 @@ impl Clone for WalletManager { } impl WalletManager { - pub fn new(node_manager: NodeManager) -> Self { + pub fn new( + node_manager: NodeManager, + wallet_watch_tx: watch::Sender>, + ) -> Self { // TODO: wire up to front end let use_tor = false; - let adapter = WalletAdapter::new(use_tor); + let adapter = WalletAdapter::new(use_tor, wallet_watch_tx); let process_watcher = ProcessWatcher::new(adapter); Self { diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 319cf7fc0..fe3a9807b 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,5 +1,5 @@ { - "version": "0.8.24", + "version": "0.8.34", "productName": "Tari Universe (Alpha)", "mainBinaryName": "Tari Universe (Alpha)", "identifier": "com.tari.universe.alpha", @@ -35,7 +35,11 @@ }, "app": { "security": { - "capabilities": ["desktop-capability", "default", "migrated"], + "capabilities": [ + "desktop-capability", + "default", + "migrated" + ], "csp": null }, "trayIcon": { @@ -74,10 +78,12 @@ "plugins": { "updater": { "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEYxNUJBOEFEQkQ4RjJBMjYKUldRbUtvKzlyYWhiOFJIUmFFditENVV3d3hRbjNlZm1DMi9aMjluRUpVdHhQTytadTV3ODN3bUMK", - "endpoints": ["https://raw.githubusercontent.com/tari-project/universe/main/.updater/alpha-latest.json"], + "endpoints": [ + "https://raw.githubusercontent.com/tari-project/universe/main/.updater/alpha-latest.json" + ], "windows": { "installMode": "passive" } } } -} +} \ No newline at end of file diff --git a/src/App/AppWrapper.tsx b/src/App/AppWrapper.tsx index 90ca15271..668e61126 100644 --- a/src/App/AppWrapper.tsx +++ b/src/App/AppWrapper.tsx @@ -1,12 +1,12 @@ import { useEffect } from 'react'; -import { defaultOptions } from 'tauri-plugin-sentry-api'; -import * as Sentry from '@sentry/react'; -import { IGNORE_FETCHING } from '@app/App/sentryIgnore'; +// import { defaultOptions } from 'tauri-plugin-sentry-api'; +// import * as Sentry from '@sentry/react'; +// import { IGNORE_FETCHING } from '@app/App/sentryIgnore'; import { initSystray } from '@app/utils'; import { useDetectMode, useDisableRefresh, useLangaugeResolver, useListenForExternalDependencies } from '@app/hooks'; -import packageInfo from '../../package.json'; +// import packageInfo from '../../package.json'; import { useAppConfigStore } from '../store/useAppConfigStore.ts'; import setupLogger from '../utils/shared-logger.ts'; import App from './App.tsx'; @@ -15,26 +15,26 @@ import { useMiningStore } from '@app/store/useMiningStore.ts'; // FOR ANYTHING THAT NEEDS TO BE INITIALISED -const environment = import.meta.env.MODE; -const sentryOptions = { - ...defaultOptions, - dsn: 'https://edd6b9c1494eb7fda6ee45590b80bcee@o4504839079002112.ingest.us.sentry.io/4507979991285760', - integrations: [Sentry.captureConsoleIntegration({ levels: ['warn', 'error'] }), Sentry.extraErrorDataIntegration()], - release: packageInfo.version, - environment, - // Set tracesSampleRate to 1.0 to capture 100% - // of transactions for tracing. - tracesSampleRate: 1.0, - attachStacktrace: true, - autoSessionTracking: false, - ignoreErrors: [...IGNORE_FETCHING], - enabled: environment !== 'development', -}; +// const environment = import.meta.env.MODE; +// const sentryOptions = { +// ...defaultOptions, +// dsn: 'https://edd6b9c1494eb7fda6ee45590b80bcee@o4504839079002112.ingest.us.sentry.io/4507979991285760', +// integrations: [Sentry.captureConsoleIntegration({ levels: ['warn', 'error'] }), Sentry.extraErrorDataIntegration()], +// release: packageInfo.version, +// environment, +// // Set tracesSampleRate to 1.0 to capture 100% +// // of transactions for tracing. +// tracesSampleRate: 1.0, +// attachStacktrace: true, +// autoSessionTracking: false, +// ignoreErrors: [...IGNORE_FETCHING], +// enabled: environment !== 'development', +// }; setupLogger(); export default function AppWrapper() { - const allowTelemetry = useAppConfigStore((s) => s.allow_telemetry); + // const allowTelemetry = useAppConfigStore((s) => s.allow_telemetry); const fetchAppConfig = useAppConfigStore((s) => s.fetchAppConfig); const setMiningNetwork = useMiningStore((s) => s.setMiningNetwork); @@ -54,13 +54,15 @@ export default function AppWrapper() { // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - useEffect(() => { - if (allowTelemetry && environment !== 'development') { - Sentry.init(sentryOptions); - } else { - Sentry.close(); - } - }, [allowTelemetry]); + // We think Sentry/Vite is causing the crashing issues. Disable on the front end for now. + // + // useEffect(() => { + // if (allowTelemetry && environment !== 'development') { + // Sentry.init(sentryOptions); + // } else { + // Sentry.close(); + // } + // }, [allowTelemetry]); return ; } diff --git a/src/components/ToastStack/Toast/Toast.tsx b/src/components/ToastStack/Toast/Toast.tsx index f354eff57..2d6617b8e 100644 --- a/src/components/ToastStack/Toast/Toast.tsx +++ b/src/components/ToastStack/Toast/Toast.tsx @@ -25,13 +25,11 @@ export const Toast = ({ id, index, title, text, timeout = 4500, isHovered = fals const { removeToast } = useToastStore(); const [finished, setFinished] = useState(false); - const handleHide = useCallback( - (id: number | string = 0) => { - setShow(false); - removeToast(id); - }, - [removeToast] - ); + const handleHide = useCallback((id: number | string = 0) => { + setShow(false); + removeToast(id); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); useEffect(() => { setShow(true); diff --git a/src/containers/floating/AutoUpdateDialog/AutoUpdateDialog.tsx b/src/containers/floating/AutoUpdateDialog/AutoUpdateDialog.tsx index fcf0c723b..f00caae53 100644 --- a/src/containers/floating/AutoUpdateDialog/AutoUpdateDialog.tsx +++ b/src/containers/floating/AutoUpdateDialog/AutoUpdateDialog.tsx @@ -61,12 +61,14 @@ export default function AutoUpdateDialog() { return () => { unlistenPromise.then((unlisten) => unlisten()); }; - }, [open, setDialogToShow]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [open]); const handleClose = useCallback(() => { console.info('Update declined'); setDialogToShow(null); - }, [setDialogToShow]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); const handleUpdate = useCallback(() => { console.info('Proceed with update'); diff --git a/src/containers/floating/Error/ErrorSnackbar.tsx b/src/containers/floating/Error/ErrorSnackbar.tsx index 6efb3663a..acfa18fc6 100644 --- a/src/containers/floating/Error/ErrorSnackbar.tsx +++ b/src/containers/floating/Error/ErrorSnackbar.tsx @@ -51,14 +51,12 @@ export default function ErrorSnackbar() { const { getFloatingProps } = useInteractions([dismiss, role]); - const handleClose = useCallback( - (e?: MouseEvent) => { - e?.preventDefault(); - e?.stopPropagation(); - setError(undefined); - }, - [setError] - ); + const handleClose = useCallback((e?: MouseEvent) => { + e?.preventDefault(); + e?.stopPropagation(); + setError(undefined); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); useEffect(() => { setShow(Boolean(error && error?.length)); diff --git a/src/containers/floating/PaperWalletModal/styles.ts b/src/containers/floating/PaperWalletModal/styles.ts index 679953786..251ab72c0 100644 --- a/src/containers/floating/PaperWalletModal/styles.ts +++ b/src/containers/floating/PaperWalletModal/styles.ts @@ -6,10 +6,11 @@ export const BlackButton = styled('button')` color: #c9eb00; text-align: center; font-size: 21px; - font-weight: 800; + line-height: 99.7%; text-transform: uppercase; font-family: DrukWide, sans-serif; + font-weight: 800; border-radius: 49px; background: #000; box-shadow: 28px 28px 77px 0px rgba(0, 0, 0, 0.1); diff --git a/src/containers/floating/Settings/SettingsModal.styles.ts b/src/containers/floating/Settings/SettingsModal.styles.ts index 72c88afc7..0d0c4a037 100644 --- a/src/containers/floating/Settings/SettingsModal.styles.ts +++ b/src/containers/floating/Settings/SettingsModal.styles.ts @@ -1,4 +1,3 @@ -import { m } from 'framer-motion'; import styled from 'styled-components'; export const Container = styled.div` @@ -58,11 +57,8 @@ export const variants = { transition, }, }; -export const SectionWrapper = styled(m.div).attrs({ - initial: 'initial', - animate: 'visible', - exit: 'exit', -})` + +export const SectionWrapper = styled.div` max-width: 100%; display: flex; flex-direction: column; diff --git a/src/containers/floating/Settings/SettingsModal.tsx b/src/containers/floating/Settings/SettingsModal.tsx index ec38cca79..b91ff6c0d 100644 --- a/src/containers/floating/Settings/SettingsModal.tsx +++ b/src/containers/floating/Settings/SettingsModal.tsx @@ -1,5 +1,4 @@ import { useState } from 'react'; -import { AnimatePresence } from 'framer-motion'; import { useTranslation } from 'react-i18next'; import { IoClose } from 'react-icons/io5'; @@ -23,7 +22,7 @@ import { ReleaseNotes, } from './sections'; -import { Container, ContentContainer, HeaderContainer, SectionWrapper, variants } from './SettingsModal.styles.ts'; +import { Container, ContentContainer, HeaderContainer, SectionWrapper } from './SettingsModal.styles.ts'; const markups = { general: , @@ -65,11 +64,7 @@ export default function SettingsModal() { - - - {sectionMarkup} - - + {sectionMarkup} diff --git a/src/containers/floating/Settings/sections/airdrop/ApplyInviteCode.tsx b/src/containers/floating/Settings/sections/airdrop/ApplyInviteCode.tsx index 21eae8652..114079273 100644 --- a/src/containers/floating/Settings/sections/airdrop/ApplyInviteCode.tsx +++ b/src/containers/floating/Settings/sections/airdrop/ApplyInviteCode.tsx @@ -38,7 +38,8 @@ export const ApplyInviteCode = () => { open(refUrl); }); } - }, [backendInMemoryConfig?.airdropTwitterAuthUrl, claimCode, setAllowTelemetry, setAuthUuid]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [backendInMemoryConfig?.airdropTwitterAuthUrl, claimCode]); const handleToken = useCallback(() => { if (authUuid) { @@ -62,7 +63,8 @@ export const ApplyInviteCode = () => { return false; } - }, [authUuid, backendInMemoryConfig?.airdropApiUrl, setAirdropTokens]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [authUuid, backendInMemoryConfig?.airdropApiUrl]); useEffect(() => { if (authUuid && backendInMemoryConfig?.airdropApiUrl) { @@ -85,7 +87,8 @@ export const ApplyInviteCode = () => { setLoading(false); }; } - }, [authUuid, backendInMemoryConfig?.airdropApiUrl, handleToken, setAuthUuid]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [authUuid, backendInMemoryConfig?.airdropApiUrl, handleToken]); return ( diff --git a/src/containers/floating/Settings/sections/p2p/P2PConnectionData.tsx b/src/containers/floating/Settings/sections/p2p/P2PConnectionData.tsx index f9a58c765..34f314372 100644 --- a/src/containers/floating/Settings/sections/p2p/P2PConnectionData.tsx +++ b/src/containers/floating/Settings/sections/p2p/P2PConnectionData.tsx @@ -20,7 +20,7 @@ import { useEffect, useState } from 'react'; import { CardComponent } from '@app/containers/floating/Settings/components/Card.component.tsx'; export default function P2PConnectionData() { - const { t } = useTranslation('p2p'); + const { t } = useTranslation('p2p', { useSuspense: false }); const [copiedId, setCopiedId] = useState(); const { copyToClipboard } = useCopyToClipboard(); diff --git a/src/containers/floating/Settings/sections/p2p/P2PoolStats.tsx b/src/containers/floating/Settings/sections/p2p/P2PoolStats.tsx index 1b2466f40..65ab3f762 100644 --- a/src/containers/floating/Settings/sections/p2p/P2PoolStats.tsx +++ b/src/containers/floating/Settings/sections/p2p/P2PoolStats.tsx @@ -29,21 +29,23 @@ const P2PoolStats = () => { const fetchP2poolConnections = useP2poolStatsStore((s) => s?.fetchP2poolConnections); useEffect(() => { - const fetchP2pStatsInterval = setInterval(async () => { + const handleFetchP2pStats = async () => { await fetchP2pStats?.(); await fetchP2poolConnections?.(); - }, 5000); - + }; + handleFetchP2pStats(); + const fetchP2pStatsInterval = setInterval(handleFetchP2pStats, 5000); return () => { clearInterval(fetchP2pStatsInterval); }; - }, [fetchP2pStats, fetchP2poolConnections]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); const displayPeers = useMemo(() => { const sha3Height = sha3Stats?.height; const randomXHeight = randomXStats?.height; return peers?.map((peer) => { - const { current_sha3x_height, current_random_x_height } = peer.peer_info || {}; + const { current_sha3x_height, current_random_x_height } = peer?.peer_info || {}; const sha3Diff = sha3Height ? sha3Height - current_sha3x_height : undefined; const randomxDiff = randomXHeight ? randomXHeight - current_random_x_height : undefined; diff --git a/src/containers/floating/Settings/sections/p2p/P2pMarkup.tsx b/src/containers/floating/Settings/sections/p2p/P2pMarkup.tsx index 67275db3c..461c94693 100644 --- a/src/containers/floating/Settings/sections/p2p/P2pMarkup.tsx +++ b/src/containers/floating/Settings/sections/p2p/P2pMarkup.tsx @@ -29,8 +29,8 @@ const P2pMarkup = ({ setDisabledStats }: P2pMarkupProps) => { const handleP2poolEnabled = useCallback( async (event: React.ChangeEvent) => { - setDisabledStats(true); await setP2poolEnabled(event.target.checked); + setDisabledStats(!event.target.checked); setDialogToShow('restart'); }, [setDialogToShow, setDisabledStats, setP2poolEnabled] diff --git a/src/containers/floating/ShareRewardModal/ShareRewardModal.tsx b/src/containers/floating/ShareRewardModal/ShareRewardModal.tsx index bd3bbf566..340f191d3 100644 --- a/src/containers/floating/ShareRewardModal/ShareRewardModal.tsx +++ b/src/containers/floating/ShareRewardModal/ShareRewardModal.tsx @@ -52,7 +52,7 @@ export default function ShareRewardModal() { const referralCode = userDetails?.user?.referral_code || ''; const gemsValue = (referralQuestPoints?.pointsForClaimingReferral || GIFT_GEMS).toLocaleString(); - const block = item?.blockHeight || 0; + const block = item?.mined_in_block_height || 0; const reward = item?.amount || 0; const earningsFormatted = useMemo(() => formatNumber(reward, FormatPreset.TXTM_COMPACT).toLowerCase(), [reward]); @@ -71,9 +71,11 @@ export default function ShareRewardModal() { {t('share.title')} - - {t('share.winner-pill')} #{block.toLocaleString()} - + {block ? ( + + {t('share.winner-pill')} #{block.toLocaleString()} + + ) : null} diff --git a/src/containers/floating/ShareRewardModal/styles.ts b/src/containers/floating/ShareRewardModal/styles.ts index 822fa3e68..b784acab5 100644 --- a/src/containers/floating/ShareRewardModal/styles.ts +++ b/src/containers/floating/ShareRewardModal/styles.ts @@ -34,8 +34,8 @@ export const Title = styled('div')` color: #000; text-align: center; font-family: DrukWide, sans-serif; - font-size: 30px; font-weight: 800; + font-size: 30px; line-height: 99.7%; text-transform: uppercase; max-width: 276px; @@ -69,9 +69,9 @@ export const BlackButton = styled('button')` color: #c9eb00; text-align: center; font-family: DrukWide, sans-serif; + font-weight: 800; font-size: 21px; font-style: normal; - font-weight: 800; line-height: 99.7%; text-transform: uppercase; cursor: pointer; @@ -108,7 +108,7 @@ export const Text = styled('div')` text-transform: uppercase; strong { - font-weight: 800; + font-weight: 700; } `; @@ -132,7 +132,7 @@ export const Label = styled('div')` text-align: center; font-size: 14px; font-style: normal; - font-weight: 800; + font-weight: 700; line-height: 50%; text-transform: uppercase; `; @@ -140,9 +140,9 @@ export const Label = styled('div')` export const Value = styled('div')` color: #000; font-family: DrukWide, sans-serif; + font-weight: 800; font-size: 12px; font-style: normal; - font-weight: 800; line-height: 50%; text-transform: uppercase; `; diff --git a/src/containers/floating/StagedSecurity/styles.ts b/src/containers/floating/StagedSecurity/styles.ts index 66fe17cdf..e804a8294 100644 --- a/src/containers/floating/StagedSecurity/styles.ts +++ b/src/containers/floating/StagedSecurity/styles.ts @@ -32,10 +32,10 @@ export const BlackButton = styled('button')` color: #c9eb00; text-align: center; font-size: 21px; - font-weight: 800; line-height: 99.7%; text-transform: uppercase; font-family: DrukWide, sans-serif; + font-weight: 800; border-radius: 49px; background: #000; diff --git a/src/containers/main/Airdrop/AirdropGiftTracker/components/ClaimModal/ClaimModal.tsx b/src/containers/main/Airdrop/AirdropGiftTracker/components/ClaimModal/ClaimModal.tsx index 89b636c83..207c8e45e 100644 --- a/src/containers/main/Airdrop/AirdropGiftTracker/components/ClaimModal/ClaimModal.tsx +++ b/src/containers/main/Airdrop/AirdropGiftTracker/components/ClaimModal/ClaimModal.tsx @@ -13,7 +13,6 @@ import { Text, TextWrapper, Title, - XLogo, } from './styles'; import gemImage from './images/gems.png'; import gemLargeImage from './images/gem-large.png'; @@ -21,7 +20,6 @@ import { useCallback, useState } from 'react'; import { GIFT_GEMS, MAX_GEMS, useAirdropStore } from '@app/store/useAirdropStore'; import { Trans, useTranslation } from 'react-i18next'; import { GemImage } from '../Gems/styles'; -import XLogoIcon from './icons/XLogoIcon'; import { useAppConfigStore } from '@app/store/useAppConfigStore'; import GreenModal from '@app/components/GreenModal/GreenModal'; @@ -38,10 +36,15 @@ export default function ClaimModal({ onSubmit, onClose }: ClaimModalProps) { const [claimCode, setClaimCode] = useState(''); - const handleSubmit = useCallback(async () => { - await setAllowTelemetry(true); - return onSubmit(claimCode); - }, [claimCode, onSubmit, setAllowTelemetry]); + const handleSubmit = useCallback( + async (e: React.MouseEvent) => { + e.preventDefault(); + e.stopPropagation(); + await setAllowTelemetry(true); + return onSubmit(claimCode); + }, + [claimCode, onSubmit, setAllowTelemetry] + ); return ( @@ -78,12 +81,7 @@ export default function ClaimModal({ onSubmit, onClose }: ClaimModalProps) { - - {t('claimGems')} - - - - + {t('claimGems')} {!allowTelemetry && ( diff --git a/src/containers/main/Airdrop/AirdropGiftTracker/components/ClaimModal/styles.ts b/src/containers/main/Airdrop/AirdropGiftTracker/components/ClaimModal/styles.ts index 2b389aefc..3729ed96f 100644 --- a/src/containers/main/Airdrop/AirdropGiftTracker/components/ClaimModal/styles.ts +++ b/src/containers/main/Airdrop/AirdropGiftTracker/components/ClaimModal/styles.ts @@ -15,10 +15,10 @@ export const Title = styled('div')` text-align: center; font-size: 32px; font-style: normal; - font-weight: 800; line-height: 99.7%; text-transform: uppercase; font-family: DrukWide, sans-serif; + font-weight: 800; span { color: #ff4a55; @@ -142,6 +142,7 @@ export const ClaimButton = styled('button')` font-size: 21px; text-align: center; font-family: DrukWide, sans-serif; + font-weight: 800; width: 100%; border-radius: 49px; background: #000; @@ -149,7 +150,6 @@ export const ClaimButton = styled('button')` min-height: 70px; position: relative; - font-weight: bold; cursor: pointer; &:hover { @@ -248,25 +248,6 @@ export const InputGems = styled('div')` } `; -export const XLogo = styled('div')` - width: 48px; - height: 48px; - border-radius: 100%; - - display: flex; - align-items: center; - justify-content: center; - - background-color: ${({ theme }) => theme.palette.background.accent}; - color: #000; - - position: absolute; - top: 50%; - right: 16px; - - transform: translateY(-50%); -`; - export const FinePrint = styled('div')` color: #000; text-align: center; diff --git a/src/containers/main/Airdrop/AirdropGiftTracker/sections/LoggedIn/segments/Flare/Flare.tsx b/src/containers/main/Airdrop/AirdropGiftTracker/sections/LoggedIn/segments/Flare/Flare.tsx index a1cf6c6d3..dc64ca234 100644 --- a/src/containers/main/Airdrop/AirdropGiftTracker/sections/LoggedIn/segments/Flare/Flare.tsx +++ b/src/containers/main/Airdrop/AirdropGiftTracker/sections/LoggedIn/segments/Flare/Flare.tsx @@ -22,22 +22,22 @@ const durations = { export default function Flare({ gems, animationType }: Props) { const setFlareAnimationType = useAirdropStore((s) => s.setFlareAnimationType); - const clearFlareAnimationType = useCallback(() => setFlareAnimationType(), [setFlareAnimationType]); useEffect(() => { const duration = durations[animationType] || 0; - const animationTimeout = setTimeout(clearFlareAnimationType, duration); + const animationTimeout = setTimeout(setFlareAnimationType, duration); return () => { clearTimeout(animationTimeout); }; - }, [animationType, clearFlareAnimationType]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [animationType]); return ( setFlareAnimationType()} > {animationType === 'GoalComplete' && } {animationType === 'FriendAccepted' && } diff --git a/src/containers/main/Airdrop/AirdropGiftTracker/sections/LoggedIn/segments/Flare/styles.ts b/src/containers/main/Airdrop/AirdropGiftTracker/sections/LoggedIn/segments/Flare/styles.ts index 9c865fa97..ea724ac7b 100644 --- a/src/containers/main/Airdrop/AirdropGiftTracker/sections/LoggedIn/segments/Flare/styles.ts +++ b/src/containers/main/Airdrop/AirdropGiftTracker/sections/LoggedIn/segments/Flare/styles.ts @@ -20,8 +20,8 @@ export const Wrapper = styled(m.div)` export const Number = styled(m.div)` text-align: center; font-family: Druk, sans-serif; - font-size: 68px; font-weight: 700; + font-size: 68px; line-height: 1.1; position: relative; z-index: 2; diff --git a/src/containers/main/Airdrop/AirdropGiftTracker/sections/LoggedOut/LoggedOut.tsx b/src/containers/main/Airdrop/AirdropGiftTracker/sections/LoggedOut/LoggedOut.tsx index 3e8c6fd35..0b9f6ee8c 100644 --- a/src/containers/main/Airdrop/AirdropGiftTracker/sections/LoggedOut/LoggedOut.tsx +++ b/src/containers/main/Airdrop/AirdropGiftTracker/sections/LoggedOut/LoggedOut.tsx @@ -25,7 +25,8 @@ export default function LoggedOut() { ); } }, - [backendInMemoryConfig?.airdropTwitterAuthUrl, setAuthUuid] + // eslint-disable-next-line react-hooks/exhaustive-deps + [backendInMemoryConfig?.airdropTwitterAuthUrl] ); useEffect(() => { @@ -61,7 +62,8 @@ export default function LoggedOut() { clearTimeout(timeout); }; } - }, [authUuid, backendInMemoryConfig?.airdropApiUrl, restartMining, setAirdropTokens, setAuthUuid, setUserPoints]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [authUuid, backendInMemoryConfig?.airdropApiUrl]); const gemsValue = (referralQuestPoints?.pointsForClaimingReferral || GIFT_GEMS).toLocaleString(); diff --git a/src/containers/main/Dashboard/MiningView/components/BlockHeightAccent.styles.ts b/src/containers/main/Dashboard/MiningView/components/BlockHeightAccent.styles.ts index 9fcbb1e4a..cf2019145 100644 --- a/src/containers/main/Dashboard/MiningView/components/BlockHeightAccent.styles.ts +++ b/src/containers/main/Dashboard/MiningView/components/BlockHeightAccent.styles.ts @@ -16,6 +16,7 @@ export const AccentWrapper = styled(m.div)` export const AccentText = styled(m.div)` display: flex; font-family: DrukWide, sans-serif; + font-weight: 800; white-space: pre; line-height: 1; opacity: 0.55; diff --git a/src/containers/main/Dashboard/MiningView/components/BlockTime.styles.ts b/src/containers/main/Dashboard/MiningView/components/BlockTime.styles.ts index ba75f1cd7..ad018e670 100644 --- a/src/containers/main/Dashboard/MiningView/components/BlockTime.styles.ts +++ b/src/containers/main/Dashboard/MiningView/components/BlockTime.styles.ts @@ -17,9 +17,9 @@ export const TitleTypography = styled(Typography)` export const TimerTypography = styled.div` font-family: DrukWide, sans-serif; + font-weight: 800; font-variant-numeric: tabular-nums; font-size: 18px; - font-weight: 700; color: ${({ theme }) => theme.palette.text.primary}; gap: 2px; display: flex; diff --git a/src/containers/main/Dashboard/MiningView/components/Earnings.styles.ts b/src/containers/main/Dashboard/MiningView/components/Earnings.styles.ts index 84de6fc3b..bd27f22c9 100644 --- a/src/containers/main/Dashboard/MiningView/components/Earnings.styles.ts +++ b/src/containers/main/Dashboard/MiningView/components/Earnings.styles.ts @@ -11,7 +11,7 @@ export const EarningsContainer = styled.div` export const RecapText = styled.div` display: flex; font-family: DrukWide, sans-serif; - font-weight: 700; + font-weight: 800; font-size: 22px; text-transform: uppercase; text-align: center; @@ -31,6 +31,8 @@ export const WinText = styled.div` text-transform: uppercase; display: flex; font-family: DrukWide, sans-serif; + font-weight: 800; + font-size: 14px; letter-spacing: -0.1px; white-space: pre; diff --git a/src/containers/main/Dashboard/MiningView/components/Earnings.tsx b/src/containers/main/Dashboard/MiningView/components/Earnings.tsx index 209465b30..3a86b70ff 100644 --- a/src/containers/main/Dashboard/MiningView/components/Earnings.tsx +++ b/src/containers/main/Dashboard/MiningView/components/Earnings.tsx @@ -52,13 +52,13 @@ export default function Earnings() { ) : null; const replayText = - replayItem?.amount && replayItem.blockHeight ? ( + replayItem?.amount && replayItem.mined_in_block_height ? ( }} /> diff --git a/src/containers/main/ShellOfSecrets/SoSWidget/segments/Timer/Timer.tsx b/src/containers/main/ShellOfSecrets/SoSWidget/segments/Timer/Timer.tsx index 6d371e37a..6c5340792 100644 --- a/src/containers/main/ShellOfSecrets/SoSWidget/segments/Timer/Timer.tsx +++ b/src/containers/main/ShellOfSecrets/SoSWidget/segments/Timer/Timer.tsx @@ -14,7 +14,7 @@ import { useEffect, useState } from 'react'; export default function Timer() { const { t } = useTranslation('sos', { useSuspense: false }); - const { getTimeRemaining } = useShellOfSecretsStore(); + const getTimeRemaining = useShellOfSecretsStore((s) => s.getTimeRemaining); const [reminingTime, setRemainingTime] = useState({ days: 0, hours: 0, totalRemainingMs: 0 }); useEffect(() => { @@ -24,7 +24,8 @@ export default function Timer() { return () => { clearInterval(intervalId); }; - }, [getTimeRemaining]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); return ( diff --git a/src/containers/main/SideBar/Miner/components/CustomPowerLevels/CustomPowerLevelsDialogContainer.tsx b/src/containers/main/SideBar/Miner/components/CustomPowerLevels/CustomPowerLevelsDialogContainer.tsx index aa8ba115b..5e0f23f21 100644 --- a/src/containers/main/SideBar/Miner/components/CustomPowerLevels/CustomPowerLevelsDialogContainer.tsx +++ b/src/containers/main/SideBar/Miner/components/CustomPowerLevels/CustomPowerLevelsDialogContainer.tsx @@ -19,7 +19,8 @@ export const CustomPowerLevelsDialogContainer = () => { if (!maxThreads) { fetchMaxThreads(); } - }, [fetchMaxThreads, maxThreads]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [maxThreads]); return ( { return () => { unlistenPromise.then((unlisten) => unlisten()); }; - }, [setIsOrphanChain]); + }, []); const steps = Array.from({ length: 6 }).map((_, i) => t(`mining-view:orphan-chain-tooltip.step_${i + 1}`)); diff --git a/src/containers/main/SideBar/components/Wallet/History.tsx b/src/containers/main/SideBar/components/Wallet/History.tsx index c5c741733..00894e8bd 100644 --- a/src/containers/main/SideBar/components/Wallet/History.tsx +++ b/src/containers/main/SideBar/components/Wallet/History.tsx @@ -1,11 +1,10 @@ -import { useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { useWalletStore } from '@app/store/useWalletStore'; import { CircularProgress } from '@app/components/elements/CircularProgress'; -import HistoryItem from './HistoryItem'; import { ListLabel } from './HistoryItem.styles'; import { HistoryContainer, HistoryPadding } from './Wallet.styles'; +import HistoryItem from './HistoryItem'; const container = { hidden: { opacity: 0, height: 0 }, @@ -19,13 +18,16 @@ export default function History() { const { t } = useTranslation('sidebar', { useSuspense: false }); const isTransactionLoading = useWalletStore((s) => s.isTransactionLoading); const transactions = useWalletStore((s) => s.transactions); - const txMarkup = useMemo(() => transactions.map((tx) => ), [transactions]); return ( {t('recent-wins')} - {isTransactionLoading && !transactions?.length ? : txMarkup} + {isTransactionLoading && !transactions?.length ? ( + + ) : ( + transactions.map((tx) => ) + )} ); diff --git a/src/containers/main/SideBar/components/Wallet/HistoryItem.tsx b/src/containers/main/SideBar/components/Wallet/HistoryItem.tsx index 38222d11d..55dd575af 100644 --- a/src/containers/main/SideBar/components/Wallet/HistoryItem.tsx +++ b/src/containers/main/SideBar/components/Wallet/HistoryItem.tsx @@ -21,14 +21,14 @@ import { useCallback, useMemo, useState } from 'react'; import { AnimatePresence } from 'framer-motion'; import gemImage from '../../../Airdrop/AirdropGiftTracker/images/gem.png'; import { useShareRewardStore } from '@app/store/useShareRewardStore.ts'; -import { Transaction } from '@app/types/wallet.ts'; import { GIFT_GEMS, useAirdropStore } from '@app/store/useAirdropStore.ts'; import { useAppConfigStore } from '@app/store/useAppConfigStore.ts'; import { ReplaySVG } from '@app/assets/icons/replay'; import { formatNumber, FormatPreset } from '@app/utils/formatters.ts'; +import { TransactionInfo } from '@app/types/app-status.ts'; interface HistoryItemProps { - item: Transaction; + item: TransactionInfo; } const randomGradientColours = [ @@ -71,11 +71,7 @@ export default function HistoryItem({ item }: HistoryItemProps) { handleWinReplay(item); }, [handleWinReplay, item]); - if (!item.blockHeight || item.payment_id?.length > 0) { - return null; - } - - const itemTitle = `${t('block')} #${item.blockHeight}`; + const itemTitle = `${t('block')} #${item.mined_in_block_height}`; const itemTime = new Date(item.timestamp * 1000)?.toLocaleString(systemLang ? undefined : appLanguage, { month: 'short', day: '2-digit', @@ -117,14 +113,19 @@ export default function HistoryItem({ item }: HistoryItemProps) { )} - - {itemTitle} - {itemTime} + {item.mined_in_block_height ? ( + <> + {itemTitle} + {itemTime} + + ) : ( + {itemTime} + )} diff --git a/src/containers/main/SideBar/components/Wallet/Wallet.tsx b/src/containers/main/SideBar/components/Wallet/Wallet.tsx index f1abb2617..3881ea67b 100644 --- a/src/containers/main/SideBar/components/Wallet/Wallet.tsx +++ b/src/containers/main/SideBar/components/Wallet/Wallet.tsx @@ -62,16 +62,16 @@ export default function Wallet() { const toggleBalanceVisibility = () => setShowBalance((prev) => !prev); const displayValue = balance === null ? '-' : showBalance ? formatted : '*****'; - const handleShowClick = useCallback(() => { + const handleShowClick = useCallback(async () => { if (balance && !transactions.length && !isTransactionLoading) { - fetchTx().then(() => setShowHistory((c) => !c)); - return; + await fetchTx(); + } else { + setRecapCount(undefined); } - setRecapCount(undefined); - setShowHistory((c) => !c); - }, [balance, fetchTx, isTransactionLoading, setRecapCount, transactions?.length]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [balance, fetchTx, isTransactionLoading, transactions?.length]); const handleSyncButtonClick = () => { setShowPaperWalletModal(true); diff --git a/src/containers/phase/Setup/Setup.tsx b/src/containers/phase/Setup/Setup.tsx index 2b10d56a8..5c87c4abb 100644 --- a/src/containers/phase/Setup/Setup.tsx +++ b/src/containers/phase/Setup/Setup.tsx @@ -4,6 +4,7 @@ import HeroText from './components/HeroText'; import InfoNav from './components/InfoNav/InfoNav'; import { SetupWrapper } from '@app/containers/phase/Setup/Setup.styles'; import grain from '/assets/img/grain.png'; +import AppVersion from './components/AppVersion'; export default function Setup() { useSetUp(); @@ -12,6 +13,7 @@ export default function Setup() {