hush-gtest failed to link with "undefined reference to
CHDChain::VERSION_HD_MNEMONIC". The version constants are static const int with
in-class initialisers and no definition anywhere, so any ODR use needs one --
and gtest's EXPECT_*/ASSERT_* macros take their arguments by const reference,
which is exactly that. test_mnemonic_compat.cpp:161 passes VERSION_HD_MNEMONIC
to EXPECT_LT.
dragonxd links either way, because nothing in the daemon binds these to a
reference; only the test target exposed it, and the test target was never built
on the branch that introduced the test.
Define all four rather than only the one that failed: VERSION_HD_BASE,
VERSION_HD_TRANSPARENT and CURRENT_VERSION carry the identical latent fault, and
the next EXPECT_EQ against any of them would hit the same wall. Fixing the test
instead would have hidden the problem rather than removed it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Brings the auto-shield-coinbase feature and the wallet seed work onto the release
line so both are exercised from dev rather than a side branch.
From upstream: auto-shield of matured coinbase into a wallet z-address, plus
fixes to two pre-existing scheduler wedges (consolidation dispatching every block
instead of once per interval, and a failing sweep stranding its running flag).
On top of that:
* the auto-shield destination is chosen by re-deriving m/32'/coin'/i' from the
seed and taking the lowest in-gap account the wallet holds a key for, rather
than the first entry in std::set order. Key metadata is NOT evidence of
provenance -- z_importwallet copies hdKeypath and seedFp verbatim from the
import file -- so a crafted import could otherwise claim account 0 and
capture every shielded reward;
* HD seed/chain persistence is hardened: the chain record is written before the
seed, a corrupt hdchain is loud rather than silently reverting derivation to
the raw entropy, hdchain survives -salvagewallet, and the silent BIP39 ->
random seed fallback is gone;
* seed provenance is recorded, and -autoshield defaults ON only where that
provenance says the seed is recoverable;
* mnemonic wallets now store the EXPANDED 64-byte BIP39 seed with the 32-byte
entropy in a separate display-only record. Derivation reads stored bytes
directly on every binary, so key trees are identical and no CHDChain version
bump or minversion fence is needed -- the format stays readable by earlier
releases;
* new wallets are created from a BIP39 phrase by default;
* the plaintext hdseed record is erased when a wallet is encrypted. It was
previously left behind, and CDB::Rewrite copies surviving records verbatim,
so the unencrypted seed persisted on disk forever.
TWO DEFAULTS CHANGE for new wallets: auto-shielding (where the seed provenance is
known) and BIP39 seed generation. Existing wallets are untouched -- seed
generation is reachable only when a wallet has none, and all three key stores
refuse to replace an existing seed.
Testing state, stated plainly: every commit built clean and the branch was
verified on an isolated chain -- destination selection provably ignores an
imported foreign key, both provenance branches behave, a new-format wallet
reopened by a pre-change binary lists identical addresses, and restoring only the
24 words recovers the wallet. NOT yet tested: any of this against a funded wallet
on mainnet, or a soak of these defaults on a real node.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
dev branched from the release line before 1c3523aac and so lost -Wa,-mbig-obj
from util/build-win.sh. Without it the Windows cross-compile fails at link: large
template/boost-heavy translation units exceed the PE/COFF ~32k-section limit, and
GNU ld emits "dangerous relocation" on .pdata and crashes. v1.1.0 therefore could
not produce a win64 binary at all.
The merge brings only that one file back. util/build-win.sh is the only file both
sides touched, and the two edits are ~20 lines apart, so it auto-merges keeping
both fixes: -Wa,-mbig-obj on the configure line and -DARCH=default on the cmake
line. Verified after merging that dev's own work is intact -- the extended
checkpoint table, the guarded RandomX dedup, the 1.1.0 version bump, and
ARCH=default in the other two build scripts.
No C++ changed; the only delta from the pre-merge dev is the shell script.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
// Out-of-line definitions for CHDChain's in-class static constants. These are
// only initialised in the class body, so any ODR use -- binding one to a const
// reference, which is exactly what gtest's EXPECT_*/ASSERT_* macros do -- needs
// a definition or the link fails. hush-gtest hit this on VERSION_HD_MNEMONIC.
constintCHDChain::VERSION_HD_BASE;
constintCHDChain::VERSION_HD_TRANSPARENT;
constintCHDChain::VERSION_HD_MNEMONIC;
constintCHDChain::CURRENT_VERSION;
usingnamespacestd;
staticuint64_tnAccountingEntryNumber=0;
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.