Release v1.0.4 - #3
Merged
Merged
Conversation
…RTERS The original AVX512 implementation used incorrect 4-argument macros that only shuffled within single registers. For proper row/column processing, AVX512 requires inter-register shuffles using: - SWAP_HALVES for row processing (BLAKE2_ROUND_1_AVX512) - SWAP_QUARTERS/UNSWAP_QUARTERS for column processing (BLAKE2_ROUND_2_AVX512) This matches the PHC reference implementation's approach and ensures correct hash output with -O3 -march=native optimizations. Part of the fix for commit c0e59cf 'Rinhash: add native CPU optimizations' which introduced buggy SIMD code for AVX2, SSSE3, and AVX512.
The old xcb_proto 1.10 uses Python's deprecated 'imp' module which was removed in Python 3.12, causing build failures on Ubuntu 24.04. Upgrading both xcb_proto and libxcb to version 1.17.0 fixes this issue. This matches the approach from Bitcoin Core upstream. Changes: - xcb_proto: 1.10 -> 1.17.0 - libxcb: 1.10 -> 1.17.0 - Update file extensions from .tar.bz2 to .tar.gz - Keep original build configuration (shared libraries) for Qt compatibility - Use sed to remove pthread-stubs dependency inline
Qt 5.9.8 tries to define TOUCHINPUT structures that are already defined in newer MinGW-w64 headers (Ubuntu 24.04), causing redefinition errors. Add patch to check if TOUCHEVENTF_MOVE is already defined before redefining TOUCHINPUT structures in qwindowsmousehandler.cpp. This allows Windows builds to work with the MinGW-w64 version shipped in Ubuntu 24.04.
Fix compilation error in fs.cpp where std::numeric_limits was used without including <limits> header. This caused Windows builds to fail with 'numeric_limits is not a member of std' error.
Implement shift+click functionality in the coin control tree widget that allows users to check/uncheck a range of items: - If the previously clicked item was checked, shift+click unchecks all items in the range - If the previously clicked item was unchecked, shift+click checks all items in the range - Visual cursor (blue line) moves to the shift+clicked item - Coin control selection and labels (quantity, bytes, amount) update correctly - Each shift+click updates the reference point for subsequent shift+clicks This provides a more efficient way to select multiple UTXOs in both tree and list modes.
On Windows, std::ifstream/ofstream/fstream interpret narrow char paths using the system ANSI code page, not UTF-8. This causes MWEB leaf file creation to fail when the datadir path contains non-ASCII characters (e.g. accented letters in Windows usernames like TomášKuba). Add platform-aware stream wrappers (mw_ifstream, mw_ofstream, mw_fstream) that use _wfopen + __gnu_cxx::stdio_filebuf on MinGW, wstring() on MSVC, and standard streams on POSIX. Also fix Truncate() to use CreateFileW with wide-string path instead of CreateFile (CreateFileA) with UTF-8. This mirrors the approach used by fsbridge in src/fs.h for the rest of the codebase.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Rincoin Core v1.0.4 Release Notes
Release Date: February 4, 2026
Base Commit: 5cf3d4a (v1.0.1)
Release Commit: 0b8a159
Overview
Version 1.0.4 is a significant maintenance and enhancement release that builds upon v1.0.1 features. This release focuses on:
Major Changes
1. Rinhash SIMD Optimizations and Critical Fixes
1.1 Native CPU Optimizations (Commit c0e59cf)
Added multi-platform SIMD acceleration for Argon2d hashing algorithm:
Runtime CPU Dispatch System (
src/crypto/argon2/argon2_dispatch.c,argon2_dispatch.h):SIMD Implementations Added:
argon2_ssse3.c): For older CPUs (2006+, Intel Core 2, AMD K10+)argon2_avx2.c): For modern CPUs (2013+, Intel Haswell+, AMD Excavator+)argon2_avx512.c): For high-end CPUs (2017+, Intel Skylake-X+, AMD Zen 4+)Build System Integration:
configure.ac-mssse3,-mavx2,-mavx512fflags applied only to respective modulesFiles Modified:
src/Makefile.am: Added new SIMD object files with feature flagssrc/crypto/argon2/Makefile.am: Integrated dispatch and SIMD modulessrc/crypto/rinhash.cpp: Switched fromfill_memory_blockstoargon2_fill_memory_blocks_dispatch1.2 Critical AVX2 and SSSE3 Fixes (Commit a94de31)
Fixed serious hashing bugs in SIMD implementations that caused incorrect hash outputs:
AVX2 BLAMKA Round Fix (
src/crypto/argon2/blake2/blamka-round-avx2.h):BLAKE2_ROUND_AVX2macro that only shuffled within single 256-bit registersBLAKE2_ROUND_1_AVX2andBLAKE2_ROUND_2_AVX2macrosSWAP_HALVESfor row processing (swaps 128-bit lanes)SWAP_QUARTERS/UNSWAP_QUARTERSfor column processing (64-bit element rotation)SSSE3 BLAMKA Round Fix (
src/crypto/argon2/blake2/blamka-round-ssse3.h):BLAKE2_ROUND_1_SSSE3andBLAKE2_ROUND_2_SSSE3_mm_shuffle_epi32with correct immediate values for inter-register data movementAVX2 Core Fix (
src/crypto/argon2/argon2_avx2.c):fill_block_avx2to use corrected 8-argument macrosImpact: These fixes ensure correct Argon2d hash computation with
-O3 -march=nativeoptimizations. Without these fixes, SIMD-optimized builds produced wrong hashes.1.3 Critical AVX512 Fix (Commit 7236807)
Fixed AVX512 implementation with same issue as AVX2/SSSE3:
AVX512 BLAMKA Round Fix (
src/crypto/argon2/blake2/blamka-round-avx512.h):BLAKE2_ROUND_AVX512macro, only shuffling within 512-bit registersBLAKE2_ROUND_1_AVX512andBLAKE2_ROUND_2_AVX512SWAP_HALVES(256-bit lane swaps) for row processingSWAP_QUARTERS/UNSWAP_QUARTERS(128-bit element rotation) for column processing_mm512_shuffle_i64x2with correct immediate valuesAVX512 Core Fix (
src/crypto/argon2/argon2_avx512.c):fill_block_avx512to use corrected 8-argument macros__AVX512DQ__requirement (only needs__AVX512F__)Documentation: Added detailed fix explanation in commit message referencing the original buggy commit (c0e59cf)
2. Qt Wallet Enhancements
2.1 Shift+Click Range Selection in Coin Control (Commits 29acf92, b5c48af)
Implemented efficient UTXO selection with shift+click functionality:
New Feature (
src/qt/coincontroltreewidget.cpp,coincontroltreewidget.h):Implementation Details:
QTreeWidgetItem* m_lastClickedItemmember to track reference pointmousePressEventoverride detects shift modifier and handles range logicQTreeWidgetItemIteratorto build ordered list of visible itemsitemChangedsignals after range update for proper coin control synchronizationUser Benefit: Dramatically improves workflow when selecting many UTXOs for consolidation or specific transaction requirements
2.2 Qt Wallet Performance Improvements (Commit 3bb8c83)
Enhanced synchronization and dialog responsiveness:
Modal Overlay Optimization (
src/qt/modaloverlay.cpp):Coin Control Dialog Optimization (
src/qt/coincontroldialog.cpp,coincontroldialog.h):QTimerfor deferred updates to batch changesNode Interface Improvements (
src/interfaces/node.cpp):getUnspentOutputsquery with better filtering3. Cross-Platform Build System Improvements
3.1 Comprehensive Release Build Tooling (Commits 8429a55, 92a5059, 0b8a159)
Added automated multi-platform release build system:
Release Build Script (
contrib/build_release.sh):.tar.gzand.zip)--localflag) and clean builds (--clean,--clean-all)Release Build Documentation (
doc/build-rincoin-release.md):Fixes (Commit 0b8a159):
3.2 Modern Toolchain Compatibility
Python 3.12 Support (Commit 75d07d9):
xcb_proto 1.10used deprecated Pythonimpmodule, removed in Python 3.12xcb_proto: 1.10 → 1.17.0libxcb: 1.10 → 1.17.0depends/packages/xcb_proto.mk,depends/packages/libxcb.mk.tar.bz2to.tar.gzMinGW-w64 / Qt 5.9.8 Compatibility (Commits b68adf0, 29acf92):
TOUCHINPUTstructures already present in newer MinGW-w64 headers (Ubuntu 24.04)depends/patches/qt/fix-mingw-touchinput.patch):TOUCHEVENTF_MOVEalready defined before redefining structuresqwindowsmousehandler.cppWindows Build C++ Header Fix (Commit 85ffc0f):
src/fs.cppusedstd::numeric_limitswithout including<limits>header#include <limits>tosrc/fs.cpp3.3 Docker Build System Updates
sudofrom Docker Commands (Commit 398fe72):dockergroup4. Network and Blockchain Updates
4.1 Checkpoint Data Update (Commit 0ea6632)
Added 125 new checkpoints to accelerate initial sync:
src/chainparams.cpp4.2 Checkpoint Generation Tool (Commit 973663a)
Added developer tool for automated checkpoint generation:
contrib/devtools/generate_checkpoints.py(239 lines)chainparams.cppcheckpoint arraypython3 generate_checkpoints.py --start 1000 --end 435935 --interval 20004.3 Network Parameters (Commits de08fd4, 0757187)
Complete testnet and regtest network configuration:
5. Developer Tools
5.1 Genesis Block Miner (Commit 0d87d03)
Added tool for mining genesis blocks for new networks:
src/tools/genesis_miner.cpp(111 lines)src/tools/Makefile.amwith standalone compilation5.2 Base58 Prefix Test Utility (Commit de08fd4)
Added testing utility for address encoding:
test/util/base58prefixes-wallet-test.py(49 lines)6. Visual Updates
6.1 New Application Icons (Commit bd5a96a)
Refreshed application iconography:
Updated Files:
src/qt/res/icons/bitcoin.ico: 60KB → 205KB (higher resolution, multiple sizes)src/qt/res/icons/bitcoin_testnet.ico: 60KB → 205KBsrc/qt/res/icons/rincoin.png: 1.15MB → 82KB (optimized)src/qt/res/icons/rincoin_splash.png: 1.15MB → 82KB (optimized)Improvements:
7. Version Updates
7.1 Version Configuration
File Modified:
configure.ac8. Performance Enhancements
8.1 Sequential Blockfile Reading (Commit bc6f40b)
Optimized block file I/O for faster sync:
New Feature (
src/flatfile.cpp,src/flatfile.h):posix_fadvisewithPOSIX_FADV_SEQUENTIAL)Integration (
src/validation.cpp,src/init.cpp):Commit History Summary
Critical Fixes
<limits>header for Windows buildNew Features
Network/Data Updates
Build System
Visual Updates
Core Optimizations
Rolled Back
Files Changed Summary
Total Modified: 47 files
Total Additions: +3,847 lines
Total Deletions: -882 lines
Core Crypto/Hashing (15 files)
src/crypto/argon2/*: SIMD implementations and fixessrc/crypto/rinhash.cpp: Dispatch integrationQt Interface (4 files)
src/qt/coincontroltreewidget.{cpp,h}: Shift+click selectionsrc/qt/coincontroldialog.{cpp,h}: Performance optimizationssrc/qt/modaloverlay.cpp: Sync dialog updatesBuild System (9 files)
configure.ac: Version and CPU feature detectionsrc/Makefile.am: SIMD module integrationdepends/packages/{qt.mk,libxcb.mk,xcb_proto.mk}: Dependency updatesdepends/patches/qt/*.patch: Qt compatibility patchescontrib/build_release.sh: Release automationdoc/build-rincoin-release.md: Build documentationNetwork/Blockchain (3 files)
src/chainparams.cpp: Checkpoints and network parameterssrc/chainparamsseeds.h: IP seedssrc/fs.cpp: Header fixDeveloper Tools (4 files)
contrib/devtools/generate_checkpoints.py: Checkpoint generatorsrc/tools/{Makefile.am,genesis_miner.cpp}: Genesis minertest/util/base58prefixes-wallet-test.py: Address testingValidation/Storage (4 files)
src/validation.{cpp,h}: Sequential read integrationsrc/flatfile.{cpp,h}: Sequential read hint systemsrc/init.cpp: Initialization logicVisual Assets (4 files)
src/qt/res/icons/*.{ico,png}: Updated iconsDocumentation (1 file)
README.md: Updated build informationTesting Recommendations
Critical Testing Areas
Hash Verification:
Cross-Platform Builds:
Qt Wallet Features:
Network Synchronization:
Performance Benchmarks:
Known Issues & Limitations
Memory Pooling Disabled: Argon2 memory pooling proved unstable and was removed. Standard allocation is used instead.
AVX512 Requirement: AVX512 builds require only
AVX512F, notAVX512DQ. Most Skylake-X and later CPUs support this.Qt 5.9.8: Using older Qt version for compatibility. Qt 6.x migration planned for future release.
Checkpoint Centralization: Hardcoded checkpoints reduce decentralization but improve sync speed. Critical security assumption: checkpointed blocks are trusted.
Upgrade Notes
From v1.0.1 or Earlier
wallet.datbefore upgradingrincoin-cli stopCredits
Lead Developer: takologi (takologi@users.noreply.github.com)
Upstream References:
Appendix: Technical Deep Dive
A. SIMD Optimization Architecture
The dispatch system uses a three-tier approach:
Runtime Detection (
argon2_dispatch.c):SSSE3(bit 9 in ECX),AVX2(bit 5 in EBX),AVX512F(bit 16 in EBX)Function Pointer Selection:
SIMD Register Usage:
__m128i(XMM registers) - processes 2x 64-bit words__m256i(YMM registers) - processes 4x 64-bit words__m512i(ZMM registers) - processes 8x 64-bit wordsB. BLAKE2b Round Transformation
The BLAMKA (BLAKE2b Modified) compression function uses:
Row Processing (BLAKE2_ROUND_1):
(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7])SWAP_HALVES: Swaps lower/upper halves of SIMD vectors for inter-element mixingColumn Processing (BLAKE2_ROUND_2):
(S[0],S[2],S[4],S[6],S[8],S[10],S[12],S[14])SWAP_QUARTERS/UNSWAP_QUARTERS: Rotates elements cyclically for column mixingC. Build System Cache Strategy
The build script implements three-level caching:
Source Downloads (
DEPENDS_SOURCES_CACHE):Built Dependencies (
DEPENDS_BUILT_CACHE):--cleanflagDocker Images:
--clean-allflagD. Argon2 Memory Pool Implementation (Rolled Back)
Context: During development, a memory pooling system was implemented for Argon2 hash calculations to reduce allocation overhead.
Implementation Details (Commit c0e59cf - original, reverted in a75de64):
src/crypto/argon2/argon2_mempool.c(219 lines) andargon2_mempool.h(81 lines)Why It Was Rolled Back (Commit a75de64):
Decision: Complete removal of memory pooling code
malloc/freefor Argon2 allocationsFiles Removed:
src/crypto/argon2/argon2_mempool.csrc/crypto/argon2/argon2_mempool.hsrc/crypto/argon2/Makefile.amsrc/crypto/rinhash.cppLesson Learned: Premature optimization. Profile before optimizing, and measure the actual impact. In this case, the complexity cost outweighed any theoretical performance benefit.
End of Release Notes