Files
PalladiumWallet/README.md
T
davide 46aca513b8 docs: add README with project overview and quickstart
Covers what Palladium Wallet is, the tech stack, build/test/run
commands and current implementation status.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-12 12:12:34 +02:00

6.0 KiB

Palladium Wallet

An SPV desktop wallet built specifically for the Palladium (PLM) cryptocurrency and optimized for its chain.

Unlike generic wallets adapted to many coins, Palladium Wallet is designed around Palladium's consensus parameters — a Bitcoin-derived UTXO chain with 2-minute blocks and LWMA difficulty — and centralizes them in a single network profile. This keeps it lightweight, predictable and faithful to the chain: no client-side difficulty recalculation (trust is anchored to hardcoded checkpoints), mandatory Merkle verification on every confirmed transaction, and a network client written specifically for Palladium's indexing server.

Features

  • Lightweight SPV: syncs against an indexing server (ElectrumX-like protocol) without downloading the full chain.
  • Security: seed and private keys encrypted on disk (AES-GCM, PBKDF2-SHA512), never in plaintext in logs or on the wire; every server response is validated with Merkle proofs + checkpoints.
  • HD wallet (BIP39/BIP32), SegWit/wrapped/legacy addresses, watch-only from xpub.
  • PSBT-centric: signing flows go through PSBT (offline / air-gapped / multisig).
  • Multi-network: mainnet, testnet, regtest.
  • GUI (Avalonia) and CLI on the same core.
  • Multilingual: Italian, English, Spanish, French, Portuguese, German.

Architecture

PalladiumWallet.sln
├─ src/Core/   Chain/ Crypto/ Wallet/ Spv/ Net/ Storage/  (no UI dependency)
├─ src/App/    Avalonia GUI
├─ src/Cli/    CLI on the same Core
└─ tests/      xUnit

Stack: .NET 8 + Avalonia UI + NBitcoin.


Development environment

You only need the .NET 8 SDK. The core and crypto are fully testable without the GUI or a real network.

Windows

  1. Install the .NET 8 SDK:
    winget install Microsoft.DotNet.SDK.8
    
    (alternatively, the installer from https://dotnet.microsoft.com/download/dotnet/8.0)
  2. Clone the repository and restore dependencies:
    git clone <repo-URL>
    cd PalladiumWallet
    dotnet restore
    

Linux

  1. Install the .NET 8 SDK through your distro's package manager, or without root via the official script:
    curl -sSL https://dot.net/v1/dotnet-install.sh | bash -s -- --channel 8.0
    export PATH="$HOME/.dotnet:$PATH" DOTNET_ROOT="$HOME/.dotnet"
    
    (add the two export lines to your ~/.bashrc to make them permanent)
  2. Clone and restore:
    git clone <repo-URL>
    cd PalladiumWallet
    dotnet restore
    

The GUI uses Avalonia, which runs natively on both platforms with no extra graphics dependencies.


Running it

GUI (with hot reload for development):

dotnet watch --project src/App

or a single run:

dotnet run --project src/App

CLI (same core, useful for scripts and headless environments):

dotnet run --project src/Cli -- <command>

Run without arguments for the full list of commands.


Running tests

Tests are the primary verification layer — the core logic and crypto run headless, without the GUI or a real network.

Run the whole suite:

dotnet test

Run a single test (or a group) by name:

dotnet test --filter "FullyQualifiedName~TestName"

Run only the tests in one project:

dotnet test tests/PalladiumWallet.Tests

Cross-implementation tests compare addresses, txids and PSBTs against reference golden vectors: a different address or txid is a blocking bug.


Building

Development build:

dotnet build

Windows publish (single self-contained executable):

dotnet publish src/App -r win-x64 -p:PublishSingleFile=true --self-contained

Linux publish (self-contained; the AppImage is then produced with PupNet Deploy):

dotnet publish src/App -r linux-x64 --self-contained

The application version is set in a single place: the <Version> tag in src/App/PalladiumWallet.App.csproj. It appears in the window title and is stamped into the published binaries.


User guide (quick)

First launch

  1. On first launch, choose where to store data (wallet, configuration, certificates) — the default path or a folder of your choice.
  2. Create a new wallet, restore from seed, or open an existing wallet.
  3. If you create a wallet, write the seed phrase down on paper: it will not be shown again. You can protect the file with a password.

Main tabs

  • History — list of transactions. Double-click a row to open the full detail (amount, fee, addresses, sizes, confirmations).
  • Send — recipient + amount (or "send all"), adjustable fee; for watch-only wallets a PSBT is produced to be signed offline.
  • Receive — next unused address, with a QR code and a Copy button.
  • Addresses — all derived addresses with balances; click for details (keys, derivation path).
  • Contacts — address book with labels.

Connection

  • The status indicator at the bottom shows the connection to the indexing server; tapping it opens the server settings.
  • Sync is SPV: it downloads only what concerns your wallet and verifies every confirmed transaction with a Merkle proof.

Settings and Help

  • Settings: language, display unit (PLM / mPLM / µPLM / sat), server.
  • Help: software information and version.

CLI in brief

# Wallet
dotnet run --project src/Cli -- create   [--words 12|24] [--kind segwit|wrapped|legacy] [--net mainnet|testnet|regtest] [--password P]
dotnet run --project src/Cli -- restore  "<mnemonic>" [...]
dotnet run --project src/Cli -- info     [--net ...] [--password P]

# Network
dotnet run --project src/Cli -- sync     [--server host[:port]] [--ssl]
dotnet run --project src/Cli -- send     --to ADDRESS (--amount X | --all) [--feerate sat/vB] [--broadcast]

The default wallet file is ~/.palladium-wallet/<network>/wallets/default.wallet.json (override with --file).


License

Released under the MIT License. See the LICENSE file.