Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 28e330821e |
@@ -2,7 +2,7 @@
|
|||||||
name: 'Documentation'
|
name: 'Documentation'
|
||||||
about: Suggest a fix or enhancement to the documentation or developer portal content
|
about: Suggest a fix or enhancement to the documentation or developer portal content
|
||||||
title: "[DOCS]"
|
title: "[DOCS]"
|
||||||
labels: documentation, needs-triage
|
labels: documentation
|
||||||
assignees: mfahampshire
|
assignees: mfahampshire
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name: Feature request
|
name: Feature request
|
||||||
about: Suggest an enhancement to the product
|
about: Suggest an enhancement to the product
|
||||||
title: "[Feature Request]"
|
title: "[Feature Request]"
|
||||||
labels: enhancement, needs-triage
|
labels: enhancement
|
||||||
assignees: ''
|
assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name: Report
|
name: Report
|
||||||
about: To help identify and reproduce issues
|
about: To help identify and reproduce issues
|
||||||
title: "[Issue]"
|
title: "[Issue]"
|
||||||
labels: bug, bug-needs-triage, qa, needs-triage
|
labels: bug, bug-needs-triage, qa
|
||||||
assignees: tommyv1987
|
assignees: tommyv1987
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ jobs:
|
|||||||
- name: install npm
|
- name: install npm
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
- name: Matrix - Node Install
|
- name: Matrix - Node Install
|
||||||
run: npm install
|
run: npm install
|
||||||
working-directory: .github/workflows/support-files
|
working-directory: .github/workflows/support-files
|
||||||
|
|||||||
@@ -109,7 +109,6 @@ jobs:
|
|||||||
cp contracts/target/wasm32-unknown-unknown/release/cw4_group.wasm $OUTPUT_DIR
|
cp contracts/target/wasm32-unknown-unknown/release/cw4_group.wasm $OUTPUT_DIR
|
||||||
cp contracts/target/wasm32-unknown-unknown/release/nym_service_provider_directory.wasm $OUTPUT_DIR
|
cp contracts/target/wasm32-unknown-unknown/release/nym_service_provider_directory.wasm $OUTPUT_DIR
|
||||||
cp contracts/target/wasm32-unknown-unknown/release/nym_name_service.wasm $OUTPUT_DIR
|
cp contracts/target/wasm32-unknown-unknown/release/nym_name_service.wasm $OUTPUT_DIR
|
||||||
cp contracts/target/wasm32-unknown-unknown/release/nym_ephemera.wasm $OUTPUT_DIR
|
|
||||||
|
|
||||||
- name: Deploy branch to CI www
|
- name: Deploy branch to CI www
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
- uses: rlespinasse/github-slug-action@v3.x
|
- uses: rlespinasse/github-slug-action@v3.x
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
- name: Setup yarn
|
- name: Setup yarn
|
||||||
run: npm install -g yarn
|
run: npm install -g yarn
|
||||||
- name: Build
|
- name: Build
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
- uses: rlespinasse/github-slug-action@v3.x
|
- uses: rlespinasse/github-slug-action@v3.x
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: "16"
|
||||||
- name: Install Rust stable
|
- name: Install Rust stable
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
- uses: rlespinasse/github-slug-action@v3.x
|
- uses: rlespinasse/github-slug-action@v3.x
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: "16"
|
||||||
- name: Install Rust stable
|
- name: Install Rust stable
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
- uses: rlespinasse/github-slug-action@v3.x
|
- uses: rlespinasse/github-slug-action@v3.x
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: "16"
|
||||||
- name: Install Rust stable
|
- name: Install Rust stable
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
- uses: rlespinasse/github-slug-action@v3.x
|
- uses: rlespinasse/github-slug-action@v3.x
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: "16"
|
||||||
- name: Install Rust stable
|
- name: Install Rust stable
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -20,17 +20,11 @@ jobs:
|
|||||||
- uses: rlespinasse/github-slug-action@v3.x
|
- uses: rlespinasse/github-slug-action@v3.x
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
- name: Install Yarn
|
- name: Install Yarn
|
||||||
run: npm install -g yarn
|
run: npm install -g yarn
|
||||||
|
- run: yarn
|
||||||
- name: Install project dependencies
|
|
||||||
run: cd ../.. && yarn --network-timeout 100000
|
|
||||||
|
|
||||||
- name: Install app dependencies
|
|
||||||
run: yarn
|
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|
||||||
- name: Set environment from the example
|
- name: Set environment from the example
|
||||||
run: cp .env.sample .env
|
run: cp .env.sample .env
|
||||||
- run: yarn storybook:build
|
- run: yarn storybook:build
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
name: Linting for Network Explorer (eslint/prettier)
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- 'explorer/**'
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
working-directory: explorer
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: custom-runner-linux
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16
|
||||||
|
- name: Setup yarn
|
||||||
|
run: npm install -g yarn
|
||||||
|
- name: Run ESLint
|
||||||
|
# GitHub should automatically annotate the PR
|
||||||
|
run: yarn && yarn lint
|
||||||
@@ -21,7 +21,7 @@ jobs:
|
|||||||
- uses: rlespinasse/github-slug-action@v3.x
|
- uses: rlespinasse/github-slug-action@v3.x
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
- name: Setup yarn
|
- name: Setup yarn
|
||||||
run: npm install -g yarn
|
run: npm install -g yarn
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|||||||
@@ -152,7 +152,7 @@ jobs:
|
|||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
if: env.WORKFLOW_CONCLUSION == 'failure'
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
- name: Matrix - Node Install
|
- name: Matrix - Node Install
|
||||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
if: env.WORKFLOW_CONCLUSION == 'failure'
|
||||||
run: npm install
|
run: npm install
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ jobs:
|
|||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
if: env.WORKFLOW_CONCLUSION == 'failure'
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
- name: Matrix - Node Install
|
- name: Matrix - Node Install
|
||||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
if: env.WORKFLOW_CONCLUSION == 'failure'
|
||||||
run: npm install
|
run: npm install
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ jobs:
|
|||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
if: env.WORKFLOW_CONCLUSION == 'failure'
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
- name: Matrix - Node Install
|
- name: Matrix - Node Install
|
||||||
if: env.WORKFLOW_CONCLUSION == 'failure'
|
if: env.WORKFLOW_CONCLUSION == 'failure'
|
||||||
run: npm install
|
run: npm install
|
||||||
|
|||||||
@@ -15,22 +15,15 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
platform: [macos-latest]
|
platform: [macos-latest]
|
||||||
|
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
||||||
outputs:
|
|
||||||
release_id: ${{ steps.create-release.outputs.id }}
|
|
||||||
release_date: ${{ fromJSON(steps.create-release.outputs.assets)[0].published_at }}
|
|
||||||
version: ${{ steps.release-info.outputs.version }}
|
|
||||||
filename: ${{ steps.release-info.outputs.filename }}
|
|
||||||
file_hash: ${{ steps.release-info.outputs.file_hash }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Node
|
- name: Node v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
- name: Install Rust stable
|
- name: Install Rust stable
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
@@ -58,15 +51,11 @@ jobs:
|
|||||||
security list-keychain -d user -s $KEYCHAIN_PATH
|
security list-keychain -d user -s $KEYCHAIN_PATH
|
||||||
|
|
||||||
- name: Create env file
|
- name: Create env file
|
||||||
uses: timheuer/base64-to-file@v1.2
|
uses: timheuer/base64-to-file@v1.1
|
||||||
with:
|
with:
|
||||||
fileName: '.env'
|
fileName: '.env'
|
||||||
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
||||||
|
|
||||||
- name: Install project dependencies
|
|
||||||
shell: bash
|
|
||||||
run: cd .. && yarn --network-timeout 100000
|
|
||||||
|
|
||||||
- name: Install app dependencies and build it
|
- name: Install app dependencies and build it
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -84,7 +73,7 @@ jobs:
|
|||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: nym-connect_1.0.0_x64.dmg
|
name: nym-connect_1.0.0_x64.dmg
|
||||||
path: nym-connect/desktop/target/release/bundle/dmg/nym-connect_1*_x64.dmg
|
path: nym-connect/desktop/target/release/bundle/dmg/nym-connect_1.0.0_x64.dmg
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
|
|
||||||
- name: Clean up keychain
|
- name: Clean up keychain
|
||||||
@@ -92,38 +81,10 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
security delete-keychain $RUNNER_TEMP/app-signing.keychain-db
|
security delete-keychain $RUNNER_TEMP/app-signing.keychain-db
|
||||||
|
|
||||||
- id: create-release
|
- name: Upload to release based on tag name
|
||||||
name: Upload to release based on tag name
|
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
if: github.event_name == 'release'
|
if: github.event_name == 'release'
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
nym-connect/desktop/target/release/bundle/dmg/*.dmg
|
nym-connect/desktop/target/release/bundle/dmg/*.dmg
|
||||||
nym-connect/desktop/target/release/bundle/macos/*.app.tar.gz*
|
nym-connect/desktop/target/release/bundle/macos/*.app.tar.gz*
|
||||||
- id: release-info
|
|
||||||
name: Prepare release info
|
|
||||||
run: |
|
|
||||||
semver="${${{ github.ref_name }}##nym-connect-}" && semver="${semver##v}"
|
|
||||||
echo "version=$semver" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "filename=nym-connect_$version_x64.dmg" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "file_hash=${{ hashFiles('nym-connect/desktop/target/release/bundle/dmg/nym-connect_*_x64.dmg') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
push-release-data:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-connect-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-tauri
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-tauri.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-tauri.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/nym-connect/desktop/CHANGELOG.md
|
|
||||||
archive_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}/nym-connect.app.tar.gz
|
|
||||||
sig_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}/nym-connect.app.tar.gz.sig
|
|
||||||
version: ${{ needs.publish-tauri.outputs.version }}
|
|
||||||
filename: ${{ needs.publish-tauri.outputs.filename }}
|
|
||||||
file_hash: ${{ needs.publish-tauri.outputs.file_hash }}
|
|
||||||
name: NymConnect
|
|
||||||
category: connect
|
|
||||||
platform: MacOS
|
|
||||||
secrets: inherit
|
|
||||||
|
|||||||
@@ -15,15 +15,8 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
platform: [custom-runner-linux]
|
platform: [custom-runner-linux]
|
||||||
|
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
||||||
outputs:
|
|
||||||
release_id: ${{ steps.create-release.outputs.id }}
|
|
||||||
release_date: ${{ fromJSON(steps.create-release.outputs.assets)[0].published_at }}
|
|
||||||
version: ${{ steps.release-info.outputs.version }}
|
|
||||||
filename: ${{ steps.release-info.outputs.filename }}
|
|
||||||
file_hash: ${{ steps.release-info.outputs.file_hash }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
@@ -33,25 +26,19 @@ jobs:
|
|||||||
sudo apt-get install -y webkit2gtk-4.0 libayatana-appindicator3-dev
|
sudo apt-get install -y webkit2gtk-4.0 libayatana-appindicator3-dev
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|
||||||
- name: Node
|
- name: Node v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install Rust stable
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: stable
|
||||||
|
|
||||||
- name: Install project dependencies
|
|
||||||
shell: bash
|
|
||||||
run: cd .. && yarn --network-timeout 100000
|
|
||||||
|
|
||||||
- name: Install app dependencies
|
- name: Install app dependencies
|
||||||
run: yarn
|
run: yarn
|
||||||
|
|
||||||
- name: Create env file
|
- name: Create env file
|
||||||
uses: timheuer/base64-to-file@v1.2
|
uses: timheuer/base64-to-file@v1.1
|
||||||
with:
|
with:
|
||||||
fileName: '.env'
|
fileName: '.env'
|
||||||
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
||||||
@@ -66,41 +53,13 @@ jobs:
|
|||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: nym-connect.AppImage.tar.gz
|
name: nym-connect.AppImage.tar.gz
|
||||||
path: nym-connect/desktop/target/release/bundle/appimage/nym-connect_1*_amd64.AppImage
|
path: nym-connect/desktop/target/release/bundle/appimage/nym-connect_1.0.0_amd64.AppImage
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
|
|
||||||
- id: create-release
|
- name: Upload to release based on tag name
|
||||||
name: Upload to release based on tag name
|
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
if: github.event_name == 'release'
|
if: github.event_name == 'release'
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
nym-connect/desktop/target/release/bundle/appimage/*.AppImage
|
nym-connect/desktop/target/release/bundle/appimage/*.AppImage
|
||||||
nym-connect/desktop/target/release/bundle/appimage/*.AppImage.tar.gz*
|
nym-connect/desktop/target/release/bundle/appimage/*.AppImage.tar.gz*
|
||||||
- id: release-info
|
|
||||||
name: Prepare release info
|
|
||||||
run: |
|
|
||||||
semver="${${{ github.ref_name }}##nym-connect-}" && semver="${semver##v}"
|
|
||||||
echo "version=$semver" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "filename=nym-connect_$version_amd64.AppImage" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "file_hash=${{ hashFiles('nym-connect/desktop/target/release/bundle/appimage/nym-connect_*_amd64.AppImage') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
push-release-data:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-connect-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-tauri
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-tauri.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-tauri.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/nym-connect/desktop/CHANGELOG.md
|
|
||||||
archive_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}/nym-connect_${{ needs.publish-tauri.outputs.version }}_amd64.AppImage.tar.gz
|
|
||||||
sig_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}/nym-connect_${{ needs.publish-tauri.outputs.version }}_amd64.AppImage.tar.gz.sig
|
|
||||||
version: ${{ needs.publish-tauri.outputs.version }}
|
|
||||||
filename: ${{ needs.publish-tauri.outputs.filename }}
|
|
||||||
file_hash: ${{ needs.publish-tauri.outputs.file_hash }}
|
|
||||||
name: NymConnect
|
|
||||||
category: connect
|
|
||||||
platform: Ubuntu
|
|
||||||
secrets: inherit
|
|
||||||
|
|||||||
@@ -15,15 +15,8 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
platform: [windows10]
|
platform: [windows10]
|
||||||
|
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
||||||
outputs:
|
|
||||||
release_id: ${{ steps.create-release.outputs.id }}
|
|
||||||
release_date: ${{ fromJSON(steps.create-release.outputs.assets)[0].published_at }}
|
|
||||||
version: ${{ steps.release-info.outputs.version }}
|
|
||||||
filename: ${{ steps.release-info.outputs.filename }}
|
|
||||||
file_hash: ${{ steps.release-info.outputs.file_hash }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clean up first
|
- name: Clean up first
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
@@ -46,10 +39,10 @@ jobs:
|
|||||||
Remove-Item -path certificate -include tempCert.txt
|
Remove-Item -path certificate -include tempCert.txt
|
||||||
Import-PfxCertificate -FilePath certificate/certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $env:WINDOWS_CERTIFICATE_PASSWORD -Force -AsPlainText)
|
Import-PfxCertificate -FilePath certificate/certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $env:WINDOWS_CERTIFICATE_PASSWORD -Force -AsPlainText)
|
||||||
|
|
||||||
- name: Node
|
- name: Node v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install Rust stable
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
@@ -57,21 +50,15 @@ jobs:
|
|||||||
toolchain: stable
|
toolchain: stable
|
||||||
|
|
||||||
- name: Create env file
|
- name: Create env file
|
||||||
uses: timheuer/base64-to-file@v1.2
|
uses: timheuer/base64-to-file@v1.1
|
||||||
with:
|
with:
|
||||||
fileName: '.env'
|
fileName: '.env'
|
||||||
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
||||||
|
|
||||||
- name: Install project dependencies
|
|
||||||
shell: bash
|
|
||||||
run: cd .. && yarn --network-timeout 100000
|
|
||||||
|
|
||||||
- name: Install app dependencies
|
- name: Install app dependencies
|
||||||
shell: bash
|
|
||||||
run: yarn --network-timeout 100000
|
run: yarn --network-timeout 100000
|
||||||
|
|
||||||
- name: Build and sign it
|
- name: Build and sign it
|
||||||
shell: bash
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
ENABLE_CODE_SIGNING: ${{ secrets.WINDOWS_CERTIFICATE }}
|
ENABLE_CODE_SIGNING: ${{ secrets.WINDOWS_CERTIFICATE }}
|
||||||
@@ -85,41 +72,13 @@ jobs:
|
|||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: nym-connect_1.0.0_x64_en-US.msi
|
name: nym-connect_1.0.0_x64_en-US.msi
|
||||||
path: nym-connect/desktop/target/release/bundle/msi/nym-connect_1*_x64_en-US.msi
|
path: nym-connect/desktop/target/release/bundle/msi/nym-connect_1.0.0_x64_en-US.msi
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
|
|
||||||
- id: create-release
|
- name: Upload to release based on tag name
|
||||||
name: Upload to release based on tag name
|
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
if: github.event_name == 'release'
|
if: github.event_name == 'release'
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
nym-connect/desktop/target/release/bundle/msi/*.msi
|
nym-connect/desktop/target/release/bundle/msi/*.msi
|
||||||
nym-connect/desktop/target/release/bundle/msi/*.msi.zip*
|
nym-connect/desktop/target/release/bundle/msi/*.msi.zip*
|
||||||
- id: release-info
|
|
||||||
name: Prepare release info
|
|
||||||
run: |
|
|
||||||
semver="${${{ github.ref_name }}##nym-connect-}" && semver="${semver##v}"
|
|
||||||
echo "version=$semver" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "filename=nym-connect_$version_x64_en-US.msi" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "file_hash=${{ hashFiles('nym-connect/desktop/target/release/bundle/msi/nym-connect_*_x64_en-US.msi') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
push-release-data:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-connect-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-tauri
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-tauri.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-tauri.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/nym-connect/desktop/CHANGELOG.md
|
|
||||||
archive_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}/nym-connect_${{ needs.publish-tauri.outputs.version }}_x64_en-US.msi.zip
|
|
||||||
sig_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}/nym-connect_${{ needs.publish-tauri.outputs.version }}_x64_en-US.msi.zip.sig
|
|
||||||
version: ${{ needs.publish-tauri.outputs.version }}
|
|
||||||
filename: ${{ needs.publish-tauri.outputs.filename }}
|
|
||||||
file_hash: ${{ needs.publish-tauri.outputs.file_hash }}
|
|
||||||
name: NymConnect
|
|
||||||
category: connect
|
|
||||||
platform: Windows
|
|
||||||
secrets: inherit
|
|
||||||
|
|||||||
@@ -1,104 +0,0 @@
|
|||||||
name: Publish Nym Connect - desktop (MacOS)
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
release_tag:
|
|
||||||
required: true
|
|
||||||
description: Release tag (nym-connect-s-v*)
|
|
||||||
type: string
|
|
||||||
default: 'nym-connect-s-v1.0.0'
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- nym-connect-s-v*
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
working-directory: nym-connect/desktop
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish-tauri:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-connect-s-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform: [macos-latest]
|
|
||||||
runs-on: ${{ matrix.platform }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Node
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 18
|
|
||||||
- name: Install Rust stable
|
|
||||||
uses: actions-rs/toolchain@v1
|
|
||||||
with:
|
|
||||||
toolchain: stable
|
|
||||||
- name: Install the Apple developer certificate for code signing
|
|
||||||
env:
|
|
||||||
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
|
||||||
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
||||||
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
|
|
||||||
run: |
|
|
||||||
# create variables
|
|
||||||
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
|
|
||||||
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
|
|
||||||
|
|
||||||
# import certificate and provisioning profile from secrets
|
|
||||||
echo -n "$APPLE_CERTIFICATE" | base64 --decode --output $CERTIFICATE_PATH
|
|
||||||
|
|
||||||
# create temporary keychain
|
|
||||||
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
|
|
||||||
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
|
|
||||||
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
|
|
||||||
|
|
||||||
# import certificate to keychain
|
|
||||||
security import $CERTIFICATE_PATH -P "$APPLE_CERTIFICATE_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
|
|
||||||
security list-keychain -d user -s $KEYCHAIN_PATH
|
|
||||||
|
|
||||||
- name: Create env file
|
|
||||||
uses: timheuer/base64-to-file@v1.2
|
|
||||||
with:
|
|
||||||
fileName: '.env'
|
|
||||||
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
|
||||||
|
|
||||||
- name: Prepare for build
|
|
||||||
env:
|
|
||||||
RELEASE_TAG: ${{ github.ref_name || inputs.release_tag }}
|
|
||||||
run: ./scripts/pre_medium_build.sh
|
|
||||||
|
|
||||||
- name: Install app dependencies and build it
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
ENABLE_CODE_SIGNING: ${{ secrets.APPLE_CERTIFICATE }}
|
|
||||||
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
|
||||||
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
||||||
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_IDENTITY_ID }}
|
|
||||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
|
||||||
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
|
||||||
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
|
|
||||||
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
|
|
||||||
NYM_CONNECT_ENABLE_MEDIUM: 1
|
|
||||||
run: yarn && yarn build
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: nym-connect-s_1.0.0_x64.dmg
|
|
||||||
path: nym-connect/desktop/target/release/bundle/dmg/nym-connect-s_1*_x64.dmg
|
|
||||||
retention-days: 30
|
|
||||||
|
|
||||||
- name: Clean up keychain
|
|
||||||
if: ${{ always() }}
|
|
||||||
run: |
|
|
||||||
security delete-keychain $RUNNER_TEMP/app-signing.keychain-db
|
|
||||||
|
|
||||||
- id: create-release
|
|
||||||
name: Upload to release based on tag name
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
if: github.event_name == 'release'
|
|
||||||
with:
|
|
||||||
files: |
|
|
||||||
nym-connect/desktop/target/release/bundle/dmg/*.dmg
|
|
||||||
nym-connect/desktop/target/release/bundle/macos/*.app.tar.gz*
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
name: Publish NymConnect S - desktop (Ubuntu)
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
release_tag:
|
|
||||||
required: true
|
|
||||||
description: Release tag (nym-connect-s-v*)
|
|
||||||
type: string
|
|
||||||
default: 'nym-connect-s-v1.0.0'
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- nym-connect-s-v*
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
working-directory: nym-connect/desktop
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish-tauri:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-connect-s-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform: [custom-runner-linux]
|
|
||||||
runs-on: ${{ matrix.platform }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Tauri dependencies
|
|
||||||
run: >
|
|
||||||
sudo apt-get update &&
|
|
||||||
sudo apt-get install -y webkit2gtk-4.0 libayatana-appindicator3-dev
|
|
||||||
continue-on-error: true
|
|
||||||
|
|
||||||
- name: Node
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 18
|
|
||||||
|
|
||||||
- name: Install Rust stable
|
|
||||||
uses: actions-rs/toolchain@v1
|
|
||||||
with:
|
|
||||||
toolchain: stable
|
|
||||||
|
|
||||||
- name: Install project dependencies
|
|
||||||
shell: bash
|
|
||||||
run: cd .. && yarn --network-timeout 100000
|
|
||||||
|
|
||||||
- name: Install app dependencies
|
|
||||||
run: yarn
|
|
||||||
|
|
||||||
- name: Create env file
|
|
||||||
uses: timheuer/base64-to-file@v1.2
|
|
||||||
with:
|
|
||||||
fileName: '.env'
|
|
||||||
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
|
||||||
|
|
||||||
- name: Prepare for build
|
|
||||||
env:
|
|
||||||
RELEASE_TAG: ${{ github.ref_name || inputs.release_tag }}
|
|
||||||
run: ./scripts/pre_medium_build.sh
|
|
||||||
|
|
||||||
- name: Build app
|
|
||||||
run: yarn build
|
|
||||||
env:
|
|
||||||
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
|
|
||||||
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
|
|
||||||
NYM_CONNECT_ENABLE_MEDIUM: 1
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: nym-connect-s.AppImage.tar.gz
|
|
||||||
path: nym-connect/desktop/target/release/bundle/appimage/nym-connect-s_1*_amd64.AppImage
|
|
||||||
retention-days: 30
|
|
||||||
|
|
||||||
- id: create-release
|
|
||||||
name: Upload to release based on tag name
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
if: github.event_name == 'release'
|
|
||||||
with:
|
|
||||||
files: |
|
|
||||||
nym-connect/desktop/target/release/bundle/appimage/*.AppImage
|
|
||||||
nym-connect/desktop/target/release/bundle/appimage/*.AppImage.tar.gz*
|
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
name: Publish Nym Connect - desktop (Windows 10)
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
release_tag:
|
|
||||||
required: true
|
|
||||||
description: Release tag (nym-connect-s-v*)
|
|
||||||
type: string
|
|
||||||
default: 'nym-connect-s-v1.0.0'
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- nym-connect-s-v*
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
run:
|
|
||||||
working-directory: nym-connect/desktop
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish-tauri:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-connect-s-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
platform: [windows10]
|
|
||||||
runs-on: ${{ matrix.platform }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Clean up first
|
|
||||||
continue-on-error: true
|
|
||||||
working-directory: .
|
|
||||||
run: |
|
|
||||||
cd ..
|
|
||||||
del /s /q /A:H nym
|
|
||||||
rmdir /s /q nym
|
|
||||||
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Import signing certificate
|
|
||||||
env:
|
|
||||||
WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }}
|
|
||||||
WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}
|
|
||||||
run: |
|
|
||||||
New-Item -ItemType directory -Path certificate
|
|
||||||
Set-Content -Path certificate/tempCert.txt -Value $env:WINDOWS_CERTIFICATE
|
|
||||||
certutil -decode certificate/tempCert.txt certificate/certificate.pfx
|
|
||||||
Remove-Item -path certificate -include tempCert.txt
|
|
||||||
Import-PfxCertificate -FilePath certificate/certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $env:WINDOWS_CERTIFICATE_PASSWORD -Force -AsPlainText)
|
|
||||||
|
|
||||||
- name: Node
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 18
|
|
||||||
|
|
||||||
- name: Install Rust stable
|
|
||||||
uses: actions-rs/toolchain@v1
|
|
||||||
with:
|
|
||||||
toolchain: stable
|
|
||||||
|
|
||||||
- name: Create env file
|
|
||||||
uses: timheuer/base64-to-file@v1.2
|
|
||||||
with:
|
|
||||||
fileName: '.env'
|
|
||||||
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
|
||||||
|
|
||||||
- name: Install project dependencies
|
|
||||||
shell: bash
|
|
||||||
run: cd .. && yarn --network-timeout 100000
|
|
||||||
|
|
||||||
- name: Install app dependencies
|
|
||||||
shell: bash
|
|
||||||
run: yarn --network-timeout 100000
|
|
||||||
|
|
||||||
- name: Prepare for build
|
|
||||||
env:
|
|
||||||
RELEASE_TAG: ${{ github.ref_name || inputs.release_tag }}
|
|
||||||
run: ./scripts/pre_medium_build.sh
|
|
||||||
|
|
||||||
- name: Build and sign it
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
ENABLE_CODE_SIGNING: ${{ secrets.WINDOWS_CERTIFICATE }}
|
|
||||||
WINDOWS_CERTIFICATE: ${{ secrets.WINDOWS_CERTIFICATE }}
|
|
||||||
WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}
|
|
||||||
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
|
|
||||||
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
|
|
||||||
NYM_CONNECT_ENABLE_MEDIUM: 1
|
|
||||||
run: yarn build
|
|
||||||
|
|
||||||
- name: Upload Artifact
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: nym-connect-s_1.0.0_x64_en-US.msi
|
|
||||||
path: nym-connect/desktop/target/release/bundle/msi/nym-connect-s_1*_x64_en-US.msi
|
|
||||||
retention-days: 30
|
|
||||||
|
|
||||||
- id: create-release
|
|
||||||
name: Upload to release based on tag name
|
|
||||||
uses: softprops/action-gh-release@v1
|
|
||||||
if: github.event_name == 'release'
|
|
||||||
with:
|
|
||||||
files: |
|
|
||||||
nym-connect/desktop/target/release/bundle/msi/*.msi
|
|
||||||
nym-connect/desktop/target/release/bundle/msi/*.msi.zip*
|
|
||||||
@@ -2,17 +2,17 @@ name: Publish Nym binaries
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
add_tokio_unstable:
|
add_tokio_unstable:
|
||||||
description: 'True to add RUSTFLAGS="--cfg tokio_unstable"'
|
description: 'True to add RUSTFLAGS="--cfg tokio_unstable"'
|
||||||
required: true
|
required: true
|
||||||
default: false
|
default: false
|
||||||
type: boolean
|
type: boolean
|
||||||
release:
|
release:
|
||||||
types: [created]
|
types: [created]
|
||||||
|
|
||||||
env:
|
env:
|
||||||
NETWORK: mainnet
|
NETWORK: mainnet
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
publish-nym:
|
publish-nym:
|
||||||
@@ -21,33 +21,15 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
platform: [custom-runner-linux]
|
platform: [custom-runner-linux]
|
||||||
|
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
||||||
outputs:
|
|
||||||
release_id: ${{ steps.create-release.outputs.id }}
|
|
||||||
release_date: ${{ fromJSON(steps.create-release.outputs.assets)[0].published_at }}
|
|
||||||
client_hash: ${{ steps.binary-hashes.outputs.client_hash }}
|
|
||||||
mixnode_hash: ${{ steps.binary-hashes.outputs.mixnode_hash }}
|
|
||||||
gateway_hash: ${{ steps.binary-hashes.outputs.gateway_hash }}
|
|
||||||
socks5_hash: ${{ steps.binary-hashes.outputs.socks5_hash }}
|
|
||||||
netreq_hash: ${{ steps.binary-hashes.outputs.netreq_hash }}
|
|
||||||
cli_hash: ${{ steps.binary-hashes.outputs.cli_hash }}
|
|
||||||
netstat_hash: ${{ steps.binary-hashes.outputs.netstat_hash }}
|
|
||||||
client_version: ${{ steps.binary-versions.outputs.client_version }}
|
|
||||||
mixnode_version: ${{ steps.binary-versions.outputs.mixnode_version }}
|
|
||||||
gateway_version: ${{ steps.binary-versions.outputs.gateway_version }}
|
|
||||||
socks5_version: ${{ steps.binary-versions.outputs.socks5_version }}
|
|
||||||
netreq_version: ${{ steps.binary-versions.outputs.netreq_version }}
|
|
||||||
cli_version: ${{ steps.binary-versions.outputs.cli_version }}
|
|
||||||
netstat_version: ${{ steps.binary-versions.outputs.netstat_version }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Install Dependencies (Linux)
|
- name: Install Dependencies (Linux)
|
||||||
run: sudo apt-get update && sudo apt-get -y install ripgrep libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev libudev-dev squashfs-tools
|
run: sudo apt-get update && sudo apt-get -y install libwebkit2gtk-4.0-dev build-essential curl wget libssl-dev libgtk-3-dev libudev-dev squashfs-tools
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|
||||||
- name: Sets env vars for tokio if set in manual dispatch inputs
|
- name: Sets env vars for tokio if set in manual dispatch inputs
|
||||||
run: |
|
run: |
|
||||||
echo 'RUSTFLAGS="--cfg tokio_unstable"' >> $GITHUB_ENV
|
echo 'RUSTFLAGS="--cfg tokio_unstable"' >> $GITHUB_ENV
|
||||||
@@ -80,8 +62,7 @@ jobs:
|
|||||||
target/release/nym-cli
|
target/release/nym-cli
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
|
|
||||||
- id: create-release
|
- name: Upload to release based on tag name
|
||||||
name: Upload to release based on tag name
|
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
if: github.event_name == 'release'
|
if: github.event_name == 'release'
|
||||||
with:
|
with:
|
||||||
@@ -95,150 +76,3 @@ jobs:
|
|||||||
target/release/nym-network-requester
|
target/release/nym-network-requester
|
||||||
target/release/nym-network-statistics
|
target/release/nym-network-statistics
|
||||||
target/release/nym-cli
|
target/release/nym-cli
|
||||||
|
|
||||||
- id: release-info
|
|
||||||
name: Prepare release info
|
|
||||||
run: |
|
|
||||||
semver="${${{ github.ref_name }}##nym-binaries-}" && semver="${semver##v}"
|
|
||||||
echo "version=$semver" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- id: binary-hashes
|
|
||||||
name: Generate binary hashes
|
|
||||||
run: |
|
|
||||||
echo "client_hash=${{ hashFiles('target/release/nym-client') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "mixnode_hash=${{ hashFiles('target/release/nym-mixnode') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "gateway_hash=${{ hashFiles('target/release/nym-gateway') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "socks5_hash=${{ hashFiles('target/release/nym-socks5-client') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "netreq_hash=${{ hashFiles('target/release/nym-network-requester') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "cli_hash=${{ hashFiles('target/release/nym-cli') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "netstat_hash=${{ hashFiles('target/release/nym-network-statistics') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- id: binary-versions
|
|
||||||
name: Get binary versions
|
|
||||||
run: |
|
|
||||||
v=$(rg '^version = "(.*)"' -or '$1' clients/native/Cargo.toml) && echo "client_version=$v" >> "$GITHUB_OUTPUT"
|
|
||||||
v=$(rg '^version = "(.*)"' -or '$1' mixnode/Cargo.toml) && echo "mixnode_version=$v" >> "$GITHUB_OUTPUT"
|
|
||||||
v=$(rg '^version = "(.*)"' -or '$1' gateway/Cargo.toml) && echo "gateway_version=$v" >> "$GITHUB_OUTPUT"
|
|
||||||
v=$(rg '^version = "(.*)"' -or '$1' clients/socks5/Cargo.toml) && echo "socks5_version=$v" >> "$GITHUB_OUTPUT"
|
|
||||||
v=$(rg '^version = "(.*)"' -or '$1' service-providers/network-requester/Cargo.toml) && echo "netreq_version=$v" >> "$GITHUB_OUTPUT"
|
|
||||||
v=$(rg '^version = "(.*)"' -or '$1' tools/nym-cli/Cargo.toml) && echo "cli_version=$v" >> "$GITHUB_OUTPUT"
|
|
||||||
v=$(rg '^version = "(.*)"' -or '$1' service-providers/network-statistics/Cargo.toml) && echo "netstat_version=$v" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
push-release-data-client:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-binaries-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-nym
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-nym.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-nym.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/CHANGELOG.md
|
|
||||||
version: ${{ needs.publish-nym.outputs.client_version }}
|
|
||||||
filename: nym-client
|
|
||||||
file_hash: ${{ needs.publish-nym.outputs.client_hash }}
|
|
||||||
name: Client
|
|
||||||
category: binaries
|
|
||||||
secrets: inherit
|
|
||||||
|
|
||||||
push-release-data-mixnode:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-binaries-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-nym
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-nym.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-nym.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/CHANGELOG.md
|
|
||||||
version: ${{ needs.publish-nym.outputs.mixnode_version }}
|
|
||||||
filename: nym-mixnode
|
|
||||||
file_hash: ${{ needs.publish-nym.outputs.mixnode_hash }}
|
|
||||||
name: Mixnode
|
|
||||||
category: binaries
|
|
||||||
secrets: inherit
|
|
||||||
|
|
||||||
push-release-data-gateway:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-binaries-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-nym
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-nym.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-nym.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/CHANGELOG.md
|
|
||||||
version: ${{ needs.publish-nym.outputs.gateway_version }}
|
|
||||||
filename: nym-gateway
|
|
||||||
file_hash: ${{ needs.publish-nym.outputs.gateway_hash }}
|
|
||||||
name: Gateway
|
|
||||||
category: binaries
|
|
||||||
secrets: inherit
|
|
||||||
|
|
||||||
push-release-data-socks5:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-binaries-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-nym
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-nym.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-nym.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/CHANGELOG.md
|
|
||||||
version: ${{ needs.publish-nym.outputs.socks5_version }}
|
|
||||||
filename: nym-socks5-client
|
|
||||||
file_hash: ${{ needs.publish-nym.outputs.socks5_hash }}
|
|
||||||
name: Socks5 Client
|
|
||||||
category: binaries
|
|
||||||
secrets: inherit
|
|
||||||
|
|
||||||
push-release-data-network-requester:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-binaries-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-nym
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-nym.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-nym.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/CHANGELOG.md
|
|
||||||
version: ${{ needs.publish-nym.outputs.netreq_version }}
|
|
||||||
filename: nym-network-requester
|
|
||||||
file_hash: ${{ needs.publish-nym.outputs.netreq_hash }}
|
|
||||||
name: Network Requester
|
|
||||||
category: binaries
|
|
||||||
secrets: inherit
|
|
||||||
|
|
||||||
push-release-data-cli:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-binaries-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-nym
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-nym.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-nym.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/CHANGELOG.md
|
|
||||||
version: ${{ needs.publish-nym.outputs.cli_version }}
|
|
||||||
filename: nym-cli
|
|
||||||
file_hash: ${{ needs.publish-nym.outputs.cli_hash }}
|
|
||||||
name: Cli
|
|
||||||
category: binaries
|
|
||||||
secrets: inherit
|
|
||||||
|
|
||||||
push-release-data-network-stat:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-binaries-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-nym
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-nym.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-nym.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/CHANGELOG.md
|
|
||||||
version: ${{ needs.publish-nym.outputs.netstat_version }}
|
|
||||||
filename: nym-network-statistics
|
|
||||||
file_hash: ${{ needs.publish-nym.outputs.netstat_hash }}
|
|
||||||
name: Network Statistics
|
|
||||||
category: binaries
|
|
||||||
secrets: inherit
|
|
||||||
|
|||||||
@@ -15,22 +15,15 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
platform: [macos-latest]
|
platform: [macos-latest]
|
||||||
|
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
||||||
outputs:
|
|
||||||
release_id: ${{ steps.create-release.outputs.id }}
|
|
||||||
release_date: ${{ fromJSON(steps.create-release.outputs.assets)[0].published_at }}
|
|
||||||
version: ${{ steps.release-info.outputs.version }}
|
|
||||||
filename: ${{ steps.release-info.outputs.filename }}
|
|
||||||
file_hash: ${{ steps.release-info.outputs.file_hash }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Node
|
- name: Node v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
- name: Install Rust stable
|
- name: Install Rust stable
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
@@ -58,15 +51,11 @@ jobs:
|
|||||||
security list-keychain -d user -s $KEYCHAIN_PATH
|
security list-keychain -d user -s $KEYCHAIN_PATH
|
||||||
|
|
||||||
- name: Create env file
|
- name: Create env file
|
||||||
uses: timheuer/base64-to-file@v1.2
|
uses: timheuer/base64-to-file@v1.1
|
||||||
with:
|
with:
|
||||||
fileName: '.env'
|
fileName: '.env'
|
||||||
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
||||||
|
|
||||||
- name: Install project dependencies
|
|
||||||
shell: bash
|
|
||||||
run: cd .. && yarn --network-timeout 100000
|
|
||||||
|
|
||||||
- name: Install app dependencies and build it
|
- name: Install app dependencies and build it
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -91,38 +80,11 @@ jobs:
|
|||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
run: |
|
run: |
|
||||||
security delete-keychain $RUNNER_TEMP/app-signing.keychain-db
|
security delete-keychain $RUNNER_TEMP/app-signing.keychain-db
|
||||||
- id: create-release
|
|
||||||
name: Upload to release based on tag name
|
- name: Upload to release based on tag name
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
if: github.event_name == 'release'
|
if: github.event_name == 'release'
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
nym-wallet/target/release/bundle/dmg/*.dmg
|
nym-wallet/target/release/bundle/dmg/*.dmg
|
||||||
nym-wallet/target/release/bundle/macos/*.app.tar.gz*
|
nym-wallet/target/release/bundle/macos/*.app.tar.gz*
|
||||||
- id: release-info
|
|
||||||
name: Prepare release info
|
|
||||||
run: |
|
|
||||||
semver="${${{ github.ref_name }}##nym-wallet-}" && semver="${semver##v}"
|
|
||||||
echo "version=$semver" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "filename=nym-wallet_$version_x64.dmg" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "file_hash=${{ hashFiles('nym-wallet/target/release/bundle/dmg/nym-wallet_*_x64.dmg') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
push-release-data:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-wallet-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-tauri
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-tauri.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-tauri.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/nym-wallet/CHANGELOG.md
|
|
||||||
archive_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}/nym-wallet.app.tar.gz
|
|
||||||
sig_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}/nym-wallet.app.tar.gz.sig
|
|
||||||
version: ${{ needs.publish-tauri.outputs.version }}
|
|
||||||
filename: ${{ needs.publish-tauri.outputs.filename }}
|
|
||||||
file_hash: ${{ needs.publish-tauri.outputs.file_hash }}
|
|
||||||
name: Wallet
|
|
||||||
category: wallet
|
|
||||||
platform: MacOS
|
|
||||||
secrets: inherit
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
name: Publish Nym Wallet (Ubuntu)
|
name: Publish Nym Wallet (Ubuntu)
|
||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
|
||||||
release:
|
release:
|
||||||
types: [created]
|
types: [created]
|
||||||
|
|
||||||
@@ -15,15 +14,8 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
platform: [custom-runner-linux]
|
platform: [custom-runner-linux]
|
||||||
|
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
||||||
outputs:
|
|
||||||
release_id: ${{ steps.create-release.outputs.id }}
|
|
||||||
release_date: ${{ fromJSON(steps.create-release.outputs.assets)[0].published_at }}
|
|
||||||
version: ${{ steps.release-info.outputs.version }}
|
|
||||||
filename: ${{ steps.release-info.outputs.filename }}
|
|
||||||
file_hash: ${{ steps.release-info.outputs.file_hash }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
@@ -33,24 +25,19 @@ jobs:
|
|||||||
sudo apt-get install -y webkit2gtk-4.0
|
sudo apt-get install -y webkit2gtk-4.0
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
|
|
||||||
- name: Node
|
- name: Node v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install Rust stable
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: stable
|
||||||
|
|
||||||
- name: Install project dependencies
|
|
||||||
shell: bash
|
|
||||||
run: cd .. && yarn --network-timeout 100000
|
|
||||||
|
|
||||||
- name: Install app dependencies
|
- name: Install app dependencies
|
||||||
run: yarn
|
run: yarn
|
||||||
- name: Create env file
|
- name: Create env file
|
||||||
uses: timheuer/base64-to-file@v1.2
|
uses: timheuer/base64-to-file@v1.1
|
||||||
with:
|
with:
|
||||||
fileName: '.env'
|
fileName: '.env'
|
||||||
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
||||||
@@ -60,40 +47,9 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
|
TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }}
|
||||||
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
|
TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }}
|
||||||
|
- name: Upload to release based on tag name
|
||||||
- id: create-release
|
|
||||||
name: Upload to release based on tag name
|
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
if: github.event_name == 'release'
|
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
nym-wallet/target/release/bundle/appimage/*.AppImage
|
nym-wallet/target/release/bundle/appimage/*.AppImage
|
||||||
nym-wallet/target/release/bundle/appimage/*.AppImage.tar.gz*
|
nym-wallet/target/release/bundle/appimage/*.AppImage.tar.gz*
|
||||||
|
|
||||||
- id: release-info
|
|
||||||
name: Prepare release info
|
|
||||||
run: |
|
|
||||||
semver="${${{ github.ref_name }}##nym-wallet-}" && semver="${semver##v}"
|
|
||||||
echo "version=$semver" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "filename=nym-wallet_$version_amd64.AppImage" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "file_hash=${{ hashFiles('nym-wallet/target/release/bundle/appimage/nym-wallet_*_amd64.AppImage') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
push-release-data:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-wallet-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-tauri
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-tauri.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-tauri.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/nym-wallet/CHANGELOG.md
|
|
||||||
archive_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}/nym-wallet_${{ needs.publish-tauri.outputs.version }}_amd64.AppImage.tar.gz
|
|
||||||
sig_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}/nym-wallet_${{ needs.publish-tauri.outputs.version }}_amd64.AppImage.tar.gz.sig
|
|
||||||
version: ${{ needs.publish-tauri.outputs.version }}
|
|
||||||
filename: ${{ needs.publish-tauri.outputs.filename }}
|
|
||||||
file_hash: ${{ needs.publish-tauri.outputs.file_hash }}
|
|
||||||
name: Wallet
|
|
||||||
category: wallet
|
|
||||||
platform: Ubuntu
|
|
||||||
secrets: inherit
|
|
||||||
|
|||||||
@@ -15,15 +15,8 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
platform: [windows10]
|
platform: [windows10]
|
||||||
|
|
||||||
runs-on: ${{ matrix.platform }}
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
||||||
outputs:
|
|
||||||
release_id: ${{ steps.create-release.outputs.id }}
|
|
||||||
release_date: ${{ fromJSON(steps.create-release.outputs.assets)[0].published_at }}
|
|
||||||
version: ${{ steps.release-info.outputs.version }}
|
|
||||||
filename: ${{ steps.release-info.outputs.filename }}
|
|
||||||
file_hash: ${{ steps.release-info.outputs.file_hash }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Clean up first
|
- name: Clean up first
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
@@ -46,10 +39,10 @@ jobs:
|
|||||||
Remove-Item -path certificate -include tempCert.txt
|
Remove-Item -path certificate -include tempCert.txt
|
||||||
Import-PfxCertificate -FilePath certificate/certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $env:WINDOWS_CERTIFICATE_PASSWORD -Force -AsPlainText)
|
Import-PfxCertificate -FilePath certificate/certificate.pfx -CertStoreLocation Cert:\CurrentUser\My -Password (ConvertTo-SecureString -String $env:WINDOWS_CERTIFICATE_PASSWORD -Force -AsPlainText)
|
||||||
|
|
||||||
- name: Node
|
- name: Node v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
|
|
||||||
- name: Install Rust stable
|
- name: Install Rust stable
|
||||||
uses: actions-rs/toolchain@v1
|
uses: actions-rs/toolchain@v1
|
||||||
@@ -57,21 +50,15 @@ jobs:
|
|||||||
toolchain: stable
|
toolchain: stable
|
||||||
|
|
||||||
- name: Create env file
|
- name: Create env file
|
||||||
uses: timheuer/base64-to-file@v1.2
|
uses: timheuer/base64-to-file@v1.1
|
||||||
with:
|
with:
|
||||||
fileName: '.env'
|
fileName: '.env'
|
||||||
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
encodedString: ${{ secrets.WALLET_ADMIN_ADDRESS }}
|
||||||
|
|
||||||
- name: Install project dependencies
|
|
||||||
shell: bash
|
|
||||||
run: cd .. && yarn --network-timeout 100000
|
|
||||||
|
|
||||||
- name: Install app dependencies
|
- name: Install app dependencies
|
||||||
shell: bash
|
|
||||||
run: yarn --network-timeout 100000
|
run: yarn --network-timeout 100000
|
||||||
|
|
||||||
- name: Build and sign it
|
- name: Build and sign it
|
||||||
shell: bash
|
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
ENABLE_CODE_SIGNING: ${{ secrets.WINDOWS_CERTIFICATE }}
|
ENABLE_CODE_SIGNING: ${{ secrets.WINDOWS_CERTIFICATE }}
|
||||||
@@ -88,38 +75,10 @@ jobs:
|
|||||||
path: nym-wallet/target/release/bundle/msi/nym-wallet_1.*.msi
|
path: nym-wallet/target/release/bundle/msi/nym-wallet_1.*.msi
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
|
|
||||||
- id: create-release
|
- name: Upload to release based on tag name
|
||||||
name: Upload to release based on tag name
|
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
if: github.event_name == 'release'
|
if: github.event_name == 'release'
|
||||||
with:
|
with:
|
||||||
files: |
|
files: |
|
||||||
nym-wallet/target/release/bundle/msi/*.msi
|
nym-wallet/target/release/bundle/msi/*.msi
|
||||||
nym-wallet/target/release/bundle/msi/*.msi.zip*
|
nym-wallet/target/release/bundle/msi/*.msi.zip*
|
||||||
- id: release-info
|
|
||||||
name: Prepare release info
|
|
||||||
run: |
|
|
||||||
semver="${${{ github.ref_name }}##nym-wallet-}" && semver="${semver##v}"
|
|
||||||
echo "version=$semver" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "filename=nym-wallet_$version_x64_en-US.msi" >> "$GITHUB_OUTPUT"
|
|
||||||
echo "file_hash=${{ hashFiles('nym-wallet/target/release/bundle/msi/nym-wallet_*_x64_en-US.msi') }}" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
push-release-data:
|
|
||||||
if: ${{ (startsWith(github.ref, 'refs/tags/nym-wallet-') && github.event_name == 'release') || github.event_name == 'workflow_dispatch' }}
|
|
||||||
uses: ./.github/workflows/push-release-data.yml
|
|
||||||
needs: publish-tauri
|
|
||||||
with:
|
|
||||||
release_tag: ${{ github.ref_name }}
|
|
||||||
release_id: ${{ needs.publish-tauri.outputs.release_id }}
|
|
||||||
release_date: ${{ needs.publish-tauri.outputs.release_date }}
|
|
||||||
download_base_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}
|
|
||||||
changelog_url: https://github.com/nymtech/nym/blob/${{ github.ref_name }}/nym-wallet/CHANGELOG.md
|
|
||||||
archive_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}/nym-wallet_${{ needs.publish-tauri.outputs.version }}_x64_en-US.msi.zip
|
|
||||||
sig_url: https://github.com/nymtech/nym/releases/download/${{ github.ref_name }}/nym-wallet_${{ needs.publish-tauri.outputs.version }}_x64_en-US.msi.zip.sig
|
|
||||||
version: ${{ needs.publish-tauri.outputs.version }}
|
|
||||||
filename: ${{ needs.publish-tauri.outputs.filename }}
|
|
||||||
file_hash: ${{ needs.publish-tauri.outputs.file_hash }}
|
|
||||||
name: Wallet
|
|
||||||
category: wallet
|
|
||||||
platform: Windows
|
|
||||||
secrets: inherit
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ jobs:
|
|||||||
- uses: rlespinasse/github-slug-action@v3.x
|
- uses: rlespinasse/github-slug-action@v3.x
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
- name: Setup yarn
|
- name: Setup yarn
|
||||||
run: npm install -g yarn
|
run: npm install -g yarn
|
||||||
- name: Install Rust stable
|
- name: Install Rust stable
|
||||||
@@ -24,7 +24,11 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
toolchain: stable
|
toolchain: stable
|
||||||
- name: Install wasm-pack
|
- name: Install wasm-pack
|
||||||
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
||||||
|
working-directory: clients/webassembly
|
||||||
|
- name: Build WASM
|
||||||
|
run: wasm-pack build
|
||||||
|
working-directory: clients/webassembly
|
||||||
- name: Build dependencies
|
- name: Build dependencies
|
||||||
run: yarn && yarn build
|
run: yarn && yarn build
|
||||||
- name: Build storybook
|
- name: Build storybook
|
||||||
|
|||||||
@@ -34,10 +34,10 @@ jobs:
|
|||||||
profile: minimal
|
profile: minimal
|
||||||
toolchain: stable
|
toolchain: stable
|
||||||
|
|
||||||
- name: Node
|
- name: Node v16
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
|
|
||||||
- name: Install yarn for building application
|
- name: Install yarn for building application
|
||||||
run: yarn install
|
run: yarn install
|
||||||
|
|||||||
@@ -1,212 +0,0 @@
|
|||||||
name: Push release data
|
|
||||||
|
|
||||||
env:
|
|
||||||
strapi_download_url: 'https://strapi.feat-nym-update-nym-web.websites.dev.nymte.ch/api/downloaders'
|
|
||||||
strapi_updater_url: 'https://strapi.feat-nym-update-nym-web.websites.dev.nymte.ch/api/updaters'
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
release_tag:
|
|
||||||
required: true
|
|
||||||
description: Release tag
|
|
||||||
type: string
|
|
||||||
release_id:
|
|
||||||
required: true
|
|
||||||
description: Release ID
|
|
||||||
type: string
|
|
||||||
release_date:
|
|
||||||
required: true
|
|
||||||
description: Release date
|
|
||||||
type: string
|
|
||||||
download_base_url:
|
|
||||||
required: true
|
|
||||||
description: Download base URL
|
|
||||||
type: string
|
|
||||||
changelog_url:
|
|
||||||
required: true
|
|
||||||
description: Changelog URL
|
|
||||||
type: string
|
|
||||||
archive_url:
|
|
||||||
required: false
|
|
||||||
description: Binary archive URL
|
|
||||||
type: string
|
|
||||||
sig_url:
|
|
||||||
required: false
|
|
||||||
description: Archive signature URL
|
|
||||||
type: string
|
|
||||||
version:
|
|
||||||
required: true
|
|
||||||
description: Release version (semver)
|
|
||||||
type: string
|
|
||||||
filename:
|
|
||||||
required: true
|
|
||||||
description: Binary file name
|
|
||||||
type: string
|
|
||||||
file_hash:
|
|
||||||
required: true
|
|
||||||
description: Binary hash (sha256)
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
required: true
|
|
||||||
description: Name
|
|
||||||
type: string
|
|
||||||
category:
|
|
||||||
required: true
|
|
||||||
description: Category
|
|
||||||
type: string
|
|
||||||
platform:
|
|
||||||
required: false
|
|
||||||
description: Platform
|
|
||||||
type: string
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
# ⚠ since inputs are limited to 10 max for workflow_dispatch
|
|
||||||
# some properties were omitted
|
|
||||||
version:
|
|
||||||
required: true
|
|
||||||
description: Release version (semver)
|
|
||||||
type: string
|
|
||||||
default: '1.0.0'
|
|
||||||
release_id:
|
|
||||||
required: true
|
|
||||||
description: Release ID
|
|
||||||
type: string
|
|
||||||
default: '1234'
|
|
||||||
release_date:
|
|
||||||
required: true
|
|
||||||
description: Release date
|
|
||||||
type: string
|
|
||||||
default: '2023-06-26T10:09:16Z'
|
|
||||||
download_base_url:
|
|
||||||
required: true
|
|
||||||
description: Download base URL
|
|
||||||
type: string
|
|
||||||
default: 'https://github.com/nymtech/nym/releases/download/nym-wallet-v1.0.0'
|
|
||||||
changelog_url:
|
|
||||||
required: true
|
|
||||||
description: Changelog URL
|
|
||||||
type: string
|
|
||||||
default: 'https://github.com/nymtech/nym/blob/nym-wallet-v1.0.0/nym-wallet/CHANGELOG.md'
|
|
||||||
filename:
|
|
||||||
required: true
|
|
||||||
description: Binary file name
|
|
||||||
type: string
|
|
||||||
default: 'nym-wallet_1.0.0_amd64.AppImage'
|
|
||||||
file_hash:
|
|
||||||
required: true
|
|
||||||
description: Binary hash (sha256)
|
|
||||||
type: string
|
|
||||||
default: 'xxx'
|
|
||||||
name:
|
|
||||||
required: true
|
|
||||||
description: Name
|
|
||||||
type: string
|
|
||||||
default: 'Wallet'
|
|
||||||
category:
|
|
||||||
required: true
|
|
||||||
description: Category
|
|
||||||
default: 'wallet'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- wallet
|
|
||||||
- connect
|
|
||||||
- binaries
|
|
||||||
platform:
|
|
||||||
required: false
|
|
||||||
description: Platform
|
|
||||||
default: 'Ubuntu'
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- Ubuntu
|
|
||||||
- Windows
|
|
||||||
- MacOS
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
push-download-data:
|
|
||||||
name: Push download data to Strapi
|
|
||||||
runs-on: custom-runner-linux
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Release info
|
|
||||||
run: |
|
|
||||||
echo "version: ${{ inputs.version }}"
|
|
||||||
echo "tag: ${{ inputs.release_tag }}"
|
|
||||||
|
|
||||||
- id: get_sig
|
|
||||||
name: Get sig
|
|
||||||
if: ${{ inputs.sig_url != null }}
|
|
||||||
run: |
|
|
||||||
output=$(curl -LsSf ${{ inputs.sig_url }})
|
|
||||||
echo "sig=$output" >> "$GITHUB_OUTPUT"
|
|
||||||
- id: strapi-request
|
|
||||||
name: Strapi request
|
|
||||||
uses: fjogeleit/http-request-action@v1
|
|
||||||
with:
|
|
||||||
url: ${{ env.strapi_download_url }}
|
|
||||||
method: 'POST'
|
|
||||||
bearerToken: ${{ secrets.STRAPI_API_TOKEN_RELEASES }}
|
|
||||||
customHeaders: '{"Content-Type": "application/json"}'
|
|
||||||
data: |
|
|
||||||
{
|
|
||||||
"data": {
|
|
||||||
"releaseId": "${{ inputs.release_id }}",
|
|
||||||
"releaseDate": "${{ inputs.release_date }}",
|
|
||||||
"downloadBaseUrl": "${{ inputs.download_base_url }}",
|
|
||||||
"changelogUrl": "${{ inputs.changelog_url }}",
|
|
||||||
"version": "${{ inputs.version }}",
|
|
||||||
"filename": "${{ inputs.filename }}",
|
|
||||||
"name": "${{ inputs.name }}",
|
|
||||||
"category": "${{ inputs.category }}",
|
|
||||||
"platform": "${{ inputs.platform }}",
|
|
||||||
"sha256": "${{ inputs.file_hash }}",
|
|
||||||
"sig": "${{ steps.get_sig.outputs.sig }}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- name: Strapi Response
|
|
||||||
run: |
|
|
||||||
echo ${{ steps.strapi-request.outputs.response }}
|
|
||||||
|
|
||||||
push-update-data:
|
|
||||||
name: Push update data to Strapi
|
|
||||||
runs-on: custom-runner-linux
|
|
||||||
# only push update data for tauri apps (desktop wallet and NC)
|
|
||||||
if: ${{ inputs.category == 'wallet' || inputs.category == 'connect' }}
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Release info
|
|
||||||
run: |
|
|
||||||
echo "version: ${{ inputs.version }}"
|
|
||||||
echo "tag: ${{ inputs.release_tag }}"
|
|
||||||
- id: get_sig
|
|
||||||
name: Get sig
|
|
||||||
if: ${{ inputs.sig_url != null }}
|
|
||||||
run: |
|
|
||||||
output=$(curl -LsSf ${{ inputs.sig_url }})
|
|
||||||
echo "sig=$output" >> "$GITHUB_OUTPUT"
|
|
||||||
- id: strapi-request
|
|
||||||
name: Strapi request
|
|
||||||
uses: fjogeleit/http-request-action@v1
|
|
||||||
with:
|
|
||||||
url: ${{ env.strapi_updater_url }}
|
|
||||||
method: 'POST'
|
|
||||||
bearerToken: ${{ secrets.STRAPI_API_TOKEN_RELEASES }}
|
|
||||||
customHeaders: '{"Content-Type": "application/json"}'
|
|
||||||
data: |
|
|
||||||
{
|
|
||||||
"data": {
|
|
||||||
"releaseId": "${{ inputs.release_id }}",
|
|
||||||
"releaseDate": "${{ inputs.release_date }}",
|
|
||||||
"downloadUrl": "${{ inputs.archive_url }}",
|
|
||||||
"changelog": "See ${{ inputs.changelog_url }} for the changelog",
|
|
||||||
"version": "${{ inputs.version }}",
|
|
||||||
"filename": "${{ inputs.filename }}",
|
|
||||||
"category": "${{ inputs.category }}",
|
|
||||||
"platform": "${{ inputs.platform }}",
|
|
||||||
"sha256": "${{ inputs.file_hash }}",
|
|
||||||
"sig": "${{ steps.get_sig.outputs.sig }}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- name: Strapi Response
|
|
||||||
run: |
|
|
||||||
echo ${{ steps.strapi-request.outputs.response }}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
name: Publish SDK to NPM
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish:
|
|
||||||
runs-on: [custom-runner-linux]
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Install Node
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 18
|
|
||||||
registry-url: 'https://registry.npmjs.org'
|
|
||||||
|
|
||||||
- name: Setup yarn
|
|
||||||
run: npm install -g yarn
|
|
||||||
|
|
||||||
- name: Install Rust stable
|
|
||||||
uses: actions-rs/toolchain@v1
|
|
||||||
with:
|
|
||||||
toolchain: stable
|
|
||||||
|
|
||||||
- name: Install wasm-pack
|
|
||||||
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: yarn
|
|
||||||
|
|
||||||
- name: Build and publish
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}
|
|
||||||
working-directory: ./sdk/typescript/packages/sdk
|
|
||||||
run: scripts/publish.sh
|
|
||||||
@@ -1 +1 @@
|
|||||||
18
|
16
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ async function addToContextAndValidate(context) {
|
|||||||
async function getMessageBody(context) {
|
async function getMessageBody(context) {
|
||||||
try {
|
try {
|
||||||
const source = fs
|
const source = fs
|
||||||
.readFileSync("./notifications/deny.message").toString();
|
.readFileSync("deny.message").toString();
|
||||||
return source;
|
return source;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
|
|||||||
@@ -3,70 +3,72 @@ name: CI for linting Typescript
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
paths:
|
paths:
|
||||||
- "ts-packages/**"
|
- 'ts-packages/**'
|
||||||
- "sdk/typescript/**"
|
- 'sdk/typescript/**'
|
||||||
- "nym-connect/desktop/src/**"
|
- 'nym-connect/desktop/src/**'
|
||||||
- "nym-connect/desktop/package.json"
|
- 'nym-connect/desktop/package.json'
|
||||||
- "nym-connect/mobile/src/**"
|
- 'nym-connect/mobile/src/**'
|
||||||
- "nym-connect/mobile/package.json"
|
- 'nym-connect/mobile/package.json'
|
||||||
- "nym-wallet/src/**"
|
- 'nym-wallet/src/**'
|
||||||
- "nym-wallet/package.json"
|
- 'nym-wallet/package.json'
|
||||||
- "explorer/**"
|
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- "ts-packages/**"
|
- 'ts-packages/**'
|
||||||
- "sdk/typescript/**"
|
- 'sdk/typescript/**'
|
||||||
- "nym-connect/desktop/src/**"
|
- 'nym-connect/desktop/src/**'
|
||||||
- "nym-connect/desktop/package.json"
|
- 'nym-connect/desktop/package.json'
|
||||||
- "nym-connect/mobile/src/**"
|
- 'nym-connect/mobile/src/**'
|
||||||
- "nym-connect/mobile/package.json"
|
- 'nym-connect/mobile/package.json'
|
||||||
- "nym-wallet/src/**"
|
- 'nym-wallet/src/**'
|
||||||
- "nym-wallet/package.json"
|
- 'nym-wallet/package.json'
|
||||||
- "explorer/**"
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: custom-runner-linux
|
runs-on: custom-runner-linux
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Install rsync
|
- name: Install rsync
|
||||||
run: sudo apt-get install rsync
|
run: sudo apt-get install rsync
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
- uses: rlespinasse/github-slug-action@v3.x
|
- uses: rlespinasse/github-slug-action@v3.x
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 16
|
||||||
- name: Install Rust stable
|
- name: Setup yarn
|
||||||
uses: actions-rs/toolchain@v1
|
run: npm install -g yarn
|
||||||
with:
|
- name: Install Rust stable
|
||||||
toolchain: stable
|
uses: actions-rs/toolchain@v1
|
||||||
- name: Install wasm-pack
|
with:
|
||||||
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
toolchain: stable
|
||||||
- name: Setup yarn
|
- name: Install wasm-pack
|
||||||
run: npm install -g yarn
|
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
||||||
- name: Install
|
working-directory: clients/webassembly
|
||||||
run: yarn
|
- name: Build WASM
|
||||||
- name: Build packages
|
run: wasm-pack build
|
||||||
run: yarn build
|
working-directory: clients/webassembly
|
||||||
- name: Lint
|
- name: Install
|
||||||
run: yarn lint && yarn tsc
|
run: yarn
|
||||||
- name: Matrix - Node Install
|
- name: Build packages
|
||||||
run: npm install
|
run: yarn build
|
||||||
working-directory: .github/workflows/support-files
|
- name: Lint
|
||||||
- name: Matrix - Send Notification
|
run: yarn lint && yarn tsc
|
||||||
env:
|
- name: Matrix - Node Install
|
||||||
NYM_NOTIFICATION_KIND: ts-packages
|
run: npm install
|
||||||
NYM_PROJECT_NAME: "ts-packages"
|
working-directory: .github/workflows/support-files
|
||||||
NYM_CI_WWW_BASE: "${{ secrets.NYM_CI_WWW_BASE }}"
|
- name: Matrix - Send Notification
|
||||||
NYM_CI_WWW_LOCATION: "ts-${{ env.GITHUB_REF_SLUG }}"
|
env:
|
||||||
GIT_COMMIT_MESSAGE: "${{ github.event.head_commit.message }}"
|
NYM_NOTIFICATION_KIND: ts-packages
|
||||||
GIT_BRANCH: "${GITHUB_REF##*/}"
|
NYM_PROJECT_NAME: "ts-packages"
|
||||||
IS_SUCCESS: "${{ job.status == 'success' }}"
|
NYM_CI_WWW_BASE: "${{ secrets.NYM_CI_WWW_BASE }}"
|
||||||
MATRIX_SERVER: "${{ secrets.MATRIX_SERVER }}"
|
NYM_CI_WWW_LOCATION: "ts-${{ env.GITHUB_REF_SLUG }}"
|
||||||
MATRIX_ROOM: "${{ secrets.MATRIX_ROOM }}"
|
GIT_COMMIT_MESSAGE: "${{ github.event.head_commit.message }}"
|
||||||
MATRIX_USER_ID: "${{ secrets.MATRIX_USER_ID }}"
|
GIT_BRANCH: "${GITHUB_REF##*/}"
|
||||||
MATRIX_TOKEN: "${{ secrets.MATRIX_TOKEN }}"
|
IS_SUCCESS: "${{ job.status == 'success' }}"
|
||||||
MATRIX_DEVICE_ID: "${{ secrets.MATRIX_DEVICE_ID }}"
|
MATRIX_SERVER: "${{ secrets.MATRIX_SERVER }}"
|
||||||
uses: docker://keybaseio/client:stable-node
|
MATRIX_ROOM: "${{ secrets.MATRIX_ROOM }}"
|
||||||
with:
|
MATRIX_USER_ID: "${{ secrets.MATRIX_USER_ID }}"
|
||||||
args: .github/workflows/support-files/notifications/entry_point.sh
|
MATRIX_TOKEN: "${{ secrets.MATRIX_TOKEN }}"
|
||||||
|
MATRIX_DEVICE_ID: "${{ secrets.MATRIX_DEVICE_ID }}"
|
||||||
|
uses: docker://keybaseio/client:stable-node
|
||||||
|
with:
|
||||||
|
args: .github/workflows/support-files/notifications/entry_point.sh
|
||||||
|
|||||||
+1
-5
@@ -4,16 +4,12 @@ Post 1.0.0 release, the changelog format is based on [Keep a Changelog](https://
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
## [v1.1.23] (2023-07-04)
|
## [1.1.23] (2023-06-27)
|
||||||
|
|
||||||
- nym-cli: add client identity key signing support ([#3576])
|
- nym-cli: add client identity key signing support ([#3576])
|
||||||
- Feature/node tester package ([#3634])
|
|
||||||
- Add medium toggle to socks5 client ([#3615])
|
|
||||||
- Don't fully turn off background task when cover traffic is disabled ([#3596])
|
- Don't fully turn off background task when cover traffic is disabled ([#3596])
|
||||||
|
|
||||||
[#3576]: https://github.com/nymtech/nym/issues/3576
|
[#3576]: https://github.com/nymtech/nym/issues/3576
|
||||||
[#3634]: https://github.com/nymtech/nym/pull/3634
|
|
||||||
[#3615]: https://github.com/nymtech/nym/pull/3615
|
|
||||||
[#3596]: https://github.com/nymtech/nym/pull/3596
|
[#3596]: https://github.com/nymtech/nym/pull/3596
|
||||||
|
|
||||||
## [v1.1.22] (2023-06-20)
|
## [v1.1.22] (2023-06-20)
|
||||||
|
|||||||
Generated
+5
-10
@@ -5794,12 +5794,8 @@ name = "nym-name-service-common"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cosmwasm-std",
|
"cosmwasm-std",
|
||||||
"cw-controllers",
|
|
||||||
"cw-utils",
|
|
||||||
"nym-contracts-common",
|
|
||||||
"schemars",
|
"schemars",
|
||||||
"serde",
|
"serde",
|
||||||
"thiserror",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -5849,7 +5845,6 @@ dependencies = [
|
|||||||
"pretty_env_logger",
|
"pretty_env_logger",
|
||||||
"publicsuffix",
|
"publicsuffix",
|
||||||
"rand 0.7.3",
|
"rand 0.7.3",
|
||||||
"regex",
|
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@@ -7724,13 +7719,13 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.8.4"
|
version = "1.8.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f"
|
checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"memchr",
|
"memchr",
|
||||||
"regex-syntax 0.7.2",
|
"regex-syntax 0.7.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -7750,9 +7745,9 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex-syntax"
|
name = "regex-syntax"
|
||||||
version = "0.7.2"
|
version = "0.7.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
|
checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "reqwest"
|
name = "reqwest"
|
||||||
|
|||||||
+1
-1
@@ -103,7 +103,7 @@ default-members = [
|
|||||||
"explorer-api",
|
"explorer-api",
|
||||||
]
|
]
|
||||||
|
|
||||||
exclude = ["explorer", "contracts", "clients/webassembly", "nym-wallet", "nym-connect/mobile/src-tauri", "nym-connect/desktop", "nym-browser-extension/storage", "cpu-cycles"]
|
exclude = ["explorer", "contracts", "clients/webassembly", "nym-wallet", "nym-connect/mobile/src-tauri", "nym-connect/desktop", "cpu-cycles"]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
authors = ["Nym Technologies SA"]
|
authors = ["Nym Technologies SA"]
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ The platform is composed of multiple Rust crates. Top-level executable binary cr
|
|||||||
* nym-gateway - acts sort of like a mailbox for mixnet messages, which removes the need for direct delivery to potentially offline or firewalled devices.
|
* nym-gateway - acts sort of like a mailbox for mixnet messages, which removes the need for direct delivery to potentially offline or firewalled devices.
|
||||||
* nym-network-monitor - sends packets through the full system to check that they are working as expected, and stores node uptime histories as the basis of a rewards system ("mixmining" or "proof-of-mixing").
|
* nym-network-monitor - sends packets through the full system to check that they are working as expected, and stores node uptime histories as the basis of a rewards system ("mixmining" or "proof-of-mixing").
|
||||||
* nym-explorer - a (projected) block explorer and (existing) mixnet viewer.
|
* nym-explorer - a (projected) block explorer and (existing) mixnet viewer.
|
||||||
* nym-wallet - a desktop wallet implemented using the [Tauri](https://tauri.studio/en/docs/about/intro) framework.
|
* nym-wallet - a desktop wallet implemented using the [Tauri](https://tauri.studio/en/docs/about/intro) framework.
|
||||||
|
|
||||||
[](https://opensource.org/licenses/Apache-2.0)
|
[](https://opensource.org/licenses/Apache-2.0)
|
||||||
[](https://github.com/nymtech/nym/actions?query=branch%3Adevelop)
|
[](https://github.com/nymtech/nym/actions?query=branch%3Adevelop)
|
||||||
@@ -21,7 +21,7 @@ The platform is composed of multiple Rust crates. Top-level executable binary cr
|
|||||||
|
|
||||||
### Building
|
### Building
|
||||||
|
|
||||||
Platform build instructions are available on [our docs site](https://nymtech.net/docs/binaries/pre-built-binaries.html).
|
Platform build instructions are available on [our docs site](https://nymtech.net/docs/binaries/build-nym.html).
|
||||||
Wallet build instructions are also available on [our docs site](https://nymtech.net/docs/wallet/desktop-wallet.html).
|
Wallet build instructions are also available on [our docs site](https://nymtech.net/docs/wallet/desktop-wallet.html).
|
||||||
|
|
||||||
### Developing
|
### Developing
|
||||||
@@ -32,9 +32,9 @@ For Typescript components, please see [ts-packages](./ts-packages).
|
|||||||
|
|
||||||
### Developer chat
|
### Developer chat
|
||||||
|
|
||||||
> We used to use Keybase for developer chats, but we have since migrated to Matrix and Discord. We no longer check the old **nymtech.friends** Keybase team.
|
> We used to use Keybase for developer chats, but we have since migrated to Matrix and Discord. We no longer check the old **nymtech.friends** Keybase team.
|
||||||
|
|
||||||
You can chat to us in two places:
|
You can chat to us in two places:
|
||||||
* The #dev channel on [Matrix](https://matrix.to/#/#dev:nymtech.chat)
|
* The #dev channel on [Matrix](https://matrix.to/#/#dev:nymtech.chat)
|
||||||
* The various developer channels on [Discord](https://discord.gg/nym)
|
* The various developer channels on [Discord](https://discord.gg/nym)
|
||||||
|
|
||||||
@@ -84,3 +84,4 @@ where `s'` is stake `s` scaled over total token circulating supply.
|
|||||||
### Licensing and copyright information
|
### Licensing and copyright information
|
||||||
|
|
||||||
This program is available as open source under the terms of the Apache 2.0 license. However, some elements are being licensed under CC0-1.0 and MIT. For accurate information, please check individual files.
|
This program is available as open source under the terms of the Apache 2.0 license. However, some elements are being licensed under CC0-1.0 and MIT. For accurate information, please check individual files.
|
||||||
|
|
||||||
|
|||||||
@@ -1,53 +0,0 @@
|
|||||||
<svg
|
|
||||||
width="100%"
|
|
||||||
height="100%"
|
|
||||||
viewBox="0 0 80 80"
|
|
||||||
fill="none"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
>
|
|
||||||
<g clip-path="url(#clip0_421_13045)">
|
|
||||||
<path
|
|
||||||
d="M40 80C62.0914 80 80 62.0914 80 40C80 17.9086 62.0914 0 40 0C17.9086 0 0 17.9086 0 40C0 62.0914 17.9086 80 40 80Z"
|
|
||||||
fill="black"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
d="M40 77.2636C60.5801 77.2636 77.2636 60.5801 77.2636 40C77.2636 19.4199 60.5801 2.73645 40 2.73645C19.4199 2.73645 2.73645 19.4199 2.73645 40C2.73645 60.5801 19.4199 77.2636 40 77.2636Z"
|
|
||||||
fill="white"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
d="M24.0224 32.471H23.9776V32.5084V45.5775L18.4673 32.4934L18.4598 32.471H18.4299H15.3047H11.7981H11.7607V32.5084V47.4916V47.529H11.7981H15.3047H15.3421V47.4916V34.4L20.8748 47.5065L20.8822 47.529H20.9121H24.0224H27.5215H27.5589V47.4916V32.5084V32.471H27.5215H24.0224Z"
|
|
||||||
fill="black"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
fill-rule="evenodd"
|
|
||||||
clip-rule="evenodd"
|
|
||||||
d="M23.8965 32.39H27.64V47.6101H20.8238L20.7989 47.5352L15.4232 34.8006V47.6101H11.6797V32.39H18.5183L18.5432 32.4649L23.8965 45.1761V32.39ZM23.9776 45.5776L18.4673 32.4935L18.4598 32.471H11.7608V47.529H15.3421V34.4L20.8748 47.5065L20.8823 47.529H27.5589V32.471H23.9776V45.5776Z"
|
|
||||||
fill="black"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
d="M68.2019 32.471H61.5178H61.4804L61.4729 32.5009L58.0486 45.6374L54.6169 32.5009L54.6094 32.471H54.5795H47.8804H47.8355V32.5084V47.4916V47.529H47.8804H51.3795H51.4169V47.4916V34.5047L54.8038 47.499L54.8112 47.529H54.8486H61.2337H61.2636L61.2711 47.499L64.658 34.5047V47.4916V47.529H64.6954H68.2019H68.2393V47.4916V32.5084V32.471H68.2019Z"
|
|
||||||
fill="black"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
fill-rule="evenodd"
|
|
||||||
clip-rule="evenodd"
|
|
||||||
d="M61.4171 32.39H68.3204V47.6101H64.5769V35.1372L61.3497 47.5187L61.3495 47.5195L61.3269 47.6101H54.7479L54.7253 47.5195L54.7251 47.5187L51.4979 35.1372V47.6101H47.7545V32.39H54.6727L54.6953 32.4804L54.6955 32.4813L58.0485 45.3163L61.3943 32.4813L61.3945 32.4805L61.4171 32.39ZM58.0486 45.6374L54.6168 32.5009L54.6094 32.471H47.8355V47.529H51.4168V34.5047L54.8038 47.4991L54.8112 47.529H61.2636L61.2711 47.4991L64.658 34.5047V47.529H68.2393V32.471H61.4804L61.4729 32.5009L58.0486 45.6374Z"
|
|
||||||
fill="black"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
d="M42.0711 32.471H42.0486L42.0412 32.486L37.7869 39.8804L33.5103 32.486L33.5028 32.471H33.4804H29.4355H29.3608L29.3982 32.5308L35.9851 43.9402V47.4916V47.529H36.0225H39.529H39.5664V47.4916V43.9402L46.1533 32.5308L46.1907 32.471H46.1159H42.0711Z"
|
|
||||||
fill="black"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
fill-rule="evenodd"
|
|
||||||
clip-rule="evenodd"
|
|
||||||
d="M41.9985 32.39H46.337L46.2228 32.5726L39.6475 43.9619V47.6101H35.904V43.9619L29.3286 32.5726L29.2145 32.39H33.5529L33.5817 32.4475L37.7868 39.7181L41.9697 32.4476L41.9985 32.39ZM42.0411 32.486L37.7869 39.8804L33.5103 32.486L33.5028 32.471H29.3608L29.3981 32.5308L35.9851 43.9402V47.529H39.5664V43.9402L46.1533 32.5308L46.1907 32.471H42.0486L42.0411 32.486Z"
|
|
||||||
fill="black"
|
|
||||||
/>
|
|
||||||
</g>
|
|
||||||
<defs>
|
|
||||||
<clipPath id="clip0_421_13045">
|
|
||||||
<rect width="80" height="80" fill="white" />
|
|
||||||
</clipPath>
|
|
||||||
</defs>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 3.0 KiB |
@@ -15,9 +15,9 @@ The credential binary is still experimental software. The infrastructure for usi
|
|||||||
|
|
||||||
From the project's root directory, run:
|
From the project's root directory, run:
|
||||||
```
|
```
|
||||||
cargo build -p nym-credential-client
|
cargo build -p credential
|
||||||
```
|
```
|
||||||
which generates the `nym-credential-client` binary in `target/debug/nym-credential-client`.
|
which generates the `credential` binary in `target/debug/credential`.
|
||||||
|
|
||||||
|
|
||||||
### Running
|
### Running
|
||||||
@@ -25,7 +25,7 @@ which generates the `nym-credential-client` binary in `target/debug/nym-credenti
|
|||||||
For example, you can get a credential worth 3 nym (3000000 unym) in a socks5 client that was already initialized like so:
|
For example, you can get a credential worth 3 nym (3000000 unym) in a socks5 client that was already initialized like so:
|
||||||
|
|
||||||
```
|
```
|
||||||
./target/debug/nym-credential-client --config-env-file envs/sandbox.env --client-home-directory ~/.nym/socks5-clients/cred_client --nyxd-url https://sandbox-validator1.nymtech.net --mnemonic $MNEMONIC --recovery-dir /tmp/recovery --amount 3000000
|
./target/debug/credential --config-env-file envs/sandbox.env --client-home-directory ~/.nym/socks5-clients/cred_client --nyxd-url https://sandbox-validator1.nymtech.net --mnemonic $MNEMONIC --recovery-dir /tmp/recovery --amount 3000000
|
||||||
```
|
```
|
||||||
|
|
||||||
More information regarding how to run the binary can be found by running it with the `--help` argument.
|
More information regarding how to run the binary can be found by running it with the `--help` argument.
|
||||||
|
|||||||
@@ -117,11 +117,10 @@ impl Handler {
|
|||||||
let Ok(base_length) = self
|
let Ok(base_length) = self
|
||||||
.lane_queue_lengths
|
.lane_queue_lengths
|
||||||
.lock()
|
.lock()
|
||||||
.map(|guard| guard.get(&conn_lane).unwrap_or_default())
|
.map(|guard| guard.get(&conn_lane).unwrap_or_default()) else {
|
||||||
else {
|
|
||||||
// I'd argue we should panic here as this error it not recoverable
|
// I'd argue we should panic here as this error it not recoverable
|
||||||
error!("The lane queue length lock is poisoned!!");
|
error!("The lane queue length lock is poisoned!!");
|
||||||
return None;
|
return None
|
||||||
};
|
};
|
||||||
|
|
||||||
// get the number of pending replies waiting for reply surbs
|
// get the number of pending replies waiting for reply surbs
|
||||||
@@ -175,7 +174,7 @@ impl Handler {
|
|||||||
|
|
||||||
// Only reply back with a `LaneQueueLength` if the sender providided a connection id
|
// Only reply back with a `LaneQueueLength` if the sender providided a connection id
|
||||||
let TransmissionLane::ConnectionId(connection_id) = lane else {
|
let TransmissionLane::ConnectionId(connection_id) = lane else {
|
||||||
return None;
|
return None
|
||||||
};
|
};
|
||||||
|
|
||||||
self.get_lane_queue_length(connection_id).await
|
self.get_lane_queue_length(connection_id).await
|
||||||
@@ -207,7 +206,7 @@ impl Handler {
|
|||||||
|
|
||||||
// Only reply back with a `LaneQueueLength` if the sender providided a connection id
|
// Only reply back with a `LaneQueueLength` if the sender providided a connection id
|
||||||
let TransmissionLane::ConnectionId(connection_id) = lane else {
|
let TransmissionLane::ConnectionId(connection_id) = lane else {
|
||||||
return None;
|
return None
|
||||||
};
|
};
|
||||||
|
|
||||||
self.get_lane_queue_length(connection_id).await
|
self.get_lane_queue_length(connection_id).await
|
||||||
@@ -234,7 +233,7 @@ impl Handler {
|
|||||||
|
|
||||||
// Only reply back with a `LaneQueueLength` if the sender providided a connection id
|
// Only reply back with a `LaneQueueLength` if the sender providided a connection id
|
||||||
let TransmissionLane::ConnectionId(connection_id) = lane else {
|
let TransmissionLane::ConnectionId(connection_id) = lane else {
|
||||||
return None;
|
return None
|
||||||
};
|
};
|
||||||
|
|
||||||
self.get_lane_queue_length(connection_id).await
|
self.get_lane_queue_length(connection_id).await
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ impl From<Init> for OverrideConfig {
|
|||||||
use_anonymous_replies: init_config.use_reply_surbs,
|
use_anonymous_replies: init_config.use_reply_surbs,
|
||||||
fastmode: init_config.fastmode,
|
fastmode: init_config.fastmode,
|
||||||
no_cover: init_config.no_cover,
|
no_cover: init_config.no_cover,
|
||||||
medium_toggle: false,
|
|
||||||
nyxd_urls: init_config.nyxd_urls,
|
nyxd_urls: init_config.nyxd_urls,
|
||||||
enabled_credentials_mode: init_config.enabled_credentials_mode,
|
enabled_credentials_mode: init_config.enabled_credentials_mode,
|
||||||
outfox: false,
|
outfox: false,
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ use nym_client_core::client::key_manager::persistence::OnDiskKeys;
|
|||||||
use nym_client_core::config::GatewayEndpointConfig;
|
use nym_client_core::config::GatewayEndpointConfig;
|
||||||
use nym_client_core::error::ClientCoreError;
|
use nym_client_core::error::ClientCoreError;
|
||||||
use nym_config::OptionalSet;
|
use nym_config::OptionalSet;
|
||||||
use nym_sphinx::params::{PacketSize, PacketType};
|
use nym_sphinx::params::PacketType;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
pub mod init;
|
pub mod init;
|
||||||
@@ -68,7 +68,6 @@ pub(crate) struct OverrideConfig {
|
|||||||
use_anonymous_replies: Option<bool>,
|
use_anonymous_replies: Option<bool>,
|
||||||
fastmode: bool,
|
fastmode: bool,
|
||||||
no_cover: bool,
|
no_cover: bool,
|
||||||
medium_toggle: bool,
|
|
||||||
nyxd_urls: Option<Vec<url::Url>>,
|
nyxd_urls: Option<Vec<url::Url>>,
|
||||||
enabled_credentials_mode: Option<bool>,
|
enabled_credentials_mode: Option<bool>,
|
||||||
outfox: bool,
|
outfox: bool,
|
||||||
@@ -87,10 +86,6 @@ pub(crate) async fn execute(args: &Cli) -> Result<(), Box<dyn Error + Send + Syn
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn override_config(config: Config, args: OverrideConfig) -> Config {
|
pub(crate) fn override_config(config: Config, args: OverrideConfig) -> Config {
|
||||||
let disable_cover_traffic_with_keepalive = args.medium_toggle;
|
|
||||||
let secondary_packet_size = args.medium_toggle.then_some(PacketSize::ExtendedPacket16);
|
|
||||||
let no_per_hop_delays = args.medium_toggle;
|
|
||||||
|
|
||||||
let packet_type = if args.outfox {
|
let packet_type = if args.outfox {
|
||||||
PacketType::Outfox
|
PacketType::Outfox
|
||||||
} else {
|
} else {
|
||||||
@@ -101,17 +96,6 @@ pub(crate) fn override_config(config: Config, args: OverrideConfig) -> Config {
|
|||||||
BaseClientConfig::with_high_default_traffic_volume,
|
BaseClientConfig::with_high_default_traffic_volume,
|
||||||
args.fastmode,
|
args.fastmode,
|
||||||
)
|
)
|
||||||
.with_base(
|
|
||||||
// NOTE: This interacts with disabling cover traffic fully, so we want to this to be set before
|
|
||||||
BaseClientConfig::with_disabled_cover_traffic_with_keepalive,
|
|
||||||
disable_cover_traffic_with_keepalive,
|
|
||||||
)
|
|
||||||
.with_base(
|
|
||||||
BaseClientConfig::with_secondary_packet_size,
|
|
||||||
secondary_packet_size,
|
|
||||||
)
|
|
||||||
.with_base(BaseClientConfig::with_no_per_hop_delays, no_per_hop_delays)
|
|
||||||
// NOTE: see comment above about the order of the other disble cover traffic config
|
|
||||||
.with_base(BaseClientConfig::with_disabled_cover_traffic, args.no_cover)
|
.with_base(BaseClientConfig::with_disabled_cover_traffic, args.no_cover)
|
||||||
.with_base(BaseClientConfig::with_packet_type, packet_type)
|
.with_base(BaseClientConfig::with_packet_type, packet_type)
|
||||||
.with_optional(Config::with_anonymous_replies, args.use_anonymous_replies)
|
.with_optional(Config::with_anonymous_replies, args.use_anonymous_replies)
|
||||||
|
|||||||
@@ -60,11 +60,6 @@ pub(crate) struct Run {
|
|||||||
#[clap(long, hide = true)]
|
#[clap(long, hide = true)]
|
||||||
no_cover: bool,
|
no_cover: bool,
|
||||||
|
|
||||||
/// Enable medium mixnet traffic, for experiments only.
|
|
||||||
/// This includes things like disabling cover traffic, no per hop delays, etc.
|
|
||||||
#[clap(long, hide = true)]
|
|
||||||
medium_toggle: bool,
|
|
||||||
|
|
||||||
/// Set this client to work in a enabled credentials mode that would attempt to use gateway
|
/// Set this client to work in a enabled credentials mode that would attempt to use gateway
|
||||||
/// with bandwidth credential requirement.
|
/// with bandwidth credential requirement.
|
||||||
#[clap(long, hide = true)]
|
#[clap(long, hide = true)]
|
||||||
@@ -82,7 +77,6 @@ impl From<Run> for OverrideConfig {
|
|||||||
use_anonymous_replies: run_config.use_anonymous_replies,
|
use_anonymous_replies: run_config.use_anonymous_replies,
|
||||||
fastmode: run_config.fastmode,
|
fastmode: run_config.fastmode,
|
||||||
no_cover: run_config.no_cover,
|
no_cover: run_config.no_cover,
|
||||||
medium_toggle: run_config.medium_toggle,
|
|
||||||
nyxd_urls: run_config.nyxd_urls,
|
nyxd_urls: run_config.nyxd_urls,
|
||||||
enabled_credentials_mode: run_config.enabled_credentials_mode,
|
enabled_credentials_mode: run_config.enabled_credentials_mode,
|
||||||
outfox: run_config.outfox,
|
outfox: run_config.outfox,
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
18
|
16
|
||||||
@@ -3,11 +3,11 @@
|
|||||||
"version": "0.19.0",
|
"version": "0.19.0",
|
||||||
"description": "A TypeScript client for interacting with smart contracts in Nym validators",
|
"description": "A TypeScript client for interacting with smart contracts in Nym validators",
|
||||||
"repository": "https://github.com/nymtech/nym",
|
"repository": "https://github.com/nymtech/nym",
|
||||||
"main": "dist/index.js",
|
"main": "./dist/index.js",
|
||||||
"types": "dist/index.d.ts",
|
"types": "./dist/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "rollup -c ./rollup.config.mjs",
|
"build": "rollup -c ./rollup.config.mjs",
|
||||||
"build:types": "rollup-type-bundler --dist ./dist",
|
"build:types": "rollup-type-bundler --dist ./dist/nym-validator-client",
|
||||||
"build:prod": "sh ./scripts/build-prod.sh",
|
"build:prod": "sh ./scripts/build-prod.sh",
|
||||||
"test": "ts-mocha -p ./tsconfig.test.json ./src/tests/**/*.test.ts",
|
"test": "ts-mocha -p ./tsconfig.test.json ./src/tests/**/*.test.ts",
|
||||||
"testmock": "ts-mocha -p ./tsconfig.test.json ./src/tests/mock/*.test.ts",
|
"testmock": "ts-mocha -p ./tsconfig.test.json ./src/tests/mock/*.test.ts",
|
||||||
@@ -29,23 +29,16 @@
|
|||||||
],
|
],
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@cosmjs/cosmwasm-stargate": "^0.29.5",
|
|
||||||
"@cosmjs/crypto": "^0.29.5",
|
|
||||||
"@cosmjs/math": "^0.29.5",
|
|
||||||
"@cosmjs/proto-signing": "^0.29.5",
|
|
||||||
"@cosmjs/stargate": "^0.29.5",
|
|
||||||
"@cosmjs/tendermint-rpc": "^0.29.5",
|
|
||||||
"@favware/rollup-type-bundler": "^2.0.0",
|
"@favware/rollup-type-bundler": "^2.0.0",
|
||||||
"@nymproject/types": "^1.0.0",
|
"@nymproject/types": "^1.0.0",
|
||||||
"@rollup/plugin-commonjs": "^24.0.1",
|
"@rollup/plugin-commonjs": "^24.0.1",
|
||||||
"@rollup/plugin-json": "^6.0.0",
|
"@rollup/plugin-json": "^6.0.0",
|
||||||
"@rollup/plugin-node-resolve": "^15.0.1",
|
|
||||||
"@rollup/plugin-typescript": "^11.0.0",
|
"@rollup/plugin-typescript": "^11.0.0",
|
||||||
|
"@rollup/plugin-node-resolve": "^15.0.1",
|
||||||
|
"rollup": "^3.17.2",
|
||||||
|
"rollup-plugin-dts": "^5.2.0",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.7.0",
|
"@typescript-eslint/eslint-plugin": "^5.7.0",
|
||||||
"@typescript-eslint/parser": "^5.7.0",
|
"@typescript-eslint/parser": "^5.7.0",
|
||||||
"axios": "^1.3.3",
|
|
||||||
"cosmjs-types": "^0.4.1",
|
|
||||||
"dotenv": "^16.0.3",
|
|
||||||
"eslint": "^7.18.0",
|
"eslint": "^7.18.0",
|
||||||
"eslint-config-airbnb": "^19.0.2",
|
"eslint-config-airbnb": "^19.0.2",
|
||||||
"eslint-config-airbnb-typescript": "^16.1.0",
|
"eslint-config-airbnb-typescript": "^16.1.0",
|
||||||
@@ -54,15 +47,21 @@
|
|||||||
"eslint-plugin-import": "^2.25.4",
|
"eslint-plugin-import": "^2.25.4",
|
||||||
"eslint-plugin-mocha": "^10.0.3",
|
"eslint-plugin-mocha": "^10.0.3",
|
||||||
"eslint-plugin-prettier": "^4.0.0",
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
"expect": "^28.1.3",
|
|
||||||
"mocha": "^10.0.0",
|
"mocha": "^10.0.0",
|
||||||
"moq.ts": "^7.3.4",
|
|
||||||
"prettier": "^2.8.7",
|
"prettier": "^2.8.7",
|
||||||
"rollup": "^3.17.2",
|
|
||||||
"rollup-plugin-dts": "^5.2.0",
|
|
||||||
"rollup-plugin-node-polyfills": "^0.2.1",
|
|
||||||
"ts-mocha": "^10.0.0",
|
"ts-mocha": "^10.0.0",
|
||||||
"typedoc": "^0.22.13",
|
"typedoc": "^0.22.13",
|
||||||
"typescript": "^4.6.2"
|
"typescript": "^4.6.2",
|
||||||
|
"cosmjs-types": "^0.4.1",
|
||||||
|
"dotenv": "^16.0.3",
|
||||||
|
"expect": "^28.1.3",
|
||||||
|
"moq.ts": "^7.3.4",
|
||||||
|
"@cosmjs/cosmwasm-stargate": "^0.29.5",
|
||||||
|
"@cosmjs/crypto": "^0.29.5",
|
||||||
|
"@cosmjs/math": "^0.29.5",
|
||||||
|
"@cosmjs/proto-signing": "^0.29.5",
|
||||||
|
"@cosmjs/stargate": "^0.29.5",
|
||||||
|
"@cosmjs/tendermint-rpc": "^0.29.5",
|
||||||
|
"axios": "^1.3.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
import typescript from '@rollup/plugin-typescript';
|
import typescript from '@rollup/plugin-typescript';
|
||||||
import nodePolyfills from 'rollup-plugin-node-polyfills';
|
import resolve from '@rollup/plugin-node-resolve';
|
||||||
import json from '@rollup/plugin-json';
|
import json from '@rollup/plugin-json';
|
||||||
import commonjs from '@rollup/plugin-commonjs';
|
import commonjs from '@rollup/plugin-commonjs';
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
{
|
{
|
||||||
input: 'src/index.ts',
|
input: './src/index.ts',
|
||||||
output: {
|
output: {
|
||||||
dir: 'dist',
|
dir: 'dist/nym-validator-client',
|
||||||
format: 'cjs',
|
format: 'cjs',
|
||||||
},
|
},
|
||||||
plugins: [nodePolyfills(), typescript(), commonjs(), json()],
|
plugins: [resolve(), typescript(), commonjs(), json()],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ node ./scripts/buildPackageJson.mjs
|
|||||||
|
|
||||||
# Copy README
|
# Copy README
|
||||||
|
|
||||||
cp README.md dist/
|
cp README.md dist/nym-validator-client
|
||||||
|
|
||||||
# move the output outside of the yarn/npm workspaces
|
# move the output outside of the yarn/npm workspaces
|
||||||
|
|
||||||
|
|||||||
@@ -17,4 +17,4 @@ const packageJson = {
|
|||||||
types,
|
types,
|
||||||
};
|
};
|
||||||
|
|
||||||
fs.writeFileSync('./dist/package.json', JSON.stringify(packageJson, null, 2));
|
fs.writeFileSync('./dist/nym-validator-client/package.json', JSON.stringify(packageJson, null, 2));
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ import {
|
|||||||
} from '@nymproject/types';
|
} from '@nymproject/types';
|
||||||
import QueryClient from './query-client';
|
import QueryClient from './query-client';
|
||||||
import SigningClient, { ISigningClient } from './signing-client';
|
import SigningClient, { ISigningClient } from './signing-client';
|
||||||
|
// import { DelegationBlock } from './types/shared';
|
||||||
|
|
||||||
export interface INymClient {
|
export interface INymClient {
|
||||||
readonly mixnetContract: string;
|
readonly mixnetContract: string;
|
||||||
@@ -625,17 +626,7 @@ export default class ValidatorClient implements INymClient {
|
|||||||
|
|
||||||
// SIMULATE
|
// SIMULATE
|
||||||
|
|
||||||
public async simulateSend({
|
public async simulateSend(signingAddress: string, from: string, to: string, amount: Coin[]) {
|
||||||
signingAddress,
|
return (this.client as SigningClient).simulateSend(signingAddress, from, to, amount);
|
||||||
from,
|
|
||||||
to,
|
|
||||||
amount,
|
|
||||||
}: {
|
|
||||||
signingAddress: string;
|
|
||||||
from: string;
|
|
||||||
to: string;
|
|
||||||
amount: Coin[];
|
|
||||||
}) {
|
|
||||||
return (this.client as ISigningClient).simulateSend(signingAddress, from, to, amount);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,12 +22,9 @@ describe('Simualtions', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('can simulate sending tokens', async () => {
|
it('can simulate sending tokens', async () => {
|
||||||
const res = await client.simulateSend({
|
const res = await client.simulateSend(client.address, client.address, client.address, [
|
||||||
signingAddress: client.address,
|
{ amount: '400000', denom: 'unym' },
|
||||||
from: client.address,
|
]);
|
||||||
to: client.address,
|
|
||||||
amount: [{ amount: '400000', denom: 'unym' }],
|
|
||||||
});
|
|
||||||
|
|
||||||
expect(typeof res).toBe('number');
|
expect(typeof res).toBe('number');
|
||||||
}).timeout(10000);
|
}).timeout(10000);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "dist",
|
"outDir": "./dist/nym-validator-client",
|
||||||
"module": "ES2020",
|
"module": "ES2020",
|
||||||
"target": "es2021",
|
"target": "es2021",
|
||||||
"allowJs": false,
|
"allowJs": false,
|
||||||
|
|||||||
Generated
+6
-10
@@ -570,9 +570,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "const-oid"
|
name = "const-oid"
|
||||||
version = "0.9.4"
|
version = "0.9.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747"
|
checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "constant_time_eq"
|
name = "constant_time_eq"
|
||||||
@@ -632,9 +632,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cosmwasm-crypto"
|
name = "cosmwasm-crypto"
|
||||||
version = "1.3.0"
|
version = "1.2.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "0d076a08ec01ed23c4396aca98ec73a38fa1fee5f310465add52b4108181c7a8"
|
checksum = "75836a10cb9654c54e77ee56da94d592923092a10b369cdb0dbd56acefc16340"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"digest 0.10.6",
|
"digest 0.10.6",
|
||||||
"ed25519-zebra",
|
"ed25519-zebra",
|
||||||
@@ -943,9 +943,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cw20"
|
name = "cw20"
|
||||||
version = "1.1.0"
|
version = "1.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "011c45920f8200bd5d32d4fe52502506f64f2f75651ab408054d4cfc75ca3a9b"
|
checksum = "91666da6c7b40c8dd5ff94df655a28114efc10c79b70b4d06f13c31e37d60609"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cosmwasm-schema",
|
"cosmwasm-schema",
|
||||||
"cosmwasm-std",
|
"cosmwasm-std",
|
||||||
@@ -2673,12 +2673,8 @@ name = "nym-name-service-common"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cosmwasm-std",
|
"cosmwasm-std",
|
||||||
"cw-controllers",
|
|
||||||
"cw-utils",
|
|
||||||
"nym-contracts-common",
|
|
||||||
"schemars",
|
"schemars",
|
||||||
"serde",
|
"serde",
|
||||||
"thiserror",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
// due to expansion of #[wasm_bindgen] macro on `Debug` Config struct
|
// due to expansion of #[wasm_bindgen] macro on `Debug` Config struct
|
||||||
#![allow(clippy::drop_non_drop)]
|
#![allow(clippy::drop_non_drop)]
|
||||||
// another issue due to #[wasm_bindgen] and `Copy` trait
|
// another issue due to #[wasm_bindgen] and `Copy` trait
|
||||||
#![allow(dropping_copy_types)]
|
#![allow(clippy::drop_copy)]
|
||||||
|
|
||||||
use nym_client_core::config::{
|
use nym_client_core::config::{
|
||||||
Acknowledgements as ConfigAcknowledgements, Config as BaseClientConfig,
|
Acknowledgements as ConfigAcknowledgements, Config as BaseClientConfig,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
use crate::storage::error::ClientStorageError;
|
use crate::storage::errors::ClientStorageError;
|
||||||
use crate::topology::WasmTopologyError;
|
use crate::topology::WasmTopologyError;
|
||||||
use js_sys::Promise;
|
use js_sys::Promise;
|
||||||
use nym_client_core::config::GatewayEndpointConfig;
|
use nym_client_core::config::GatewayEndpointConfig;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
use crate::client::config::Config;
|
use crate::client::config::Config;
|
||||||
use crate::storage::error::ClientStorageError;
|
use crate::storage::errors::ClientStorageError;
|
||||||
use js_sys::Promise;
|
use js_sys::Promise;
|
||||||
use nym_client_core::client::base_client::storage::gateway_details::PersistedGatewayDetails;
|
use nym_client_core::client::base_client::storage::gateway_details::PersistedGatewayDetails;
|
||||||
use nym_crypto::asymmetric::{encryption, identity};
|
use nym_crypto::asymmetric::{encryption, identity};
|
||||||
@@ -15,7 +15,7 @@ use wasm_utils::storage::{IdbVersionChangeEvent, WasmStorage};
|
|||||||
use wasm_utils::PromisableResult;
|
use wasm_utils::PromisableResult;
|
||||||
use zeroize::Zeroizing;
|
use zeroize::Zeroizing;
|
||||||
|
|
||||||
pub(crate) mod error;
|
pub(crate) mod errors;
|
||||||
pub(crate) mod traits;
|
pub(crate) mod traits;
|
||||||
|
|
||||||
const STORAGE_NAME_PREFIX: &str = "wasm-client-storage";
|
const STORAGE_NAME_PREFIX: &str = "wasm-client-storage";
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
use crate::storage::error::ClientStorageError;
|
use crate::storage::errors::ClientStorageError;
|
||||||
use crate::storage::ClientStorage;
|
use crate::storage::ClientStorage;
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use nym_client_core::client::base_client::storage::gateway_details::{
|
use nym_client_core::client::base_client::storage::gateway_details::{
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ impl AsyncFileWatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let Some(filters) = &self.filters else {
|
let Some(filters) = &self.filters else {
|
||||||
return true;
|
return true
|
||||||
};
|
};
|
||||||
|
|
||||||
for filter in filters {
|
for filter in filters {
|
||||||
|
|||||||
@@ -153,7 +153,7 @@ impl LoopCoverTrafficStream<OsRng> {
|
|||||||
|
|
||||||
fn loop_cover_message_size(&mut self) -> PacketSize {
|
fn loop_cover_message_size(&mut self) -> PacketSize {
|
||||||
let Some(secondary_packet_size) = self.secondary_packet_size else {
|
let Some(secondary_packet_size) = self.secondary_packet_size else {
|
||||||
return self.primary_packet_size;
|
return self.primary_packet_size
|
||||||
};
|
};
|
||||||
|
|
||||||
let use_primary = self
|
let use_primary = self
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ where
|
|||||||
// if secondary packet was never set, then it's obvious we have to use the primary packet
|
// if secondary packet was never set, then it's obvious we have to use the primary packet
|
||||||
let Some(secondary_packet) = self.config.secondary_packet_size else {
|
let Some(secondary_packet) = self.config.secondary_packet_size else {
|
||||||
trace!("only primary packet size is available");
|
trace!("only primary packet size is available");
|
||||||
return self.config.primary_packet_size;
|
return self.config.primary_packet_size
|
||||||
};
|
};
|
||||||
|
|
||||||
let primary_count =
|
let primary_count =
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ where
|
|||||||
|
|
||||||
fn loop_cover_message_size(&mut self) -> PacketSize {
|
fn loop_cover_message_size(&mut self) -> PacketSize {
|
||||||
let Some(secondary_packet_size) = self.config.traffic.secondary_packet_size else {
|
let Some(secondary_packet_size) = self.config.traffic.secondary_packet_size else {
|
||||||
return self.config.traffic.primary_packet_size;
|
return self.config.traffic.primary_packet_size
|
||||||
};
|
};
|
||||||
|
|
||||||
let use_primary = self
|
let use_primary = self
|
||||||
|
|||||||
@@ -727,11 +727,7 @@ where
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
let Some(last_received) = self
|
let Some(last_received) = self.full_reply_storage.surbs_storage_ref().surbs_last_received_at(pending_reply_target) else {
|
||||||
.full_reply_storage
|
|
||||||
.surbs_storage_ref()
|
|
||||||
.surbs_last_received_at(pending_reply_target)
|
|
||||||
else {
|
|
||||||
error!("we have {} pending replies for {pending_reply_target}, but we somehow never received any reply surbs from them!", vals.total_size());
|
error!("we have {} pending replies for {pending_reply_target}, but we somehow never received any reply surbs from them!", vals.total_size());
|
||||||
to_remove.push(*pending_reply_target);
|
to_remove.push(*pending_reply_target);
|
||||||
continue;
|
continue;
|
||||||
@@ -815,8 +811,7 @@ where
|
|||||||
|
|
||||||
// this should never ever happen (famous last words, eh?), but in case it DOES happen eventually
|
// this should never ever happen (famous last words, eh?), but in case it DOES happen eventually
|
||||||
// purge that malformed data
|
// purge that malformed data
|
||||||
let Ok(sent_at) = OffsetDateTime::from_unix_timestamp(reply_key.sent_at_timestamp)
|
let Ok(sent_at) = OffsetDateTime::from_unix_timestamp(reply_key.sent_at_timestamp) else {
|
||||||
else {
|
|
||||||
error!("somehow our stored timestamp ({}) for one of our reply key is corrupted!. Going to remove all the entry", reply_key.sent_at_timestamp);
|
error!("somehow our stored timestamp ({}) for one of our reply key is corrupted!. Going to remove all the entry", reply_key.sent_at_timestamp);
|
||||||
to_remove_keys.push(*digest);
|
to_remove_keys.push(*digest);
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ impl<T> TransmissionBuffer<T> {
|
|||||||
|
|
||||||
while items.len() < n {
|
while items.len() < n {
|
||||||
let Some(next) = self.pop_next_message_at_random(rng) else {
|
let Some(next) = self.pop_next_message_at_random(rng) else {
|
||||||
break;
|
break
|
||||||
};
|
};
|
||||||
items.push(next)
|
items.push(next)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,8 +130,23 @@ mod sealed {
|
|||||||
use cosmrs::{AccountId, Denom as CosmosDenom};
|
use cosmrs::{AccountId, Denom as CosmosDenom};
|
||||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
|
|
||||||
|
fn cosmos_denom_inner_getter(val: &CosmosDenom) -> String {
|
||||||
|
val.as_ref().to_string()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
#[serde(remote = "CosmosDenom")]
|
||||||
|
struct Denom(#[serde(getter = "cosmos_denom_inner_getter")] String);
|
||||||
|
|
||||||
|
impl From<Denom> for CosmosDenom {
|
||||||
|
fn from(val: Denom) -> Self {
|
||||||
|
val.0.parse().unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone)]
|
#[derive(Serialize, Deserialize, Clone)]
|
||||||
struct Coin {
|
struct Coin {
|
||||||
|
#[serde(with = "Denom")]
|
||||||
denom: CosmosDenom,
|
denom: CosmosDenom,
|
||||||
amount: u128,
|
amount: u128,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use nym_contracts_common::ContractBuildInformation;
|
|||||||
use nym_name_service_common::{
|
use nym_name_service_common::{
|
||||||
msg::QueryMsg as NameQueryMsg,
|
msg::QueryMsg as NameQueryMsg,
|
||||||
response::{ConfigResponse, NamesListResponse, PagedNamesListResponse},
|
response::{ConfigResponse, NamesListResponse, PagedNamesListResponse},
|
||||||
Address, NameId, RegisteredName,
|
Address, NameEntry, NameId,
|
||||||
};
|
};
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ pub trait NameServiceQueryClient {
|
|||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn get_name_entry(&self, name_id: NameId) -> Result<RegisteredName, NyxdError> {
|
async fn get_name_entry(&self, name_id: NameId) -> Result<NameEntry, NyxdError> {
|
||||||
self.query_name_service_contract(NameQueryMsg::NameId { name_id })
|
self.query_name_service_contract(NameQueryMsg::NameId { name_id })
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
@@ -54,14 +54,14 @@ pub trait NameServiceQueryClient {
|
|||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn get_all_names(&self) -> Result<Vec<RegisteredName>, NyxdError> {
|
async fn get_all_names(&self) -> Result<Vec<NameEntry>, NyxdError> {
|
||||||
let mut services = Vec::new();
|
let mut services = Vec::new();
|
||||||
let mut start_after = None;
|
let mut start_after = None;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let mut paged_response = self.get_names_paged(start_after.take(), None).await?;
|
let mut paged_response = self.get_names_paged(start_after.take(), None).await?;
|
||||||
|
|
||||||
let last_id = paged_response.names.last().map(|serv| serv.id);
|
let last_id = paged_response.names.last().map(|serv| serv.name_id);
|
||||||
services.append(&mut paged_response.names);
|
services.append(&mut paged_response.names);
|
||||||
|
|
||||||
if let Some(start_after_res) = last_id {
|
if let Some(start_after_res) = last_id {
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use nym_contracts_common::signing::MessageSignature;
|
use nym_name_service_common::{msg::ExecuteMsg as NameExecuteMsg, Address, NameId, NymName};
|
||||||
use nym_name_service_common::{msg::ExecuteMsg as NameExecuteMsg, NameDetails, NameId, NymName};
|
|
||||||
|
|
||||||
use crate::nyxd::{
|
use crate::nyxd::{
|
||||||
coin::Coin, cosmwasm_client::types::ExecuteResult, error::NyxdError, Fee, NyxdClient,
|
coin::Coin, cosmwasm_client::types::ExecuteResult, error::NyxdError, Fee, NyxdClient,
|
||||||
@@ -21,17 +20,14 @@ pub trait NameServiceSigningClient {
|
|||||||
|
|
||||||
async fn register_name(
|
async fn register_name(
|
||||||
&self,
|
&self,
|
||||||
name: NameDetails,
|
name: NymName,
|
||||||
owner_signature: MessageSignature,
|
address: Address,
|
||||||
deposit: Coin,
|
deposit: Coin,
|
||||||
fee: Option<Fee>,
|
fee: Option<Fee>,
|
||||||
) -> Result<ExecuteResult, NyxdError> {
|
) -> Result<ExecuteResult, NyxdError> {
|
||||||
self.execute_name_service_contract(
|
self.execute_name_service_contract(
|
||||||
fee,
|
fee,
|
||||||
NameExecuteMsg::Register {
|
NameExecuteMsg::Register { name, address },
|
||||||
name,
|
|
||||||
owner_signature,
|
|
||||||
},
|
|
||||||
vec![deposit],
|
vec![deposit],
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
|||||||
+2
-7
@@ -35,14 +35,9 @@ pub async fn create_family_join_permit_sign_payload(args: Args, client: QueryCli
|
|||||||
info!("Create family join permit sign payload");
|
info!("Create family join permit sign payload");
|
||||||
|
|
||||||
// get the address of our mixnode to recover the family head information
|
// get the address of our mixnode to recover the family head information
|
||||||
let Some(mixnode) = client
|
let Some(mixnode) = client.get_owned_mixnode(&args.address).await.unwrap().mixnode_details else {
|
||||||
.get_owned_mixnode(&args.address)
|
|
||||||
.await
|
|
||||||
.unwrap()
|
|
||||||
.mixnode_details
|
|
||||||
else {
|
|
||||||
eprintln!("{} does not seem to even own a mixnode!", args.address);
|
eprintln!("{} does not seem to even own a mixnode!", args.address);
|
||||||
return;
|
return
|
||||||
};
|
};
|
||||||
|
|
||||||
// make sure this mixnode is actually a family head
|
// make sure this mixnode is actually a family head
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
use log::{error, info};
|
use log::{error, info};
|
||||||
use nym_contracts_common::signing::MessageSignature;
|
use nym_name_service_common::{Address, Coin, NymName};
|
||||||
use nym_name_service_common::{Address, Coin, NameDetails, NymName};
|
|
||||||
use nym_validator_client::nyxd::{error::NyxdError, traits::NameServiceSigningClient};
|
use nym_validator_client::nyxd::{error::NyxdError, traits::NameServiceSigningClient};
|
||||||
use tap::TapFallible;
|
use tap::TapFallible;
|
||||||
|
|
||||||
@@ -17,15 +16,9 @@ pub struct Args {
|
|||||||
#[clap(long)]
|
#[clap(long)]
|
||||||
pub nym_address: String,
|
pub nym_address: String,
|
||||||
|
|
||||||
#[clap(long)]
|
|
||||||
pub signature: MessageSignature,
|
|
||||||
|
|
||||||
/// Deposit to be made to the service provider directory, in curent DENOMINATION (e.g. 'unym')
|
/// Deposit to be made to the service provider directory, in curent DENOMINATION (e.g. 'unym')
|
||||||
#[clap(long)]
|
#[clap(long)]
|
||||||
pub deposit: u128,
|
pub deposit: u128,
|
||||||
|
|
||||||
#[clap(long)]
|
|
||||||
pub identity_key: String,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn register(args: Args, client: SigningClient) -> Result<(), NyxdError> {
|
pub async fn register(args: Args, client: SigningClient) -> Result<(), NyxdError> {
|
||||||
@@ -36,17 +29,12 @@ pub async fn register(args: Args, client: SigningClient) -> Result<(), NyxdError
|
|||||||
|
|
||||||
let name = NymName::new(&args.name).expect("invalid name");
|
let name = NymName::new(&args.name).expect("invalid name");
|
||||||
let address = Address::new(&args.nym_address);
|
let address = Address::new(&args.nym_address);
|
||||||
let name = NameDetails {
|
|
||||||
name,
|
|
||||||
address,
|
|
||||||
identity_key: args.identity_key,
|
|
||||||
};
|
|
||||||
|
|
||||||
let denom = client.current_chain_details().mix_denom.base.as_str();
|
let denom = client.current_chain_details().mix_denom.base.as_str();
|
||||||
let deposit = Coin::new(args.deposit, denom);
|
let deposit = Coin::new(args.deposit, denom);
|
||||||
|
|
||||||
let res = client
|
let res = client
|
||||||
.register_name(name, args.signature, deposit.into(), None)
|
.register_name(name, address, deposit.into(), None)
|
||||||
.await
|
.await
|
||||||
.tap_err(|err| error!("Failed to register name: {err:#?}"))?;
|
.tap_err(|err| error!("Failed to register name: {err:#?}"))?;
|
||||||
|
|
||||||
|
|||||||
@@ -34,8 +34,8 @@ pub async fn query(args: Args, client: &QueryClientWithNyxd) {
|
|||||||
table.set_header(vec!["Name Id", "Owner", "Nym Address", "Name"]);
|
table.set_header(vec!["Name Id", "Owner", "Nym Address", "Name"]);
|
||||||
for name_entry in res.names {
|
for name_entry in res.names {
|
||||||
table.add_row(vec![
|
table.add_row(vec![
|
||||||
name_entry.id.to_string(),
|
name_entry.name_id.to_string(),
|
||||||
name_entry.owner.to_string(),
|
name_entry.name.owner.to_string(),
|
||||||
name_entry.name.address.to_string(),
|
name_entry.name.address.to_string(),
|
||||||
name_entry.name.name.to_string(),
|
name_entry.name.name.to_string(),
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -7,9 +7,5 @@ edition = "2021"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
cosmwasm-std = { workspace = true }
|
cosmwasm-std = { workspace = true }
|
||||||
cw-controllers = { workspace = true }
|
|
||||||
cw-utils = { workspace = true }
|
|
||||||
nym-contracts-common = { path = "../contracts-common", version = "0.5.0" }
|
|
||||||
schemars = "0.8"
|
schemars = "0.8"
|
||||||
serde = { workspace = true, features = ["derive"] }
|
serde = { workspace = true, features = ["derive"] }
|
||||||
thiserror = { workspace = true }
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
use cosmwasm_std::{Coin, Event};
|
use cosmwasm_std::{Coin, Event};
|
||||||
|
|
||||||
use crate::RegisteredName;
|
use crate::{NameId, RegisteredName};
|
||||||
|
|
||||||
pub enum NameEventType {
|
pub enum NameEventType {
|
||||||
Register,
|
Register,
|
||||||
@@ -34,29 +34,29 @@ pub const OWNER: &str = "owner";
|
|||||||
|
|
||||||
pub const DEPOSIT_REQUIRED: &str = "deposit_required";
|
pub const DEPOSIT_REQUIRED: &str = "deposit_required";
|
||||||
|
|
||||||
pub fn new_register_event(name: RegisteredName) -> Event {
|
pub fn new_register_event(name_id: NameId, name: RegisteredName) -> Event {
|
||||||
Event::new(NameEventType::Register)
|
Event::new(NameEventType::Register)
|
||||||
.add_attribute(ACTION, NameEventType::Register)
|
.add_attribute(ACTION, NameEventType::Register)
|
||||||
.add_attribute(NAME_ID, name.id.to_string())
|
.add_attribute(NAME_ID, name_id.to_string())
|
||||||
.add_attribute(NAME, name.name.name.to_string())
|
.add_attribute(NAME, name.name.to_string())
|
||||||
.add_attribute(name.name.address.event_tag(), name.name.address.to_string())
|
.add_attribute(name.address.event_tag(), name.address.to_string())
|
||||||
.add_attribute(OWNER, name.owner.to_string())
|
.add_attribute(OWNER, name.owner.to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_delete_id_event(name: RegisteredName) -> Event {
|
pub fn new_delete_id_event(name_id: NameId, name: RegisteredName) -> Event {
|
||||||
Event::new(NameEventType::DeleteId)
|
Event::new(NameEventType::DeleteId)
|
||||||
.add_attribute(ACTION, NameEventType::DeleteId)
|
.add_attribute(ACTION, NameEventType::DeleteId)
|
||||||
.add_attribute(NAME_ID, name.id.to_string())
|
.add_attribute(NAME_ID, name_id.to_string())
|
||||||
.add_attribute(NAME, name.name.name.to_string())
|
.add_attribute(NAME, name.name.to_string())
|
||||||
.add_attribute(name.name.address.event_tag(), name.name.address.to_string())
|
.add_attribute(name.address.event_tag(), name.address.to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_delete_name_event(name: RegisteredName) -> Event {
|
pub fn new_delete_name_event(name_id: NameId, name: RegisteredName) -> Event {
|
||||||
Event::new(NameEventType::DeleteId)
|
Event::new(NameEventType::DeleteId)
|
||||||
.add_attribute(ACTION, NameEventType::DeleteName)
|
.add_attribute(ACTION, NameEventType::DeleteName)
|
||||||
.add_attribute(NAME_ID, name.id.to_string())
|
.add_attribute(NAME_ID, name_id.to_string())
|
||||||
.add_attribute(NAME, name.name.name.to_string())
|
.add_attribute(NAME, name.name.to_string())
|
||||||
.add_attribute(name.name.address.event_tag(), name.name.address.to_string())
|
.add_attribute(name.address.event_tag(), name.address.to_string())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn new_update_deposit_required_event(deposit_required: Coin) -> Event {
|
pub fn new_update_deposit_required_event(deposit_required: Coin) -> Event {
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
pub mod error;
|
|
||||||
pub mod events;
|
pub mod events;
|
||||||
pub mod msg;
|
pub mod msg;
|
||||||
pub mod response;
|
pub mod response;
|
||||||
pub mod signing_types;
|
|
||||||
pub mod types;
|
pub mod types;
|
||||||
|
|
||||||
// Re-export all types at the top-level
|
// Re-export all types at the top-level
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
use crate::{Address, NameDetails, NameId, NymName};
|
use crate::{Address, NameId, NymName};
|
||||||
use cosmwasm_std::Coin;
|
use cosmwasm_std::Coin;
|
||||||
use nym_contracts_common::signing::MessageSignature;
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
|
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
|
||||||
@@ -23,10 +22,7 @@ pub struct MigrateMsg {}
|
|||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
pub enum ExecuteMsg {
|
pub enum ExecuteMsg {
|
||||||
/// Announcing a name pointing to a nym-address
|
/// Announcing a name pointing to a nym-address
|
||||||
Register {
|
Register { name: NymName, address: Address },
|
||||||
name: NameDetails,
|
|
||||||
owner_signature: MessageSignature,
|
|
||||||
},
|
|
||||||
/// Delete a name entry by id
|
/// Delete a name entry by id
|
||||||
DeleteId { name_id: NameId },
|
DeleteId { name_id: NameId },
|
||||||
/// Delete a name entry by name
|
/// Delete a name entry by name
|
||||||
@@ -42,11 +38,8 @@ impl ExecuteMsg {
|
|||||||
|
|
||||||
pub fn default_memo(&self) -> String {
|
pub fn default_memo(&self) -> String {
|
||||||
match self {
|
match self {
|
||||||
ExecuteMsg::Register {
|
ExecuteMsg::Register { name, address } => {
|
||||||
name,
|
format!("registering {address} as name: {name}")
|
||||||
owner_signature: _,
|
|
||||||
} => {
|
|
||||||
format!("registering {} as name: {}", name.address, name.name)
|
|
||||||
}
|
}
|
||||||
ExecuteMsg::DeleteId { name_id } => {
|
ExecuteMsg::DeleteId { name_id } => {
|
||||||
format!("deleting name with id {name_id}")
|
format!("deleting name with id {name_id}")
|
||||||
@@ -82,9 +75,6 @@ pub enum QueryMsg {
|
|||||||
limit: Option<u32>,
|
limit: Option<u32>,
|
||||||
start_after: Option<NameId>,
|
start_after: Option<NameId>,
|
||||||
},
|
},
|
||||||
SigningNonce {
|
|
||||||
address: String,
|
|
||||||
},
|
|
||||||
Config {},
|
Config {},
|
||||||
GetContractVersion {},
|
GetContractVersion {},
|
||||||
#[serde(rename = "get_cw2_contract_version")]
|
#[serde(rename = "get_cw2_contract_version")]
|
||||||
|
|||||||
@@ -1,22 +1,36 @@
|
|||||||
use crate::{NameId, RegisteredName};
|
use crate::{msg::ExecuteMsg, NameEntry, NameId, RegisteredName};
|
||||||
use cosmwasm_std::Coin;
|
use cosmwasm_std::Coin;
|
||||||
use schemars::JsonSchema;
|
use schemars::JsonSchema;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
|
/// Like [`NameEntry`] but since it's a response type the name is an option depending on if
|
||||||
|
/// the name exists or not.
|
||||||
|
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
|
||||||
|
#[serde(rename_all = "snake_case")]
|
||||||
|
pub struct NameEntryResponse {
|
||||||
|
pub name_id: NameId,
|
||||||
|
pub name: Option<RegisteredName>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
|
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
pub struct NamesListResponse {
|
pub struct NamesListResponse {
|
||||||
pub names: Vec<RegisteredName>,
|
pub names: Vec<NameEntry>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NamesListResponse {
|
impl NamesListResponse {
|
||||||
pub fn new(names: Vec<RegisteredName>) -> NamesListResponse {
|
pub fn new(names: Vec<(NameId, RegisteredName)>) -> NamesListResponse {
|
||||||
NamesListResponse { names }
|
NamesListResponse {
|
||||||
|
names: names
|
||||||
|
.into_iter()
|
||||||
|
.map(|(name_id, name)| NameEntry::new(name_id, name))
|
||||||
|
.collect(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<&[RegisteredName]> for NamesListResponse {
|
impl From<&[NameEntry]> for NamesListResponse {
|
||||||
fn from(names: &[RegisteredName]) -> Self {
|
fn from(names: &[NameEntry]) -> Self {
|
||||||
NamesListResponse {
|
NamesListResponse {
|
||||||
names: names.to_vec(),
|
names: names.to_vec(),
|
||||||
}
|
}
|
||||||
@@ -26,17 +40,21 @@ impl From<&[RegisteredName]> for NamesListResponse {
|
|||||||
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
|
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
pub struct PagedNamesListResponse {
|
pub struct PagedNamesListResponse {
|
||||||
pub names: Vec<RegisteredName>,
|
pub names: Vec<NameEntry>,
|
||||||
pub per_page: usize,
|
pub per_page: usize,
|
||||||
pub start_next_after: Option<NameId>,
|
pub start_next_after: Option<NameId>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PagedNamesListResponse {
|
impl PagedNamesListResponse {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
names: Vec<RegisteredName>,
|
names: Vec<(NameId, RegisteredName)>,
|
||||||
per_page: usize,
|
per_page: usize,
|
||||||
start_next_after: Option<NameId>,
|
start_next_after: Option<NameId>,
|
||||||
) -> PagedNamesListResponse {
|
) -> PagedNamesListResponse {
|
||||||
|
let names = names
|
||||||
|
.into_iter()
|
||||||
|
.map(|(name_id, name)| NameEntry::new(name_id, name))
|
||||||
|
.collect();
|
||||||
PagedNamesListResponse {
|
PagedNamesListResponse {
|
||||||
names,
|
names,
|
||||||
per_page,
|
per_page,
|
||||||
@@ -50,3 +68,12 @@ impl PagedNamesListResponse {
|
|||||||
pub struct ConfigResponse {
|
pub struct ConfigResponse {
|
||||||
pub deposit_required: Coin,
|
pub deposit_required: Coin,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl From<RegisteredName> for ExecuteMsg {
|
||||||
|
fn from(name: RegisteredName) -> Self {
|
||||||
|
ExecuteMsg::Register {
|
||||||
|
name: name.name,
|
||||||
|
address: name.address,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
use cosmwasm_std::{Addr, Coin};
|
|
||||||
use nym_contracts_common::signing::{
|
|
||||||
ContractMessageContent, MessageType, Nonce, SignableMessage, SigningPurpose,
|
|
||||||
};
|
|
||||||
use serde::Serialize;
|
|
||||||
|
|
||||||
use crate::NameDetails;
|
|
||||||
|
|
||||||
pub type SignableNameRegisterMsg = SignableMessage<ContractMessageContent<NameRegister>>;
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
|
||||||
pub struct NameRegister {
|
|
||||||
name: NameDetails,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl SigningPurpose for NameRegister {
|
|
||||||
fn message_type() -> MessageType {
|
|
||||||
MessageType::new("name-register")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn construct_name_register_sign_payload(
|
|
||||||
nonce: Nonce,
|
|
||||||
sender: Addr,
|
|
||||||
deposit: Coin,
|
|
||||||
name: NameDetails,
|
|
||||||
) -> SignableNameRegisterMsg {
|
|
||||||
let payload = NameRegister { name };
|
|
||||||
let proxy = None;
|
|
||||||
let content = ContractMessageContent::new(sender, proxy, vec![deposit], payload);
|
|
||||||
SignableMessage::new(nonce, content)
|
|
||||||
}
|
|
||||||
@@ -1,48 +1,24 @@
|
|||||||
use std::fmt::{Display, Formatter};
|
use std::fmt::{Display, Formatter};
|
||||||
|
|
||||||
use cosmwasm_std::{Addr, Coin};
|
use cosmwasm_std::{Addr, Coin};
|
||||||
use nym_contracts_common::IdentityKey;
|
|
||||||
use schemars::JsonSchema;
|
use schemars::JsonSchema;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
/// The directory of names are indexed by [`NameId`].
|
/// The directory of services are indexed by [`ServiceId`].
|
||||||
pub type NameId = u32;
|
pub type NameId = u32;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, PartialEq, Debug, JsonSchema)]
|
#[derive(Serialize, Deserialize, Clone, PartialEq, Debug, JsonSchema)]
|
||||||
pub struct RegisteredName {
|
pub struct RegisteredName {
|
||||||
/// Unique id assigned to the registerd name.
|
|
||||||
pub id: NameId,
|
|
||||||
|
|
||||||
/// The registerd name details.
|
|
||||||
pub name: NameDetails,
|
|
||||||
|
|
||||||
/// name owner.
|
|
||||||
pub owner: Addr,
|
|
||||||
|
|
||||||
/// Block height at which the name was added.
|
|
||||||
pub block_height: u64,
|
|
||||||
|
|
||||||
/// The deposit used to announce the name.
|
|
||||||
pub deposit: Coin,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl RegisteredName {
|
|
||||||
// Shortcut for getting the actual name
|
|
||||||
pub fn entry(&self) -> &NymName {
|
|
||||||
&self.name.name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, PartialEq, Debug, JsonSchema)]
|
|
||||||
pub struct NameDetails {
|
|
||||||
/// The name pointing to the nym address
|
/// The name pointing to the nym address
|
||||||
pub name: NymName,
|
pub name: NymName,
|
||||||
|
/// The address of the service.
|
||||||
/// The address of the name alias.
|
|
||||||
pub address: Address,
|
pub address: Address,
|
||||||
|
/// Service owner.
|
||||||
/// The identity key of the registered name.
|
pub owner: Addr,
|
||||||
pub identity_key: IdentityKey,
|
/// Block height at which the service was added.
|
||||||
|
pub block_height: u64,
|
||||||
|
/// The deposit used to announce the service.
|
||||||
|
pub deposit: Coin,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// String representation of a nym address, which is of the form
|
/// String representation of a nym address, which is of the form
|
||||||
@@ -92,7 +68,6 @@ pub enum NymNameError {
|
|||||||
InvalidName,
|
InvalidName,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Defines what names are allowed
|
|
||||||
fn is_valid_name_char(c: char) -> bool {
|
fn is_valid_name_char(c: char) -> bool {
|
||||||
// Normal lowercase letters
|
// Normal lowercase letters
|
||||||
(c.is_alphabetic() && c.is_lowercase())
|
(c.is_alphabetic() && c.is_lowercase())
|
||||||
@@ -123,6 +98,20 @@ impl Display for NymName {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// [`RegisterdName`] together with the assigned [`NameId`].
|
||||||
|
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, JsonSchema)]
|
||||||
|
#[serde(rename_all = "snake_case")]
|
||||||
|
pub struct NameEntry {
|
||||||
|
pub name_id: NameId,
|
||||||
|
pub name: RegisteredName,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl NameEntry {
|
||||||
|
pub fn new(name_id: NameId, name: RegisteredName) -> Self {
|
||||||
|
Self { name_id, name }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::NymName;
|
use super::NymName;
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ edition = "2021"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
cosmwasm-std = { workspace = true }
|
cosmwasm-std = { workspace = true }
|
||||||
cw-controllers = { workspace = true }
|
|
||||||
cw-utils = { workspace = true }
|
|
||||||
nym-contracts-common = { path = "../contracts-common", version = "0.5.0" }
|
nym-contracts-common = { path = "../contracts-common", version = "0.5.0" }
|
||||||
schemars = "0.8"
|
schemars = "0.8"
|
||||||
serde = { workspace = true, features = ["derive"] }
|
serde = { workspace = true, features = ["derive"] }
|
||||||
thiserror = { workspace = true }
|
thiserror = { workspace = true }
|
||||||
|
cw-utils = { workspace = true }
|
||||||
|
cw-controllers = { workspace = true }
|
||||||
|
|||||||
@@ -38,4 +38,4 @@ serde = ["serde_crate", "serde_bytes", "ed25519-dalek/serde", "x25519-dalek/serd
|
|||||||
asymmetric = ["x25519-dalek", "ed25519-dalek", "zeroize"]
|
asymmetric = ["x25519-dalek", "ed25519-dalek", "zeroize"]
|
||||||
hashing = ["blake3", "digest", "hkdf", "hmac", "generic-array"]
|
hashing = ["blake3", "digest", "hkdf", "hmac", "generic-array"]
|
||||||
symmetric = ["aes", "ctr", "cipher", "generic-array"]
|
symmetric = ["aes", "ctr", "cipher", "generic-array"]
|
||||||
sphinx-only = ["nym-sphinx-types/sphinx-only"]
|
wasm-contract = ["nym-sphinx-types/wasm-contract"]
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ where
|
|||||||
T: Serialize + Clone,
|
T: Serialize + Clone,
|
||||||
{
|
{
|
||||||
let Some(node) = self.base_topology.find_mix(mix_id) else {
|
let Some(node) = self.base_topology.find_mix(mix_id) else {
|
||||||
return Err(NetworkTestingError::NonExistentMixnode { mix_id });
|
return Err(NetworkTestingError::NonExistentMixnode {mix_id})
|
||||||
};
|
};
|
||||||
|
|
||||||
self.mixnode_test_packets(&node.clone(), msg_ext, test_packets, custom_recipient)
|
self.mixnode_test_packets(&node.clone(), msg_ext, test_packets, custom_recipient)
|
||||||
@@ -170,13 +170,8 @@ where
|
|||||||
where
|
where
|
||||||
T: Serialize + Clone,
|
T: Serialize + Clone,
|
||||||
{
|
{
|
||||||
let Some(node) = self
|
let Some(node) = self.base_topology.find_mix_by_identity(&encoded_mix_identity) else {
|
||||||
.base_topology
|
return Err(NetworkTestingError::NonExistentMixnodeIdentity { mix_identity: encoded_mix_identity })
|
||||||
.find_mix_by_identity(&encoded_mix_identity)
|
|
||||||
else {
|
|
||||||
return Err(NetworkTestingError::NonExistentMixnodeIdentity {
|
|
||||||
mix_identity: encoded_mix_identity,
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
self.mixnode_test_packets(&node.clone(), msg_ext, test_packets, custom_recipient)
|
self.mixnode_test_packets(&node.clone(), msg_ext, test_packets, custom_recipient)
|
||||||
@@ -217,9 +212,7 @@ where
|
|||||||
T: Serialize + Clone,
|
T: Serialize + Clone,
|
||||||
{
|
{
|
||||||
let Some(node) = self.base_topology.find_gateway(&encoded_gateway_identity) else {
|
let Some(node) = self.base_topology.find_gateway(&encoded_gateway_identity) else {
|
||||||
return Err(NetworkTestingError::NonExistentGateway {
|
return Err(NetworkTestingError::NonExistentGateway { gateway_identity: encoded_gateway_identity })
|
||||||
gateway_identity: encoded_gateway_identity,
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
self.gateway_test_packets(&node.clone(), msg_ext, test_packets, custom_recipient)
|
self.gateway_test_packets(&node.clone(), msg_ext, test_packets, custom_recipient)
|
||||||
|
|||||||
@@ -14,4 +14,4 @@ thiserror = "1"
|
|||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["nym-outfox"]
|
default = ["nym-outfox"]
|
||||||
sphinx-only = []
|
wasm-contract = []
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
|
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
#[cfg(not(feature = "sphinx-only"))]
|
#[cfg(not(feature = "wasm-contract"))]
|
||||||
pub use nym_outfox::{
|
pub use nym_outfox::{
|
||||||
constants::MIN_PACKET_SIZE, constants::MIX_PARAMS_LEN, constants::OUTFOX_PACKET_OVERHEAD,
|
constants::MIN_PACKET_SIZE, constants::MIX_PARAMS_LEN, constants::OUTFOX_PACKET_OVERHEAD,
|
||||||
error::OutfoxError,
|
error::OutfoxError,
|
||||||
};
|
};
|
||||||
// re-exporting types and constants available in sphinx
|
// re-exporting types and constants available in sphinx
|
||||||
#[cfg(not(feature = "sphinx-only"))]
|
#[cfg(not(feature = "wasm-contract"))]
|
||||||
use nym_outfox::packet::{OutfoxPacket, OutfoxProcessedPacket};
|
use nym_outfox::packet::{OutfoxPacket, OutfoxProcessedPacket};
|
||||||
pub use sphinx_packet::{
|
pub use sphinx_packet::{
|
||||||
constants::{
|
constants::{
|
||||||
@@ -32,7 +32,7 @@ pub enum NymPacketError {
|
|||||||
Sphinx(#[from] sphinx_packet::Error),
|
Sphinx(#[from] sphinx_packet::Error),
|
||||||
|
|
||||||
#[error("Outfox error: {0}")]
|
#[error("Outfox error: {0}")]
|
||||||
#[cfg(not(feature = "sphinx-only"))]
|
#[cfg(not(feature = "wasm-contract"))]
|
||||||
Outfox(#[from] nym_outfox::error::OutfoxError),
|
Outfox(#[from] nym_outfox::error::OutfoxError),
|
||||||
|
|
||||||
#[error("{0}")]
|
#[error("{0}")]
|
||||||
@@ -42,13 +42,13 @@ pub enum NymPacketError {
|
|||||||
#[allow(clippy::large_enum_variant)]
|
#[allow(clippy::large_enum_variant)]
|
||||||
pub enum NymPacket {
|
pub enum NymPacket {
|
||||||
Sphinx(SphinxPacket),
|
Sphinx(SphinxPacket),
|
||||||
#[cfg(not(feature = "sphinx-only"))]
|
#[cfg(not(feature = "wasm-contract"))]
|
||||||
Outfox(OutfoxPacket),
|
Outfox(OutfoxPacket),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum NymProcessedPacket {
|
pub enum NymProcessedPacket {
|
||||||
Sphinx(ProcessedPacket),
|
Sphinx(ProcessedPacket),
|
||||||
#[cfg(not(feature = "sphinx-only"))]
|
#[cfg(not(feature = "wasm-contract"))]
|
||||||
Outfox(OutfoxProcessedPacket),
|
Outfox(OutfoxProcessedPacket),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -59,7 +59,6 @@ impl fmt::Debug for NymPacket {
|
|||||||
.debug_struct("NymPacket::Sphinx")
|
.debug_struct("NymPacket::Sphinx")
|
||||||
.field("len", &packet.len())
|
.field("len", &packet.len())
|
||||||
.finish(),
|
.finish(),
|
||||||
#[cfg(not(feature = "sphinx-only"))]
|
|
||||||
NymPacket::Outfox(packet) => f
|
NymPacket::Outfox(packet) => f
|
||||||
.debug_struct("NymPacket::Outfox")
|
.debug_struct("NymPacket::Outfox")
|
||||||
.field("len", &packet.len())
|
.field("len", &packet.len())
|
||||||
@@ -86,7 +85,6 @@ impl NymPacket {
|
|||||||
Ok(NymPacket::Sphinx(SphinxPacket::from_bytes(bytes)?))
|
Ok(NymPacket::Sphinx(SphinxPacket::from_bytes(bytes)?))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(feature = "sphinx-only"))]
|
|
||||||
pub fn outfox_build<M: AsRef<[u8]>>(
|
pub fn outfox_build<M: AsRef<[u8]>>(
|
||||||
payload: M,
|
payload: M,
|
||||||
route: &[Node],
|
route: &[Node],
|
||||||
@@ -101,7 +99,6 @@ impl NymPacket {
|
|||||||
)?))
|
)?))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(feature = "sphinx-only"))]
|
|
||||||
pub fn outfox_from_bytes(bytes: &[u8]) -> Result<NymPacket, NymPacketError> {
|
pub fn outfox_from_bytes(bytes: &[u8]) -> Result<NymPacket, NymPacketError> {
|
||||||
Ok(NymPacket::Outfox(OutfoxPacket::try_from(bytes)?))
|
Ok(NymPacket::Outfox(OutfoxPacket::try_from(bytes)?))
|
||||||
}
|
}
|
||||||
@@ -109,7 +106,6 @@ impl NymPacket {
|
|||||||
pub fn len(&self) -> usize {
|
pub fn len(&self) -> usize {
|
||||||
match self {
|
match self {
|
||||||
NymPacket::Sphinx(packet) => packet.len(),
|
NymPacket::Sphinx(packet) => packet.len(),
|
||||||
#[cfg(not(feature = "sphinx-only"))]
|
|
||||||
NymPacket::Outfox(packet) => packet.len(),
|
NymPacket::Outfox(packet) => packet.len(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -121,7 +117,6 @@ impl NymPacket {
|
|||||||
pub fn to_bytes(&self) -> Result<Vec<u8>, NymPacketError> {
|
pub fn to_bytes(&self) -> Result<Vec<u8>, NymPacketError> {
|
||||||
match self {
|
match self {
|
||||||
NymPacket::Sphinx(packet) => Ok(packet.to_bytes()),
|
NymPacket::Sphinx(packet) => Ok(packet.to_bytes()),
|
||||||
#[cfg(not(feature = "sphinx-only"))]
|
|
||||||
NymPacket::Outfox(packet) => Ok(packet.to_bytes()?),
|
NymPacket::Outfox(packet) => Ok(packet.to_bytes()?),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -134,7 +129,6 @@ impl NymPacket {
|
|||||||
NymPacket::Sphinx(packet) => {
|
NymPacket::Sphinx(packet) => {
|
||||||
Ok(NymProcessedPacket::Sphinx(packet.process(node_secret_key)?))
|
Ok(NymProcessedPacket::Sphinx(packet.process(node_secret_key)?))
|
||||||
}
|
}
|
||||||
#[cfg(not(feature = "sphinx-only"))]
|
|
||||||
NymPacket::Outfox(mut packet) => {
|
NymPacket::Outfox(mut packet) => {
|
||||||
let next_address = packet.decode_next_layer(node_secret_key)?;
|
let next_address = packet.decode_next_layer(node_secret_key)?;
|
||||||
Ok(NymProcessedPacket::Outfox(OutfoxProcessedPacket::new(
|
Ok(NymProcessedPacket::Outfox(OutfoxProcessedPacket::new(
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ impl SocksRequest {
|
|||||||
// ATYP
|
// ATYP
|
||||||
let Some(addr_type) = AddrType::from(packet[3] as usize) else {
|
let Some(addr_type) = AddrType::from(packet[3] as usize) else {
|
||||||
error!("No Addr");
|
error!("No Addr");
|
||||||
return Err(ResponseCodeV5::AddrTypeNotSupported.into());
|
return Err(ResponseCodeV5::AddrTypeNotSupported.into())
|
||||||
};
|
};
|
||||||
|
|
||||||
// DST.ADDR
|
// DST.ADDR
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ impl StoreCipher<Aes256Gcm> {
|
|||||||
exported.ciphertext_info.ciphertext(),
|
exported.ciphertext_info.ciphertext(),
|
||||||
) else {
|
) else {
|
||||||
key.zeroize();
|
key.zeroize();
|
||||||
return Err(Error::InvalidImportPassphrase);
|
return Err(Error::InvalidImportPassphrase)
|
||||||
};
|
};
|
||||||
|
|
||||||
// if we successfully decrypted aes256gcm ciphertext, it's almost certainly correct
|
// if we successfully decrypted aes256gcm ciphertext, it's almost certainly correct
|
||||||
|
|||||||
@@ -22,9 +22,6 @@ pub enum StorageError {
|
|||||||
message: String,
|
message: String,
|
||||||
},
|
},
|
||||||
|
|
||||||
#[error("FATAL ERROR: storage key is somehow present {count} times in the table!")]
|
|
||||||
DuplicateKey { count: u32 },
|
|
||||||
|
|
||||||
#[error("encountered issue with our storage encryption layer: {source}")]
|
#[error("encountered issue with our storage encryption layer: {source}")]
|
||||||
CryptoStorageError {
|
CryptoStorageError {
|
||||||
#[from]
|
#[from]
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
use crate::console_log;
|
use crate::console_log;
|
||||||
use crate::storage::cipher_export::StoredExportedStoreCipher;
|
use crate::storage::cipher_export::StoredExportedStoreCipher;
|
||||||
use crate::storage::error::StorageError;
|
use crate::storage::error::StorageError;
|
||||||
use futures::TryFutureExt;
|
|
||||||
use indexed_db_futures::IdbDatabase;
|
use indexed_db_futures::IdbDatabase;
|
||||||
use nym_store_cipher::{
|
use nym_store_cipher::{
|
||||||
Aes256Gcm, Algorithm, EncryptedData, KdfInfo, KeySizeUser, Params, StoreCipher, Unsigned,
|
Aes256Gcm, Algorithm, EncryptedData, KdfInfo, KeySizeUser, Params, StoreCipher, Unsigned,
|
||||||
@@ -88,23 +87,6 @@ impl WasmStorage {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn exists(db_name: &str) -> Result<bool, StorageError> {
|
|
||||||
let db_req: OpenDbRequest = IdbDatabase::open(db_name)?;
|
|
||||||
let db: IdbDatabase = db_req.into_future().await?;
|
|
||||||
|
|
||||||
// if the db was already created before, at the very least cipher info store should exist,
|
|
||||||
// thus the iterator should return at least one value
|
|
||||||
let some_stores_exist = db.object_store_names().next().is_some();
|
|
||||||
|
|
||||||
// that's super annoying - we have to do cleanup because opening db creates it
|
|
||||||
// (if it didn't exist before)
|
|
||||||
if !some_stores_exist {
|
|
||||||
db.delete()?.into_future().await?
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(some_stores_exist)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn serialize_value<T: Serialize>(&self, value: &T) -> Result<JsValue, StorageError> {
|
pub fn serialize_value<T: Serialize>(&self, value: &T) -> Result<JsValue, StorageError> {
|
||||||
if let Some(cipher) = &self.store_cipher {
|
if let Some(cipher) = &self.store_cipher {
|
||||||
let encrypted = cipher.encrypt_json_value(value)?;
|
let encrypted = cipher.encrypt_json_value(value)?;
|
||||||
@@ -152,35 +134,6 @@ impl WasmStorage {
|
|||||||
.store_value_raw(store, key, &self.serialize_value(&value)?)
|
.store_value_raw(store, key, &self.serialize_value(&value)?)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn remove_value<K>(&self, store: &str, key: K) -> Result<(), StorageError>
|
|
||||||
where
|
|
||||||
K: wasm_bindgen::JsCast,
|
|
||||||
{
|
|
||||||
self.inner.remove_value_raw(store, key).await
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn has_value<K>(&self, store: &str, key: K) -> Result<bool, StorageError>
|
|
||||||
where
|
|
||||||
K: wasm_bindgen::JsCast,
|
|
||||||
{
|
|
||||||
match self.key_count(store, key).await? {
|
|
||||||
n if n == 0 => Ok(false),
|
|
||||||
n if n == 1 => Ok(true),
|
|
||||||
n => Err(StorageError::DuplicateKey { count: n }),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn key_count<K>(&self, store: &str, key: K) -> Result<u32, StorageError>
|
|
||||||
where
|
|
||||||
K: wasm_bindgen::JsCast,
|
|
||||||
{
|
|
||||||
self.inner.get_key_count(store, key).await
|
|
||||||
}
|
|
||||||
|
|
||||||
pub async fn get_all_keys(&self, store: &str) -> Result<js_sys::Array, StorageError> {
|
|
||||||
self.inner.get_all_keys(store).await
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct IdbWrapper(IdbDatabase);
|
struct IdbWrapper(IdbDatabase);
|
||||||
@@ -216,42 +169,6 @@ impl IdbWrapper {
|
|||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn remove_value_raw<K>(&self, store: &str, key: K) -> Result<(), StorageError>
|
|
||||||
where
|
|
||||||
K: wasm_bindgen::JsCast,
|
|
||||||
{
|
|
||||||
self.0
|
|
||||||
.transaction_on_one_with_mode(store, IdbTransactionMode::Readwrite)?
|
|
||||||
.object_store(store)?
|
|
||||||
.delete_owned(key)?
|
|
||||||
.into_future()
|
|
||||||
.await
|
|
||||||
.map_err(Into::into)
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn get_key_count<K>(&self, store: &str, key: K) -> Result<u32, StorageError>
|
|
||||||
where
|
|
||||||
K: wasm_bindgen::JsCast,
|
|
||||||
{
|
|
||||||
self.0
|
|
||||||
.transaction_on_one_with_mode(store, IdbTransactionMode::Readwrite)?
|
|
||||||
.object_store(store)?
|
|
||||||
.count_with_key_owned(key)?
|
|
||||||
.into_future()
|
|
||||||
.await
|
|
||||||
.map_err(Into::into)
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn get_all_keys(&self, store: &str) -> Result<js_sys::Array, StorageError> {
|
|
||||||
self.0
|
|
||||||
.transaction_on_one_with_mode(store, IdbTransactionMode::Readonly)?
|
|
||||||
.object_store(store)?
|
|
||||||
.get_all_keys()?
|
|
||||||
.into_future()
|
|
||||||
.await
|
|
||||||
.map_err(Into::into)
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn read_exported_cipher_store(
|
async fn read_exported_cipher_store(
|
||||||
&self,
|
&self,
|
||||||
) -> Result<Option<StoredExportedStoreCipher>, StorageError> {
|
) -> Result<Option<StoredExportedStoreCipher>, StorageError> {
|
||||||
|
|||||||
Generated
+2
-9
@@ -1361,7 +1361,6 @@ name = "nym-name-service"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bs58",
|
|
||||||
"cosmwasm-std",
|
"cosmwasm-std",
|
||||||
"cw-controllers",
|
"cw-controllers",
|
||||||
"cw-multi-test",
|
"cw-multi-test",
|
||||||
@@ -1369,10 +1368,8 @@ dependencies = [
|
|||||||
"cw-utils",
|
"cw-utils",
|
||||||
"cw2",
|
"cw2",
|
||||||
"nym-contracts-common",
|
"nym-contracts-common",
|
||||||
"nym-crypto",
|
|
||||||
"nym-name-service-common",
|
"nym-name-service-common",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
"rand_chacha 0.2.2",
|
|
||||||
"rstest",
|
"rstest",
|
||||||
"semver",
|
"semver",
|
||||||
"serde",
|
"serde",
|
||||||
@@ -1385,12 +1382,8 @@ name = "nym-name-service-common"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cosmwasm-std",
|
"cosmwasm-std",
|
||||||
"cw-controllers",
|
|
||||||
"cw-utils",
|
|
||||||
"nym-contracts-common",
|
|
||||||
"schemars",
|
"schemars",
|
||||||
"serde",
|
"serde",
|
||||||
"thiserror",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -1573,9 +1566,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.63"
|
version = "1.0.52"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
|
checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -66,32 +66,3 @@ pub fn query(deps: Deps<'_>, _env: Env, msg: QueryMsg) -> Result<QueryResponse,
|
|||||||
pub fn migrate(_deps: DepsMut<'_>, _env: Env, _msg: MigrateMsg) -> Result<Response, ContractError> {
|
pub fn migrate(_deps: DepsMut<'_>, _env: Env, _msg: MigrateMsg) -> Result<Response, ContractError> {
|
||||||
Ok(Default::default())
|
Ok(Default::default())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod tests {
|
|
||||||
use super::*;
|
|
||||||
use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info};
|
|
||||||
use cosmwasm_std::Addr;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn initialize_contract() {
|
|
||||||
let mut deps = mock_dependencies();
|
|
||||||
let env = mock_env();
|
|
||||||
|
|
||||||
let init_msg = InstantiateMsg {
|
|
||||||
group_addr: "group_addr".to_string(),
|
|
||||||
mix_denom: "uatom".to_string(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let sender = mock_info("sender", &[]);
|
|
||||||
let res = instantiate(deps.as_mut(), env, sender, init_msg);
|
|
||||||
assert!(res.is_ok());
|
|
||||||
|
|
||||||
let expected_state = State {
|
|
||||||
group_addr: Cw4Contract::new(Addr::unchecked("group_addr")),
|
|
||||||
mix_denom: "uatom".to_string(),
|
|
||||||
};
|
|
||||||
let state = STATE.load(deps.as_ref().storage).unwrap();
|
|
||||||
assert_eq!(state, expected_state);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -13,9 +13,6 @@ pub enum ContractError {
|
|||||||
#[error("Group contract invalid address '{addr}'")]
|
#[error("Group contract invalid address '{addr}'")]
|
||||||
InvalidGroup { addr: String },
|
InvalidGroup { addr: String },
|
||||||
|
|
||||||
#[error("This potential ephemera peer is not in the ephemera group")]
|
|
||||||
Unauthorized,
|
|
||||||
|
|
||||||
#[error("This sender is already registered")]
|
#[error("This sender is already registered")]
|
||||||
AlreadyRegistered,
|
AlreadyRegistered,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,4 +5,3 @@ pub mod contract;
|
|||||||
pub mod error;
|
pub mod error;
|
||||||
mod peers;
|
mod peers;
|
||||||
mod state;
|
mod state;
|
||||||
mod support;
|
|
||||||
|
|||||||
@@ -33,132 +33,3 @@ pub fn query_peers_paged(
|
|||||||
|
|
||||||
Ok(PagedPeerResponse::new(peers, limit, start_next_after))
|
Ok(PagedPeerResponse::new(peers, limit, start_next_after))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
pub(crate) mod tests {
|
|
||||||
use super::*;
|
|
||||||
use crate::peers::storage::{PEERS_PAGE_DEFAULT_LIMIT, PEERS_PAGE_MAX_LIMIT};
|
|
||||||
use crate::support::tests::fixtures::peer_fixture;
|
|
||||||
use crate::support::tests::helpers::init_contract;
|
|
||||||
use cosmwasm_std::DepsMut;
|
|
||||||
|
|
||||||
fn fill_peers(deps: DepsMut<'_>, size: usize) {
|
|
||||||
for n in 0..size {
|
|
||||||
let peer = peer_fixture(&format!("peer{}", n));
|
|
||||||
PEERS
|
|
||||||
.save(deps.storage, peer.cosmos_address.clone(), &peer)
|
|
||||||
.unwrap();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn remove_peers(deps: DepsMut<'_>, size: usize) {
|
|
||||||
for n in 0..size {
|
|
||||||
let peer = peer_fixture(&format!("peer{}", n));
|
|
||||||
PEERS.remove(deps.storage, peer.cosmos_address);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn peers_empty_on_init() {
|
|
||||||
let deps = init_contract();
|
|
||||||
|
|
||||||
let page1 = query_peers_paged(deps.as_ref(), None, None).unwrap();
|
|
||||||
assert_eq!(0, page1.peers.len() as u32);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn peers_paged_retrieval_obeys_limits() {
|
|
||||||
let mut deps = init_contract();
|
|
||||||
let limit = 2;
|
|
||||||
|
|
||||||
fill_peers(deps.as_mut(), 1000);
|
|
||||||
|
|
||||||
let page1 = query_peers_paged(deps.as_ref(), None, Option::from(limit)).unwrap();
|
|
||||||
assert_eq!(limit, page1.peers.len() as u32);
|
|
||||||
|
|
||||||
remove_peers(deps.as_mut(), 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn peers_paged_retrieval_has_default_limit() {
|
|
||||||
let mut deps = init_contract();
|
|
||||||
|
|
||||||
fill_peers(deps.as_mut(), 1000);
|
|
||||||
|
|
||||||
// query without explicitly setting a limit
|
|
||||||
let page1 = query_peers_paged(deps.as_ref(), None, None).unwrap();
|
|
||||||
|
|
||||||
assert_eq!(PEERS_PAGE_DEFAULT_LIMIT, page1.peers.len() as u32);
|
|
||||||
|
|
||||||
remove_peers(deps.as_mut(), 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn peers_paged_retrieval_has_max_limit() {
|
|
||||||
let mut deps = init_contract();
|
|
||||||
|
|
||||||
// query with a crazily high limit in an attempt to use too many resources
|
|
||||||
let crazy_limit = 1000 * PEERS_PAGE_MAX_LIMIT;
|
|
||||||
|
|
||||||
fill_peers(deps.as_mut(), 1000);
|
|
||||||
|
|
||||||
let page1 = query_peers_paged(deps.as_ref(), None, Option::from(crazy_limit)).unwrap();
|
|
||||||
|
|
||||||
// we default to a decent sized upper bound instead
|
|
||||||
let expected_limit = PEERS_PAGE_MAX_LIMIT;
|
|
||||||
assert_eq!(expected_limit, page1.peers.len() as u32);
|
|
||||||
|
|
||||||
remove_peers(deps.as_mut(), 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn peers_pagination_works() {
|
|
||||||
let mut deps = init_contract();
|
|
||||||
|
|
||||||
let per_page = 2;
|
|
||||||
|
|
||||||
fill_peers(deps.as_mut(), 1);
|
|
||||||
let page1 = query_peers_paged(deps.as_ref(), None, Option::from(per_page)).unwrap();
|
|
||||||
|
|
||||||
// page should have 1 result on it
|
|
||||||
assert_eq!(1, page1.peers.len());
|
|
||||||
remove_peers(deps.as_mut(), 1);
|
|
||||||
|
|
||||||
fill_peers(deps.as_mut(), 2);
|
|
||||||
// page1 should have 2 results on it
|
|
||||||
let page1 = query_peers_paged(deps.as_ref(), None, Option::from(per_page)).unwrap();
|
|
||||||
assert_eq!(2, page1.peers.len());
|
|
||||||
remove_peers(deps.as_mut(), 2);
|
|
||||||
|
|
||||||
fill_peers(deps.as_mut(), 3);
|
|
||||||
// page1 still has 2 results
|
|
||||||
let page1 = query_peers_paged(deps.as_ref(), None, Option::from(per_page)).unwrap();
|
|
||||||
assert_eq!(2, page1.peers.len());
|
|
||||||
|
|
||||||
// retrieving the next page should start after the last key on this page
|
|
||||||
let start_after = page1.start_next_after.unwrap();
|
|
||||||
let page2 = query_peers_paged(
|
|
||||||
deps.as_ref(),
|
|
||||||
Option::from(start_after.to_string()),
|
|
||||||
Option::from(per_page),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
assert_eq!(1, page2.peers.len());
|
|
||||||
remove_peers(deps.as_mut(), 3);
|
|
||||||
|
|
||||||
fill_peers(deps.as_mut(), 4);
|
|
||||||
let page1 = query_peers_paged(deps.as_ref(), None, Option::from(per_page)).unwrap();
|
|
||||||
let start_after = page1.start_next_after.unwrap();
|
|
||||||
let page2 = query_peers_paged(
|
|
||||||
deps.as_ref(),
|
|
||||||
Option::from(start_after.to_string()),
|
|
||||||
Option::from(per_page),
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
// now we have 2 pages, with 2 results on the second page
|
|
||||||
assert_eq!(2, page2.peers.len());
|
|
||||||
remove_peers(deps.as_mut(), 4);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
use crate::error::ContractError;
|
use crate::error::ContractError;
|
||||||
use crate::peers::storage::PEERS;
|
use crate::peers::storage::PEERS;
|
||||||
use crate::state::STATE;
|
|
||||||
use cosmwasm_std::{DepsMut, MessageInfo, Response};
|
use cosmwasm_std::{DepsMut, MessageInfo, Response};
|
||||||
use nym_ephemera_common::types::JsonPeerInfo;
|
use nym_ephemera_common::types::JsonPeerInfo;
|
||||||
|
|
||||||
@@ -13,51 +12,9 @@ pub fn try_register_peer(
|
|||||||
peer_info: JsonPeerInfo,
|
peer_info: JsonPeerInfo,
|
||||||
) -> Result<Response, ContractError> {
|
) -> Result<Response, ContractError> {
|
||||||
if PEERS.may_load(deps.storage, info.sender.clone())?.is_none() {
|
if PEERS.may_load(deps.storage, info.sender.clone())?.is_none() {
|
||||||
if STATE
|
PEERS.save(deps.storage, info.sender, &peer_info)?;
|
||||||
.load(deps.storage)?
|
|
||||||
.group_addr
|
|
||||||
.is_voting_member(&deps.querier, &info.sender, None)?
|
|
||||||
.is_some()
|
|
||||||
{
|
|
||||||
PEERS.save(deps.storage, info.sender, &peer_info)?;
|
|
||||||
Ok(Default::default())
|
|
||||||
} else {
|
|
||||||
Err(ContractError::Unauthorized {})
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
Err(ContractError::AlreadyRegistered)
|
return Err(ContractError::AlreadyRegistered);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
pub(crate) mod tests {
|
|
||||||
use super::*;
|
|
||||||
use crate::support::tests::fixtures::peer_fixture;
|
|
||||||
use crate::support::tests::helpers;
|
|
||||||
use crate::support::tests::helpers::GROUP_MEMBERS;
|
|
||||||
use cosmwasm_std::testing::mock_info;
|
|
||||||
use cw4::Member;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn peer_registration() {
|
|
||||||
let mut deps = helpers::init_contract();
|
|
||||||
let peer_info = peer_fixture("owner");
|
|
||||||
let info = mock_info("owner", &[]);
|
|
||||||
|
|
||||||
let ret = try_register_peer(deps.as_mut(), info.clone(), peer_info.clone()).unwrap_err();
|
|
||||||
assert_eq!(ret, ContractError::Unauthorized);
|
|
||||||
|
|
||||||
GROUP_MEMBERS.lock().unwrap().push((
|
|
||||||
Member {
|
|
||||||
addr: "owner".to_string(),
|
|
||||||
weight: 10,
|
|
||||||
},
|
|
||||||
1,
|
|
||||||
));
|
|
||||||
|
|
||||||
try_register_peer(deps.as_mut(), info.clone(), peer_info.clone()).unwrap();
|
|
||||||
|
|
||||||
let ret = try_register_peer(deps.as_mut(), info, peer_info).unwrap_err();
|
|
||||||
assert_eq!(ret, ContractError::AlreadyRegistered);
|
|
||||||
}
|
}
|
||||||
|
Ok(Default::default())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
pub mod tests;
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
use cosmwasm_std::Addr;
|
|
||||||
use nym_ephemera_common::types::JsonPeerInfo;
|
|
||||||
|
|
||||||
pub const TEST_MIX_DENOM: &str = "unym";
|
|
||||||
|
|
||||||
pub fn peer_fixture(cosmos_address: &str) -> JsonPeerInfo {
|
|
||||||
JsonPeerInfo {
|
|
||||||
cosmos_address: Addr::unchecked(cosmos_address),
|
|
||||||
ip_address: "127.0.0.1".to_string(),
|
|
||||||
public_key: "random_key".to_string(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
use crate::contract::instantiate;
|
|
||||||
use cosmwasm_std::testing::{mock_dependencies, mock_env, mock_info, MockApi, MockQuerier};
|
|
||||||
use cosmwasm_std::{
|
|
||||||
from_binary, to_binary, ContractResult, Empty, MemoryStorage, OwnedDeps, QuerierResult,
|
|
||||||
SystemResult, WasmQuery,
|
|
||||||
};
|
|
||||||
use cw4::{Cw4QueryMsg, Member, MemberListResponse, MemberResponse};
|
|
||||||
use lazy_static::lazy_static;
|
|
||||||
use nym_ephemera_common::msg::InstantiateMsg;
|
|
||||||
use std::sync::Mutex;
|
|
||||||
|
|
||||||
use super::fixtures::TEST_MIX_DENOM;
|
|
||||||
|
|
||||||
pub const ADMIN_ADDRESS: &str = "admin address";
|
|
||||||
pub const GROUP_CONTRACT: &str = "group contract address";
|
|
||||||
|
|
||||||
lazy_static! {
|
|
||||||
pub static ref GROUP_MEMBERS: Mutex<Vec<(Member, u64)>> = Mutex::new(vec![]);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn querier_handler(query: &WasmQuery) -> QuerierResult {
|
|
||||||
let bin = match query {
|
|
||||||
WasmQuery::Smart { contract_addr, msg } => {
|
|
||||||
if contract_addr != GROUP_CONTRACT {
|
|
||||||
panic!("Not supported");
|
|
||||||
}
|
|
||||||
match from_binary(msg) {
|
|
||||||
Ok(Cw4QueryMsg::Member { addr, at_height }) => {
|
|
||||||
let weight = GROUP_MEMBERS.lock().unwrap().iter().find_map(|(m, h)| {
|
|
||||||
if m.addr == addr {
|
|
||||||
if let Some(height) = at_height {
|
|
||||||
if height != *h {
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some(m.weight)
|
|
||||||
} else {
|
|
||||||
None
|
|
||||||
}
|
|
||||||
});
|
|
||||||
to_binary(&MemberResponse { weight }).unwrap()
|
|
||||||
}
|
|
||||||
Ok(Cw4QueryMsg::ListMembers { .. }) => {
|
|
||||||
let members = GROUP_MEMBERS
|
|
||||||
.lock()
|
|
||||||
.unwrap()
|
|
||||||
.iter()
|
|
||||||
.map(|m| m.0.clone())
|
|
||||||
.collect();
|
|
||||||
to_binary(&MemberListResponse { members }).unwrap()
|
|
||||||
}
|
|
||||||
_ => panic!("Not supported"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => panic!("Not supported"),
|
|
||||||
};
|
|
||||||
SystemResult::Ok(ContractResult::Ok(bin))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn init_contract() -> OwnedDeps<MemoryStorage, MockApi, MockQuerier<Empty>> {
|
|
||||||
let mut deps = mock_dependencies();
|
|
||||||
deps.querier.update_wasm(querier_handler);
|
|
||||||
let msg = InstantiateMsg {
|
|
||||||
group_addr: GROUP_CONTRACT.to_string(),
|
|
||||||
mix_denom: TEST_MIX_DENOM.to_string(),
|
|
||||||
};
|
|
||||||
let env = mock_env();
|
|
||||||
let info = mock_info(ADMIN_ADDRESS, &[]);
|
|
||||||
instantiate(deps.as_mut(), env, info, msg).unwrap();
|
|
||||||
deps
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
pub mod fixtures;
|
|
||||||
pub mod helpers;
|
|
||||||
@@ -22,7 +22,7 @@ nym-mixnet-contract = { path = "../mixnet" }
|
|||||||
nym-vesting-contract = { path = "../vesting" }
|
nym-vesting-contract = { path = "../vesting" }
|
||||||
|
|
||||||
# other local dependencies
|
# other local dependencies
|
||||||
nym-crypto = { path = "../../common/crypto", features = ["asymmetric", "rand", "sphinx-only"] }
|
nym-crypto = { path = "../../common/crypto", features = ["asymmetric", "rand", "wasm-contract"] }
|
||||||
|
|
||||||
# external dependencies
|
# external dependencies
|
||||||
rand_chacha = "0.2"
|
rand_chacha = "0.2"
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ semver = { version = "1.0.16", default-features = false }
|
|||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
cosmwasm-schema = { workspace = true }
|
cosmwasm-schema = { workspace = true }
|
||||||
rand_chacha = "0.2"
|
rand_chacha = "0.2"
|
||||||
nym-crypto = { path = "../../common/crypto", features = ["asymmetric", "rand", "sphinx-only"] }
|
nym-crypto = { path = "../../common/crypto", features = ["asymmetric", "rand", "wasm-contract"] }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
vergen = { version = "=7.4.3", default-features = false, features = ["build", "git", "rustc"] }
|
vergen = { version = "=7.4.3", default-features = false, features = ["build", "git", "rustc"] }
|
||||||
|
|||||||
@@ -24,12 +24,8 @@ pub(crate) fn verify_family_join_permit(
|
|||||||
let Some(head_mixnode) = mixnodes_storage::mixnode_bonds()
|
let Some(head_mixnode) = mixnodes_storage::mixnode_bonds()
|
||||||
.idx
|
.idx
|
||||||
.identity_key
|
.identity_key
|
||||||
.item(deps.storage, granter.identity().to_owned())?
|
.item(deps.storage, granter.identity().to_owned())?.map(|record| record.1) else {
|
||||||
.map(|record| record.1)
|
return Err(MixnetContractError::FamilyDoesNotExist { head: granter.identity().to_string() })
|
||||||
else {
|
|
||||||
return Err(MixnetContractError::FamilyDoesNotExist {
|
|
||||||
head: granter.identity().to_string(),
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
let nonce = signing_storage::get_signing_nonce(deps.storage, head_mixnode.owner)?;
|
let nonce = signing_storage::get_signing_nonce(deps.storage, head_mixnode.owner)?;
|
||||||
let msg = construct_family_join_permit(nonce, granter, proxy, member.to_owned());
|
let msg = construct_family_join_permit(nonce, granter, proxy, member.to_owned());
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ fn assert_users<S: Storage, A: Api, Q: Querier>(
|
|||||||
// this is only valid if we are not doing a historical query
|
// this is only valid if we are not doing a historical query
|
||||||
if height.is_none() {
|
if height.is_none() {
|
||||||
// compute expected metrics
|
// compute expected metrics
|
||||||
let weights = [user1_weight, user2_weight, user3_weight];
|
let weights = vec![user1_weight, user2_weight, user3_weight];
|
||||||
let sum: u64 = weights.iter().map(|x| x.unwrap_or_default()).sum();
|
let sum: u64 = weights.iter().map(|x| x.unwrap_or_default()).sum();
|
||||||
let count = weights.iter().filter(|x| x.is_some()).count();
|
let count = weights.iter().filter(|x| x.is_some()).count();
|
||||||
|
|
||||||
@@ -357,7 +357,7 @@ fn hooks_fire() {
|
|||||||
let add_msg2 = ExecuteMsg::AddHook {
|
let add_msg2 = ExecuteMsg::AddHook {
|
||||||
addr: contract2.clone(),
|
addr: contract2.clone(),
|
||||||
};
|
};
|
||||||
for msg in [add_msg, add_msg2] {
|
for msg in vec![add_msg, add_msg2] {
|
||||||
let _ = execute(deps.as_mut(), mock_env(), admin_info.clone(), msg).unwrap();
|
let _ = execute(deps.as_mut(), mock_env(), admin_info.clone(), msg).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ edition = "2021"
|
|||||||
crate-type = ["cdylib", "rlib"]
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bs58 = "0.4.0"
|
|
||||||
cosmwasm-std = { workspace = true }
|
cosmwasm-std = { workspace = true }
|
||||||
cw-controllers = { workspace = true }
|
cw-controllers = { workspace = true }
|
||||||
cw-storage-plus = { workspace = true }
|
cw-storage-plus = { workspace = true }
|
||||||
@@ -25,7 +24,5 @@ vergen = { version = "=7.4.3", default-features = false, features = ["build", "g
|
|||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
anyhow = "1.0.40"
|
anyhow = "1.0.40"
|
||||||
cw-multi-test = { workspace = true }
|
cw-multi-test = { workspace = true }
|
||||||
nym-crypto = { path = "../../common/crypto", features = ["asymmetric", "rand"] }
|
|
||||||
rand = "0.8.5"
|
rand = "0.8.5"
|
||||||
rand_chacha = "0.2"
|
|
||||||
rstest = "0.17.0"
|
rstest = "0.17.0"
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user