Sideloadable Ledger Nano S Plus app for signing Radiant (RXD) transactions.
Hardware-wallet signing for the Radiant blockchain. Private keys stay on-device. Forked from LedgerHQ/app-bitcoin; adds a radiant Makefile variant and an on-device hashOutputHashes computation that Radiant consensus requires (and BCH's Ledger app does not produce).
Mainnet proofs — all three asset classes signed by this app:
| Asset | First Ledger-signed mainnet tx | Date |
|---|---|---|
| Plain RXD | de3574979f…56893743 |
2026-04-15 |
| Glyph NFT singleton | af0cd27d9c…6201c9 |
2026-04-16 |
| Glyph FT transfer (3-output, with FT change) | 5d5b2600d0…f047390 |
2026-04-20 |
Current tag: v0.0.5-security-fixes
Community-distributed. Not reviewed by Ledger. The device will show a persistent "This app is not genuine" banner when the app is open — that is expected for any unsigned community-built Ledger app and cannot be removed.
- Nano S Plus — other devices not supported yet
- P2PKH sends and receives (standard
1…Radiant addresses) - SLIP-44 coin type 512, BIP44 derivation path
m/44'/512'/0'/0/x - Integration with a patched Electron Radiant (branch
radiant-ledger-512) - Reproducible CI builds; SHA256s published on every release
- Security audit remediation — see Electron-Wallet's
SECURITY_AUDIT_2026-04-20.md. Fixescheck_output_displayableto use the Glyph-wrapper-awareoutput_script_p2pkh_offsethelper instead of a hardcoded offset, closing a class of change-address matching bug where attacker-crafted ref bytes could trick the firmware into hiding a funded output from the user's on-device review. - Unique diagnostic SW codes (0x6FB1..0x6FB5) per
handle_output_statereject branch, so hosts can distinguish firmware-reject reasons without a PRINTF-enabled build.
- Glyph NFT transfers (63-byte singleton template)
- Glyph FT transfers — full-balance sends (2 outputs) and partial sends with FT change (3+ outputs), via
MAX_OUTPUT_TO_CHECK=200buffer
- P2SH destinations (
3…addresses) and OP_RETURN memos - Glyph dMint / mint-authority spends (≥241-byte scripts exceed
MAX_OUTPUT_TO_CHECK) - Nano X, Stax, Flex
Existing Radiant wallets use m/44'/0'/... (Bitcoin's SLIP-44 coin type). This Ledger app uses m/44'/512'/... per the SLIP-0044 registry entry for RXD. If you want to move RXD onto this Ledger, send from your existing wallet's address to your new Ledger-derived address. Standard "upgrading to hardware wallet" flow — the old wallet isn't locked out, you just move the coins.
Prerequisites on Linux:
pip install ledgerblue
wget -q -O - https://raw.githubusercontent.com/LedgerHQ/udev-rules/master/add_udev_rules.sh | sudo bash
# Unplug + replug deviceBuild the app (requires Docker, ~2GB builder image download on first run):
git clone --recurse-submodules https://github.com/MudwoodLabs/app-radiant.git
cd app-radiant
git checkout v0.0.5-security-fixes
git submodule update --init --recursive
docker run --rm \
-v "$(pwd):/app" \
-u "$(id -u):$(id -g)" \
ghcr.io/ledgerhq/ledger-app-builder/ledger-app-builder-lite@sha256:b82bfff7862d890ea0c931f310ed1e9bce6efe2fac32986a2561aaa08bfc2834 \
bash -c "cd /app && make COIN=radiant BOLOS_SDK=\$NANOSP_SDK"Sideload to device (Nano S Plus unlocked, on dashboard):
python3 -m ledgerblue.loadApp \
--targetId 0x33100004 \
--targetVersion="" \
--apiLevel 25 \
--tlv \
--curve secp256k1 \
--path "44'/512'" \
--appFlags 0x0 \
--fileName bin/app.hex \
--appName "Radiant" \
--appVersion "0.0.5" \
--dataSize 512 \
--installparamsSize 64 \
--deleteApprove prompts on-device ("Allow unsafe manager" then "Install app Radiant from unverified source"). See BUILDER.md for reproducibility details.
Patched plugin lives at MudwoodLabs/Electron-Wallet@radiant-ledger-512. Clone, run from source, wizard defaults will pick up m/44'/512'/0' automatically.
Important workflow order: open the Radiant app on the device BEFORE you open the wallet in Electron Radiant. If the device is on the dashboard when Electron Radiant tries to talk to it, you'll get an SW 6702 error.
Have a Nano S Plus and some spare RXD? Open an issue here or ping on the Radiant Discord to get the pre-release install working on your device. We're validating across firmware versions and tx shapes before wider release.
MudwoodLabs/lib-app-bitcoinbranchradiant-v1— submodule with thehashOutputHashesC implementationMudwoodLabs/Electron-Walletbranchradiant-ledger-512— host-side wallet pluginMudwoodLabs/radiant-ledger-app— planning, Python oracle, golden-vector fixtures, investigation notes
Radiant's signature preimage inserts a 32-byte hashOutputHashes field between nSequence and hashOutputs (radiant-node/src/script/interpreter.cpp:2636-2650). BCH's signing path doesn't produce this field, so stock BCH-family Ledger apps produce signatures that Radiant mainnet rejects.
This app's C diff extends lib-app-bitcoin to compute hashOutputHashes on-device from the streaming output bytes it already hashes for the standard hashedOutputs field. Zero additional host-trust introduced. Full arc documented at radiant-ledger-app.
- Base app forked from LedgerHQ/app-bitcoin
- Radiant network: RadiantBlockchain
- Radiant JS preimage reference: radiantjs
License: Apache-2.0 (inherited from upstream app-bitcoin).
Upstream LedgerHQ/app-bitcoin README (preserved for reference)
Bitcoin wallet application for Ledger devices up to version 1.6.5.
Warning This is currently only used in order to support and maintain altcoins cloned from Bitcoin. The last stable version of the app as it was used for Bitcoin is kept in the branch legacy-1.6.6 for future reference and does not support devices starting Stax.
Versions starting from 2.0.0 are at https://github.com/LedgerHQ/app-bitcoin-new.
Ledger Blue is not maintained anymore, but the app can still be compiled for this target using the branch blue-final-release.
The original beta specification can be found at https://ledgerhq.github.io/btchip-doc/bitcoin-technical-beta.html — with the regular set of APDUs for standard wallet operations enabled.