Lit green "V3" label next to staking icon when onion address is active,
dimmed grey when not yet connected. Tooltip: "V3 Tor enabled".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove onion address label from overview page (was cutting into
transaction list area)
- Add it to the left side of the main window status bar instead,
opposite the sync/connection icons
- Add "Show .onion address in status bar" checkbox under Options >
Display (enabled by default)
- Polls every 5 seconds; hidden until the address is available
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The defensive check `IsPortInUse(hiddenServicePort)` always fails
because port 24112 is the P2P port, which the node binds BEFORE
Tor starts. The check was incorrectly detecting our own listener
as a collision, causing "Tor failed to start" on every launch.
The hidden service is supposed to forward to 127.0.0.1:24112 where
the node is already listening — that's the correct state, not an error.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rename CTorProcess::GetLastError() and CTorEmbedded::GetLastError() to
GetStartupError() so they don't shadow the Win32 GetLastError() API,
which caused a std::string-to-DWORD conversion error on Windows.
- Qualify the one Win32 call as ::GetLastError() for clarity.
- Pass torError.c_str() to strprintf instead of std::string, fixing
Clang's -Wnon-pod-varargs error on macOS.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move extern declarations to file scope so they resolve to global
symbols instead of the Boost test suite namespace. Cast static const
member to avoid ODR address requirement.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CMake's AutoUic mistakenly treats ui_interface.h (a hand-written
Bitcoin-convention header) as a Qt Designer output and looks for
interface.ui which doesn't exist. Fix by disabling AutoUic and
explicitly running qt5_wrap_ui on the actual .ui files.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- CMakeLists: add --start-group linking for libtor.a and its deps
(libevent, openssl, zlib, lzma, zstd) with --allow-multiple-definition
for mixed static/dynamic OpenSSL on Windows
- CMakeLists: define USE_UPNP=0 only when USE_UPNP is off (not via
#ifdef-incompatible define)
- net.cpp: guard USE_UPNP reference with #ifdef for builds without UPnP
- rpcwallet.cpp: replace nonexistent LogPrintf with printf
- tor_embedded.cpp: fix SOCKET type mismatch on Windows (SOCKET vs int)
- .gitignore: add testnet-sync/ directory
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- assumevalid flag to skip script verification for known-good blocks
- CCheckQueue thread pool for parallel signature/script validation
- Deferred wallet scan until after IBD completes
- Guard UPnP usage for builds without miniupnpc
- Fix LogPrintf -> printf in clearwallettransactions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove all json_spirit source files and add nlohmann/json (v3.11.3)
with a json_compat.h shim that preserves the json_spirit namespace
API. Updates all RPC and test files to use the new JSON backend.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove legacy build files (Makefile, makefile.unix/mingw/osx,
triangles-qt.pro) and replace with CMake build system. Includes
find modules for all dependencies, LevelDB bundled build, and
updated CI workflow for CMake + Ninja on all platforms.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DISPLAY_VERSION in version.h was still at 5.5.5 while CLIENT_VERSION
in clientversion.h was bumped to 5.5.6. Also fix Tor binary finder
to skip directories (was matching /usr/lib/.../tor/ dir instead of
the tor binary inside it).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The seeds.cryptographic-triangles.org endpoint uses Caddy with auto-TLS,
so the daemon's seed fetcher now connects over HTTPS (port 443) using
OpenSSL instead of plain HTTP (port 80) which got a 308 redirect.
Also hardcodes 5 known onion seed addresses in onionseed.h as a fallback
for initial peer discovery when the HTTPS endpoint is unreachable.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- transaction_tests.cpp: use COutPoint+CUtxoEntry instead of old MapPrevTx
- build-all.yml: use msys2 shell for inetc plugin download/install
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- ThreadStakeMiner: catch-and-retry instead of crash on exception
(boost::bad_weak_ptr no longer kills the daemon)
- GetStakeWeight: take wallet lock once instead of per-coin to
reduce lock contention with 20K+ transaction wallets
- StakeMiner: continue instead of exit when CreateNewBlock fails
- Wrap all NotifyTransactionChanged/NotifyAddressBookChanged signal
emissions in try/catch to absorb stale slot exceptions
- Add -zapwallettxes flag: strips all tx records from wallet.dat
keeping only keys, then rescans blockchain to rebuild history
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ask peers for blocks whenever they report a higher chain height,
fixing post-IBD sync stall where node stops requesting missing blocks
after initial sync completes.
Revert protocol version from 70206 back to 70205 to match network.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Update script_P2SH_tests.cpp to use new MapPrevTx (COutPoint->CUtxoEntry)
- Remove obsolete bootstrap download from NSIS installer (requires inetc
plugin; nodes now sync fast from network)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace per-transaction CTxIndex spent tracking with per-output UTXO
database (CUtxoEntry). ConnectBlock writes/erases UTXOs as blocks are
processed. FetchInputs reads directly from UTXO DB instead of
deserializing full transactions from disk.
Persist nChainTrust in block index (dbformat v3) to skip expensive
recalculation on every startup. Only populate setStakeSeen for last
500 blocks instead of all 2M+.
Lazy fallback to old CTxIndex path for databases upgrading from
pre-UTXO format - no big-bang migration required.
Fixes pre-existing bugs in introdialog.cpp (extra brace) and
net_bootstrap.cpp (namespace extern).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Every Triangles wallet is now a Tor node. Staking rewards subsidize
Tor infrastructure.
Core changes:
- Embedded Tor 0.4.9.6 as git submodule
- ConnectNode rejects all non-.onion peers
- Tor failure is fatal - wallet requires Tor to operate
- All proxies forced through embedded Tor SOCKS
- Clearnet (IPv4/IPv6) disabled at startup
- HTTP seed fetch routes through Tor proxy (removed boost::asio dep)
- Merged PoW cleanup: -623 lines of dead mining code
- Stripped dead LEGACY/MIXED bootstrap modes from net_bootstrap
- RPC getnetworkinfo reports tor_native mode
Tooling:
- scripts/bump-version.sh syncs version across all 17+ files
- Version bumped to 5.6.0 across all packaging manifests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Strip getwork, getworkex, getblocktemplate, submitblock RPC commands
and their helper functions (SHA256Transform, FormatHashBlocks,
FormatHashBuffers, IncrementExtraNonce, CheckWork) which have been
dead code since PoW ended at block 9000. AV engines pattern-match
these nonce-incrementing loops and mining pool interfaces as
cryptominer signatures. Block validation (CheckProofOfWork) and
Hash9 algorithm files are preserved - only block *creation* for
PoW mining is removed. PoS staking code is untouched.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Single command to update version across all 12+ files:
scripts/bump-version.sh 5.7.0
Updates: clientversion.h, version.h, triangles-qt.pro, Dockerfile,
and all packaging manifests (Docker, AUR, Chocolatey, Debian, RPM,
WinGet, Homebrew, Nix, AppImage).
- Daemon: automatically downloads blockchain snapshot when no data exists
No -bootstrap flag needed. Use -nobootstrap to skip.
- Qt wallet: auto-bootstraps on first run (no question asked)
Existing users still get the optional re-download prompt.
- New users just install and run - blockchain downloads automatically
- Works on all platforms (Windows, Linux, macOS, ARM64)
- Hardcoded DNS3 (74.208.167.19), DNS2 (194.233.88.206), and Contabo (100.98.123.59) as fixed seeds
- Nodes will automatically connect to these on first run
- No manual addnode configuration needed
- Full mesh network connectivity built into the code
The Tor v3 spec requires SHA3-256 (FIPS-202) for the .onion address
checksum computation, but ToStringIP() was using SHA-256 (double-hash).
This caused every reconstructed .onion address to have incorrect suffix
characters, making all outbound Tor connections fail with SOCKS5 'general
failure' - the entire network had 0 Tor peers despite working Tor instances.
Fix: Replace Hash() call with OpenSSL EVP_sha3_256() which is available
in OpenSSL 3.0+ and produces the correct FIPS-202 SHA3-256 checksum.
Tested: All 5 onion seed nodes now connect successfully.
LookupHost expects std::vector<CNetAddr>& but was passed a single
CNetAddr, breaking compilation on all platforms.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace all hardcoded seed addresses (onion, clearnet, DNS) with a
dynamic HTTP-based seed list fetched from seeds.cryptographic-triangles.org
on startup. New getseedlist RPC exposes known .onion peers from the
address manager for a collector script to publish.
Any wallet that comes online with an onion address is automatically
discovered by peers via P2P addr exchange and appears in the seed list
within minutes. No binary rebuilds needed when addresses change.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move wallet rescan to a background thread after IBD completes instead
of blocking on the main thread. Address index is now built during IBD
rather than skipped and rebuilt later. Wallet scan releases cs_wallet
lock while reading blocks from disk to improve concurrency.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
copy_option::overwrite_if_exists was removed in Boost 1.90+,
replaced with copy_options::overwrite_existing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>