DigiByte v9.26.0-rc21 Release Notes
WARNING: This is a TESTNET-ONLY release. DO NOT use on mainnet.
Development Branch: https://github.com/DigiByte-Core/digibyte/tree/feature/digidollar-v1
Join the Developer Chat: https://app.gitter.im/#/room/#digidollar:gitter.im
⚠️ SAME TESTNET — NO RESET
RC21 uses the same testnet19 chain as RC19/RC20. No data migration needed.
- No chain reset — your blockchain data, wallets, and oracle keys all carry over
- Same ports: P2P 12033, RPC 14025
- Same oracle consensus: 5-of-9 Schnorr threshold
- Just update the binary and restart your node
🔑 Oracle Operators — IMPORTANT
After upgrading to RC21, you must reload your oracle wallet and restart your oracle:
digibyte-cli -testnet loadwallet "oracle"
digibyte-cli -testnet -rpcwallet=oracle startoracle <your_oracle_id>Qt users: File → Open Wallet → oracle, then Help → Debug Window → Console → startoracle <your_oracle_id>
⚠️ After every node restart, you must re-load your wallet and re-start the oracle. Your key persists in the wallet — you never need to run
createoraclekeyagain.
What's New in RC21
RC21 is a critical hotfix release that fixes the IBD sync failure at block 7586 that was still affecting fresh nodes on RC20. Despite the fix in RC20 for the bad-oracle-price IBD path, a second code path — the ERR (Emergency Redemption Ratio) pre-validation check — was blocking mints during IBD when no oracle price was available.
If you cannot sync past block 7586 on RC20, upgrade to RC21.
🐛 Critical Bug Fix
IBD Sync Still Stuck at Block 7586 — ERR Minting Block
Reported by: @beggsdl and community testers on Gitter (Feb 16, 2026)
The problem: Fresh nodes syncing the testnet chain still get permanently stuck at block 7586 with minting-blocked-during-err. The RC20 fix addressed the bad-oracle-price path, but a second validation check — ShouldBlockMintingDuringERR() — was also rejecting the block.
Root cause: During IBD, oracle price is unavailable (returns 0). The first few MINT transactions in the chain pass the ERR check because totalDDSupply == 0 (no liabilities = minting allowed, early return). But once earlier mints are connected and totalDDSupply > 0, ShouldBlockMinting() sees:
totalDDSupply > 0→ can't short-circuitoraclePriceMicroUSD == 0→ fail-closed → blocks all mints
The ERR pre-validation check at line 1881 of validation.cpp was the only oracle-dependent check that did NOT guard on ctx.skipOracleValidation. Every other oracle check (lines 650, 656, 905, 1005, 1071, 1271, 1488) correctly skips during IBD.
The fix: Added !ctx.skipOracleValidation guard to the ERR minting check, matching the pattern used everywhere else in DigiDollar validation:
// Before (bug):
if (txType == DD_TX_MINT && ShouldBlockMintingDuringERR(ctx)) {
// After (fix):
if (txType == DD_TX_MINT && !ctx.skipOracleValidation && ShouldBlockMintingDuringERR(ctx)) {Security analysis: This is safe because:
- During IBD, blocks were already validated and accepted by the network
skipOracleValidationis ONLY set true during IBD or catch-up sync- Once synced to tip,
skipOracleValidation=falseand ERR enforcement is fully active - A malicious node cannot exploit this because IBD only processes blocks from the best chain
Impact: Fresh nodes now sync the entire chain without getting stuck. This was the last remaining IBD blocker.
🧪 Testing
New Tests (TDD)
3 new test cases added to digidollar_skip_oracle_tests.cpp:
| Test | What It Verifies |
|---|---|
ibd_err_blocks_minting_with_nonzero_supply
| IBD with zero oracle + nonzero DD supply passes (the exact bug scenario) |
ibd_err_check_with_valid_oracle_and_healthy_system
| Healthy system passes in both IBD and non-IBD |
non_ibd_err_still_blocks_when_active
| ERR still blocks minting in non-IBD mode (security preserved) |
Test Results
- 1,961 C++ unit tests — all passing
- DigiDollar functional tests — all passing (mint, activation, oracle, redeem, protection, persistence, redemption_e2e)
- 6 skip-oracle tests — all passing (3 existing + 3 new)
📊 All Changes: RC20 → RC21
| Category | Count | Summary |
|---|---|---|
| 🐛 Bug fixes | 1 | ERR minting check blocks IBD sync at block 7586 |
| 🧪 Tests | 3 | TDD tests for IBD ERR minting bypass |
| 📦 Version | 1 | Bump to v9.26.0-rc21, update wallet image |
Total: 2 commits
Technical Changes
| File | Change |
|---|---|
src/digidollar/validation.cpp
| Add !ctx.skipOracleValidation guard to ERR minting check (line 1881)
|
src/test/digidollar_skip_oracle_tests.cpp
| 3 new IBD ERR test cases |
configure.ac
| Version bump RC20 → RC21 |
src/qt/res/icons/digibyte_wallet.png
| Updated wallet splash image |
Commits Since RC20
Bug Fixes
e4fbe10d39 fix: skip ERR minting check during IBD to prevent sync failure at block 7586
Version
<pending> Bump version to v9.26.0-rc21, update wallet image
What is DigiDollar?
DigiDollar is a USD-pegged stablecoin built natively into DigiByte. It uses an over-collateralized model where users lock DGB to mint DUSD at the current oracle price of DGB.
The world's first truly decentralized stablecoin native on a UTXO blockchain, enabling stable value transactions without centralized control.
DGB becomes the strategic reserve asset (21B max, only ~1.94 DGB per person on Earth). Everything happens inside DigiByte Core wallet. You never give up control of your private keys. No centralized company, fund or pool. Pure decentralization.
Learn more: https://digibyte.io/digidollar
Wallet GUI Guide
How to Use DigiDollar in the Wallet
- Open the DigiDollar Tab — Click "DigiDollar" in the top navigation bar (will show activation status until BIP9 activates)
- Mint DigiDollars — Lock DGB as collateral to create DUSD. Enter the amount and confirm.
- Send DigiDollars — Use the DigiDollar tab's send function or "Send DGB" with a DD address
- Receive DigiDollars — Click "Receive DGB" to get your DD-capable address
- View History — DD Transactions tab shows complete transaction history (auto-refreshes)
- Redeem DigiDollars — Burn DUSD to unlock your DGB collateral after the lock period expires
- Coin Control — Use manual DD input selection for advanced redemptions
- Address Book — Save frequently used DD addresses for quick sending
- Export History — Export DD transactions to CSV for record keeping
- Mask Values — Enable "Mask Values" to hide all balances and amounts across DGB and DigiDollar tabs for privacy
Oracle Operator Setup
Prerequisites
- DigiByte Core RC21 built from source with curl support (or download the binary)
- An assigned oracle ID (0–8 for testnet, contact the maintainer)
New Oracle Setup (First Time)
# Step 1: Start your node
digibyted -testnet -daemon
# Step 2: Create a wallet
digibyte-cli -testnet createwallet "oracle"
# Step 3: Generate your oracle key (one-time)
digibyte-cli -testnet -rpcwallet=oracle createoraclekey <your_oracle_id>
# Step 4: Start the oracle
digibyte-cli -testnet -rpcwallet=oracle startoracle <your_oracle_id>Existing Oracle — Upgrading from RC20
No chain reset. Just update the binary and restart:
# Step 1: Stop your node
digibyte-cli -testnet stop
# Step 2: Replace the binary with RC21
# Step 3: Start your node
digibyted -testnet -daemon
# Step 4: Load your wallet and start oracle
digibyte-cli -testnet loadwallet "oracle"
digibyte-cli -testnet -rpcwallet=oracle startoracle <your_oracle_id>Existing Oracle — Upgrading from RC18 or Earlier
Your oracle keys are safe. Copy your oracle wallet from the old testnet directory to testnet19:
- Before deleting old data, copy your oracle wallet:
- Linux: Copy
~/.digibyte/testnet18/wallets/oracle/to a safe location - Windows: Copy
%APPDATA%\DigiByte\testnet18\wallets\oracle\to a safe location - macOS: Copy
~/Library/Application Support/DigiByte/testnet18/wallets/oracle/to a safe location
- Linux: Copy
- Install RC21 and start the node (it uses the
testnet19directory) - Copy your saved oracle wallet into testnet19:
- Linux:
~/.digibyte/testnet19/wallets/oracle/ - Windows:
%APPDATA%\DigiByte\testnet19\wallets\oracle\ - macOS:
~/Library/Application Support/DigiByte/testnet19/wallets/oracle/
- Linux:
- Load and start your oracle:
digibyte-cli -testnet loadwallet "oracle" digibyte-cli -testnet -rpcwallet=oracle startoracle <your_oracle_id>
Qt Wallet Users
- Start DigiByte Qt with
-testnet - Go to File → Open Wallet → oracle to load your wallet
- Go to Help → Debug Window → Console
- Type:
startoracle <your_oracle_id>
Current Oracle Operators (Testnet)
| ID | Operator | Status |
|---|---|---|
| 0 | Jared | ✅ Active |
| 1 | Green Candle | ✅ Active |
| 2 | Bastian | ✅ Active |
| 3 | DanGB | ✅ Active |
| 4 | Shenger | ✅ Active |
| 5 | Ycagel | ✅ Active |
| 6 | Aussie Epic | ✅ Active |
| 7 | LookIntoMyEyes | ✅ Active |
| 8 | JohnnyLawDGB | ✅ Active |
For the complete guide, see DIGIDOLLAR_ORACLE_SETUP.md.
Complete RPC Command Reference
DigiDollar Commands (Wallet)
| Command | Description |
|---|---|
mintdigidollar
| Mint DigiDollars by locking DGB as collateral |
senddigidollar
| Send DigiDollars to another address |
redeemdigidollar
| Redeem DigiDollars to unlock DGB collateral |
getdigidollarbalance
| Show your DigiDollar balance |
listdigidollarpositions
| List your active collateral positions |
listdigidollartxs
| List your DigiDollar transaction history |
getdigidollaraddress
| Get or create a DigiDollar receive address |
validateddaddress
| Validate a DigiDollar address |
listdigidollaraddresses
| List all DigiDollar addresses in your wallet |
importdigidollaraddress
| Import a DigiDollar address for watch-only |
getdigidollarstats
| Get network-wide DigiDollar statistics |
getdigidollardeploymentinfo
| Get DigiDollar activation/deployment status |
calculatecollateralrequirement
| Calculate DGB collateral needed for a DD mint |
estimatecollateral
| Estimate collateral requirement by tier |
getdcamultiplier
| Get the current DCA multiplier for collateral |
getredemptioninfo
| Get info about redeeming a specific position |
getprotectionstatus
| Check if liquidation protection is active |
Oracle Commands
| Command | Description |
|---|---|
createoraclekey <id>
| Generate a new oracle Schnorr keypair (one-time) |
getoraclepubkey <id>
| Show the oracle public key stored in your wallet |
startoracle <id>
| Start running as an oracle operator |
stoporacle <id>
| Stop your oracle |
getoracleprice
| Get the consensus price |
getalloracleprices
| Per-oracle breakdown |
getoracles
| Network-wide oracle status |
listoracle
| Show your local oracle status |
sendoracleprice
| Manually submit a price (testing) |
Upgrade Notes
Upgrading from RC20
No chain reset. Simply replace the binary and restart:
- Stop your node:
digibyte-cli -testnet stop - Replace the binary with the RC21 download
- Start your node:
digibyted -testnet -daemon(or launch Qt) - Reload your oracle (if applicable — see Oracle section above)
Your blockchain data, wallets, oracle keys, and all configuration carry over unchanged.
Upgrading from RC19
Same as above — RC21 is fully backward-compatible with the testnet19 chain.
Upgrading from RC18 or Earlier
RC19 reset the testnet chain. If you're coming from RC18 or earlier, follow the RC19 migration steps:
- Save your oracle wallet (if you run an oracle — see Oracle migration section above)
- Delete old testnet data:
- Linux: Delete
~/.digibyte/testnet18/(and any older testnet directories) - Windows: Delete
%APPDATA%\DigiByte\testnet18\ - macOS: Delete
~/Library/Application Support/DigiByte/testnet18/
- Linux: Delete
- Download and install RC21
- Update your
digibyte.conf— theaddnodeaddresses remain the same:testnet=1 [test] digidollar=1 addnode=oracle1.digibyte.io
- Launch with
-testnet— a newtestnet19directory will be created automatically - Restore your oracle wallet if applicable (see migration steps above)
Configuration
Minimum digibyte.conf for DigiDollar Testing:
testnet=1
[test]
digidollar=1
addnode=oracle1.digibyte.ioOptional Settings:
[test]
txindex=1
digidollarstatsindex=1
algo=sha256dKnown Issues
startoraclemust be re-run after every node restart- DigiDollar features are disabled until BIP9 activation completes (~block 600 with continuous mining)
- Oracle prices show as 0 or "Not Reporting" until enough oracle operators restart their oracles
- Restoring wallets via
listdescriptors/importdescriptorsmay show stale redeem buttons for already-redeemed DigiDollars (cosmetic — attempting to redeem shows proper error)
Network Information
| Setting | Value |
|---|---|
| Network | Testnet (testnet19) |
| Default P2P Port | 12033 |
| Default RPC Port | 14025 |
| Oracle Node | oracle1.digibyte.io |
| Address Prefix | dgbt1... (bech32) |
| Multi-Algo Activation | Block 100 |
| BIP9 Signaling Start | Block 200 |
| BIP9 Threshold | 70% (140 of 200 blocks) |
| DD Activation (earliest) | Block 600 |
| Oracle Consensus | 5-of-9 Schnorr threshold |
| Exchange Sources | 6 (Binance, CoinGecko, KuCoin, Gate.io, HTX, Crypto.com) |
Downloads
| Platform | File |
|---|---|
| Windows 64-bit (Installer) | digibyte-9.26.0-rc21-win64-setup.exe
|
| Windows 64-bit (Portable) | digibyte-9.26.0-rc21-win64.zip
|
| macOS Apple Silicon (M1/M2/M3/M4) | digibyte-9.26.0-rc21-arm64-apple-darwin.dmg
|
| macOS Intel | digibyte-9.26.0-rc21-x86_64-apple-darwin.dmg
|
| Linux x86_64 | digibyte-9.26.0-rc21-x86_64-linux-gnu.tar.gz
|
| Linux ARM64 (Raspberry Pi) | digibyte-9.26.0-rc21-aarch64-linux-gnu.tar.gz
|
Quick Start
New to DigiDollar?
- Download the binary for your platform (see Downloads above)
- Create your config file (see Configuration section)
- Launch with
-testnetflag:./digibyte-qt -testnet - Wait for the blockchain to sync
- Monitor BIP9 activation:
digibyte-cli -testnet getdigidollardeploymentinfo - Once activated, the DigiDollar tab becomes fully functional
- You need DGB to mint — ask in Gitter and someone can send you testnet DGB
Want to Run an Oracle?
See the Oracle Operator Setup section above, or read DIGIDOLLAR_ORACLE_SETUP.md for the complete guide.
Troubleshooting
"DigiDollar tab says Not Activated"
- This is expected if BIP9 hasn't activated yet. DigiDollar features unlock after miners signal support and the activation threshold is reached.
- Monitor progress:
digibyte-cli -testnet getdigidollardeploymentinfo
"Sync stuck at block 7586" (FIXED in RC21)
- This was caused by the ERR minting check failing during IBD when no oracle price was available. Upgrade to RC21 and resync.
- If you copied blocks/chainstate from another node as a workaround, that still works too.
"Can't connect to network"
- RC19/RC20/RC21 uses port 12033 (not 12032 or earlier). Check your firewall.
- Make sure
addnode=oracle1.digibyte.iois under[test]in your config
"Old testnet data"
- If coming from RC18 or earlier, delete ALL old testnet directories (testnet10 through testnet18) — RC19+ uses testnet19
"No wallet is loaded" when running oracle commands
- Load your wallet first:
digibyte-cli -testnet loadwallet "oracle" - For Qt: File → Open Wallet → oracle
"Mining not working"
- Blocks 0-99 are scrypt-only. After block 100, multi-algo activates.
- Set
algo=sha256din config for fastest CPU mining after block 100
"Oracle price shows 0 or N/A"
- Oracle prices require BIP9 activation first
- Wait for activation and sufficient oracle operators to come online after upgrading
"Redeem button shows for already-redeemed DigiDollars"
- Known cosmetic issue when restoring wallets via descriptor import. The button shows but attempting to redeem displays the correct error message.
Feedback & Community
Please report issues and feedback to help us prepare for mainnet launch.
When reporting bugs, start your message with BUG: and include: what happened, steps to reproduce, platform (Windows/Linux/Mac), and any error messages from your debug.log file.
- Developer Chat (Gitter): https://app.gitter.im/#/room/#digidollar:gitter.im
- GitHub Issues: https://github.com/DigiByte-Core/digibyte/issues