From 798eccc624d5805277169f2257bd8ed29703ebcf Mon Sep 17 00:00:00 2001 From: DanS Date: Thu, 27 Aug 2026 11:35:38 -0500 Subject: [PATCH] hygiene: fix seven latent defects from the v1.2.0 code audit Phase 1 of the code-hygiene remediation. Each is a genuine defect, not style. The two consensus functions are touched only by provably behavior-preserving dead-code removal and a comment. - miner: initialize the anti-spin loop counter (was `int i;` -- the loop condition read an indeterminate value, UB) and break once the block time advances past the median, which is what the comment intended. - consensus/upgrades: drop a stray printf() on the NetworkUpgradeState path; the following assert already documents the invariant. - txdb: CBlockTreeDB::Snapshot2's outer catch treated ANY exception as normal end-of-iteration and built a snapshot from partial data. Fail instead, matching the inner catch the author marked consensus-relevant ("we need to exit here if so for consensus code!"). iter->Valid() already handles genuine end-of-iteration. - wallet/rpcwallet + init: -sietch-min-zouts used a "--" key that the arg parser (which normalizes --foo to -foo) can never match, so the Sietch decoy floor was silently stuck at the default. Use the single-dash key so the knob works, and document it in -help. - hush_bitcoind + hush_utils: remove four unreachable duplicate `else if` branches from hush_commission()/hush_block_subsidy() (a second `height < 23860000` and a second `height < 27220000` in each). Proven identical across 49,591 heights. NB: the dead values hint at an intended clean halving schedule that was never wired up; the DEPLOYED schedule (two double-steps) is preserved exactly. Changing it is a future consensus decision, not this cleanup. - hush_bitcoind: replace the "likely a bug" halving TODO with an accurate note -- INTERVAL is only consumed by a debug fprintf, so the > vs >= boundary at HALVING1 has no consensus effect. - git rm two committed macOS build artifacts (cc/customcc.dylib and libcc.dylib) and add the missing .dylib .gitignore rules. Built clean on Linux; an isolated node self-mined genesis->5113 exercising the miner and consensus-subsidy paths, and getsnapshot returned normally. Co-Authored-By: Claude Opus 4.8 (1M context) --- .gitignore | 2 ++ src/cc/customcc.dylib | Bin 104288 -> 0 bytes src/consensus/upgrades.cpp | 4 ---- src/hush_bitcoind.h | 13 +++++++------ src/hush_utils.h | 8 ++++---- src/init.cpp | 2 ++ src/libcc.dylib | Bin 104288 -> 0 bytes src/miner.cpp | 4 +++- src/txdb.cpp | 10 ++++++++-- src/wallet/rpcwallet.cpp | 2 +- 10 files changed, 27 insertions(+), 18 deletions(-) delete mode 100644 src/cc/customcc.dylib delete mode 100644 src/libcc.dylib diff --git a/.gitignore b/.gitignore index cdbb87517..441696a83 100644 --- a/.gitignore +++ b/.gitignore @@ -160,8 +160,10 @@ doc/man/Makefile.in Makefile.in src/libcc.so src/libcc.dll +src/libcc.dylib src/cc/customcc.so src/cc/customcc.dll +src/cc/customcc.dylib src/HUSH3_7776 REGTEST_7776 src/cc/librogue.so diff --git a/src/cc/customcc.dylib b/src/cc/customcc.dylib deleted file mode 100644 index dc173003263572a3887de351cb1129a0fe562254..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104288 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 YcaqT}FqIT;tJF{e= 0); assert(idx >= Consensus::BASE_SPROUT && idx < Consensus::MAX_NETWORK_UPGRADES); auto nActivationHeight = params.vUpgrades[idx].nActivationHeight; diff --git a/src/hush_bitcoind.h b/src/hush_bitcoind.h index 1def979bc..e29b4f5bd 100644 --- a/src/hush_bitcoind.h +++ b/src/hush_bitcoind.h @@ -975,8 +975,9 @@ uint64_t hush_commission(int height) INTERVAL = GetArg("-ac_halving1",840000), TRANSITION = 129; uint64_t commission = 0; - //TODO: Likely a bug hiding here or at the next halving :) - //if( height >= HALVING1) { + // NB: INTERVAL is consumed only by the debug fprintf at the end of this function; + // the commission schedule below uses hardcoded height thresholds, not INTERVAL. So + // the > vs >= boundary at HALVING1 has no consensus effect. Left as > for stability. if( height > HALVING1) { // Block time going from 150s to 75s (half) means the interval between halvings // must be twice as often, i.e. 840000*2=1680000 @@ -1019,14 +1020,14 @@ uint64_t hush_commission(int height) commission = 61035; } else if (height < 23860000) { commission = 30517; - } else if (height < 23860000) { - commission = 15258; + // removed unreachable duplicate `height < 23860000` (=> 15258); the schedule + // intentionally drops straight to 7629 next — this is the deployed behavior. } else if (height < 25540000) { commission = 7629; } else if (height < 27220000) { commission = 3814; - } else if (height < 27220000) { - commission = 1907; + // removed unreachable duplicate `height < 27220000` (=> 1907); the schedule + // intentionally drops straight to 953 next — this is the deployed behavior. } else if (height < 28900000) { commission = 953; } else if (height < 30580000) { diff --git a/src/hush_utils.h b/src/hush_utils.h index 90f50b38e..8742e7f78 100644 --- a/src/hush_utils.h +++ b/src/hush_utils.h @@ -1564,14 +1564,14 @@ uint64_t hush_block_subsidy(int height) subsidy = 549316; } else if (height < 23860000) { subsidy = 274658; - } else if (height < 23860000) { - subsidy = 137329; + // removed unreachable duplicate `height < 23860000` (=> 137329); kept in sync + // with hush_commission() — the schedule drops straight to 68664 next. } else if (height < 25540000) { subsidy = 68664; } else if (height < 27220000) { subsidy = 34332; - } else if (height < 27220000) { - subsidy = 17166; + // removed unreachable duplicate `height < 27220000` (=> 17166); kept in sync + // with hush_commission() — the schedule drops straight to 8583 next. } else if (height < 28900000) { subsidy = 8583; } else if (height < 30580000) { diff --git a/src/init.cpp b/src/init.cpp index 1bdff45cf..9f42e43a0 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -494,6 +494,8 @@ std::string HelpMessage(HelpMessageMode mode) strUsage += HelpMessageOpt("-autoshieldinterval", strprintf(_("Block interval between automatic coinbase-shielding rounds (default: %i, min 5)"), 25)); strUsage += HelpMessageOpt("-autoshieldaddress=", _("Destination Sapling z-address for auto-shielded coinbase (default: reuse or create a wallet z-address). Must be spendable by this wallet.")); strUsage += HelpMessageOpt("-autoshieldfee", strprintf(_("Fee in puposhis for automatic coinbase-shielding transactions (default: %i)"), 10000)); + + strUsage += HelpMessageOpt("-sietch-min-zouts=", strprintf(_("Minimum number of shielded (Sapling) outputs Sietch adds to each z_sendmany transaction as decoys, strengthening amount/linkability privacy. Higher values add privacy at the cost of larger transactions (default: %u, clamped to the range 3-50)"), 7)); strUsage += HelpMessageOpt("-autoshieldminutxos", strprintf(_("Only auto-shield once at least this many matured coinbase UTXOs exist (default: %i)"), 1)); strUsage += HelpMessageOpt("-deletetx", _("Enable Old Transaction Deletion")); diff --git a/src/libcc.dylib b/src/libcc.dylib deleted file mode 100644 index dc173003263572a3887de351cb1129a0fe562254..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104288 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 YcaqT}FqIT;tJF{enTime = GetTime(); diff --git a/src/txdb.cpp b/src/txdb.cpp index dc73617ce..2d6019712 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -517,8 +517,14 @@ bool CBlockTreeDB::Snapshot2(std::map &addressAmounts, Un } catch (const std::exception& e) { - fprintf(stderr, "DONE reading index entries\n"); - break; + // A genuine deserialization/LevelDB error here is NOT normal completion: + // the for-loop's iter->Valid() already handles end-of-iteration, and + // non-address key types are skipped by the chType check above. Swallowing + // the exception and building a snapshot from partial data is wrong. Fail + // like the inner catch, which the author marked consensus-relevant + // ("we need to exit here if so for consensus code!"). + fprintf(stderr, "%s: LevelDB index iteration exception! - %s\n", __func__, e.what()); + return false; } } //fprintf(stderr, "total=%f, totalAddresses=%li, utxos=%li, ignored=%li\n", (double) total / COIN, totalAddresses, utxos, ignoredAddresses); diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index b969994b0..ef347dcf7 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -5404,7 +5404,7 @@ UniValue z_sendmany(const UniValue& params, bool fHelp, const CPubKey& mypk) // A value of 7 will provide much stronger linkability privacy versus pre-Sietch operations unsigned int DEFAULT_MIN_ZOUTS=7; unsigned int MAX_ZOUTS=50; - unsigned int MIN_ZOUTS=GetArg("--sietch-min-zouts", DEFAULT_MIN_ZOUTS); + unsigned int MIN_ZOUTS=GetArg("-sietch-min-zouts", DEFAULT_MIN_ZOUTS); if((MIN_ZOUTS<3) || (MIN_ZOUTS>MAX_ZOUTS)) { fprintf(stderr,"%s: Sietch min zouts must be >= 3 and <= %d, setting to default value of %d\n", __FUNCTION__, MAX_ZOUTS, DEFAULT_MIN_ZOUTS );