Compare commits
3 commits
wallet-v0.
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0b249a1196 | ||
|
|
d9fd97bb96 | ||
|
|
563bfa3909 |
14 changed files with 983 additions and 394 deletions
18
.claude/settings.json
Normal file
18
.claude/settings.json
Normal 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"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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:
|
||||||
109
.forgejo/workflows/release-wallet.yml
Normal file
109
.forgejo/workflows/release-wallet.yml
Normal 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') }}
|
||||||
|
|
@ -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"
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
59
.github/dependabot.yml
vendored
59
.github/dependabot.yml
vendored
|
|
@ -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:
|
|
||||||
- "*"
|
|
||||||
195
.github/workflows/release-wallet.yml
vendored
195
.github/workflows/release-wallet.yml
vendored
|
|
@ -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
4
.gitignore
vendored
|
|
@ -55,3 +55,7 @@ temp/
|
||||||
# Firebase
|
# Firebase
|
||||||
.firebase/
|
.firebase/
|
||||||
**/.vite/
|
**/.vite/
|
||||||
|
|
||||||
|
# Secrets
|
||||||
|
credentials.json
|
||||||
|
*.p12
|
||||||
|
|
|
||||||
505
.misar/MISAR.md
Normal file
505
.misar/MISAR.md
Normal 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
32
.misar/mcp.json
Normal 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"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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
20
MISAR.md
Normal 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 -->
|
||||||
14
README.md
14
README.md
|
|
@ -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:
|
||||||
|
|
|
||||||
243
apps/desktop-wallet/README.md
Normal file
243
apps/desktop-wallet/README.md
Normal 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
|
||||||
Loading…
Add table
Reference in a new issue