Remove IBD guards on SyncWithWallets and SetBestChain so wallet
transactions appear as blocks are connected. Log every 500 blocks
during sync instead of every 10,000.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds CTorProcess which finds and launches an external Tor binary as a
subprocess, providing a SOCKS5 proxy on port 19099 and a v3 hidden
service on port 24112. The wallet auto-detects Tor from common install
locations or the app directory. Falls back gracefully to clearnet-only
if Tor is not found. Also fixes Tor-only network restriction that
blocked IPv4/IPv6, and bumps version to 5.1.7.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Shows an intro dialog on first launch letting users choose where to store
blockchain data. Saves the choice in QSettings so it only appears once.
Styled to match the existing Triangles dark theme.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Critical fix: revert initial sync from getheaders back to getblocks.
The headers-first change (05b1fd1) broke chain continuation — after
downloading the first 2000 blocks, fresh nodes would stall because
the getheaders path has no orphan-based continuation mechanism.
The getblocks/inv/orphan cycle is required for full chain sync.
Also adds getblocks fallback to the headers handler so if headers
are used via other paths, sync still continues.
Other changes:
- Extract REST API into separate rest.cpp/rest.h
- Add REST rate limiting and CORS support
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Bump version 5.1.4 → 5.1.5 across all source, CI, and packaging files
- Remove 157 build artifacts (build/*.o, release/*.dll, etc.) from git tracking
These were added before .gitignore existed and caused cross-platform CI failures
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The 'all: trianglesd.exe' target was defined after 'leveldb/libleveldb.a:'
making LevelDB the default target. Make would only build LevelDB and exit.
Move 'all' to before LevelDB so it becomes the default target (like
makefile.unix). Also pass explicit 'all' target in CI as belt-and-suspenders.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Build LevelDB separately so daemon make errors are visible.
Add set -eo pipefail and stderr redirect to capture all output.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Create symlinks qmake->qmake-qt5, lrelease->lrelease-qt5,
windeployqt->windeployqt-qt5 for MSYS2 Qt5 tool naming
- Fix daemon strip by running in same directory as build output
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Windows Qt: use qmake-qt5/windeployqt-qt5 (MSYS2 binary names)
- Windows daemon: override DEPSDIR=/mingw64 for CI, separate steps
- Linux Qt: add qttools5-dev-tools for lrelease (qm file generation)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Linux: add chmod +x build_detect_platform for LevelDB builds
- Linux daemon: add separate LevelDB build step (was missing)
- macOS: clean stale Windows .o files from git before building
- Windows Qt: add qt5-tools package, use full qmake path
- Windows daemon: combine build+strip in same step to fix path issue
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Removes build-macos.yml and adds build-all.yml which builds Windows Qt,
Windows daemon, Linux Qt, Linux daemon, and macOS on every push to master.
Automatically creates GitHub releases with all assets on version tags.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New makefile.mingw builds trianglesd.exe on MSYS2/MinGW64.
Adapted from makefile.unix with Windows-specific libraries
and static linking.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Homebrew's Boost libraries don't use the -mt suffix
(e.g. libboost_filesystem.dylib, not libboost_filesystem-mt.dylib).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove Q_OS_MAC guards around trayIconActivated slot declaration
and implementation. MOC generates code referencing the slot
unconditionally, causing a build error on macOS. The slot is
harmless when present - on macOS the tray icon isn't created
so it simply never gets called.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
macOS does not have fdatasync(), it uses fcntl(F_FULLFSYNC) instead.
Set HAVE_FDATASYNC=0 for __APPLE__ alongside _WIN32.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- macos-13 (Intel) runners no longer available, use macos-15 (ARM64)
- chmod +x build_detect_platform before LevelDB build
- Simplify to single ARM64 build for now
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- GitHub Actions workflow builds DMGs for both Intel and Apple Silicon
- Update .pro file: macOS 11+ target, Homebrew paths instead of MacPorts
- Add RPM spec + build script for Fedora/RHEL/openSUSE
- Add Nix derivation with autoPatchelfHook
- Update Homebrew formula to support macOS (Intel + ARM64)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Chocolatey .nuspec + install script for Windows
- AppImage build script for universal Linux
- Dockerfile for headless daemon container
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rename client from "Black Pharao" to "Cryptographic Triangles"
- Update CLIENT_VERSION from 4.2.1.0 to 5.1.3.0
- Update DISPLAY_VERSION from 5.0.0.0 to 5.1.3.0
- Update .pro VERSION to 5.1.3.0
- Fix RC file: copyright 2014-2026, fix OriginalFilename typo
- Update about dialog copyright to 2014-2026
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New command: smsgbroadcast <addrFrom> <message>
Iterates all public keys in smsgDB and sends an encrypted message to each.
Skips the sender's own address. Reports sent/failed counts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The wallet was freezing on "Verifying database integrity" because the
old Tor v2 startup code blocked on a mutex (wait_initialized) and
required an onion/hostname file that no longer existed after v2 removal.
Replace the blocking v2 startup with internal V3 onion identity:
- Every wallet now auto-generates Ed25519 keys and a V3 .onion address
- Keys are stored in wallet.dat (encrypted if wallet is encrypted)
- Onion identity is created after wallet loads (Step 8.5) so keys
persist across restarts
- No external Tor process required for identity generation
- Writes onion/hostname and tor_data/ config for optional external Tor
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Major improvements:
- C++11 port layer (std::mutex/condition_variable replaces platform-specific code)
- Better write performance and compaction scheduling
- Improved Windows support (env_windows.cc replaces env_win.cc)
- More robust crash recovery and corruption detection
- Bloom filter improvements for faster reads
API is backward compatible - no changes needed to txdb-leveldb.cpp.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Startup optimization (fixes multi-minute hang on 2M+ block chain):
- Skip computing SHA-256 stake modifier checksum for blocks below last
checkpoint (was doing 2M+ unnecessary hashes on every startup)
- Reduce default -checkblocks from 2500 to 50 (disk read savings)
- Add progress percentage reporting during block index load
Headers-first sync (faster initial sync):
- Switch initial sync from getblocks to getheaders protocol
- Add PushGetHeaders and headers message handler in net/main
- Downloads 80-byte headers first, then requests blocks — allows
the node to learn chain structure before downloading full blocks
Address-index accelerated wallet rescan:
- New ScanForWalletTransactionsFromIndex() uses address index to find
only transactions touching wallet keys (skips scanning every block)
- Follows spend chains to find related transactions
- Falls back to full scan if index unavailable
- Track index sync state with addressIndexBestChain/StartHeight in LevelDB
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
smessage.cpp uses boost::chrono::steady_clock which requires
-lboost_chrono. Previously only linked on Windows.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Address table and transaction table now load asynchronously via
QTimer::singleShot after the event loop starts instead of blocking
the constructor
- MessageModel (secure messaging) lazy-loaded 1s after wallet init
or on-demand when navigating to message page
- Splash screen stays visible until window.show() completes
- Guard updateConfirmations() against empty transaction table
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Defer SecureMsgStart and ReacceptWalletTransactions to background thread
so GUI appears faster during startup
- Add shutdown checks in wallet scan/reaccept to prevent hanging on exit
- Smart wallet rescan: start from wallet birthday instead of genesis block
- Raise default dbcache from 25 to 128 MB for better performance
- Replace deprecated QDesktopServices with QStandardPaths (Qt5 compat)
- Enforce Qt5+ requirement in build system, remove -fpermissive flag
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Combine onionAddress and port into single "address:port" string
to match the function's expected parameter format.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Revived frozen chain (Dec 2022) with two live seed nodes
- Added Tor v3 onion hidden service support (Ed25519)
- Wired seeder message handlers (seeder/getseederlist/seederlist)
- Hardcoded onion seeds and clearnet IP seeds for DNS2/DNS3
- Fixed bind address (0.0.0.0) so nodes accept external connections
- Added boost_chrono to makefile.unix for modern Boost
- Fixed LoadExternalBlockFile block-skip bug for faster imports
- Import-only optimizations for chain replay (checkpoint-gated)
- Added sort_blocks.c tool for blockchain data recovery
- Comprehensive README with build/run/messaging/Tor instructions
- Chain revival status document for project coordination
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Port codebase to build with OpenSSL 3.x and Boost 1.90+:
- Rewrite bignum.h to use BIGNUM* pointer instead of inheriting from opaque BIGNUM
- Fix ECDSA_SIG, EVP_CIPHER_CTX, HMAC_CTX opaque type access across key.cpp, crypter.cpp, smessage.cpp
- Modernize Boost.Asio API (io_context, resolver, executor) in trianglesrpc.cpp
- Remove embedded Tor v2 client (incompatible with OpenSSL 3.x), keep Tor v3 SOCKS5 approach
- Update header logo to Cryptographic Triangles branding (300x63)
- Replace Bittrex exchange link with Pinball (313.cash) across all locales
- Fix MSYS2/MinGW64 build: linker flags, Boost library names, miniupnpc static linking
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Version 4.2.1.0
- wallet makeover
- staking behaviour adjustments
- non mandatory update-
- no need for updating daemons (only recomended if used for staking)