Consolidate all standalone utility scripts into contrib/scripts/: - Perl: avg_blocktime.pl, block_time.pl, gen-zaddrs.pl, sda_checkpoints.pl, sdl_checkpoints.pl, hush_block_subsidy_per_halving, hush_halvings, hush_scanner, hush_supply, hush_supply_old - Shell: fresh_clone_compile_and_run.sh, tidy_datadir.sh, dragonx_scanner - Python: convert_address.py - BAT: hush-uri.bat Update path references in contrib/README.md, doc/OLD_WALLETS.md, doc/relnotes/README.md, and sdl_checkpoints.pl.
6.8 KiB
Codebase Cleanup & Organization Options
1. Remove Build Artifacts from the Working Tree
The depends/ directory alone is 1.8 GB, with 479M in depends/sources/, 302M in depends/built/. The release/ dir is 395M, and repos/ is 164M. While release/ and repos/ are already in .gitignore, the depends/built/ and depends/work/ outputs are not explicitly ignored.
Actions:
- Add
depends/built/,depends/work/,depends/x86_64-w64-mingw32/to.gitignore - Run
git clean -fdxon build output directories periodically - The
.oand.afiles insrc/(e.g., 22Mlibbitcoin_server.a) are build outputs cluttering the source tree
2. Move Large Binary Params Out of Git History
sapling-spend.params (46M) and sapling-output.params (3.5M) are committed directly. These are cryptographic proving keys from the Zcash Sapling trusted setup ceremony and cannot be regenerated. The node shuts down without them.
Options:
- Use Git LFS to track them instead
- Download them at build/install time via a script (like Zcash's
fetch-params.sh) - Keep as-is (current deliberate design choice — guarantees out-of-box operation)
3. Clean Up Tracked Editor/Autoconf Backup Files
src/univalue/configure~ is a tracked backup file. The root configure~ also exists. These should be removed from tracking and the .gitignore pattern *~ should catch them going forward.
- Remove
src/univalue/configure~from git tracking
4. Split Monolithic Source Files
Several files are extremely large and would benefit from decomposition:
| File | Lines | Suggestion |
|---|---|---|
src/main.cpp |
8,217 | Split validation, block processing, mempool logic into separate files |
src/wallet/rpcwallet.cpp |
6,392 | Group RPC methods by category (send, receive, list, z-operations) |
src/chainparams.cpp |
5,420 | Extract checkpoint data and chain-specific params to separate files |
src/wallet/wallet.cpp |
5,059 | Split wallet transaction logic from key management |
- Split
src/main.cpp- 8,217 → 2,821 lines in
main.cpp - Created
tx_validation.cpp(1,012 lines) — transaction validation (IsStandardTx, CheckTransaction, ContextualCheckInputs, etc.) - Created
mempool_accept.cpp(524 lines) — mempool acceptance and orphan management (AcceptToMemoryPool, AddOrphanTx, etc.) - Created
block_processing.cpp(4,064 lines) — block processing, chain management, and disk I/O (ConnectBlock, DisconnectBlock, ActivateBestChain, CheckBlock, LoadBlockIndex, etc.) - Created
main_internal.h(83 lines) — shared internal state (block index candidates, file info, dirty sets, etc.)
- 8,217 → 2,821 lines in
- Split
src/wallet/rpcwallet.cpp- 6,392 → 4,099 lines in
rpcwallet.cpp - Created
wallet/rpcwallet_zindex.cpp(1,193 lines) — z-index query RPCs (getalldata,z_getinfo,z_getstats, etc.) - Created
wallet/rpcwallet_zops.cpp(1,194 lines) — shielded async operation RPCs (z_sendmany,z_shieldcoinbase,z_mergetoaddress, etc.) - Created
wallet/rpcwallet_internal.h(45 lines) — shared declarations andTHROW_IF_SYNCINGmacro
- 6,392 → 4,099 lines in
- Split
src/chainparams.cpp- 5,420 → 593 lines in
chainparams.cpp - Created
chainparams_checkpoints_hush3.h(1,986 lines) — HUSH3 checkpoint data - Created
chainparams_checkpoints_dragonx.h(2,853 lines) — DRAGONX checkpoint data
- 5,420 → 593 lines in
- Split
src/wallet/wallet.cpp- 5,059 → 4,143 lines in
wallet.cpp - Created
wallet_keys.cpp(975 lines) — key management, encryption, HD seed, keypool
- 5,059 → 4,143 lines in
5. Move Implementation Out of Header Files
There are 13,652 lines of implementation code in hush_*.h headers:
| Header | Lines |
|---|---|
src/hush_utils.h |
2,549 |
src/hush_gateway.h |
2,531 |
src/hush_bitcoind.h |
1,867 |
src/hush_curve25519.h |
1,017 |
src/hush_nSPV_superlite.h |
977 |
src/hush_nSPV_fullnode.h |
914 |
src/hush_defs.h |
656 |
src/hush_nSPV.h |
603 |
src/hush_nSPV_wallet.h |
505 |
src/hush_notary.h |
469 |
src/hush_globals.h |
360 |
src/hush_ccdata.h |
272 |
src/hush_kv.h |
204 |
src/hush_nSPV_defs.h |
193 |
- Move implementations from
hush_*.hheaders to.cppfiles- Created
src/hush_impl.cpp— compiles all hush_*.h implementation viaHUSH_PRIVATE_IMPLEMENTATIONguard - Created
src/hush_nSPV_impl.cpp— compiles all hush_nSPV_*.h implementation - Modified
src/hush.hwith#ifdef HUSH_PRIVATE_IMPLEMENTATIONto separate implementation from declarations main.cppnow includes declarations only (no longer a unity build for hush code)
- Created
6. Deduplicate Vendored Code
cJSON has been consolidated:
-
src/cJSON.c+src/cJSON.h— canonical implementation, compiled as a standalone C translation unit -
src/hush_cJSON.cpp+src/hush_cJSON.h— helper/wrapper functions, compiled as a standalone C++ translation unit -
src/cc/includes/cJSON.h— thin redirect to the canonical headers above -
src/cc/dapps/cJSON.c— deleted (old 2009 fork); dapp includes updated to use canonical copy -
Consolidate to a single copy and have other modules link against it
7. Relocate Shell Scripts Out of src/
There are 15+ shell scripts and .bat files tracked inside src/:
-
dragonx-cli,dragonxd,tush-cli,tushd,zush -
smartchains,purge,listassetchains,listassetchainparams -
testdragonx-cli,testdragonxd,testequihash-cli,testequihashd -
assetchains_stop,hush-arrakis-chain -
.batvariants:dragonx-cli.bat,dragonxd.bat,hush-arrakis-chain.bat -
Move shell scripts to
contrib/scripts/directory
8. Organize the repos/ Directory (N/A — repos/ is gitignored)
repos/ Directory9. Improve .gitignore Coverage
The current .gitignore has redundant and scattered entries (e.g., src/cc/dapps/a.out listed twice, many game-related paths for a rogue game that appears obsolete).
- Group entries by category (build outputs, editor files, platform-specific)
- Remove stale entries for files/features that no longer exist
- Add
depends/built/,depends/work/,depends/x86_64-*/
10. Consolidate Documentation
Docs are split across doc/, contrib/README.md, and the root.
- Create a
doc/architecture.mddescribing the module structure
Recommended Priority
Highest-impact, lowest-risk changes (don't touch compiled code):
- Items 1, 3, 9 —
.gitignorecleanup and removing tracked backup files - Item 7 — relocate scripts out of
src/
Higher-impact, higher-risk changes (affect build system and code):
- Item 5 — move implementation out of headers
- Item 4 — split monolithic source files
- Item 6 — deduplicate cJSON
- Item 2 —
Move shell scripts toDone — moved 15 loose scripts fromcontrib/scripts/directorycontrib/root intocontrib/scripts/