Compare commits
No commits in common. "main" and "wallet-v0.1.1" have entirely different histories.
main
...
wallet-v0.
14 changed files with 394 additions and 983 deletions
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"permissions": {
|
|
||||||
"allow": [
|
|
||||||
"Bash(curl -s -o /dev/null -w \"%{http_code}\" \"https://git.misar.io/api/v1/orgs/misaradmin\" -H \"Authorization: token 724b7d6bf7c8696d5c374057667cd8fc11d1f23d\")",
|
|
||||||
"Bash(curl -s -w \"\\\\n%{http_code}\" \"https://git.misar.io/api/v1/repos/search?q=synor&token=724b7d6bf7c8696d5c374057667cd8fc11d1f23d\")",
|
|
||||||
"Bash(ssh -i ~/.ssh/id_ed25519 -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@89.167.20.246 \"docker exec forgejo gitea admin user generate-access-token --username misaradmin --token-name claude-migration --raw 2>/dev/null || docker exec gitea gitea admin user generate-access-token --username misaradmin --token-name claude-migration --raw 2>/dev/null || echo ''FAILED''\")",
|
|
||||||
"Bash(ssh -i ~/.ssh/id_rsa -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@89.167.20.246 \"docker exec forgejo gitea admin user generate-access-token --username misaradmin --token-name claude-migration --raw 2>&1\")",
|
|
||||||
"Bash(ssh -i ~/.ssh/id_rsa -o ConnectTimeout=10 root@89.167.20.246 \"docker exec -u git forgejo gitea admin user generate-access-token --username misaradmin --token-name claude-migration --raw 2>&1\")",
|
|
||||||
"Bash(FORGEJO_TOKEN=\"a4b95d0ee9bcd156467205ddb863643d6d388004\" curl -s -X POST \"https://git.misar.io/api/v1/orgs/misaradmin/repos\" -H \"Authorization: token $FORGEJO_TOKEN\" -H \"Content-Type: application/json\" -d '{\"\"\"\"name\"\"\"\":\"\"\"\"synor\"\"\"\",\"\"\"\"description\"\"\"\":\"\"\"\"Synor Blockchain — Quantum-secure decentralized cloud computing platform\"\"\"\",\"\"\"\"private\"\"\"\":false,\"\"\"\"auto_init\"\"\"\":false}')",
|
|
||||||
"Bash(python3 -c \"import sys,json; r=json.load\\(sys.stdin\\); print\\(''''Created:'''', r.get\\(''''html_url'''',''''ERROR''''\\), r.get\\(''''message'''',''''''''\\)\\)\")",
|
|
||||||
"Bash(ssh -i ~/.ssh/id_rsa root@89.167.20.246 \"docker exec -u git forgejo gitea admin user generate-access-token --username misaradmin --token-name claude-migration-full --raw --scopes all 2>&1\")",
|
|
||||||
"Bash(FORGEJO_TOKEN=\"ea8924c339ab375965e6970ce84e1431b07a479e\" curl -s -X POST \"https://git.misar.io/api/v1/user/repos\" -H \"Authorization: token $FORGEJO_TOKEN\" -H \"Content-Type: application/json\" -d '{\"\"\"\"name\"\"\"\":\"\"\"\"synor\"\"\"\",\"\"\"\"description\"\"\"\":\"\"\"\"Synor Blockchain — Quantum-secure decentralized cloud computing platform\"\"\"\",\"\"\"\"private\"\"\"\":false,\"\"\"\"auto_init\"\"\"\":false}')"
|
|
||||||
],
|
|
||||||
"additionalDirectories": [
|
|
||||||
"/Users/researchfellow/Desktop/G1 Technologies/synor.cc/.forgejo"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,109 +0,0 @@
|
||||||
name: Release Desktop Wallet
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- 'wallet-v*'
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
draft:
|
|
||||||
description: 'Create as draft release'
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
type: boolean
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# Build Linux AppImage on self-hosted runner
|
|
||||||
build-linux:
|
|
||||||
name: Build Wallet (Linux)
|
|
||||||
runs-on: self-hosted
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Setup Node.js
|
|
||||||
uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version: 20
|
|
||||||
|
|
||||||
- name: Install pnpm
|
|
||||||
run: npm install -g pnpm
|
|
||||||
|
|
||||||
- name: Setup Rust
|
|
||||||
uses: dtolnay/rust-toolchain@stable
|
|
||||||
|
|
||||||
- name: Install system dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y \
|
|
||||||
libgtk-3-dev \
|
|
||||||
libwebkit2gtk-4.1-dev \
|
|
||||||
libsoup-3.0-dev \
|
|
||||||
libjavascriptcoregtk-4.1-dev \
|
|
||||||
libappindicator3-dev \
|
|
||||||
librsvg2-dev \
|
|
||||||
patchelf \
|
|
||||||
libclang-dev \
|
|
||||||
llvm-dev
|
|
||||||
|
|
||||||
- name: Cache cargo registry
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
~/.cargo/bin/
|
|
||||||
~/.cargo/registry/index/
|
|
||||||
~/.cargo/registry/cache/
|
|
||||||
~/.cargo/git/db/
|
|
||||||
key: ${{ runner.os }}-cargo-wallet-${{ hashFiles('**/Cargo.lock') }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-cargo-wallet-
|
|
||||||
|
|
||||||
- name: Cache pnpm store
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: ~/.pnpm-store
|
|
||||||
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('apps/desktop-wallet/pnpm-lock.yaml') }}
|
|
||||||
restore-keys: |
|
|
||||||
${{ runner.os }}-pnpm-store-
|
|
||||||
|
|
||||||
- name: Install frontend dependencies
|
|
||||||
working-directory: apps/desktop-wallet
|
|
||||||
run: pnpm install
|
|
||||||
|
|
||||||
- name: Build Tauri app (Linux)
|
|
||||||
uses: tauri-apps/tauri-action@v0
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
projectPath: apps/desktop-wallet
|
|
||||||
tagName: wallet-v__VERSION__
|
|
||||||
releaseName: 'Synor Wallet v__VERSION__'
|
|
||||||
releaseBody: |
|
|
||||||
## Synor Desktop Wallet
|
|
||||||
|
|
||||||
A secure desktop wallet for the Synor blockchain network with post-quantum cryptography support (Dilithium3).
|
|
||||||
|
|
||||||
### Installation
|
|
||||||
|
|
||||||
**Linux:**
|
|
||||||
- Download the `.AppImage` file
|
|
||||||
- Make it executable: `chmod +x Synor*.AppImage`
|
|
||||||
- Run: `./Synor*.AppImage`
|
|
||||||
|
|
||||||
### Features
|
|
||||||
- 24-word BIP39 mnemonic generation
|
|
||||||
- Post-quantum Dilithium3 signatures
|
|
||||||
- OS keychain integration
|
|
||||||
- System tray support
|
|
||||||
|
|
||||||
### Security Note
|
|
||||||
Always verify the checksums of downloaded files.
|
|
||||||
releaseDraft: ${{ github.event.inputs.draft || true }}
|
|
||||||
prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc') }}
|
|
||||||
59
.github/dependabot.yml
vendored
Normal file
59
.github/dependabot.yml
vendored
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
version: 2
|
||||||
|
|
||||||
|
updates:
|
||||||
|
# Rust/Cargo dependencies
|
||||||
|
- package-ecosystem: "cargo"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
|
day: "monday"
|
||||||
|
time: "09:00"
|
||||||
|
timezone: "UTC"
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
reviewers:
|
||||||
|
- "synorcc/core-team"
|
||||||
|
labels:
|
||||||
|
- "dependencies"
|
||||||
|
- "rust"
|
||||||
|
commit-message:
|
||||||
|
prefix: "deps(cargo)"
|
||||||
|
groups:
|
||||||
|
# Group minor and patch updates together
|
||||||
|
rust-minor-patch:
|
||||||
|
patterns:
|
||||||
|
- "*"
|
||||||
|
update-types:
|
||||||
|
- "minor"
|
||||||
|
- "patch"
|
||||||
|
# Keep major updates separate for careful review
|
||||||
|
rust-major:
|
||||||
|
patterns:
|
||||||
|
- "*"
|
||||||
|
update-types:
|
||||||
|
- "major"
|
||||||
|
ignore:
|
||||||
|
# Ignore pre-release versions
|
||||||
|
- dependency-name: "*"
|
||||||
|
update-types: ["version-update:semver-prerelease"]
|
||||||
|
|
||||||
|
# GitHub Actions dependencies
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
|
day: "monday"
|
||||||
|
time: "09:00"
|
||||||
|
timezone: "UTC"
|
||||||
|
open-pull-requests-limit: 5
|
||||||
|
reviewers:
|
||||||
|
- "synorcc/core-team"
|
||||||
|
labels:
|
||||||
|
- "dependencies"
|
||||||
|
- "github-actions"
|
||||||
|
commit-message:
|
||||||
|
prefix: "ci(actions)"
|
||||||
|
groups:
|
||||||
|
# Group all GitHub Actions updates together
|
||||||
|
github-actions:
|
||||||
|
patterns:
|
||||||
|
- "*"
|
||||||
|
|
@ -13,8 +13,12 @@ env:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check:
|
check:
|
||||||
name: Check
|
name: Check (${{ matrix.os }})
|
||||||
runs-on: self-hosted
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest, macos-latest]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
|
|
@ -52,8 +56,12 @@ jobs:
|
||||||
run: cargo clippy --workspace --all-targets --all-features -- -D warnings
|
run: cargo clippy --workspace --all-targets --all-features -- -D warnings
|
||||||
|
|
||||||
test:
|
test:
|
||||||
name: Test
|
name: Test (${{ matrix.os }})
|
||||||
runs-on: self-hosted
|
runs-on: ${{ matrix.os }}
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest, macos-latest]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
|
|
@ -62,7 +70,8 @@ jobs:
|
||||||
- name: Install Rust toolchain
|
- name: Install Rust toolchain
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
|
||||||
- name: Install system dependencies
|
- name: Install system dependencies (Linux)
|
||||||
|
if: runner.os == 'Linux'
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y libclang-dev llvm-dev
|
sudo apt-get install -y libclang-dev llvm-dev
|
||||||
|
|
@ -91,9 +100,18 @@ jobs:
|
||||||
run: cargo test --workspace --all-features
|
run: cargo test --workspace --all-features
|
||||||
|
|
||||||
build:
|
build:
|
||||||
name: Build (Linux x86_64)
|
name: Build (${{ matrix.os }})
|
||||||
runs-on: self-hosted
|
runs-on: ${{ matrix.os }}
|
||||||
needs: [check, test]
|
needs: [check, test]
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest, macos-latest]
|
||||||
|
include:
|
||||||
|
- os: ubuntu-latest
|
||||||
|
artifact-name: synor-linux-x86_64
|
||||||
|
- os: macos-latest
|
||||||
|
artifact-name: synor-macos-x86_64
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
|
|
@ -102,7 +120,8 @@ jobs:
|
||||||
- name: Install Rust toolchain
|
- name: Install Rust toolchain
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
|
||||||
- name: Install system dependencies
|
- name: Install system dependencies (Linux)
|
||||||
|
if: runner.os == 'Linux'
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y libclang-dev llvm-dev
|
sudo apt-get install -y libclang-dev llvm-dev
|
||||||
|
|
@ -141,14 +160,14 @@ jobs:
|
||||||
- name: Upload build artifacts
|
- name: Upload build artifacts
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: synor-linux-x86_64
|
name: ${{ matrix.artifact-name }}
|
||||||
path: artifacts/
|
path: artifacts/
|
||||||
retention-days: 7
|
retention-days: 7
|
||||||
if-no-files-found: warn
|
if-no-files-found: warn
|
||||||
|
|
||||||
bench:
|
bench:
|
||||||
name: Benchmarks
|
name: Benchmarks
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
|
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
|
||||||
needs: [check, test]
|
needs: [check, test]
|
||||||
|
|
||||||
|
|
@ -195,9 +214,10 @@ jobs:
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
if-no-files-found: ignore
|
if-no-files-found: ignore
|
||||||
|
|
||||||
|
# Summary job for branch protection
|
||||||
ci-success:
|
ci-success:
|
||||||
name: CI Success
|
name: CI Success
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
needs: [check, test, build]
|
needs: [check, test, build]
|
||||||
if: always()
|
if: always()
|
||||||
steps:
|
steps:
|
||||||
195
.github/workflows/release-wallet.yml
vendored
Normal file
195
.github/workflows/release-wallet.yml
vendored
Normal file
|
|
@ -0,0 +1,195 @@
|
||||||
|
name: Release Desktop Wallet
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'wallet-v*'
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
draft:
|
||||||
|
description: 'Create as draft release'
|
||||||
|
required: false
|
||||||
|
default: true
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
env:
|
||||||
|
CARGO_TERM_COLOR: always
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-tauri:
|
||||||
|
name: Build Wallet (${{ matrix.platform }})
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- platform: macos-latest
|
||||||
|
target: aarch64-apple-darwin
|
||||||
|
artifact-suffix: macos-aarch64
|
||||||
|
- platform: macos-latest
|
||||||
|
target: x86_64-apple-darwin
|
||||||
|
artifact-suffix: macos-x86_64
|
||||||
|
- platform: windows-latest
|
||||||
|
target: x86_64-pc-windows-msvc
|
||||||
|
artifact-suffix: windows-x86_64
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.platform }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
|
||||||
|
- name: Install pnpm
|
||||||
|
run: npm install -g pnpm
|
||||||
|
|
||||||
|
- name: Setup Rust
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
with:
|
||||||
|
targets: ${{ matrix.target }}
|
||||||
|
|
||||||
|
- name: Install dependencies (macOS)
|
||||||
|
if: matrix.platform == 'macos-latest'
|
||||||
|
run: |
|
||||||
|
brew install rocksdb
|
||||||
|
|
||||||
|
- name: Cache cargo registry
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cargo/bin/
|
||||||
|
~/.cargo/registry/index/
|
||||||
|
~/.cargo/registry/cache/
|
||||||
|
~/.cargo/git/db/
|
||||||
|
key: ${{ runner.os }}-${{ matrix.target }}-cargo-wallet-${{ hashFiles('**/Cargo.lock') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-${{ matrix.target }}-cargo-wallet-
|
||||||
|
|
||||||
|
- name: Cache pnpm store
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ~/.pnpm-store
|
||||||
|
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('apps/desktop-wallet/pnpm-lock.yaml') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pnpm-store-
|
||||||
|
|
||||||
|
- name: Install frontend dependencies
|
||||||
|
working-directory: apps/desktop-wallet
|
||||||
|
run: pnpm install
|
||||||
|
|
||||||
|
- name: Build Tauri app
|
||||||
|
uses: tauri-apps/tauri-action@v0
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
# Note: Code signing requires Apple Developer certificates configured in GitHub secrets
|
||||||
|
# Set APPLE_CERTIFICATE, APPLE_CERTIFICATE_PASSWORD, APPLE_SIGNING_IDENTITY,
|
||||||
|
# APPLE_ID, APPLE_PASSWORD, APPLE_TEAM_ID to enable code signing
|
||||||
|
with:
|
||||||
|
projectPath: apps/desktop-wallet
|
||||||
|
tagName: wallet-v__VERSION__
|
||||||
|
releaseName: 'Synor Wallet v__VERSION__'
|
||||||
|
releaseBody: |
|
||||||
|
## Synor Desktop Wallet
|
||||||
|
|
||||||
|
A secure desktop wallet for the Synor blockchain network with post-quantum cryptography support (Dilithium3).
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
**macOS:**
|
||||||
|
- Download the `.dmg` file for your architecture (Intel or Apple Silicon)
|
||||||
|
- Open the DMG and drag Synor Wallet to Applications
|
||||||
|
- First launch: Right-click → Open (to bypass Gatekeeper if not code-signed)
|
||||||
|
|
||||||
|
**Windows:**
|
||||||
|
- Download the `.msi` installer
|
||||||
|
- Run the installer and follow the prompts
|
||||||
|
- Or download the `.exe` for portable installation
|
||||||
|
|
||||||
|
### Features
|
||||||
|
- 24-word BIP39 mnemonic generation
|
||||||
|
- Post-quantum Dilithium3 signatures
|
||||||
|
- OS keychain integration (macOS Keychain, Windows Credential Manager)
|
||||||
|
- System tray support
|
||||||
|
- Auto-updates (when signed)
|
||||||
|
|
||||||
|
### Security Note
|
||||||
|
Always verify the checksums of downloaded files.
|
||||||
|
releaseDraft: ${{ github.event.inputs.draft || true }}
|
||||||
|
prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc') }}
|
||||||
|
args: --target ${{ matrix.target }}
|
||||||
|
|
||||||
|
# Build Linux AppImage separately (needs different runner config)
|
||||||
|
build-linux:
|
||||||
|
name: Build Wallet (Linux)
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Node.js
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: 20
|
||||||
|
|
||||||
|
- name: Install pnpm
|
||||||
|
run: npm install -g pnpm
|
||||||
|
|
||||||
|
- name: Setup Rust
|
||||||
|
uses: dtolnay/rust-toolchain@stable
|
||||||
|
|
||||||
|
- name: Install system dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y \
|
||||||
|
libgtk-3-dev \
|
||||||
|
libwebkit2gtk-4.1-dev \
|
||||||
|
libsoup-3.0-dev \
|
||||||
|
libjavascriptcoregtk-4.1-dev \
|
||||||
|
libappindicator3-dev \
|
||||||
|
librsvg2-dev \
|
||||||
|
patchelf \
|
||||||
|
libclang-dev \
|
||||||
|
llvm-dev
|
||||||
|
|
||||||
|
- name: Cache cargo registry
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.cargo/bin/
|
||||||
|
~/.cargo/registry/index/
|
||||||
|
~/.cargo/registry/cache/
|
||||||
|
~/.cargo/git/db/
|
||||||
|
key: ${{ runner.os }}-cargo-wallet-${{ hashFiles('**/Cargo.lock') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-cargo-wallet-
|
||||||
|
|
||||||
|
- name: Cache pnpm store
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ~/.pnpm-store
|
||||||
|
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('apps/desktop-wallet/pnpm-lock.yaml') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-pnpm-store-
|
||||||
|
|
||||||
|
- name: Install frontend dependencies
|
||||||
|
working-directory: apps/desktop-wallet
|
||||||
|
run: pnpm install
|
||||||
|
|
||||||
|
- name: Build Tauri app
|
||||||
|
uses: tauri-apps/tauri-action@v0
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
projectPath: apps/desktop-wallet
|
||||||
|
tagName: wallet-v__VERSION__
|
||||||
|
releaseName: 'Synor Wallet v__VERSION__'
|
||||||
|
releaseBody: ''
|
||||||
|
releaseDraft: ${{ github.event.inputs.draft || true }}
|
||||||
|
prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc') }}
|
||||||
|
|
@ -15,17 +15,31 @@ permissions:
|
||||||
jobs:
|
jobs:
|
||||||
build-release:
|
build-release:
|
||||||
name: Build Release (${{ matrix.target }})
|
name: Build Release (${{ matrix.target }})
|
||||||
runs-on: self-hosted
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- target: x86_64-unknown-linux-gnu
|
- os: ubuntu-latest
|
||||||
|
target: x86_64-unknown-linux-gnu
|
||||||
artifact-name: synor-linux-x86_64
|
artifact-name: synor-linux-x86_64
|
||||||
archive-ext: tar.gz
|
archive-ext: tar.gz
|
||||||
- target: aarch64-unknown-linux-gnu
|
- os: ubuntu-24.04-arm
|
||||||
|
target: aarch64-unknown-linux-gnu
|
||||||
artifact-name: synor-linux-aarch64
|
artifact-name: synor-linux-aarch64
|
||||||
archive-ext: tar.gz
|
archive-ext: tar.gz
|
||||||
|
- os: macos-latest
|
||||||
|
target: x86_64-apple-darwin
|
||||||
|
artifact-name: synor-macos-x86_64
|
||||||
|
archive-ext: tar.gz
|
||||||
|
- os: macos-latest
|
||||||
|
target: aarch64-apple-darwin
|
||||||
|
artifact-name: synor-macos-aarch64
|
||||||
|
archive-ext: tar.gz
|
||||||
|
- os: windows-latest
|
||||||
|
target: x86_64-pc-windows-msvc
|
||||||
|
artifact-name: synor-windows-x86_64
|
||||||
|
archive-ext: zip
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
|
|
@ -38,10 +52,11 @@ jobs:
|
||||||
with:
|
with:
|
||||||
targets: ${{ matrix.target }}
|
targets: ${{ matrix.target }}
|
||||||
|
|
||||||
- name: Install system dependencies
|
- name: Install system dependencies (Linux)
|
||||||
|
if: runner.os == 'Linux'
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y libclang-dev llvm-dev gcc-aarch64-linux-gnu
|
sudo apt-get install -y libclang-dev llvm-dev
|
||||||
|
|
||||||
- name: Cache cargo registry
|
- name: Cache cargo registry
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
|
|
@ -63,37 +78,82 @@ jobs:
|
||||||
restore-keys: |
|
restore-keys: |
|
||||||
${{ runner.os }}-${{ matrix.target }}-cargo-target-release-
|
${{ runner.os }}-${{ matrix.target }}-cargo-target-release-
|
||||||
|
|
||||||
- name: Build release binaries
|
- name: Build release binaries (Unix)
|
||||||
|
if: runner.os != 'Windows'
|
||||||
env:
|
env:
|
||||||
TARGET: ${{ matrix.target }}
|
TARGET: ${{ matrix.target }}
|
||||||
run: cargo build --release --workspace --target "$TARGET"
|
run: cargo build --release --workspace --target "$TARGET"
|
||||||
|
|
||||||
- name: Prepare release archive
|
- name: Build release binaries (Windows)
|
||||||
|
if: runner.os == 'Windows'
|
||||||
|
env:
|
||||||
|
TARGET: ${{ matrix.target }}
|
||||||
|
run: cargo build --release --workspace --target "$env:TARGET"
|
||||||
|
|
||||||
|
- name: Prepare release archive (Unix)
|
||||||
|
if: runner.os != 'Windows'
|
||||||
env:
|
env:
|
||||||
TARGET: ${{ matrix.target }}
|
TARGET: ${{ matrix.target }}
|
||||||
ARTIFACT_NAME: ${{ matrix.artifact-name }}
|
ARTIFACT_NAME: ${{ matrix.artifact-name }}
|
||||||
run: |
|
run: |
|
||||||
mkdir -p release
|
mkdir -p release
|
||||||
|
|
||||||
|
# Copy binaries
|
||||||
cp "target/$TARGET/release/synord" release/ 2>/dev/null || true
|
cp "target/$TARGET/release/synord" release/ 2>/dev/null || true
|
||||||
cp "target/$TARGET/release/synor-cli" release/ 2>/dev/null || true
|
cp "target/$TARGET/release/synor-cli" release/ 2>/dev/null || true
|
||||||
cp "target/$TARGET/release/synor-faucet" release/ 2>/dev/null || true
|
cp "target/$TARGET/release/synor-faucet" release/ 2>/dev/null || true
|
||||||
cp "target/$TARGET/release/synor-explorer" release/ 2>/dev/null || true
|
cp "target/$TARGET/release/synor-explorer" release/ 2>/dev/null || true
|
||||||
|
|
||||||
|
# Copy documentation
|
||||||
cp README.md release/ 2>/dev/null || true
|
cp README.md release/ 2>/dev/null || true
|
||||||
cp LICENSE* release/ 2>/dev/null || true
|
cp LICENSE* release/ 2>/dev/null || true
|
||||||
cp CHANGELOG.md release/ 2>/dev/null || true
|
cp CHANGELOG.md release/ 2>/dev/null || true
|
||||||
|
|
||||||
|
# Create archive
|
||||||
cd release
|
cd release
|
||||||
tar czvf "../$ARTIFACT_NAME.tar.gz" *
|
tar czvf "../$ARTIFACT_NAME.tar.gz" *
|
||||||
|
|
||||||
- name: Upload release artifact
|
- name: Prepare release archive (Windows)
|
||||||
|
if: runner.os == 'Windows'
|
||||||
|
env:
|
||||||
|
TARGET: ${{ matrix.target }}
|
||||||
|
ARTIFACT_NAME: ${{ matrix.artifact-name }}
|
||||||
|
run: |
|
||||||
|
New-Item -ItemType Directory -Force -Path release
|
||||||
|
|
||||||
|
# Copy binaries
|
||||||
|
Copy-Item "target/$env:TARGET/release/synord.exe" release/ -ErrorAction SilentlyContinue
|
||||||
|
Copy-Item "target/$env:TARGET/release/synor-cli.exe" release/ -ErrorAction SilentlyContinue
|
||||||
|
Copy-Item "target/$env:TARGET/release/synor-faucet.exe" release/ -ErrorAction SilentlyContinue
|
||||||
|
Copy-Item "target/$env:TARGET/release/synor-explorer.exe" release/ -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Copy documentation
|
||||||
|
Copy-Item README.md release/ -ErrorAction SilentlyContinue
|
||||||
|
Copy-Item LICENSE* release/ -ErrorAction SilentlyContinue
|
||||||
|
Copy-Item CHANGELOG.md release/ -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
# Create archive
|
||||||
|
Compress-Archive -Path release/* -DestinationPath "$env:ARTIFACT_NAME.zip"
|
||||||
|
|
||||||
|
- name: Upload release artifact (Unix)
|
||||||
|
if: runner.os != 'Windows'
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ matrix.artifact-name }}
|
name: ${{ matrix.artifact-name }}
|
||||||
path: ${{ matrix.artifact-name }}.tar.gz
|
path: ${{ matrix.artifact-name }}.tar.gz
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
|
- name: Upload release artifact (Windows)
|
||||||
|
if: runner.os == 'Windows'
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: ${{ matrix.artifact-name }}
|
||||||
|
path: ${{ matrix.artifact-name }}.zip
|
||||||
|
retention-days: 1
|
||||||
|
|
||||||
create-release:
|
create-release:
|
||||||
name: Create Forgejo Release
|
name: Create GitHub Release
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
needs: build-release
|
needs: build-release
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
|
@ -112,9 +172,10 @@ jobs:
|
||||||
env:
|
env:
|
||||||
GIT_REF: ${{ github.ref }}
|
GIT_REF: ${{ github.ref }}
|
||||||
run: |
|
run: |
|
||||||
|
# Get the current tag from the ref (safe - only used after validation)
|
||||||
CURRENT_TAG="${GIT_REF#refs/tags/}"
|
CURRENT_TAG="${GIT_REF#refs/tags/}"
|
||||||
|
|
||||||
# Validate tag format
|
# Validate tag format (only allow v followed by semver-like pattern)
|
||||||
if [[ ! "$CURRENT_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
|
if [[ ! "$CURRENT_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$ ]]; then
|
||||||
echo "Invalid tag format: $CURRENT_TAG"
|
echo "Invalid tag format: $CURRENT_TAG"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
@ -122,6 +183,7 @@ jobs:
|
||||||
|
|
||||||
echo "current_tag=$CURRENT_TAG" >> "$GITHUB_OUTPUT"
|
echo "current_tag=$CURRENT_TAG" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
# Get the previous tag
|
||||||
PREVIOUS_TAG=$(git describe --tags --abbrev=0 "$CURRENT_TAG^" 2>/dev/null || echo "")
|
PREVIOUS_TAG=$(git describe --tags --abbrev=0 "$CURRENT_TAG^" 2>/dev/null || echo "")
|
||||||
|
|
||||||
echo "## What's Changed" > CHANGELOG_BODY.md
|
echo "## What's Changed" > CHANGELOG_BODY.md
|
||||||
|
|
@ -130,6 +192,8 @@ jobs:
|
||||||
if [ -n "$PREVIOUS_TAG" ]; then
|
if [ -n "$PREVIOUS_TAG" ]; then
|
||||||
echo "Changes since $PREVIOUS_TAG:" >> CHANGELOG_BODY.md
|
echo "Changes since $PREVIOUS_TAG:" >> CHANGELOG_BODY.md
|
||||||
echo "" >> CHANGELOG_BODY.md
|
echo "" >> CHANGELOG_BODY.md
|
||||||
|
|
||||||
|
# Generate changelog from commits (commit messages are from our own repo)
|
||||||
git log "$PREVIOUS_TAG..$CURRENT_TAG" --pretty=format:"- %s (%h)" --no-merges >> CHANGELOG_BODY.md
|
git log "$PREVIOUS_TAG..$CURRENT_TAG" --pretty=format:"- %s (%h)" --no-merges >> CHANGELOG_BODY.md
|
||||||
else
|
else
|
||||||
echo "Initial release" >> CHANGELOG_BODY.md
|
echo "Initial release" >> CHANGELOG_BODY.md
|
||||||
|
|
@ -152,10 +216,10 @@ jobs:
|
||||||
echo "" >> CHANGELOG_BODY.md
|
echo "" >> CHANGELOG_BODY.md
|
||||||
echo '```' >> CHANGELOG_BODY.md
|
echo '```' >> CHANGELOG_BODY.md
|
||||||
cd artifacts
|
cd artifacts
|
||||||
find . -name "*.tar.gz" -exec sha256sum {} \; | sed 's|./[^/]*/||' >> ../CHANGELOG_BODY.md
|
find . \( -name "*.tar.gz" -o -name "*.zip" \) -exec sha256sum {} \; | sed 's|./[^/]*/||' >> ../CHANGELOG_BODY.md
|
||||||
echo '```' >> CHANGELOG_BODY.md
|
echo '```' >> CHANGELOG_BODY.md
|
||||||
|
|
||||||
- name: Create Release
|
- name: Create GitHub Release
|
||||||
uses: softprops/action-gh-release@v2
|
uses: softprops/action-gh-release@v2
|
||||||
with:
|
with:
|
||||||
name: Synor ${{ steps.changelog.outputs.current_tag }}
|
name: Synor ${{ steps.changelog.outputs.current_tag }}
|
||||||
|
|
@ -164,12 +228,14 @@ jobs:
|
||||||
prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc') }}
|
prerelease: ${{ contains(github.ref, 'alpha') || contains(github.ref, 'beta') || contains(github.ref, 'rc') }}
|
||||||
files: |
|
files: |
|
||||||
artifacts/**/*.tar.gz
|
artifacts/**/*.tar.gz
|
||||||
|
artifacts/**/*.zip
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
# Optional: Publish to crates.io
|
||||||
publish-crates:
|
publish-crates:
|
||||||
name: Publish to crates.io
|
name: Publish to crates.io
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
needs: create-release
|
needs: create-release
|
||||||
if: ${{ !contains(github.ref, 'alpha') && !contains(github.ref, 'beta') && !contains(github.ref, 'rc') }}
|
if: ${{ !contains(github.ref, 'alpha') && !contains(github.ref, 'beta') && !contains(github.ref, 'rc') }}
|
||||||
|
|
||||||
|
|
@ -189,12 +255,16 @@ jobs:
|
||||||
env:
|
env:
|
||||||
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
|
# Publish crates in dependency order
|
||||||
|
# Skip if CARGO_REGISTRY_TOKEN is not set
|
||||||
if [ -z "$CARGO_REGISTRY_TOKEN" ]; then
|
if [ -z "$CARGO_REGISTRY_TOKEN" ]; then
|
||||||
echo "CARGO_REGISTRY_TOKEN not set, skipping crates.io publish"
|
echo "CARGO_REGISTRY_TOKEN not set, skipping crates.io publish"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Publishing to crates.io..."
|
echo "Publishing to crates.io..."
|
||||||
# Uncomment when ready to publish:
|
# Add --dry-run to test first, remove for actual publish
|
||||||
# cargo publish -p synor-types
|
# cargo publish -p synor-types --dry-run
|
||||||
# cargo publish -p synor-crypto
|
# cargo publish -p synor-crypto --dry-run
|
||||||
|
# ... etc
|
||||||
echo "Crate publishing configured but commented out - uncomment when ready"
|
echo "Crate publishing configured but commented out - uncomment when ready"
|
||||||
|
|
@ -21,12 +21,12 @@ jobs:
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
cargo-audit:
|
cargo-audit:
|
||||||
name: Vulnerability Scan
|
name: Vulnerability Scan
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install Rust
|
- name: Install Rust
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-action@stable
|
||||||
|
|
||||||
- name: Install cargo-audit
|
- name: Install cargo-audit
|
||||||
run: cargo install cargo-audit --locked
|
run: cargo install cargo-audit --locked
|
||||||
|
|
@ -39,7 +39,7 @@ jobs:
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
cargo-deny:
|
cargo-deny:
|
||||||
name: License & Security Policy
|
name: License & Security Policy
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
|
@ -53,12 +53,12 @@ jobs:
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
clippy:
|
clippy:
|
||||||
name: Static Analysis (Clippy)
|
name: Static Analysis (Clippy)
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install Rust
|
- name: Install Rust
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-action@stable
|
||||||
with:
|
with:
|
||||||
components: clippy
|
components: clippy
|
||||||
|
|
||||||
|
|
@ -75,7 +75,7 @@ jobs:
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
secrets-scan:
|
secrets-scan:
|
||||||
name: Secret Detection
|
name: Secret Detection
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
|
|
@ -91,12 +91,12 @@ jobs:
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
outdated:
|
outdated:
|
||||||
name: Check Outdated Dependencies
|
name: Check Outdated Dependencies
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install Rust
|
- name: Install Rust
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-action@stable
|
||||||
|
|
||||||
- name: Install cargo-outdated
|
- name: Install cargo-outdated
|
||||||
run: cargo install cargo-outdated --locked
|
run: cargo install cargo-outdated --locked
|
||||||
|
|
@ -110,12 +110,12 @@ jobs:
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
geiger:
|
geiger:
|
||||||
name: Unsafe Code Audit
|
name: Unsafe Code Audit
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install Rust
|
- name: Install Rust
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-action@stable
|
||||||
|
|
||||||
- name: Install cargo-geiger
|
- name: Install cargo-geiger
|
||||||
run: cargo install cargo-geiger --locked
|
run: cargo install cargo-geiger --locked
|
||||||
|
|
@ -129,14 +129,14 @@ jobs:
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
property-tests:
|
property-tests:
|
||||||
name: Property-Based Testing
|
name: Property-Based Testing
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
env:
|
env:
|
||||||
PROPTEST_CASES: "500"
|
PROPTEST_CASES: "500"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install Rust
|
- name: Install Rust
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-action@stable
|
||||||
|
|
||||||
- name: Run property tests
|
- name: Run property tests
|
||||||
run: cargo test --release proptest -- --test-threads=1
|
run: cargo test --release proptest -- --test-threads=1
|
||||||
|
|
@ -146,12 +146,12 @@ jobs:
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
wasm-audit:
|
wasm-audit:
|
||||||
name: WASM Module Security
|
name: WASM Module Security
|
||||||
runs-on: self-hosted
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Install Rust
|
- name: Install Rust
|
||||||
uses: dtolnay/rust-toolchain@stable
|
uses: dtolnay/rust-action@stable
|
||||||
with:
|
with:
|
||||||
targets: wasm32-unknown-unknown
|
targets: wasm32-unknown-unknown
|
||||||
|
|
||||||
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -55,7 +55,3 @@ temp/
|
||||||
# Firebase
|
# Firebase
|
||||||
.firebase/
|
.firebase/
|
||||||
**/.vite/
|
**/.vite/
|
||||||
|
|
||||||
# Secrets
|
|
||||||
credentials.json
|
|
||||||
*.p12
|
|
||||||
|
|
|
||||||
505
.misar/MISAR.md
505
.misar/MISAR.md
|
|
@ -1,505 +0,0 @@
|
||||||
# synor.cc
|
|
||||||
|
|
||||||
## Project Context
|
|
||||||
|
|
||||||
<!-- Describe your project here. Misar Code reads this file to understand your codebase. -->
|
|
||||||
|
|
||||||
|
|
||||||
- **Branch**: main
|
|
||||||
- **Remote**: https://github.com/mrgulshanyadav/Blockchain.cc.git
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Stack
|
|
||||||
|
|
||||||
| Layer | Technology | Details |
|
|
||||||
|-------|------------|---------|
|
|
||||||
| **Container** | Docker | Dockerfile |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Directory Structure
|
|
||||||
|
|
||||||
```
|
|
||||||
synor.cc/
|
|
||||||
CLAUDE.md
|
|
||||||
Dockerfile.explorer
|
|
||||||
Dockerfile.faucet
|
|
||||||
Dockerfile.security
|
|
||||||
Dockerfile.test
|
|
||||||
README.md
|
|
||||||
SECURITY.md
|
|
||||||
docker-compose.compute.yml
|
|
||||||
docker-compose.dex-services.yml
|
|
||||||
docker-compose.dex.yml
|
|
||||||
... and 4 more files
|
|
||||||
.cargo/
|
|
||||||
config.toml
|
|
||||||
.github/
|
|
||||||
dependabot.yml
|
|
||||||
workflows/
|
|
||||||
ci.yml
|
|
||||||
release-wallet.yml
|
|
||||||
release.yml
|
|
||||||
security.yml
|
|
||||||
.playwright-mcp/
|
|
||||||
block-enhanced.png
|
|
||||||
dag-2d-view.png
|
|
||||||
dag-3d-final.png
|
|
||||||
dag-3d-modern-full.png
|
|
||||||
dag-3d-modern.png
|
|
||||||
dag-3d-view.png
|
|
||||||
dark-theme-restored.png
|
|
||||||
explorer-blocks-working.png
|
|
||||||
explorer-dag-working.png
|
|
||||||
explorer-error-state.png
|
|
||||||
... and 21 more files
|
|
||||||
.vscode/
|
|
||||||
settings.json
|
|
||||||
apps/
|
|
||||||
api-gateway/
|
|
||||||
Dockerfile
|
|
||||||
README.md
|
|
||||||
package.json
|
|
||||||
tsconfig.json
|
|
||||||
src/
|
|
||||||
api-keys.ts
|
|
||||||
index.ts
|
|
||||||
rate-limiter.ts
|
|
||||||
cli/
|
|
||||||
Cargo.toml
|
|
||||||
src/
|
|
||||||
client.rs
|
|
||||||
config.rs
|
|
||||||
main.rs
|
|
||||||
output.rs
|
|
||||||
wallet.rs
|
|
||||||
desktop-wallet/
|
|
||||||
Dockerfile
|
|
||||||
Dockerfile.dev
|
|
||||||
README.md
|
|
||||||
docker-compose.dev.yml
|
|
||||||
index.html
|
|
||||||
playwright.config.ts
|
|
||||||
pnpm-lock.yaml
|
|
||||||
postcss.config.js
|
|
||||||
tailwind.config.js
|
|
||||||
tsconfig.json
|
|
||||||
... and 2 more files
|
|
||||||
e2e/
|
|
||||||
smoke.spec.ts
|
|
||||||
playwright-report/
|
|
||||||
index.html
|
|
||||||
src/
|
|
||||||
App.tsx
|
|
||||||
index.css
|
|
||||||
main.tsx
|
|
||||||
vite-env.d.ts
|
|
||||||
src-tauri/
|
|
||||||
Cargo.lock
|
|
||||||
build.rs
|
|
||||||
test-results/
|
|
||||||
.last-run.json
|
|
||||||
explorer/
|
|
||||||
Cargo.toml
|
|
||||||
explorer-web/
|
|
||||||
Dockerfile
|
|
||||||
index.html
|
|
||||||
nginx.conf
|
|
||||||
package-lock.json
|
|
||||||
package.json
|
|
||||||
playwright.config.ts
|
|
||||||
postcss.config.js
|
|
||||||
tailwind.config.js
|
|
||||||
tsconfig.json
|
|
||||||
tsconfig.node.json
|
|
||||||
... and 1 more files
|
|
||||||
e2e/
|
|
||||||
accessibility.spec.ts
|
|
||||||
blocks.spec.ts
|
|
||||||
home.spec.ts
|
|
||||||
mobile.spec.ts
|
|
||||||
search.spec.ts
|
|
||||||
public/
|
|
||||||
favicon.svg
|
|
||||||
src/
|
|
||||||
App.tsx
|
|
||||||
index.css
|
|
||||||
main.tsx
|
|
||||||
vite-env.d.ts
|
|
||||||
src/
|
|
||||||
main.rs
|
|
||||||
faucet/
|
|
||||||
Cargo.toml
|
|
||||||
src/
|
|
||||||
main.rs
|
|
||||||
secrets.rs
|
|
||||||
hardhat-plugin/
|
|
||||||
README.md
|
|
||||||
package.json
|
|
||||||
tsconfig.json
|
|
||||||
src/
|
|
||||||
deployer.ts
|
|
||||||
index.ts
|
|
||||||
network.ts
|
|
||||||
provider.ts
|
|
||||||
type-extensions.ts
|
|
||||||
types.ts
|
|
||||||
synord/
|
|
||||||
Cargo.toml
|
|
||||||
src/
|
|
||||||
cli.rs
|
|
||||||
config.rs
|
|
||||||
lib.rs
|
|
||||||
main.rs
|
|
||||||
node.rs
|
|
||||||
tests/
|
|
||||||
byzantine_fault_tests.rs
|
|
||||||
fork_resolution.rs
|
|
||||||
multi_node_network.rs
|
|
||||||
node_lifecycle.rs
|
|
||||||
reorg_tests.rs
|
|
||||||
stress_tests.rs
|
|
||||||
sync_protocol.rs
|
|
||||||
web/
|
|
||||||
.gitignore
|
|
||||||
Dockerfile
|
|
||||||
README.md
|
|
||||||
index.html
|
|
||||||
package.json
|
|
||||||
postcss.config.js
|
|
||||||
tailwind.config.js
|
|
||||||
tsconfig.json
|
|
||||||
tsconfig.node.json
|
|
||||||
vite.config.ts
|
|
||||||
public/
|
|
||||||
synor.svg
|
|
||||||
src/
|
|
||||||
App.tsx
|
|
||||||
index.css
|
|
||||||
main.tsx
|
|
||||||
vite-env.d.ts
|
|
||||||
website/
|
|
||||||
Dockerfile
|
|
||||||
index.html
|
|
||||||
nginx.conf
|
|
||||||
package-lock.json
|
|
||||||
package.json
|
|
||||||
postcss.config.js
|
|
||||||
tailwind.config.js
|
|
||||||
tsconfig.json
|
|
||||||
tsconfig.node.json
|
|
||||||
vite.config.ts
|
|
||||||
public/
|
|
||||||
favicon.svg
|
|
||||||
src/
|
|
||||||
App.tsx
|
|
||||||
index.css
|
|
||||||
main.tsx
|
|
||||||
vite-env.d.ts
|
|
||||||
contracts/
|
|
||||||
multi-sig/
|
|
||||||
Cargo.toml
|
|
||||||
src/
|
|
||||||
lib.rs
|
|
||||||
perps/
|
|
||||||
Cargo.lock
|
|
||||||
Cargo.toml
|
|
||||||
src/
|
|
||||||
lib.rs
|
|
||||||
target/
|
|
||||||
.rustc_info.json
|
|
||||||
CACHEDIR.TAG
|
|
||||||
crates/
|
|
||||||
synor-compiler/
|
|
||||||
Cargo.toml
|
|
||||||
src/
|
|
||||||
lib.rs
|
|
||||||
metadata.rs
|
|
||||||
optimizer.rs
|
|
||||||
validator.rs
|
|
||||||
synor-contract-test/
|
|
||||||
Cargo.toml
|
|
||||||
src/
|
|
||||||
assertions.rs
|
|
||||||
environment.rs
|
|
||||||
lib.rs
|
|
||||||
mock_storage.rs
|
|
||||||
test_account.rs
|
|
||||||
synor-dag/
|
|
||||||
Cargo.toml
|
|
||||||
benches/
|
|
||||||
ghostdag_bench.rs
|
|
||||||
src/
|
|
||||||
dag.rs
|
|
||||||
dagknight.rs
|
|
||||||
ghostdag.rs
|
|
||||||
latency.rs
|
|
||||||
lib.rs
|
|
||||||
ordering.rs
|
|
||||||
pruning.rs
|
|
||||||
reachability.rs
|
|
||||||
synor-economics/
|
|
||||||
src/
|
|
||||||
error.rs
|
|
||||||
lib.rs
|
|
||||||
synor-governance/
|
|
||||||
Cargo.toml
|
|
||||||
src/
|
|
||||||
dao.rs
|
|
||||||
lib.rs
|
|
||||||
multisig.rs
|
|
||||||
treasury.rs
|
|
||||||
vesting.rs
|
|
||||||
synor-network/
|
|
||||||
Cargo.toml
|
|
||||||
src/
|
|
||||||
behaviour.rs
|
|
||||||
config.rs
|
|
||||||
eclipse.rs
|
|
||||||
lib.rs
|
|
||||||
message.rs
|
|
||||||
partition.rs
|
|
||||||
peer.rs
|
|
||||||
protocol.rs
|
|
||||||
rate_limit.rs
|
|
||||||
ratelimit.rs
|
|
||||||
... and 4 more files
|
|
||||||
synor-privacy/
|
|
||||||
Cargo.toml
|
|
||||||
src/
|
|
||||||
bulletproofs.rs
|
|
||||||
confidential.rs
|
|
||||||
error.rs
|
|
||||||
lib.rs
|
|
||||||
pedersen.rs
|
|
||||||
ring.rs
|
|
||||||
stealth.rs
|
|
||||||
synor-storage/
|
|
||||||
Cargo.toml
|
|
||||||
benches/
|
|
||||||
storage_bench.rs.disabled
|
|
||||||
src/
|
|
||||||
cache.rs
|
|
||||||
car.rs
|
|
||||||
cf.rs
|
|
||||||
chunker.rs
|
|
||||||
cid.rs
|
|
||||||
db.rs
|
|
||||||
deal.rs
|
|
||||||
erasure.rs
|
|
||||||
error.rs
|
|
||||||
lib.rs
|
|
||||||
... and 3 more files
|
|
||||||
synor-verifier/
|
|
||||||
Cargo.toml
|
|
||||||
src/
|
|
||||||
ast.rs
|
|
||||||
checker.rs
|
|
||||||
error.rs
|
|
||||||
lib.rs
|
|
||||||
parser.rs
|
|
||||||
prover.rs
|
|
||||||
smt.rs
|
|
||||||
symbolic.rs
|
|
||||||
synor-vm/
|
|
||||||
Cargo.toml
|
|
||||||
src/
|
|
||||||
compression.rs
|
|
||||||
compute.rs
|
|
||||||
context.rs
|
|
||||||
engine.rs
|
|
||||||
gas.rs
|
|
||||||
gas_estimator.rs
|
|
||||||
host.rs
|
|
||||||
lib.rs
|
|
||||||
scheduler.rs
|
|
||||||
speculation.rs
|
|
||||||
... and 2 more files
|
|
||||||
docker/
|
|
||||||
compute-node/
|
|
||||||
Dockerfile
|
|
||||||
prometheus.yml
|
|
||||||
dex/
|
|
||||||
aggregator/
|
|
||||||
index.js
|
|
||||||
package.json
|
|
||||||
api/
|
|
||||||
index.js
|
|
||||||
package.json
|
|
||||||
oracle/
|
|
||||||
index.js
|
|
||||||
package.json
|
|
||||||
perps/
|
|
||||||
index.js
|
|
||||||
package.json
|
|
||||||
simulator/
|
|
||||||
index.js
|
|
||||||
package.json
|
|
||||||
economics-service/
|
|
||||||
Dockerfile
|
|
||||||
config.toml
|
|
||||||
init.sql
|
|
||||||
hosting-gateway/
|
|
||||||
Caddyfile
|
|
||||||
Dockerfile
|
|
||||||
storage-gateway/
|
|
||||||
nginx.conf
|
|
||||||
storage-node/
|
|
||||||
Dockerfile
|
|
||||||
config.toml
|
|
||||||
zk-rollup/
|
|
||||||
Dockerfile
|
|
||||||
config.toml
|
|
||||||
nginx.conf
|
|
||||||
prometheus.yml
|
|
||||||
docs/
|
|
||||||
ARCHITECTURE_HOSTING.md
|
|
||||||
ARCHITECTURE_STORAGE.md
|
|
||||||
CODE_SIGNING.md
|
|
||||||
DEPLOYMENT.md
|
|
||||||
DEVELOPER_GUIDE.md
|
|
||||||
DEX_AND_MONETIZATION.md
|
|
||||||
PLAN.md
|
|
||||||
SECURITY_AUDIT_SCOPE.md
|
|
||||||
TESTNET.md
|
|
||||||
PLAN/
|
|
||||||
PHASE11-Synor-Compute-L2-Part2-HyperEfficiency.md
|
|
||||||
PHASE11-Synor-Compute-L2-Part3-HeterogeneousCompute.md
|
|
||||||
PHASE11-Synor-Compute-L2.md
|
|
||||||
PHASE14_PLAN.md
|
|
||||||
README.md
|
|
||||||
VALIDATION_REPORT.md
|
|
||||||
PHASE0-Foundation/
|
|
||||||
01-Milestone-01-CoreTypes.md
|
|
||||||
01-Milestone-02-Cryptography.md
|
|
||||||
PHASE1-NodeIntegration/
|
|
||||||
01-Milestone-01-ServiceWiring.md
|
|
||||||
01-Milestone-02-GenesisChain.md
|
|
||||||
PHASE13-AdvancedEnhancements/
|
|
||||||
README.md
|
|
||||||
PHASE2-CLIWallet/
|
|
||||||
01-Milestone-01-WalletCrypto.md
|
|
||||||
01-Milestone-02-CLICommands.md
|
|
||||||
PHASE3-NetworkBootstrap/
|
|
||||||
01-Milestone-01-TestnetDeployment.md
|
|
||||||
01-Milestone-02-NetworkHardening.md
|
|
||||||
PHASE4-SmartContracts/
|
|
||||||
01-Milestone-01-ContractSDK.md
|
|
||||||
01-Milestone-02-ContractTooling.md
|
|
||||||
PHASE5-Governance/
|
|
||||||
01-Milestone-01-DAOLaunch.md
|
|
||||||
01-Milestone-02-GovernanceFeatures.md
|
|
||||||
PHASE6-QualityAssurance/
|
|
||||||
01-Milestone-01-Benchmarks.md
|
|
||||||
01-Milestone-02-Testing.md
|
|
||||||
01-Milestone-03-Optimization.md
|
|
||||||
PHASE7-ProductionReadiness/
|
|
||||||
01-Milestone-01-Security.md
|
|
||||||
01-Milestone-02-MainnetLaunch.md
|
|
||||||
01-Milestone-03-Ecosystem.md
|
|
||||||
PHASE9-SynorHosting/
|
|
||||||
01-Milestone-01-HostingCore.md
|
|
||||||
01-Milestone-02-HostingGateway.md
|
|
||||||
01-Milestone-03-HostingCLI.md
|
|
||||||
milestones/
|
|
||||||
phase-2-apis-cli.md
|
|
||||||
tutorials/
|
|
||||||
01-getting-started.md
|
|
||||||
02-building-a-wallet.md
|
|
||||||
03-smart-contracts.md
|
|
||||||
04-api-guide.md
|
|
||||||
README.md
|
|
||||||
formal/
|
|
||||||
README.md
|
|
||||||
kani/
|
|
||||||
README.md
|
|
||||||
proofs/
|
|
||||||
DifficultyConvergence.md
|
|
||||||
tla/
|
|
||||||
GHOSTDAGOrdering.tla
|
|
||||||
UTXOConservation.tla
|
|
||||||
monitoring/
|
|
||||||
alertmanager.yml
|
|
||||||
alerts.yml
|
|
||||||
prometheus.yml
|
|
||||||
grafana/
|
|
||||||
dashboards/
|
|
||||||
synor-testnet.json
|
|
||||||
scripts/
|
|
||||||
build-wasm.sh
|
|
||||||
docker-entrypoint.sh
|
|
||||||
generate-node-keys.sh
|
|
||||||
new-contract.sh
|
|
||||||
profile.sh
|
|
||||||
security-audit.sh
|
|
||||||
testnet-deploy.sh
|
|
||||||
sdk/
|
|
||||||
c/
|
|
||||||
.gitignore
|
|
||||||
CMakeLists.txt
|
|
||||||
README.md
|
|
||||||
examples/
|
|
||||||
compiler_example.c
|
|
||||||
crypto_example.c
|
|
||||||
dex_example.c
|
|
||||||
ibc_example.c
|
|
||||||
zk_example.c
|
|
||||||
include/
|
|
||||||
synor_compute.h
|
|
||||||
synor_crypto.h
|
|
||||||
src/
|
|
||||||
common.c
|
|
||||||
synor_compute.c
|
|
||||||
ruby/
|
|
||||||
README.md
|
|
||||||
synor_compute.gemspec
|
|
||||||
synor_rpc.gemspec
|
|
||||||
synor_storage.gemspec
|
|
||||||
synor_wallet.gemspec
|
|
||||||
examples/
|
|
||||||
compiler_example.rb
|
|
||||||
crypto_example.rb
|
|
||||||
dex_example.rb
|
|
||||||
ibc_example.rb
|
|
||||||
zk_example.rb
|
|
||||||
lib/
|
|
||||||
synor_bridge.rb
|
|
||||||
synor_compute.rb
|
|
||||||
synor_contract.rb
|
|
||||||
synor_database.rb
|
|
||||||
synor_economics.rb
|
|
||||||
synor_governance.rb
|
|
||||||
synor_hosting.rb
|
|
||||||
synor_mining.rb
|
|
||||||
synor_privacy.rb
|
|
||||||
synor_rpc.rb
|
|
||||||
... and 2 more files
|
|
||||||
test/
|
|
||||||
test_tensor.rb
|
|
||||||
test_types.rb
|
|
||||||
src/
|
|
||||||
lib.rs
|
|
||||||
tests/
|
|
||||||
cross_crate_integration.rs
|
|
||||||
phase13_integration.rs
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Key Config Files
|
|
||||||
|
|
||||||
- `.github/workflows/ci.yml`
|
|
||||||
- `.github/workflows/release-wallet.yml`
|
|
||||||
- `.github/workflows/release.yml`
|
|
||||||
- `.github/workflows/security.yml`
|
|
||||||
- `Cargo.toml`
|
|
||||||
- `Dockerfile`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Rules
|
|
||||||
|
|
||||||
<!-- Add project-specific rules for the AI assistant. Examples: -->
|
|
||||||
<!-- - Always use TypeScript strict mode -->
|
|
||||||
<!-- - Prefer functional components over class components -->
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
||||||
{
|
|
||||||
"mcpServers": {
|
|
||||||
"filesystem": {
|
|
||||||
"command": "npx",
|
|
||||||
"args": [
|
|
||||||
"-y",
|
|
||||||
"@modelcontextprotocol/server-filesystem",
|
|
||||||
"/Users/researchfellow/Desktop/G1 Technologies/synor.cc"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"git": {
|
|
||||||
"command": "npx",
|
|
||||||
"args": [
|
|
||||||
"-y",
|
|
||||||
"@modelcontextprotocol/server-git",
|
|
||||||
"--repository",
|
|
||||||
"/Users/researchfellow/Desktop/G1 Technologies/synor.cc"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"context7": {
|
|
||||||
"url": "https://mcp.context7.com/mcp",
|
|
||||||
"headers": {}
|
|
||||||
},
|
|
||||||
"playwright": {
|
|
||||||
"command": "npx",
|
|
||||||
"args": [
|
|
||||||
"-y",
|
|
||||||
"@playwright/mcp@latest"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -4,7 +4,7 @@ version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
description = "Synor Blockchain - Quantum-secure decentralized cloud computing platform"
|
description = "Synor Blockchain - Quantum-secure decentralized cloud computing platform"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
repository = "https://git.misar.io/misaradmin/synor"
|
repository = "https://github.com/synorcc/synor"
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
@ -83,7 +83,7 @@ version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["Synor Team <team@synor.cc>"]
|
authors = ["Synor Team <team@synor.cc>"]
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
repository = "https://git.misar.io/misaradmin/synor"
|
repository = "https://github.com/synorcc/synor"
|
||||||
homepage = "https://synor.cc"
|
homepage = "https://synor.cc"
|
||||||
description = "Quantum-secure decentralized cloud computing platform"
|
description = "Quantum-secure decentralized cloud computing platform"
|
||||||
rust-version = "1.75"
|
rust-version = "1.75"
|
||||||
|
|
|
||||||
20
MISAR.md
20
MISAR.md
|
|
@ -1,20 +0,0 @@
|
||||||
# synor.cc
|
|
||||||
|
|
||||||
## Project Context
|
|
||||||
|
|
||||||
<!-- Describe your project here. Misar Code reads this file to understand your codebase. -->
|
|
||||||
|
|
||||||
## Rules
|
|
||||||
|
|
||||||
<!-- Add project-specific rules for the AI assistant. Examples: -->
|
|
||||||
<!-- - Always use TypeScript strict mode -->
|
|
||||||
<!-- - Prefer functional components over class components -->
|
|
||||||
<!-- - Use pnpm as the package manager -->
|
|
||||||
|
|
||||||
## Stack
|
|
||||||
|
|
||||||
<!-- List your tech stack so the AI gives relevant suggestions. Examples: -->
|
|
||||||
<!-- - Framework: Next.js 15 (App Router) -->
|
|
||||||
<!-- - Language: TypeScript -->
|
|
||||||
<!-- - Styling: Tailwind CSS -->
|
|
||||||
<!-- - Database: PostgreSQL -->
|
|
||||||
14
README.md
14
README.md
|
|
@ -11,22 +11,20 @@ Quantum-secure decentralized cloud computing platform built on DAG-based consens
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### Desktop Wallet (v0.1.1)
|
### Desktop Wallet
|
||||||
|
|
||||||
Download the latest release for your platform:
|
Download the latest release for your platform:
|
||||||
|
|
||||||
| Platform | Download | Notes |
|
| Platform | Download | Notes |
|
||||||
|----------|----------|-------|
|
|----------|----------|-------|
|
||||||
| **macOS (Apple Silicon)** | `Synor-Wallet_0.1.1_aarch64.dmg` | Drag to Applications |
|
| **macOS (Apple Silicon)** | `Synor-Wallet_x.x.x_aarch64.dmg` | Drag to Applications |
|
||||||
| **macOS (Intel)** | `Synor-Wallet_0.1.1_x64.dmg` | Drag to Applications |
|
| **macOS (Intel)** | `Synor-Wallet_x.x.x_x64.dmg` | Drag to Applications |
|
||||||
| **Windows** | `Synor-Wallet_0.1.1_x64_en-US.msi` | Run installer (recommended) |
|
| **Windows** | `Synor-Wallet_x.x.x_x64_en-US.msi` | Run installer (recommended) |
|
||||||
| **Windows (portable)** | `Synor-Wallet_0.1.1_x64-setup.exe` | Alternative installer |
|
| **Windows (portable)** | `Synor-Wallet_x.x.x_x64-setup.exe` | Alternative installer |
|
||||||
| **Linux** | `Synor-Wallet_0.1.1_amd64.AppImage` | `chmod +x && ./` |
|
| **Linux** | `Synor-Wallet_x.x.x_amd64.AppImage` | `chmod +x && ./` |
|
||||||
|
|
||||||
**First launch on macOS**: Right-click → Open (to bypass Gatekeeper if not code-signed)
|
**First launch on macOS**: Right-click → Open (to bypass Gatekeeper if not code-signed)
|
||||||
|
|
||||||
See [Desktop Wallet README](apps/desktop-wallet/README.md) for detailed features and development guide.
|
|
||||||
|
|
||||||
### Node Daemon (synord)
|
### Node Daemon (synord)
|
||||||
|
|
||||||
Download pre-built binaries:
|
Download pre-built binaries:
|
||||||
|
|
|
||||||
|
|
@ -1,243 +0,0 @@
|
||||||
# Synor Desktop Wallet
|
|
||||||
|
|
||||||
A secure desktop wallet for the Synor blockchain network with post-quantum cryptography support (Dilithium3).
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- **24-word BIP39 Mnemonic**: Industry-standard seed phrase generation
|
|
||||||
- **Post-Quantum Signatures**: Dilithium3 (NIST FIPS 204) for future-proof security
|
|
||||||
- **QR Code Generation**: Easily share receive addresses with scannable QR codes
|
|
||||||
- **OS Keychain Integration**: Secure storage via macOS Keychain, Windows Credential Manager, or Linux Secret Service
|
|
||||||
- **System Tray**: Minimize to tray for background operation
|
|
||||||
- **Auto-Updates**: Built-in updater for seamless version upgrades (when code-signed)
|
|
||||||
- **Multiple Addresses**: Generate and manage multiple receiving addresses
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
### Download Pre-built Binaries
|
|
||||||
|
|
||||||
Download the latest release from [GitHub Releases](https://github.com/g1-technologies/synor/releases):
|
|
||||||
|
|
||||||
| Platform | File | Notes |
|
|
||||||
|----------|------|-------|
|
|
||||||
| **macOS (Apple Silicon)** | `Synor-Wallet_x.x.x_aarch64.dmg` | M1/M2/M3 Macs |
|
|
||||||
| **macOS (Intel)** | `Synor-Wallet_x.x.x_x64.dmg` | Intel Macs |
|
|
||||||
| **Windows** | `Synor-Wallet_x.x.x_x64_en-US.msi` | Recommended installer |
|
|
||||||
| **Windows (portable)** | `Synor-Wallet_x.x.x_x64-setup.exe` | Alternative installer |
|
|
||||||
| **Linux** | `Synor-Wallet_x.x.x_amd64.AppImage` | Universal Linux |
|
|
||||||
|
|
||||||
### macOS First Launch
|
|
||||||
|
|
||||||
If the app is not code-signed, macOS Gatekeeper will block it. To bypass:
|
|
||||||
1. Right-click the app → Open
|
|
||||||
2. Click "Open" in the dialog
|
|
||||||
|
|
||||||
Or run from terminal:
|
|
||||||
```bash
|
|
||||||
xattr -cr /Applications/Synor\ Wallet.app
|
|
||||||
```
|
|
||||||
|
|
||||||
## Development
|
|
||||||
|
|
||||||
### Prerequisites
|
|
||||||
|
|
||||||
- **Node.js 20+**
|
|
||||||
- **pnpm** (`npm install -g pnpm`)
|
|
||||||
- **Rust 1.75+** (`curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`)
|
|
||||||
- **Tauri CLI** (`cargo install tauri-cli`)
|
|
||||||
|
|
||||||
**macOS additional:**
|
|
||||||
```bash
|
|
||||||
brew install rocksdb
|
|
||||||
```
|
|
||||||
|
|
||||||
**Linux additional:**
|
|
||||||
```bash
|
|
||||||
sudo apt-get install -y \
|
|
||||||
libgtk-3-dev \
|
|
||||||
libwebkit2gtk-4.1-dev \
|
|
||||||
libsoup-3.0-dev \
|
|
||||||
libjavascriptcoregtk-4.1-dev \
|
|
||||||
libappindicator3-dev \
|
|
||||||
librsvg2-dev \
|
|
||||||
patchelf \
|
|
||||||
libclang-dev \
|
|
||||||
llvm-dev
|
|
||||||
```
|
|
||||||
|
|
||||||
### Development Mode
|
|
||||||
|
|
||||||
#### Full Development (with Rust backend)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd apps/desktop-wallet
|
|
||||||
pnpm install
|
|
||||||
pnpm tauri:dev
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Browser Preview Mode (UI only)
|
|
||||||
|
|
||||||
For rapid UI development without compiling Rust:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd apps/desktop-wallet
|
|
||||||
pnpm install
|
|
||||||
pnpm dev
|
|
||||||
```
|
|
||||||
|
|
||||||
Then open http://localhost:1420 in your browser.
|
|
||||||
|
|
||||||
> **Note**: Browser preview mode uses mock data. Wallet operations (create, import, sign) are simulated.
|
|
||||||
|
|
||||||
### Build for Production
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd apps/desktop-wallet
|
|
||||||
pnpm install
|
|
||||||
pnpm tauri:build
|
|
||||||
```
|
|
||||||
|
|
||||||
Output locations:
|
|
||||||
- **macOS**: `src-tauri/target/release/bundle/dmg/`
|
|
||||||
- **Windows**: `src-tauri/target/release/bundle/msi/`
|
|
||||||
- **Linux**: `src-tauri/target/release/bundle/appimage/`
|
|
||||||
|
|
||||||
### Docker Development
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd apps/desktop-wallet
|
|
||||||
docker-compose -f docker-compose.dev.yml up
|
|
||||||
```
|
|
||||||
|
|
||||||
Runs frontend at http://localhost:19420
|
|
||||||
|
|
||||||
### Testing
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Run Playwright E2E tests
|
|
||||||
pnpm test
|
|
||||||
|
|
||||||
# Run with UI
|
|
||||||
pnpm test:ui
|
|
||||||
|
|
||||||
# Run headed (visible browser)
|
|
||||||
pnpm test:headed
|
|
||||||
```
|
|
||||||
|
|
||||||
## Project Structure
|
|
||||||
|
|
||||||
```
|
|
||||||
apps/desktop-wallet/
|
|
||||||
├── src/ # React frontend
|
|
||||||
│ ├── components/ # Reusable UI components
|
|
||||||
│ ├── pages/ # Route pages
|
|
||||||
│ │ ├── Welcome.tsx # Create/import wallet
|
|
||||||
│ │ ├── Dashboard.tsx # Balance overview
|
|
||||||
│ │ ├── Send.tsx # Send transactions
|
|
||||||
│ │ ├── Receive.tsx # Receive with QR codes
|
|
||||||
│ │ ├── Transactions.tsx # Transaction history
|
|
||||||
│ │ └── Settings.tsx # App settings
|
|
||||||
│ ├── store/ # Zustand state management
|
|
||||||
│ │ ├── wallet.ts # Wallet state
|
|
||||||
│ │ ├── node.ts # Node connection state
|
|
||||||
│ │ └── mining.ts # Mining state
|
|
||||||
│ ├── lib/ # Utilities
|
|
||||||
│ │ └── tauri.ts # Tauri invoke wrapper
|
|
||||||
│ └── App.tsx # Route definitions
|
|
||||||
├── src-tauri/ # Rust backend
|
|
||||||
│ ├── src/
|
|
||||||
│ │ ├── commands.rs # Tauri command handlers
|
|
||||||
│ │ ├── keychain.rs # OS keychain integration
|
|
||||||
│ │ ├── crypto.rs # Cryptographic operations
|
|
||||||
│ │ └── lib.rs # Main library
|
|
||||||
│ ├── Cargo.toml # Rust dependencies
|
|
||||||
│ ├── tauri.conf.json # Tauri configuration
|
|
||||||
│ └── icons/ # App icons
|
|
||||||
├── e2e/ # Playwright E2E tests
|
|
||||||
├── playwright.config.ts # Test configuration
|
|
||||||
└── package.json # Node.js dependencies
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configuration
|
|
||||||
|
|
||||||
### Tauri Configuration
|
|
||||||
|
|
||||||
Edit `src-tauri/tauri.conf.json`:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"app": {
|
|
||||||
"windows": [{
|
|
||||||
"title": "Synor Wallet",
|
|
||||||
"width": 1024,
|
|
||||||
"height": 768,
|
|
||||||
"minWidth": 800,
|
|
||||||
"minHeight": 600
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
"plugins": {
|
|
||||||
"updater": {
|
|
||||||
"endpoints": ["https://releases.synor.io/wallet/{{target}}/{{arch}}/{{current_version}}"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Security
|
|
||||||
|
|
||||||
The Content Security Policy (CSP) is configured to:
|
|
||||||
- Allow connections to `*.synor.io` and localhost
|
|
||||||
- Block inline scripts (except WASM)
|
|
||||||
- Prevent embedding in iframes
|
|
||||||
|
|
||||||
## Embedded Node (Optional)
|
|
||||||
|
|
||||||
The wallet can optionally include a full node for decentralized operation:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Build with embedded node support
|
|
||||||
cargo build --release --features embedded-node
|
|
||||||
```
|
|
||||||
|
|
||||||
This enables:
|
|
||||||
- Running a full node inside the wallet
|
|
||||||
- Mining directly from the wallet
|
|
||||||
- No external RPC dependency
|
|
||||||
|
|
||||||
## Changelog
|
|
||||||
|
|
||||||
### v0.1.1 (2026-02-02)
|
|
||||||
|
|
||||||
**New Features:**
|
|
||||||
- QR code generation on Receive page for easy address sharing
|
|
||||||
- Improved navigation flow on unlock screen
|
|
||||||
|
|
||||||
**Bug Fixes:**
|
|
||||||
- Fixed app crash on macOS after installation (Tauri 2.0 plugin configuration)
|
|
||||||
- Fixed icon bit depth compatibility issue (16-bit to 8-bit RGBA)
|
|
||||||
- Removed deprecated plugin scope configurations
|
|
||||||
|
|
||||||
**Technical:**
|
|
||||||
- Updated to Tauri 2.0 stable plugin APIs
|
|
||||||
- Added missing Rust dependencies (`once_cell`, `md5`)
|
|
||||||
- Removed duplicate imports in commands.rs
|
|
||||||
|
|
||||||
### v0.1.0 (Initial Release)
|
|
||||||
|
|
||||||
- Basic wallet creation and import
|
|
||||||
- Send/receive SYN tokens
|
|
||||||
- Transaction history
|
|
||||||
- Multiple address support
|
|
||||||
- OS keychain integration
|
|
||||||
- System tray support
|
|
||||||
|
|
||||||
## Security Notes
|
|
||||||
|
|
||||||
- **Seed phrases** are encrypted with Argon2id and stored in OS keychain
|
|
||||||
- **Private keys** are derived using BIP32 HD wallet standard
|
|
||||||
- **Transactions** are signed locally; private keys never leave the device
|
|
||||||
- **Post-quantum signatures** use Dilithium3 (NIST FIPS 204)
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT OR Apache-2.0
|
|
||||||
Loading…
Add table
Reference in a new issue