Compare commits

..

3 commits

Author SHA1 Message Date
Gulshan Yadav
0b249a1196 feat: add configuration files for MCP and update project documentation
Some checks failed
CI / Check (push) Failing after 2s
CI / Test (push) Failing after 2s
CI / Build (Linux x86_64) (push) Has been skipped
Security Audit / Vulnerability Scan (push) Failing after 2s
Security Audit / License & Security Policy (push) Failing after 2s
Security Audit / Static Analysis (Clippy) (push) Failing after 2s
Security Audit / Secret Detection (push) Failing after 2s
Security Audit / Check Outdated Dependencies (push) Failing after 2s
Security Audit / Unsafe Code Audit (push) Failing after 2s
Security Audit / Property-Based Testing (push) Failing after 2s
Security Audit / WASM Module Security (push) Failing after 2s
CI / Benchmarks (push) Has been skipped
CI / CI Success (push) Failing after 1s
2026-03-30 08:24:08 +05:30
Gulshan Yadav
d9fd97bb96 chore: migrate from GitHub to Forgejo (git.misar.io)
Some checks failed
CI / Check (push) Failing after 2s
CI / Test (push) Failing after 2s
CI / Build (Linux x86_64) (push) Has been skipped
Security Audit / Vulnerability Scan (push) Failing after 2s
Security Audit / License & Security Policy (push) Failing after 2s
Security Audit / Static Analysis (Clippy) (push) Failing after 2s
Security Audit / Secret Detection (push) Failing after 2s
Security Audit / Check Outdated Dependencies (push) Failing after 2s
Security Audit / Unsafe Code Audit (push) Failing after 2s
Security Audit / Property-Based Testing (push) Failing after 2s
Security Audit / WASM Module Security (push) Failing after 2s
CI / Benchmarks (push) Has been skipped
CI / CI Success (push) Failing after 1s
- Move .github/workflows/ to .forgejo/workflows/ (identical YAML, runner labels changed to self-hosted)
- Drop macOS/Windows CI matrix legs (no macOS/Windows runners on self-hosted act_runner)
- Update Cargo.toml repository URL to git.misar.io/misaradmin/synor
- Remove .github/dependabot.yml (not applicable on Forgejo)
2026-03-30 08:20:39 +05:30
Gulshan Yadav
563bfa3909 docs: add desktop wallet README and update main docs for v0.1.1
Some checks failed
CI / Check (ubuntu-latest) (push) Failing after 2s
CI / Test (ubuntu-latest) (push) Failing after 2s
Security Audit / Vulnerability Scan (push) Failing after 2s
Security Audit / License & Security Policy (push) Failing after 2s
Security Audit / Static Analysis (Clippy) (push) Failing after 2s
Security Audit / Secret Detection (push) Failing after 2s
Security Audit / Check Outdated Dependencies (push) Failing after 2s
Security Audit / Unsafe Code Audit (push) Failing after 2s
Security Audit / Property-Based Testing (push) Failing after 2s
Security Audit / WASM Module Security (push) Failing after 2s
CI / Check (macos-latest) (push) Has been cancelled
CI / Test (macos-latest) (push) Has been cancelled
CI / Build (ubuntu-latest) (push) Has been cancelled
CI / Build (macos-latest) (push) Has been cancelled
CI / Benchmarks (push) Has been cancelled
CI / CI Success (push) Has been cancelled
- Create comprehensive README for desktop-wallet with features, installation,
  development guide, project structure, and changelog
- Update main README with v0.1.1 version references
- Add link to desktop wallet README from main docs
- Document QR code feature, browser preview mode, and bug fixes
2026-02-02 17:07:13 +05:30
14 changed files with 983 additions and 394 deletions

18
.claude/settings.json Normal file
View file

@ -0,0 +1,18 @@
{
"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"
]
}
}

View file

@ -13,12 +13,8 @@ env:
jobs: jobs:
check: check:
name: Check (${{ matrix.os }}) name: Check
runs-on: ${{ matrix.os }} runs-on: self-hosted
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps: steps:
- name: Checkout repository - name: Checkout repository
@ -56,12 +52,8 @@ 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 (${{ matrix.os }}) name: Test
runs-on: ${{ matrix.os }} runs-on: self-hosted
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps: steps:
- name: Checkout repository - name: Checkout repository
@ -70,8 +62,7 @@ jobs:
- name: Install Rust toolchain - name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable uses: dtolnay/rust-toolchain@stable
- name: Install system dependencies (Linux) - name: Install system dependencies
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
@ -100,18 +91,9 @@ jobs:
run: cargo test --workspace --all-features run: cargo test --workspace --all-features
build: build:
name: Build (${{ matrix.os }}) name: Build (Linux x86_64)
runs-on: ${{ matrix.os }} runs-on: self-hosted
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
@ -120,8 +102,7 @@ jobs:
- name: Install Rust toolchain - name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable uses: dtolnay/rust-toolchain@stable
- name: Install system dependencies (Linux) - name: Install system dependencies
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
@ -160,14 +141,14 @@ jobs:
- name: Upload build artifacts - name: Upload build artifacts
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: ${{ matrix.artifact-name }} name: synor-linux-x86_64
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: ubuntu-latest runs-on: self-hosted
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]
@ -214,10 +195,9 @@ 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: ubuntu-latest runs-on: self-hosted
needs: [check, test, build] needs: [check, test, build]
if: always() if: always()
steps: steps:

View file

@ -0,0 +1,109 @@
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') }}

View file

@ -15,31 +15,17 @@ permissions:
jobs: jobs:
build-release: build-release:
name: Build Release (${{ matrix.target }}) name: Build Release (${{ matrix.target }})
runs-on: ${{ matrix.os }} runs-on: self-hosted
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
include: include:
- os: ubuntu-latest - target: x86_64-unknown-linux-gnu
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
- os: ubuntu-24.04-arm - target: aarch64-unknown-linux-gnu
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
@ -52,11 +38,10 @@ jobs:
with: with:
targets: ${{ matrix.target }} targets: ${{ matrix.target }}
- name: Install system dependencies (Linux) - name: Install system dependencies
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 gcc-aarch64-linux-gnu
- name: Cache cargo registry - name: Cache cargo registry
uses: actions/cache@v4 uses: actions/cache@v4
@ -78,82 +63,37 @@ jobs:
restore-keys: | restore-keys: |
${{ runner.os }}-${{ matrix.target }}-cargo-target-release- ${{ runner.os }}-${{ matrix.target }}-cargo-target-release-
- name: Build release binaries (Unix) - name: Build release binaries
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: Build release binaries (Windows) - name: Prepare release archive
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: Prepare release archive (Windows) - name: Upload release artifact
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 GitHub Release name: Create Forgejo Release
runs-on: ubuntu-latest runs-on: self-hosted
needs: build-release needs: build-release
steps: steps:
@ -172,10 +112,9 @@ 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 (only allow v followed by semver-like pattern) # Validate tag format
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
@ -183,7 +122,6 @@ 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
@ -192,8 +130,6 @@ 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
@ -216,10 +152,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" -o -name "*.zip" \) -exec sha256sum {} \; | sed 's|./[^/]*/||' >> ../CHANGELOG_BODY.md find . -name "*.tar.gz" -exec sha256sum {} \; | sed 's|./[^/]*/||' >> ../CHANGELOG_BODY.md
echo '```' >> CHANGELOG_BODY.md echo '```' >> CHANGELOG_BODY.md
- name: Create GitHub Release - name: Create 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 }}
@ -228,14 +164,12 @@ 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: ubuntu-latest runs-on: self-hosted
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') }}
@ -255,16 +189,12 @@ 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..."
# Add --dry-run to test first, remove for actual publish # Uncomment when ready to publish:
# cargo publish -p synor-types --dry-run # cargo publish -p synor-types
# cargo publish -p synor-crypto --dry-run # cargo publish -p synor-crypto
# ... etc
echo "Crate publishing configured but commented out - uncomment when ready" echo "Crate publishing configured but commented out - uncomment when ready"

View file

@ -21,12 +21,12 @@ jobs:
# ============================================================================ # ============================================================================
cargo-audit: cargo-audit:
name: Vulnerability Scan name: Vulnerability Scan
runs-on: ubuntu-latest runs-on: self-hosted
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Install Rust - name: Install Rust
uses: dtolnay/rust-action@stable uses: dtolnay/rust-toolchain@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: ubuntu-latest runs-on: self-hosted
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: ubuntu-latest runs-on: self-hosted
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Install Rust - name: Install Rust
uses: dtolnay/rust-action@stable uses: dtolnay/rust-toolchain@stable
with: with:
components: clippy components: clippy
@ -75,7 +75,7 @@ jobs:
# ============================================================================ # ============================================================================
secrets-scan: secrets-scan:
name: Secret Detection name: Secret Detection
runs-on: ubuntu-latest runs-on: self-hosted
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: ubuntu-latest runs-on: self-hosted
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Install Rust - name: Install Rust
uses: dtolnay/rust-action@stable uses: dtolnay/rust-toolchain@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: ubuntu-latest runs-on: self-hosted
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Install Rust - name: Install Rust
uses: dtolnay/rust-action@stable uses: dtolnay/rust-toolchain@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: ubuntu-latest runs-on: self-hosted
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-action@stable uses: dtolnay/rust-toolchain@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: ubuntu-latest runs-on: self-hosted
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Install Rust - name: Install Rust
uses: dtolnay/rust-action@stable uses: dtolnay/rust-toolchain@stable
with: with:
targets: wasm32-unknown-unknown targets: wasm32-unknown-unknown

View file

@ -1,59 +0,0 @@
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:
- "*"

View file

@ -1,195 +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-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') }}

4
.gitignore vendored
View file

@ -55,3 +55,7 @@ temp/
# Firebase # Firebase
.firebase/ .firebase/
**/.vite/ **/.vite/
# Secrets
credentials.json
*.p12

505
.misar/MISAR.md Normal file
View file

@ -0,0 +1,505 @@
# 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 -->

32
.misar/mcp.json Normal file
View file

@ -0,0 +1,32 @@
{
"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"
]
}
}
}

View file

@ -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://github.com/synorcc/synor" repository = "https://git.misar.io/misaradmin/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://github.com/synorcc/synor" repository = "https://git.misar.io/misaradmin/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 Normal file
View file

@ -0,0 +1,20 @@
# 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 -->

View file

@ -11,20 +11,22 @@ Quantum-secure decentralized cloud computing platform built on DAG-based consens
## Installation ## Installation
### Desktop Wallet ### Desktop Wallet (v0.1.1)
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_x.x.x_aarch64.dmg` | Drag to Applications | | **macOS (Apple Silicon)** | `Synor-Wallet_0.1.1_aarch64.dmg` | Drag to Applications |
| **macOS (Intel)** | `Synor-Wallet_x.x.x_x64.dmg` | Drag to Applications | | **macOS (Intel)** | `Synor-Wallet_0.1.1_x64.dmg` | Drag to Applications |
| **Windows** | `Synor-Wallet_x.x.x_x64_en-US.msi` | Run installer (recommended) | | **Windows** | `Synor-Wallet_0.1.1_x64_en-US.msi` | Run installer (recommended) |
| **Windows (portable)** | `Synor-Wallet_x.x.x_x64-setup.exe` | Alternative installer | | **Windows (portable)** | `Synor-Wallet_0.1.1_x64-setup.exe` | Alternative installer |
| **Linux** | `Synor-Wallet_x.x.x_amd64.AppImage` | `chmod +x && ./` | | **Linux** | `Synor-Wallet_0.1.1_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:

View file

@ -0,0 +1,243 @@
# 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