diff --git a/.ckb-light-version b/.ckb-light-version index 7becae11d1..d379b578ae 100644 --- a/.ckb-light-version +++ b/.ckb-light-version @@ -1 +1 @@ -v0.3.2 +v0.3.6 diff --git a/.ckb-version b/.ckb-version index bfe1211ecc..de4d9773e7 100644 --- a/.ckb-version +++ b/.ckb-version @@ -1 +1 @@ -v0.112.1 +v0.114.0 diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 31c00758f7..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -**Describe the bug** (Please enter details, the more detail the better) - - -**Debug info** (Please upload the debug info from `Help` - `Export Debug Information`) - - -**Screenshots** (If applicable, add screenshots to help explain your problem.) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000000..b5a721c9f6 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,77 @@ +name: Bug Report +description: Create a report to help us improve Neuron +title: '[Bug Report] **Please describe the bug shortly**' +labels: + - bug +assignees: + - Keith-CY + - yanguoyu +body: + - type: markdown + attributes: + value: | + Please check [Helpe Center](https://neuron.magickbase.com/help-center) first to see if your issue is already addressed. + + - type: dropdown + id: type + validations: + required: true + attributes: + label: Topic Type + options: + - Cannot Synchronize + - Cannot Send Transaction + - Incorrect Balance + - User Experience + - Other + + - type: textarea + id: detial + validations: + required: true + attributes: + label: Detail of the issue + description: Please append detail of the issue here, including steps to reproduce, screenshots, etc. + + - type: markdown + attributes: + value: | + + --- + ## Please add neuron logs if possible, they can be exported by `Menu -> Help -> Export Debug Information` + + + The debug information will be exported as a zip file, you may upload it by drag&drop into **Detail of the issue**, or paste them in the following fields, respectively. + + + - type: textarea + id: bundled-ckb + validations: + required: false + attributes: + label: bundled-ckb.log + render: shell + + - type: textarea + id: bundled-ckb-light-mainnet + validations: + required: false + attributes: + label: bundled-ckb-light-mainnet.log + render: shell + + - type: textarea + id: main-log + validations: + required: false + attributes: + label: main.log + render: shell + + - type: textarea + id: status + validations: + required: false + attributes: + label: status.log + render: shell diff --git a/.github/ISSUE_TEMPLATE/synchronization-issue.yml b/.github/ISSUE_TEMPLATE/synchronization-issue.yml deleted file mode 100644 index 3a44b6ec99..0000000000 --- a/.github/ISSUE_TEMPLATE/synchronization-issue.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: Synchronization issue -description: Neuron doesn't synchronize -title: '[Synchronization] **brief description**' -labels: - - bug -assignees: - - Keith-CY -body: - - type: markdown - attributes: - value: | - Please check if these issues help - - [Synchronization doesnt' start](https://github.com/nervosnetwork/neuron/issues/2388) - - [Transactions keep pending on Neuron v0.101.3](https://github.com/nervosnetwork/neuron/issues/2384) - - [`Check for update` in settings doesn't work](https://github.com/nervosnetwork/neuron/issues/2372) - - - type: textarea - id: detial - validations: - required: true - attributes: - label: Detail of the issue - description: Elaborate on your issue in this field - - - type: markdown - attributes: - value: | - - --- - ## Please add neuron logs if possible, they can be exported by `Menu -> Help -> Export Debug Information` - - - type: textarea - id: bundled-ckb - validations: - required: false - attributes: - label: bundled-ckb.log - render: shell - - - type: textarea - id: main-log - validations: - required: false - attributes: - label: main.log - render: shell - - - type: textarea - id: status - validations: - required: false - attributes: - label: status.log - render: shell - diff --git a/.github/workflows/add-replied-label.yml b/.github/workflows/add-replied-label.yml index 0e7b35c48f..a8f9c1a97b 100644 --- a/.github/workflows/add-replied-label.yml +++ b/.github/workflows/add-replied-label.yml @@ -12,7 +12,7 @@ jobs: steps: - id: check-access name: Check if the commenter is a collaborator - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | try{ @@ -30,7 +30,7 @@ jobs: - id: check-issue name: Check if the comment is replied in an issue - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | const response = await github.rest.issues.get({ @@ -45,7 +45,7 @@ jobs: - id: add-label name: Add 'replied' label if: ${{ steps.check-access.outputs.result == 'true' && steps.check-issue.outputs.result == 'true' }} - uses: actions/github-script@v6 + uses: actions/github-script@v7 with: script: | await github.rest.issues.addLabels({ diff --git a/.github/workflows/check-code-style.yml b/.github/workflows/check-code-style.yml index 61aa93474a..87de0e3831 100644 --- a/.github/workflows/check-code-style.yml +++ b/.github/workflows/check-code-style.yml @@ -10,10 +10,10 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: cache: "yarn" @@ -31,7 +31,7 @@ jobs: - name: Changed Files id: changed-files - uses: tj-actions/changed-files@v37 + uses: tj-actions/changed-files@v41 with: files: "packages/**/*.{js,cjs,mjs,jsx,ts,tsx,css,scss}" diff --git a/.github/workflows/check-spell.yml b/.github/workflows/check-spell.yml index 0830c528e8..56431a5b9f 100644 --- a/.github/workflows/check-spell.yml +++ b/.github/workflows/check-spell.yml @@ -8,5 +8,5 @@ jobs: name: Check spell runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: crate-ci/typos@master diff --git a/.github/workflows/check_checksums.yml b/.github/workflows/check_checksums.yml index a0ab07480c..4c047f4754 100644 --- a/.github/workflows/check_checksums.yml +++ b/.github/workflows/check_checksums.yml @@ -10,7 +10,7 @@ jobs: runs-on: macos-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Generate checksums from artifacts run: @@ -33,7 +33,7 @@ jobs: body="${body//$'\r'/'%0D'}" echo "body=$body" >> $GITHUB_OUTPUT - - uses: peter-evans/commit-comment@v2 + - uses: peter-evans/commit-comment@v3 with: body: ${{ steps.comment_body.outputs.body }} diff --git a/.github/workflows/check_storybook.yml b/.github/workflows/check_storybook.yml index c63ff69d39..1f351e7fb1 100644 --- a/.github/workflows/check_storybook.yml +++ b/.github/workflows/check_storybook.yml @@ -26,10 +26,10 @@ jobs: git config --global core.eol lf - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} cache: "yarn" diff --git a/.github/workflows/checksums-of-release-draft.yml b/.github/workflows/checksums-of-release-draft.yml new file mode 100644 index 0000000000..de95e0a90d --- /dev/null +++ b/.github/workflows/checksums-of-release-draft.yml @@ -0,0 +1,36 @@ +name: Checksums of release draft + +on: + workflow_run: + workflows: + - Package Neuron for Release Draft + types: + - completed + +jobs: + checksums: + runs-on: ubuntu-latest + permissions: + contents: read + if: github.event.workflow_run.conclusion == 'success' + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 'latest' + + - name: Download binaries + run: | + mkdir -p /tmp/Neuron + node ./scripts/download-binaries-from-release-draft.js /tmp/Neuron + shell: pwsh + env: + TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO: ${{ github.repository }} + + - name: Checksums + run: node ./scripts/generate-checksum-table.js /tmp/Neuron + shell: pwsh diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 5956cb4205..0042cf6c7c 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -38,11 +38,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -56,7 +56,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 # ℹī¸ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun @@ -69,4 +69,4 @@ jobs: # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index b10ba13461..e4a0171d42 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -20,6 +20,10 @@ jobs: runs-on: ${{ matrix.os }} + environment: Release + permissions: + contents: write + name: ${{ matrix.os }}(Node.js ${{ matrix.node }}) steps: @@ -29,10 +33,10 @@ jobs: git config --global core.eol lf - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} cache: "yarn" @@ -132,42 +136,42 @@ jobs: - name: Upload Neuron App Zip if: matrix.os == 'macos-latest' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: Neuron-Mac + name: Neuron-Mac-x64 path: release/Neuron-*-mac-x64.zip - name: Upload Neuron App Zip(arm64) if: matrix.os == 'macos-latest' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: Neuron-Mac + name: Neuron-Mac-arm64 path: release/Neuron-*-mac-arm64.zip - name: Upload Neuron Dmg if: matrix.os == 'macos-latest' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: Neuron-Dmg + name: Neuron-Dmg-x64 path: release/Neuron-*-x64.dmg - name: Upload Neuron Dmg(arm64) if: matrix.os == 'macos-latest' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: Neuron-Dmg + name: Neuron-Dmg-arm64 path: release/Neuron-*-arm64.dmg - name: Upload Neuron Win if: matrix.os == 'windows-2019' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Neuron-Win path: release/Neuron-*-setup.exe - name: Upload Neuron Linux if: matrix.os == 'ubuntu-20.04' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Neuron-Linux path: release/Neuron-*.AppImage diff --git a/.github/workflows/package_for_test.yml b/.github/workflows/package_for_test.yml index 4b446bbf54..757811fc6d 100644 --- a/.github/workflows/package_for_test.yml +++ b/.github/workflows/package_for_test.yml @@ -2,12 +2,12 @@ name: Package Neuron for Test on: issue_comment: - types: [created, edited] + types: [created] push: jobs: packaging: - if: ${{ (github.event_name == 'issue_comment' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/package')) || github.event_name == 'push' }} + if: ${{ (github.event_name == 'issue_comment' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/package') && contains(fromJSON('["OWNER", "COLLABORATOR"]'), github.event.comment.author_association)) || github.event_name == 'push' }} strategy: matrix: @@ -20,6 +20,10 @@ jobs: runs-on: ${{ matrix.os }} + permissions: + contents: read + pull-requests: read + name: ${{ matrix.os }}(Node.js ${{ matrix.node }}) env: @@ -33,17 +37,17 @@ jobs: git config --global core.eol lf - name: Checkout for push - uses: actions/checkout@v3 + uses: actions/checkout@v4 if: ${{ github.event_name == 'push' }} - name: Checkout for PR - uses: actions/checkout@v3 + uses: actions/checkout@v4 if: ${{ github.event_name == 'issue_comment' }} with: ref: refs/pull/${{ github.event.issue.number }}/merge - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} cache: "yarn" @@ -110,6 +114,14 @@ jobs: env: CI: false + - name: Write electron-build Test yml + uses: actions/github-script@v7 + with: + script: | + const fs = require('node:fs') + const ympPath = 'packages/neuron-wallet/electron-builder.yml' + fs.writeFileSync(ympPath, fs.readFileSync(ympPath).toString().replace('asar: true', 'asar: false')) + - name: Package for MacOS if: ${{ matrix.os == 'macos-latest' && env.MAC_SHOULD_CODE_SIGN == 'true' }} run: | @@ -122,6 +134,7 @@ jobs: CSC_LINK: ${{ secrets.MAC_CERTIFICATE_BASE64 }} CSC_KEY_PASSWORD: ${{ secrets.MAC_CERTIFICATE_PASSWORD }} TEAM_ID: ${{ secrets.TEAM_ID }} + USE_HARD_LINKS: false - name: Package for MacOS for skip code sign if: ${{ matrix.os == 'macos-latest' && env.MAC_SHOULD_CODE_SIGN == 'false' }} @@ -132,6 +145,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SKIP_NOTARIZE: true + USE_HARD_LINKS: false - name: Package for Windows if: matrix.os == 'windows-2019' @@ -150,45 +164,46 @@ jobs: yarn package:test linux env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + USE_HARD_LINKS: false - name: Upload Neuron App Zip if: matrix.os == 'macos-latest' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Neuron-Mac-x64 path: release/Neuron-*-mac-x64.zip - name: Upload Neuron App Zip(arm64) if: matrix.os == 'macos-latest' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Neuron-Mac-arm64 path: release/Neuron-*-mac-arm64.zip - name: Upload Neuron Dmg if: matrix.os == 'macos-latest' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Neuron-Dmg-x64 path: release/Neuron-*-x64.dmg - name: Upload Neuron Dmg(arm64) if: matrix.os == 'macos-latest' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Neuron-Dmg-arm64 path: release/Neuron-*-arm64.dmg - name: Upload Neuron Win if: matrix.os == 'windows-2019' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Neuron-Win path: release/Neuron-*-setup.exe - name: Upload Neuron Linux if: matrix.os == 'ubuntu-20.04' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Neuron-Linux path: release/Neuron-*.AppImage @@ -197,10 +212,13 @@ jobs: needs: [packaging] name: Append links to the Pull Request runs-on: ubuntu-latest + permissions: + pull-requests: write + contents: write steps: - name: Comment by push event if: ${{ github.event_name == 'push' }} - uses: peter-evans/commit-comment@v2 + uses: peter-evans/commit-comment@v3 with: body: | Packaging for test is done in [${{ github.run_id }}](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}) @@ -219,6 +237,8 @@ jobs: if: ${{ always() && needs.packaging.result == 'failure' }} name: Append failed comment to the comment runs-on: ubuntu-latest + permissions: + pull-requests: write steps: - name: Comment by pull request comment event when package failed if: ${{ github.event_name == 'issue_comment' }} diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index ba643391b2..4ca3d472ad 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -26,10 +26,10 @@ jobs: git config --global core.eol lf - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} cache: "yarn" diff --git a/.github/workflows/update-issue-status.yml b/.github/workflows/update-issue-status.yml index cff334fbfd..6fd7a11d49 100644 --- a/.github/workflows/update-issue-status.yml +++ b/.github/workflows/update-issue-status.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Update stale issues - uses: actions/stale@v8 + uses: actions/stale@v9 with: any-of-issue-labels: replied stale-issue-label: stale diff --git a/.github/workflows/update_ckb_client_versions.yml b/.github/workflows/update_ckb_client_versions.yml index e661523a23..b2834a34bf 100644 --- a/.github/workflows/update_ckb_client_versions.yml +++ b/.github/workflows/update_ckb_client_versions.yml @@ -8,16 +8,17 @@ jobs: default: name: Update CKB client versions runs-on: ubuntu-latest + environment: neuron-bot permissions: pull-requests: write # open PR contents: write # update version files steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18.x @@ -28,7 +29,7 @@ jobs: git add .ckb-version .ckb-light-version compatible.json - name: Set GPG - uses: crazy-max/ghaction-import-gpg@v5 + uses: crazy-max/ghaction-import-gpg@v6 with: gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} passphrase: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.github/workflows/update_neuron_compatible.yml b/.github/workflows/update_neuron_compatible.yml index 19363afadd..0442127f93 100644 --- a/.github/workflows/update_neuron_compatible.yml +++ b/.github/workflows/update_neuron_compatible.yml @@ -11,16 +11,17 @@ jobs: update-neuron-compatible: name: Update Neuron compatibility table runs-on: ubuntu-latest + environment: neuron-bot permissions: pull-requests: write # open PR contents: write # update version files steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20.x @@ -31,7 +32,7 @@ jobs: git add compatible.json - name: Set GPG - uses: crazy-max/ghaction-import-gpg@v5 + uses: crazy-max/ghaction-import-gpg@v6 with: gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} passphrase: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.github/workflows/update_valid_target.yml b/.github/workflows/update_wallet_env.yml similarity index 79% rename from .github/workflows/update_valid_target.yml rename to .github/workflows/update_wallet_env.yml index e68d91ee15..f02a69b70b 100644 --- a/.github/workflows/update_valid_target.yml +++ b/.github/workflows/update_wallet_env.yml @@ -7,32 +7,36 @@ jobs: ready-for-release: name: Update ckb node assume valid target runs-on: ubuntu-latest + environment: neuron-bot + permissions: + pull-requests: write # open PR + contents: write # update version files if: ${{ startsWith(github.ref_name, 'rc/') }} steps: - name: Create Branch - uses: peterjgrainger/action-create-branch@v2.2.0 + uses: peterjgrainger/action-create-branch@v2.4.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - branch: 'chore-update-valid-target/${{github.ref_name}}' + branch: 'chore-update-wallet-env/${{github.ref_name}}' sha: '${{ github.event.create.head.sha }}' - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: - ref: 'chore-update-valid-target/${{github.ref_name}}' + ref: 'chore-update-wallet-env/${{github.ref_name}}' - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18.12.0 - name: Write env file run: | - npm run update:valid-target + npm run update:wallet-env - name: Commit env file - uses: actions/github-script@v6 + uses: actions/github-script@v7 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} BASE: ${{ github.ref_name }} @@ -41,7 +45,7 @@ jobs: const fs = require('node:fs') const { BASE, HEAD } = process.env const envFilePath = 'packages/neuron-wallet/.env' - const destinationBranch = `chore-update-valid-target/${BASE}` + const destinationBranch = `chore-update-wallet-env/${BASE}` const { data } = await github.rest.repos.getContent({ owner: context.repo.owner, repo: context.repo.repo, @@ -59,11 +63,11 @@ jobs: }) - name: Create PR - uses: actions/github-script@v6 + uses: actions/github-script@v7 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} BASE: ${{github.ref}} - HEAD: chore-update-valid-target/${{github.ref_name}} + HEAD: chore-update-wallet-env/${{github.ref_name}} REPO: ${{github.repository}} with: script: | diff --git a/CHANGELOG.md b/CHANGELOG.md index cd475928af..e79308d215 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,59 @@ +# 0.114.0 (2024-03-15) + +### CKB Node & Light Client + +- [CKB@v0.114.0](https://github.com/nervosnetwork/ckb/releases/tag/v0.114.0) was released on Feb. 29st, 2024. This version of CKB node is now bundled and preconfigured in Neuron. +- [CKB Light Client@v0.3.6](https://github.com/nervosnetwork/ckb-light-client/releases/tag/v0.3.6) was released on Feb. 8th, 2024. This version of CKB Light Client is now bundled and preconfigured in Neuron + +### Assumed valid target + +Block before `0x397d7d41167051cab2bf1610e334ad3aa5cf612e2cd442f71b91422e0361141e`(at height `12,450,084`) will be skipped in validation.(https://github.com/nervosnetwork/neuron/pull/3077) + +--- + +Good day, good Neuron, packed with exciting new features and enhancements to elevate your transaction experience! + +With support for Cell Management, Chained Transactions, and detailed viewing options, managing your transactions has never been easier. + +We're also thrilled to announce multilingual support, with French and Spanish interfaces now available, thanks to the contributions of our dedicated community members. + +Plus, enjoy enhanced guidance features like remaining time estimation and the ability to amend pending transactions for added flexibility. + +With optimizations to settings and transaction overviews, Neuron continues to prioritize efficiency and user satisfaction. + +Upgrade now and experience seamless transaction management with Neuron. + +[![Neuron@v0.114.0](https://github.com/nervosnetwork/neuron/assets/7271329/883aba6e-ceb0-402d-9de0-d46609c528b7)](https://youtu.be/df29-EUZG0Y) + +--- + +## New features + +- #2859: Support Cell Management.(@yanguoyu) +- #2963: Support chained transactions.(@yanguoyu) +- #2986: Support viewing chained transaction detail.(@yanguoyu) +- #3012: Support French in User Interface.(Special thanks to @Natixe) +- #3024: Support Spanish in User Interface.(Special thanks to @Natixe) +- #3014: Support remaining time estimation.(@yanguoyu) +- #3045: Support "amend a pending transaction".(@devchenyan) +- #3005: Show tip for first sync and show warning when disk is not enough for full-node mode.(@yanguoyu) +- #2994: Optimize setting of light client.(@yanguoyu) +- #3040: Optimize transaction overview.(@yanguoyu) + +## Bug fixes + +- #2951: Fix error on creating multisig address.(@devchenyan) +- #2992: Fix transaction lost in light client mode.(@yanguoyu) +- #3010: Fix storage of multisig configuration.(@yanguoyu) +- #3020: Disable nervos dao unlock button when balance is not enough as transaction fee.(@yanguoyu) + +## New Contributors + +- @Natixe made their first contribution in https://github.com/nervosnetwork/neuron/pull/3012 + +**Full Changelog**: https://github.com/nervosnetwork/neuron/compare/v0.112.0...v0.114.0 + + # 0.112.0 (2023-12-07) ### CKB Node & Light Client diff --git a/COPYING b/COPYING index 5abae3896f..f9c0eb0413 100644 --- a/COPYING +++ b/COPYING @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019-2023 Nervos Foundation +Copyright (c) 2019-2024 Nervos Foundation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/_typos.toml b/_typos.toml index 369e09719d..ae82742a0c 100644 --- a/_typos.toml +++ b/_typos.toml @@ -6,4 +6,4 @@ numer = "numer" lastest = "lastest" [files] -extend-exclude = ["CHANGELOG.md", "**/migrations/*.ts"] +extend-exclude = ["CHANGELOG.md", "**/migrations/*.ts", "**/fr.{ts,json}", "**/es.{ts,json}"] diff --git a/compatible.json b/compatible.json index 204a2ddda4..c2c41af8a5 100644 --- a/compatible.json +++ b/compatible.json @@ -1,5 +1,7 @@ { "fullVersions": [ + "0.114", + "0.113", "0.112", "0.111", "0.110", @@ -18,6 +20,8 @@ "compatible": { "0.111": { "full": [ + "0.114", + "0.113", "0.112", "0.111", "0.110", @@ -30,6 +34,8 @@ }, "0.110": { "full": [ + "0.114", + "0.113", "0.112", "0.111", "0.110", @@ -58,6 +64,22 @@ }, "0.112": { "full": [ + "0.114", + "0.113", + "0.112", + "0.111", + "0.110", + "0.109" + ], + "light": [ + "0.3", + "0.2" + ] + }, + "0.114": { + "full": [ + "0.114", + "0.113", "0.112", "0.111", "0.110", diff --git a/lerna.json b/lerna.json index 8fd1da0d48..e54ad8d2e1 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "packages": ["packages/*"], - "version": "0.112.0", + "version": "0.114.0", "npmClient": "yarn", "$schema": "node_modules/lerna/schemas/lerna-schema.json" } diff --git a/package.json b/package.json index 4af4b2de5e..d3a1d54f1a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "neuron", "productName": "Neuron", "description": "CKB Neuron Wallet", - "version": "0.112.0", + "version": "0.114.0", "private": true, "author": { "name": "Nervos Core Dev", @@ -24,7 +24,7 @@ "scripts": { "start:ui": "cd packages/neuron-ui && yarn run start", "start:wallet": "cd packages/neuron-wallet && yarn run start:debug", - "start": "concurrently \"cross-env BROWSER=none yarn run start:ui\" \"wait-on http://127.0.0.1:3000 && yarn run start:wallet\"", + "start": "concurrently \"cross-env BROWSER=none yarn run start:ui\" \"wait-on -t 10000 http://127.0.0.1:3000 && yarn run start:wallet\"", "clean": "lerna run --stream clean", "prebuild": "yarn clean", "build": "lerna run --stream build", @@ -36,38 +36,37 @@ "lint": "lerna run --stream lint", "postinstall": "husky install", "db:chain": "node ./node_modules/.bin/typeorm", - "update:valid-target": "node ./scripts/update-valid-target.js", + "update:wallet-env": "node ./scripts/update-wallet-env.js", "update:neuron-compatible": "node ./scripts/add-neuron-version-in-compatibility-table.js", "update:client-versions": "node ./scripts/update-ckb-client-versions.js" }, "devDependencies": { - "@babel/core": "7.23.2", + "@babel/core": "7.23.6", "@types/jest": "27.5.2", - "@types/node": "18.16.18", - "@types/npmlog": "4.1.4", - "@typescript-eslint/eslint-plugin": "5.60.1", - "@typescript-eslint/parser": "5.60.1", - "concurrently": "8.2.1", + "@types/node": "20.10.5", + "@types/npmlog": "7.0.0", + "@typescript-eslint/eslint-plugin": "6.16.0", + "@typescript-eslint/parser": "6.16.0", + "concurrently": "8.2.2", "cross-env": "7.0.3", - "eslint": "8.38.0", - "eslint-config-prettier": "8.8.0", + "eslint": "8.56.0", + "eslint-config-prettier": "9.1.0", "eslint-plugin-prettier": "4.2.1", "husky": "8.0.3", - "lerna": "7.1.0", - "lint-staged": "13.3.0", + "lerna": "8.0.1", + "lint-staged": "15.2.0", "ncp": "2.0.0", "prettier": "2.8.8", - "ts-jest": "27.1.5", - "typescript": "5.0.4", + "ts-jest": "29.1.1", + "typescript": "5.3.3", "wait-on": "7.0.1" }, "dependencies": {}, "resolutions": { - "@types/react": "17.0.65", - "react-i18next": ">=11.16.4", - "usb": "1.8.8" + "@types/react": "18.2.45", + "react-i18next": ">=11.16.4" }, "volta": { - "node": "18.16.1" + "node": "20.10.0" } } diff --git a/packages/neuron-ui/.eslintrc.js b/packages/neuron-ui/.eslintrc.js index b8001f8237..b83c885ab3 100644 --- a/packages/neuron-ui/.eslintrc.js +++ b/packages/neuron-ui/.eslintrc.js @@ -65,7 +65,7 @@ module.exports = { 'import/no-extraneous-dependencies': [ 'error', { - devDependencies: ['**/*.stories.*', 'src/setupTests.ts'], + devDependencies: ['**/*.stories.*', 'src/setupTests.ts', '**/*.test.ts'], }, ], 'import/extensions': [ diff --git a/packages/neuron-ui/.storybook/electron.js b/packages/neuron-ui/.storybook/electron.js index 78003d8100..492a24c539 100644 --- a/packages/neuron-ui/.storybook/electron.js +++ b/packages/neuron-ui/.storybook/electron.js @@ -1,5 +1,5 @@ const sendSyncValues = { - 'get-locale': 'zh', + 'get-locale': ('zh', 'fr', 'es'), 'get-version': '0.103.1', } diff --git a/packages/neuron-ui/package.json b/packages/neuron-ui/package.json index 32eb4e8ed6..ea55615543 100644 --- a/packages/neuron-ui/package.json +++ b/packages/neuron-ui/package.json @@ -1,6 +1,6 @@ { "name": "neuron-ui", - "version": "0.112.0", + "version": "0.114.0", "private": true, "author": { "name": "Nervos Core Dev", @@ -50,60 +50,62 @@ "last 2 chrome versions" ], "dependencies": { - "@ckb-lumos/base": "0.21.0-next.1", - "@ckb-lumos/codec": "0.21.0-next.1", + "@ckb-lumos/base": "0.21.1", + "@ckb-lumos/codec": "0.21.1", "@nervosnetwork/ckb-sdk-core": "0.109.0", "@nervosnetwork/ckb-sdk-utils": "0.109.0", "canvg": "2.0.0", - "i18next": "21.10.0", + "i18next": "23.7.11", "immer": "9.0.21", "jsqr": "1.4.0", "office-ui-fabric-react": "7.204.0", "qr.js": "0.0.0", - "react": "17.0.2", - "react-dom": "17.0.2", - "react-i18next": "12.1.5", - "react-router-dom": "6.14.0", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-i18next": "13.5.0", + "react-router-dom": "6.21.1", "react-transition-group": "4.4.5", - "sass": "1.63.6" + "sass": "1.69.5", + "tslib": "2.6.2" }, "devDependencies": { "@babel/plugin-proposal-private-property-in-object": "7.21.11", - "@babel/preset-typescript": "7.23.2", - "@storybook/addon-actions": "7.0.24", - "@storybook/addon-essentials": "7.0.24", - "@storybook/addon-interactions": "7.0.24", - "@storybook/addon-links": "7.0.24", - "@storybook/node-logger": "7.0.24", - "@storybook/preset-create-react-app": "7.0.24", - "@storybook/react": "7.0.24", - "@storybook/react-webpack5": "7.0.24", - "@storybook/testing-library": "0.2.0", - "@types/enzyme": "3.10.13", - "@types/enzyme-adapter-react-16": "1.0.6", - "@types/node": "18.16.18", - "@types/react": "17.0.65", - "@types/react-dom": "17.0.20", + "@babel/preset-typescript": "7.23.3", + "@jest/globals": "27.5.1", + "@storybook/addon-actions": "7.6.6", + "@storybook/addon-essentials": "7.6.6", + "@storybook/addon-interactions": "7.6.6", + "@storybook/addon-links": "7.6.6", + "@storybook/node-logger": "7.6.6", + "@storybook/preset-create-react-app": "7.6.6", + "@storybook/react": "7.6.6", + "@storybook/react-webpack5": "7.6.6", + "@storybook/testing-library": "0.2.2", + "@types/enzyme": "3.10.18", + "@types/enzyme-adapter-react-16": "1.0.9", + "@types/node": "20.10.5", + "@types/react": "18.2.45", + "@types/react-dom": "18.2.18", "@types/react-router-dom": "5.3.3", - "@types/styled-components": "5.1.27", + "@types/styled-components": "5.1.34", "@wojtekmaj/enzyme-adapter-react-17": "0.8.0", "babel-jest": "25.5.1", - "electron": "24.8.5", + "electron": "28.1.0", "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.7", "eslint-config-airbnb": "19.0.4", - "eslint-plugin-import": "2.27.5", + "eslint-plugin-import": "2.29.1", "eslint-plugin-jsx-a11y": "6.7.1", "eslint-plugin-react": "7.32.2", - "jest-styled-components": "7.1.1", + "jest-styled-components": "7.2.0", "react-app-rewired": "2.2.1", "react-scripts": "5.0.1", - "react-test-renderer": "16.14.0", - "storybook": "7.0.24", - "storybook-addon-react-router-v6": "1.0.2", - "webpack": "5.88.2" + "react-test-renderer": "18.2.0", + "storybook": "7.6.6", + "storybook-addon-react-router-v6": "2.0.10", + "webpack": "5.89.0" }, "resolutions": { - "react-i18next": "12.1.5" + "react-i18next": "14.0.0" } } diff --git a/packages/neuron-ui/src/components/AddressBook/addressBook.module.scss b/packages/neuron-ui/src/components/AddressBook/addressBook.module.scss index c6f6a9d5d6..118ab0d4b2 100644 --- a/packages/neuron-ui/src/components/AddressBook/addressBook.module.scss +++ b/packages/neuron-ui/src/components/AddressBook/addressBook.module.scss @@ -132,6 +132,7 @@ height: 56px; line-height: 56px; min-width: 100px; + max-width: 200px; .descTips { @media screen and (max-width: 1400px) { transform: translateX(-70%) !important; @@ -165,47 +166,6 @@ transform: translateX(-40%) !important; } } - - .descTipRoot { - position: relative; - width: 208px; - .autoHeight { - width: 100%; - height: 100%; - position: absolute; - - & > svg { - position: absolute; - right: 0; - bottom: 8px; - } - } - .descInput { - border: none; - word-break: break-word; - resize: none; - width: 100%; - height: 100%; - line-height: 24px; - background-color: transparent; - color: var(--main-text-color); - caret-color: #000000; - pointer-events: none; - - @media (prefers-color-scheme: dark) { - caret-color: #fff; - } - } - & > .hidden { - word-break: break-word; - white-space: break-spaces; - visibility: hidden; - min-width: 100px; - min-height: 24px; - padding: 2px; - line-height: 24px; - } - } } @media screen and (max-width: 1330px) { diff --git a/packages/neuron-ui/src/components/AddressBook/index.tsx b/packages/neuron-ui/src/components/AddressBook/index.tsx index 02a9c597ba..5bcd15bd13 100644 --- a/packages/neuron-ui/src/components/AddressBook/index.tsx +++ b/packages/neuron-ui/src/components/AddressBook/index.tsx @@ -3,11 +3,12 @@ import { useTranslation } from 'react-i18next' import { useState as useGlobalState, useDispatch } from 'states' import Dialog from 'widgets/Dialog' import CopyZone from 'widgets/CopyZone' -import { Copy, Edit } from 'widgets/Icons/icon' +import { Copy } from 'widgets/Icons/icon' import Table, { TableProps, SortType } from 'widgets/Table' import { shannonToCKBFormatter, useLocalDescription } from 'utils' import { HIDE_BALANCE } from 'utils/const' import Tooltip from 'widgets/Tooltip' +import ShowOrEditDesc from 'widgets/ShowOrEditDesc' import styles from './addressBook.module.scss' enum TabIdx { @@ -42,8 +43,7 @@ const AddressBook = ({ onClose }: { onClose?: () => void }) => { }, [tabIdx, addresses]) const dispatch = useDispatch() - const { localDescription, onDescriptionPress, onDescriptionChange, onDescriptionFieldBlur, onDescriptionSelected } = - useLocalDescription('address', walletId, dispatch, 'textarea') + const { onChangeEditStatus, onSubmitDescription } = useLocalDescription('address', walletId, dispatch) const columns = useMemo['columns']>( () => [ @@ -87,32 +87,15 @@ const AddressBook = ({ onClose }: { onClose?: () => void }) => { dataIndex: 'description', align: 'center', render(description: string, _idx, item) { - const isSelected = localDescription.key === item.address return ( -
-