BTCPay Server plugin for Lethean (LTHN) payments
Find a file
ravaga 595d88ceaa
Adapt BTCPay Server plugin for Zano cryptocurrency
Fork of btcpayserver-monero-plugin, fully adapted for Zano's RPC API.

Key changes from the Monero plugin:
- Integrated addresses with payment_id (replaces Monero subaddresses)
- Payment detection via get_bulk_payments polling every 15s
  (Zano has no block-notify/tx-notify callbacks)
- Daemon RPC: getinfo with flags (replaces Monero's get_info)
- Wallet RPC: get_wallet_info for height (replaces getheight)
- Fixed 0.01 ZANO network fee (no dynamic fee estimation)
- Rate source: CoinGecko (ZANO_BTC)
- Simplified store UI: no account management, no RPC wallet creation

Removed Monero-specific features:
- Subaddress/account system (CreateAddress, GetAccounts, etc.)
- Block/tx notification callback controller
- View-only wallet creation via RPC (generate_from_keys)
- HTTP Basic auth on RPC client
- Dynamic fee estimation

Added:
- Zano RPC models (MakeIntegratedAddress, GetBulkPayments, GetWalletInfo)
- Payment deduplication (Zano returns confirmed + mempool entries)
- Docker image: pavelravaga/zano:2.2.0.455
- Dockerfiles for source build and pre-built binary variants

Verified:
- All RPC calls tested against live Zano testnet
- Full E2E test: BTCPay Server checkout page with integrated address,
  QR code, and zano: URI payment link
- 23 unit tests pass
2026-03-25 12:10:45 +04:00
.github/workflows Adapt BTCPay Server plugin for Zano cryptocurrency 2026-03-25 12:10:45 +04:00
BTCPayServer.Plugins.IntegrationTests Adapt BTCPay Server plugin for Zano cryptocurrency 2026-03-25 12:10:45 +04:00
BTCPayServer.Plugins.UnitTests Adapt BTCPay Server plugin for Zano cryptocurrency 2026-03-25 12:10:45 +04:00
docker Adapt BTCPay Server plugin for Zano cryptocurrency 2026-03-25 12:10:45 +04:00
img Adapt BTCPay Server plugin for Zano cryptocurrency 2026-03-25 12:10:45 +04:00
Plugins/Zano Adapt BTCPay Server plugin for Zano cryptocurrency 2026-03-25 12:10:45 +04:00
submodules Bump Playwright to 1.57 and remove deprecated Microsoft.Playwright.CLI (#82) 2026-03-06 07:26:41 -06:00
.dockerignore Init commit 2025-01-08 18:27:19 +09:00
.editorconfig Add .NET SDK standardized code format check (#29) 2026-01-26 17:56:30 +01:00
.gitattributes Auto load wallet on start up if available and deprecate password 2026-02-09 12:04:51 +01:00
.gitignore Test invoice creation (#30) 2026-01-26 17:56:30 +01:00
.gitmodules Create submodules folder and update btc pay server 2026-01-26 17:56:30 +01:00
.globalconfig Add global AnalyzerConfig for custom Roslyn analyzer 2026-01-26 17:56:30 +01:00
btcpay-zano-plugin.sln Adapt BTCPay Server plugin for Zano cryptocurrency 2026-03-25 12:10:45 +04:00
CODE_OF_CONDUCT.md Adapt BTCPay Server plugin for Zano cryptocurrency 2026-03-25 12:10:45 +04:00
global.json Add unhappy scenario integration test with razor and context fixes 2026-01-26 17:56:30 +01:00
LICENSE.md Auto load wallet on start up if available and deprecate password 2026-02-09 12:04:51 +01:00
README.md Adapt BTCPay Server plugin for Zano cryptocurrency 2026-03-25 12:10:45 +04:00
SECURITY.md Adapt BTCPay Server plugin for Zano cryptocurrency 2026-03-25 12:10:45 +04:00

Zano BTCPay Server Plugin

Accept Zano payments in BTCPay Server. Privacy-focused cryptocurrency with confidential transactions and integrated addresses.

Warning

This plugin shares a single Zano wallet across all stores in the BTCPay Server instance. Use this plugin only if you are not sharing your instance.

How it works

When a customer creates an invoice, the plugin generates a unique integrated address (containing an embedded payment ID) for each payment. A background poller checks the wallet every 15 seconds for incoming payments matching pending invoices, tracks confirmations, and settles invoices based on your configured threshold.

Configuration

Environment variable Required Description Example
BTCPAY_ZANO_DAEMON_URI Yes URI of the zanod RPC interface http://127.0.0.1:11211
BTCPAY_ZANO_WALLET_DAEMON_URI Yes URI of the simplewallet RPC interface http://127.0.0.1:11212
BTCPAY_ZANO_WALLET_DAEMON_WALLETDIR No Directory where wallet files are stored (for auto-loading on startup) /wallet

Setup

1. Run Zano daemon

zanod --rpc-bind-ip=0.0.0.0 --rpc-bind-port=11211

2. Run Zano wallet in RPC mode

Create or open a wallet, then start simplewallet with RPC enabled:

simplewallet --wallet-file /path/to/wallet \
  --password "your-password" \
  --daemon-address 127.0.0.1:11211 \
  --rpc-bind-port 11212

For receive-only setups, create a watch-only wallet first:

simplewallet --generate-new-wallet /path/to/wallet
# Then from the wallet prompt:
save_watch_only /path/to/watch-only-wallet password

3. Install the plugin

In BTCPay Server, go to Server Settings > Plugins and install the Zano plugin. Then configure the environment variables above and restart.

4. Enable Zano for your store

Go to Store Settings > Zano to enable it and set your preferred confirmation threshold.

Docker

A Docker image with zanod and simplewallet is available:

docker pull pavelravaga/zano:2.2.0.455

Run the daemon:

docker run -d --name zanod \
  -p 11211:11211 \
  -v zano_data:/data \
  pavelravaga/zano:2.2.0.455

Run the wallet:

docker run -d --name zano_wallet \
  -p 11212:11212 \
  -v zano_wallet:/wallet \
  --entrypoint simplewallet \
  pavelravaga/zano:2.2.0.455 \
  --rpc-bind-ip=0.0.0.0 --rpc-bind-port=11212 \
  --daemon-address=zanod:11211 \
  --wallet-file=/wallet/wallet --password=""

Development

Requirements

  • .NET 8.0 SDK
  • Git
  • Docker and Docker Compose

Clone and build

git clone --recurse-submodules https://github.com/hyle-team/btcpayserver-zano-plugin
cd btcpayserver-zano-plugin
dotnet build btcpay-zano-plugin.sln

Run unit tests

dotnet test BTCPayServer.Plugins.UnitTests

Run integration tests

docker compose -f BTCPayServer.Plugins.IntegrationTests/docker-compose.yml run tests

Local development

Start the dev dependencies:

cd BTCPayServer.Plugins.IntegrationTests/
docker compose up -d dev

Create appsettings.dev.json in btcpayserver/BTCPayServer:

{
  "DEBUG_PLUGINS": "../../Plugins/Zano/bin/Debug/net8.0/BTCPayServer.Plugins.Zano.dll",
  "ZANO_DAEMON_URI": "http://127.0.0.1:11211",
  "ZANO_WALLET_DAEMON_URI": "http://127.0.0.1:11212"
}

Then run BTCPay Server with the plugin loaded.

Technical details

  • Address generation: Integrated addresses with random 8-byte payment IDs (unique per invoice)
  • Payment detection: Polls get_bulk_payments every 15 seconds
  • Fee: Fixed 0.01 ZANO per transaction
  • Divisibility: 12 decimal places
  • Rate source: CoinGecko (ZANO_BTC)
  • Confirmations: Configurable (0, 1, 10, or custom)

License

MIT