GitHub Release Notes: Hoosat Network Node v2.11.0
This release has been rushed because Friday 7th August the network went down. This update includes HF to block version 7, which brings max blue anticone size which is equal to k+1, and block template generation which stops using disqualified and invalid blocks as parents.
Release datadir can be downloaded from: https://network.hoosat.fi/downloads/datadirs/datadir2-v2.11.0.tar.gz
New Features & Improvements
Consensus & Block Processing
- Block v7 Support: Added new parent selection logic for block version 7
- Vote Platform Integration: Notify vote platform API when casting votes for platform pickup
- Enhanced Block Validation: Added comprehensive validation to reject blocks with disqualified or invalid parents (UTXODisqualified, StatusInvalid, UTXOPendingVerification)
- Fallback Parent Validation: Validate fallback parents before use in block template building
- Disqualified Block Handling: Improved re-resolution to process DisqualifiedFromChain blocks; filter out disqualified tips in calculateNewTips to prevent indefinite growth
Performance Optimizations
- LRU Caching: Added LRU cache for orderdag results to optimize recursive function calls
- GHOSTDAG Caching: Implemented GHOSTDAG caching to reduce database load
- DAGknight Optimization: Optimized key generation in DAGknight
Block Header Optimizations:
- Fixed externalapi Block Header interface to avoid slow dynamic lookup
- Optimized timestamp and bits fetching to avoid non-inlineable call overhead
- Memory Optimization: Reinterpreted DomainHash pointers directly as byte slices to avoid copies
- PebbleDB Tuning: Configuration changes including bloom filter adjustments and memtable optimizations
Mining & Template Building
- Block Template Validation: Only check block status when building new block templates (not during validation); only add validated blocks as parents
- Parent Selection: Prevent use of disqualified blocks as parents for new blocks
- Aarch Header: Made aarch header immutable
Critical Bug Fixes
Consensus & Synchronization
- Critical Data Race: Fixed critical data race and thread-safety issues in consensus
- BPS Drops: Resolved multiple BPS (blocks per second) drops:
- Increased channel buffers and removed IBD sleep delay
- Removed database retry delays
- Fixed tips growing and DAAScore not updating
- Virtual Parent Selection: Fixed to properly handle UTXOPendingVerification blocks and check actual child statuses
- Pruning Point Validation: Multiple fixes for pruning point validation logic; proper handling of invalid pruning points during IBD
- Block Status Resolution: Fixed update virtual not working during clean sync IBD; modified RepairBlockStatuses to set all blocks -to StatusUTXOValid unless invalid
- Tips Management: Fixed tips growing indefinitely; proper tip filtering to prevent growth
Database & Storage
- WAL Configuration: Reverted WAL disable by default (was causing tips growth and DAAScore issues)
- Unmarshal Safety: Stopped using UnmarshalVTUnsafe where it caused issues; fixed dagdata and blockheader stores
- Byte Slice Handling: Replaced ByteSlice with unsafe byte slice for performance; proper memory access patterns
Configuration & Protocol Changes
- Testnet BPS: Adjusted testnet from 100 BPS to 10 BPS
- IBD Timeout: Increased default IBD (Initial Block Download) timeout
- Bloom Filter Settings: Lowered bloombits per key and decreased blocksize for better point reads
- Database Settings: Various PebbleDB setting adjustments
Code Quality
- Dead Code Removal: Removed dead weight clutter code
- Interface Fixes: Fixed multiple interfaces where inlining was impossible (Database, P2PServer, etc.)
- Error Handling: Better handling of ErrBadPruningPointUTXOSet during IBD; graceful handling of invalid pruning point checks
- Logging: Improved UTXO index reset logging
- Code Formatting: Multiple go fix ./... passes