Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
bf41c3c
version: bump to v9.26.6 and update wallet image
JaredTate Jul 23, 2026
938f9a0
DOCS: organize release documentation
JaredTate Sep 11, 2026
bc9e6f4
Scripts Cleanup
JaredTate Sep 11, 2026
ca292a0
v9.26.6 Wave 1: node crash, node deadlocks, $100k send/redeem cap, lo…
JaredTate Sep 12, 2026
89649e3
v9.26.6 Wave 2: one Thaw Day activation height, its predicate, status…
JaredTate Sep 12, 2026
2c1f09a
v9.26.6 Wave 3: activate mint protection and durable vault accounting…
JaredTate Sep 12, 2026
38895ed
v9.26.6 Wave 4: redeeming works again, mints are saved before they ar…
JaredTate Sep 12, 2026
46a7c0d
v9.26.6 Wave 5: the wallet tells the truth about DigiDollar, and chan…
JaredTate Sep 12, 2026
2bdd6e3
v9.26.6 Wave 6: clarify oracle names and mint support, and quiet rout…
JaredTate Sep 12, 2026
b544af7
v9.26.6 Wave 7: show startup progress and preserve required block his…
JaredTate Sep 12, 2026
41617cd
v9.26.6 Wave 8: a synced node keeps 1.5 GB less in memory, and diffic…
JaredTate Sep 12, 2026
cf8ecca
v9.26.6 Wave 9: add final verification and release guidance
JaredTate Sep 13, 2026
c9d6abd
v9.26.6 corrections: preserve accounting, wallet records, and oracle …
JaredTate Sep 13, 2026
28553b1
core: reduce memory use and startup work with Feather
JaredTate Sep 13, 2026
19c8b1c
v9.26.6rc1: verify saved supply and stabilize oracle startup
JaredTate Sep 13, 2026
d209781
v9.26.6rc1: schedule Thaw Day on mainnet and testnet
JaredTate Sep 14, 2026
1edb09a
DOCS: clarify v9.26.6 release notes and RAM guide
JaredTate Sep 14, 2026
390f71d
qt: show rc1 in the wallet version image
JaredTate Sep 14, 2026
653484d
consensus: read DigiDollar amounts from the chain, never from the wal…
JaredTate Sep 16, 2026
ec03c5c
wallet: log the skipped position reconcile only in the DigiDollar deb…
JaredTate Sep 16, 2026
e3ad0a4
v9.26.6rc2: version bump, release notes and wallet image
JaredTate Sep 16, 2026
998140e
thawday: land the Thaw Day rehearsal harness and record the rc2 lab pass
JaredTate Sep 16, 2026
9916253
qt: sort DigiDollar transaction dates and amounts correctly
JaredTate Sep 21, 2026
3f09a4a
qt: export DigiDollar amounts as plain numbers
JaredTate Sep 21, 2026
5b86995
qt: use computer regional dates throughout DigiDollar
JaredTate Sep 21, 2026
597039d
qt: explain invalid DigiByte send fields
JaredTate Sep 21, 2026
000ff0c
qt: explain why DigiDollar minting is paused
JaredTate Sep 21, 2026
77a5b15
qt: show failed mint attempts consistently across DigiDollar pages
JaredTate Sep 21, 2026
75d82a6
wallet: exclude expired mint attempts from pending DigiDollar balance
JaredTate Sep 21, 2026
943bf9e
qt: keep DigiDollar controls readable in both wallet themes
JaredTate Sep 21, 2026
041680a
docs: correct the private security reporting channels
JaredTate Sep 21, 2026
2f8fcb8
net: calculate incoming header work from its chain history
JaredTate Sep 21, 2026
243512b
rpc: match redemption availability to the transaction lock
JaredTate Sep 21, 2026
00136af
rpc: explain repeated DigiDollar redemptions
JaredTate Sep 21, 2026
e18654a
rpc: include mint restrictions in collateral estimates
JaredTate Sep 21, 2026
a1040cb
rpc: explain when the next oracle quote is unavailable
JaredTate Sep 21, 2026
6e9dbc0
rpc: explain the DGB fee requirement for DigiDollar sends
JaredTate Sep 21, 2026
af4d8e3
net: respect debug settings for compact-header messages
JaredTate Sep 21, 2026
cfc01a2
test: cover transfer recovery after a DigiDollar mint reorg
JaredTate Sep 21, 2026
4c9c451
rpc: track pending redemptions for reordered mints
JaredTate Sep 21, 2026
8990481
net: check block proof before consulting chain history
JaredTate Sep 21, 2026
d901c79
net: bound Dandelion peer inventory history
JaredTate Sep 22, 2026
9432436
net: clear Dandelion routes before peer shutdown
JaredTate Sep 22, 2026
96445e4
docs: combine RC2 changes with preserved RC1 release notes
JaredTate Sep 21, 2026
d96d585
docs: finalize RC2 release notes and verification results
JaredTate Sep 22, 2026
39e2eb6
test: build the Thaw Day rehearsal from the selected candidate
JaredTate Sep 30, 2026
efe7496
ui: point software information to the current DigiByte sites
JaredTate Sep 30, 2026
de5d605
release: set the final v9.26.6 version and wallet image
JaredTate Sep 30, 2026
00e2459
wallet: report the actual DigiDollar transfer selection failure
JaredTate Sep 30, 2026
b00d185
qt: export transaction dates with seconds and no milliseconds
JaredTate Sep 30, 2026
ea78ad1
qt: export DigiDollar amounts as plain decimal numbers
JaredTate Sep 30, 2026
58d5440
qt: use a clear translated DigiDollar address placeholder
JaredTate Sep 30, 2026
635af77
wallet: respect locked DGB coins when minting from Qt
JaredTate Sep 30, 2026
5539554
rpc: fill DigiDollar address labels and transaction activity
JaredTate Sep 30, 2026
b54e386
wallet: explain oversized coin selections in plain language
JaredTate Sep 30, 2026
5b7187c
wallet: keep expected DigiDollar key mismatches in debug logs
JaredTate Sep 30, 2026
65744b6
wallet: show estimated DigiDollar transfer fees in DGB
JaredTate Sep 30, 2026
abda064
rpc: direct DigiDollar address validation to validateddaddress
JaredTate Sep 30, 2026
ba84ed9
qt: restore DigiDollar send button feedback and icon contrast
JaredTate Sep 30, 2026
5e0f27e
qt: align DigiDollar transaction rows and filters with green themes
JaredTate Sep 30, 2026
c53c32f
qt: suggest dated CSV filenames and clarify disabled save buttons
JaredTate Sep 30, 2026
12b2d2b
qt: keep transaction filter styles out of file dialog editors
JaredTate Sep 30, 2026
639542c
qt: check selected DigiDollar inputs before send confirmation
JaredTate Sep 30, 2026
e7254dc
wallet: wait for mint coin merges to confirm
JaredTate Sep 30, 2026
a96e6b1
qt: give About text room and keep its links readable
JaredTate Sep 30, 2026
86c8176
test: wait for oracle signatures before the rehearsal height limit
JaredTate Oct 1, 2026
92330d9
docs: record the final v9.26.6 changes and completed tests
JaredTate Oct 1, 2026
bf14784
test: make the block map pooling check portable
JaredTate Oct 1, 2026
0b85a7c
ci: keep the retired RPC framework out of CodeQL imports
JaredTate Oct 1, 2026
757947a
test: limit disk budget for isolated Thaw Day schedule checks
JaredTate Oct 2, 2026
b84a02b
test: finish matrix block downloads before advancing mock time
JaredTate Oct 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .github/codeql/codeql-config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,6 @@ paths-ignore:
# Archived merge/debug snapshot retained for reference; do not analyze as
# live release code or executable tests.
- 'test/test_old_v26.2_mergev1/**'
# This retired framework has the same Python package name as the current
# test/functional framework. Scanning both resolves calls to the wrong class.
- 'qa/rpc-tests/**'
36 changes: 20 additions & 16 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -361,16 +361,22 @@ The cipher uses:
- **P-boxes**: 2 permutation boxes with 6 subrounds
- **Keccak-p[800]** finalization

### 4.5 Algorithm Lookup Cache
### 4.5 Finding the last block mined with a given algorithm

**File:** `src/chain.h` (line 212)
**File:** `src/pow.cpp`, `GetLastBlockIndexForAlgo()`

```cpp
// Fast per-algorithm block tracking
CBlockIndex *lastAlgoBlocks[NUM_ALGOS_IMPL];
```
The difficulty rules need the previous block that used the same mining algorithm. There is one way to find it:
walk back through the chain from the current block until a block with that algorithm turns up.

Every block used to carry an array of pointers, one per algorithm, so the answer could be read without walking.
That array was removed. It cost 64 bytes for every block header the node holds in memory, which is about 1.5 GB
on a fully synced mainnet node, and the walk it saved is short. The difficulty rule that uses this already steps
back fifty blocks on every call before it does anything else, so the walk adds roughly a tenth more work to a
path that was already doing a lot of it.

This cache enables O(1) lookup of the last block for each algorithm, critical for difficulty adjustment.
Removing it changed no difficulty result. The two lookups were run side by side over every algorithm, every
difficulty rule and the special case for minimum-difficulty blocks, and their answers were recorded as plain
numbers that the tests still check.

---

Expand Down Expand Up @@ -464,7 +470,7 @@ class CBlock : public CBlockHeader {

### 6.2 Block Index Structure

**File:** `src/chain.h` (lines 146-384)
**File:** `src/chain.h` (lines 146-380)

```cpp
class CBlockIndex {
Expand All @@ -487,14 +493,12 @@ class CBlockIndex {
unsigned int nTx; // Transactions in block
unsigned int nChainTx; // Cumulative transactions

// DigiByte multi-algo
CBlockIndex *lastAlgoBlocks[NUM_ALGOS_IMPL]; // Per-algo tracking
};
```

### 6.3 Chain State Management

**File:** `src/validation.h` (lines 491-815)
**File:** `src/validation.h` (`Chainstate` at 497, `ChainstateManager` at 884-1308)

```
ChainstateManager
Expand Down Expand Up @@ -686,7 +690,7 @@ enum class SigVersion {
| `SCRIPT_VERIFY_CHECKSEQUENCEVERIFY` | BIP112 CSV |
| `SCRIPT_VERIFY_WITNESS` | BIP141 SegWit |
| `SCRIPT_VERIFY_TAPROOT` | BIP341/342 Taproot |
| `SCRIPT_VERIFY_DIGIDOLLAR` | DigiDollar opcodes (`OP_DIGIDOLLAR`/`OP_DDVERIFY`/`OP_CHECKPRICE`/`OP_CHECKCOLLATERAL`/`OP_ORACLE`); set in `GetBlockScriptFlags()` (`validation.cpp:2755, 2796-2797`) only when the buried `DEPLOYMENT_DIGIDOLLAR` deployment is active (BIP90 since v9.26.5). |
| `SCRIPT_VERIFY_DIGIDOLLAR` | DigiDollar opcodes (`OP_DIGIDOLLAR`/`OP_DDVERIFY`/`OP_CHECKPRICE`/`OP_CHECKCOLLATERAL`/`OP_ORACLE`); set in `GetBlockScriptFlags()` (`src/validation.cpp:3030, 3071-3072`) only when the buried `DEPLOYMENT_DIGIDOLLAR` deployment is active (BIP90 since v9.26.5). |

### 8.4 DigiDollar Opcodes

Expand All @@ -704,7 +708,7 @@ OP_ORACLE = 0xbf // Coinbase oracle bundle marker (Tapscript OP_SUCCE

### 8.5 Taproot Support

**Files:** `src/script/interpreter.cpp` (lines 1980-2106)
**Files:** `src/script/interpreter.cpp` (`ExecuteWitnessScript` at 1963, `VerifyWitnessProgram` at 2048-2129)

- **Key path spending**: Single Schnorr signature (64 bytes)
- **Script path spending**: Control block + script + witness
Expand Down Expand Up @@ -1206,10 +1210,10 @@ class COraclePriceMessage {

### 13.3 Exchange Integration

**Files:** `src/oracle/exchange.h`, `src/oracle/exchange.cpp` (~1230 lines)
**Files:** `src/oracle/exchange.h` (281 lines), `src/oracle/exchange.cpp` (~1,333 lines)

12 fetcher classes derive from `BaseExchangeFetcher` (`exchange.h:23+`):
Binance, Coinbase, Kraken, CoinGecko, Bittrex, Poloniex, Messari, KuCoin, Crypto.com, Gate.io, HTX, plus the base. Active exchange selection is per oracle operator (see `DIGIDOLLAR_ORACLE_ARCHITECTURE.md` for the configurable subset).
Eleven fetcher classes derive from `BaseExchangeFetcher` (`src/oracle/exchange.h:25-215`):
Binance, Coinbase, Kraken, CoinGecko, Bittrex, Poloniex, Messari, KuCoin, Crypto.com, Gate.io and HTX. Which of them run is not a setting: `MultiExchangeAggregator::InitializeFetchers` creates exactly six of them in the source (`src/oracle/exchange.cpp:1092-1097`) — Binance, CoinGecko, KuCoin, Gate.io, HTX and Crypto.com. The other five compile but are never created. See `DIGIDOLLAR_ORACLE_ARCHITECTURE.md`.

```cpp
MultiExchangeAggregator:
Expand Down
Loading
Loading