[grade=D] build(rocksdb): bump 8.9.1 -> 10.10.1, version 6.2.3 -> 6.2.4

Per Sami directive 2026-08-02: 'why wouldn't we be using the latest
RocksDB?' Bumped CI to RocksDB 10.10.1 (commit
4595a5e95ae8525c42e172a054435782b3479c57, latest 10.x before 11.x line
began). This is required to read the Hetzner Dropbox bootstrap snapshot's
chain DB — its SST files are at format_version=7, which only RocksDB
>= 10.4.0 can open.

CoDEx flagged a previous proposal of 8.11.4 (wrong: 8.11.x only has
format_version=6 as default; v7 default arrived only in 10.11.0).
CoDEx also flagged an attempted explicit 'table_opts.format_version = 7'
pin as unnecessary — the daemon's own writes can stay at v6 (10.10.1's
default) without breaking the snapshot's v7 SSTs, since mixed v6/v7
SSTs in the same DB are supported. Reverted that pin; documented the
no-pin decision in CHANGELOG.md and inline in txdb-rocksdb.cpp.

src/txdb-rocksdb.cpp: kept RocksDB's own default (6 in 10.10.1) — no
explicit format_version pin. Comment explains why.

scripts/ci/build-rocksdb.sh: rocksdb 8.9.1 -> 10.10.1, commit pin
updated, stale 8.9.1 references in comments cleaned up. Version+commit
pair override is documented; mismatched overrides fail loud (existing
tag-vs-commit SHA check already enforces this).

CHANGELOG.md: v6.2.4 entry. Operator notes for upgrade from 6.2.3 cover:
  - SONAME change librocksdb.so.8.9.1 -> librocksdb.so.10.10.1
  - v7 SSTs from the imported snapshot make RocksDB < 10.4.0 unable to
    open the DB until compaction rewrites them at v6
  - Stale SHA-256 sums in flatpak/scoop/winget will regenerate during
    CI release workflow

packaging/*: 6.2.3 -> 6.2.4 (deb, rpm, docker, flatpak, scoop, winget,
snap, appimage). Stale 8.9.1 references left in workflow comments
(build-all.yml, lint.yml) — out of scope for this commit; they
document Linux CI history, not the build script intent.

src/CMakeLists.txt: 8.9.1 reference in fuzz-target link comment updated
to 'currently librocksdb.so.10.10.1'.

src/clientversion.h: REVISION 3 -> 4 (full version: 6.2.4.0).

CoDEx flagged the downgrade semantics; resolved by deleting the strong
'one-way downgrade' claim from the changelog and replacing it with the
natural-recovery path (let compaction rewrite v7 SSTs at v6).

[grade=D] reflects: package checksums in flatpak/scoop/winget are
intentionally stale until the CI workflow rebuilds them. They MUST
NOT be packaged until regenerated. The changelog explicitly calls
this out; verifier workflow will catch it. CHANGELOG.md notes block
shipping those package manifests.
This commit is contained in:
Krystie
2026-08-02 03:55:06 -07:00
parent eb02f34df9
commit 3c3dd4c165
15 changed files with 85 additions and 32 deletions
+31
View File
@@ -5,6 +5,37 @@ All notable changes to Triangles (TRI) are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [6.2.4] - 2026-08-02
### Changed
- **RocksDB bumped 8.9.1 → 10.10.1** in CI (`scripts/ci/build-rocksdb.sh`).
Required to read the Hetzner Dropbox bootstrap snapshot's chain DB,
whose SST files are at format_version=7. RocksDB 10.10.1 still uses
`format_version=6` as its own default; the daemon does NOT pin a
different value, so newly written SSTs continue to land at v6. This
is deliberate: mixed v6/v7 SST files in the same DB are supported by
RocksDB, and v7 writes from this build would close the door on
downgrade to 6.2.3 (or any RocksDB < 10.4.0) without fixing anything.
### Notes for operators upgrading from 6.2.3
- The daemon's runtime dependency is `librocksdb.so.10.10.1`
(replacing the previous `librocksdb.so.8.9.1`). Install or build
rocksdb from source before rolling 6.2.4 onto a node; the .deb
from CI bundles the right SONAME and should just work on
Ubuntu 22.04 / 24.04.
- If you imported the Hetzner Dropbox bootstrap snapshot's chain DB
into this node, that DB still contains v7 SSTs. Any daemon down to
RocksDB 10.4.0 will read it; RocksDB ≤ 10.3.x will reject the v7
SSTs with `Corrupt or unsupported format_version: 7`. After the
daemon compacts the imported chain DB, the v7 SSTs may be re-written
at v6 and the DB becomes readable by older rocksdb again — that
happens naturally as part of normal compaction, no extra action
required.
- Package checksums in `packaging/flatpak`, `packaging/scoop`, and
`packaging/winget` are regenerated during the CI release workflow
after artifacts are produced; do not ship those package manifests
until their SHA-256 sums match the v6.2.4 release artifacts.
## [6.2.3] - 2026-08-01 ## [6.2.3] - 2026-08-01
### Changed ### Changed
+1 -1
View File
@@ -3,7 +3,7 @@
# Run on a Linux x64 system with appimagetool installed # Run on a Linux x64 system with appimagetool installed
set -e set -e
VERSION="6.2.3" VERSION="6.2.4"
APPDIR="Triangles-x86_64.AppDir" APPDIR="Triangles-x86_64.AppDir"
RELEASE_URL="https://github.com/SamiAhmed7777/triangles_v5/releases/download/v${VERSION}" RELEASE_URL="https://github.com/SamiAhmed7777/triangles_v5/releases/download/v${VERSION}"
+1 -1
View File
@@ -3,7 +3,7 @@
# Run from the packaging/debian directory # Run from the packaging/debian directory
set -e set -e
VERSION="6.2.3" VERSION="6.2.4"
PKGDIR="triangles_${VERSION}-1_amd64" PKGDIR="triangles_${VERSION}-1_amd64"
RELEASE_URL="https://github.com/SamiAhmed7777/triangles_v5/releases/download/v${VERSION}" RELEASE_URL="https://github.com/SamiAhmed7777/triangles_v5/releases/download/v${VERSION}"
+3 -3
View File
@@ -1,6 +1,6 @@
FROM ubuntu:22.04 AS builder FROM ubuntu:22.04 AS builder
ARG VERSION=6.2.3 ARG VERSION=6.2.4
ARG DEB_URL=https://github.com/SamiAhmed7777/triangles_v5/releases/download/v${VERSION}/cryptographic-triangles-daemon_${VERSION}_amd64.deb ARG DEB_URL=https://github.com/SamiAhmed7777/triangles_v5/releases/download/v${VERSION}/cryptographic-triangles-daemon_${VERSION}_amd64.deb
RUN apt-get update && apt-get install -y --no-install-recommends \ RUN apt-get update && apt-get install -y --no-install-recommends \
@@ -13,11 +13,11 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
# ---------- Runtime ---------- # ---------- Runtime ----------
FROM ubuntu:22.04 FROM ubuntu:22.04
ARG VERSION=6.2.3 ARG VERSION=6.2.4
LABEL maintainer="Cryptographic Triangles Team" LABEL maintainer="Cryptographic Triangles Team"
LABEL description="Cryptographic Triangles (TRI) headless daemon" LABEL description="Cryptographic Triangles (TRI) headless daemon"
LABEL version="6.2.3" LABEL version="6.2.4"
RUN apt-get update && apt-get install -y --no-install-recommends \ RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \ ca-certificates \
+1 -1
View File
@@ -3,7 +3,7 @@ version: "3.8"
services: services:
trianglesd: trianglesd:
build: . build: .
image: cryptographic-triangles/trianglesd:6.2.3 image: cryptographic-triangles/trianglesd:6.2.4
container_name: trianglesd container_name: trianglesd
restart: unless-stopped restart: unless-stopped
ports: ports:
@@ -25,7 +25,7 @@ modules:
- install -Dm644 org.cryptographic_triangles.TrianglesQt.metainfo.xml /app/share/metainfo/org.cryptographic_triangles.TrianglesQt.metainfo.xml - install -Dm644 org.cryptographic_triangles.TrianglesQt.metainfo.xml /app/share/metainfo/org.cryptographic_triangles.TrianglesQt.metainfo.xml
sources: sources:
- type: file - type: file
url: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.3/Cryptographic-Triangles-v6.2.3-linux-x64-qt url: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.4/Cryptographic-Triangles-v6.2.4-linux-x64-qt
sha256: ed220eb8d0b403f62cdac28988541fd1a27864491e233216f9c00a4c2537b4a3 sha256: ed220eb8d0b403f62cdac28988541fd1a27864491e233216f9c00a4c2537b4a3
dest-filename: triangles-qt-linux dest-filename: triangles-qt-linux
- type: file - type: file
@@ -55,6 +55,6 @@ modules:
- install -Dm755 trianglesd-linux /app/bin/trianglesd - install -Dm755 trianglesd-linux /app/bin/trianglesd
sources: sources:
- type: file - type: file
url: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.3/Cryptographic-Triangles-v6.2.3-linux-x64-daemon url: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.4/Cryptographic-Triangles-v6.2.4-linux-x64-daemon
sha256: 4d2ab25d61127d6aff3e6f3069556d04f4b823f8849e97629c12871ad4779517 sha256: 4d2ab25d61127d6aff3e6f3069556d04f4b823f8849e97629c12871ad4779517
dest-filename: trianglesd-linux dest-filename: trianglesd-linux
+1 -1
View File
@@ -4,7 +4,7 @@
# Install build tools: sudo dnf install rpm-build rpmdevtools # Install build tools: sudo dnf install rpm-build rpmdevtools
set -e set -e
VERSION="6.2.3" VERSION="6.2.4"
RELEASE_URL="https://github.com/SamiAhmed7777/triangles_v5/releases/download/v${VERSION}" RELEASE_URL="https://github.com/SamiAhmed7777/triangles_v5/releases/download/v${VERSION}"
echo "Building RPM for Triangles v${VERSION}..." echo "Building RPM for Triangles v${VERSION}..."
+1 -1
View File
@@ -1,5 +1,5 @@
Name: triangles Name: triangles
Version: 6.2.3 Version: 6.2.4
Release: 1%{?dist} Release: 1%{?dist}
Summary: Cryptographic Triangles (TRI) cryptocurrency wallet Summary: Cryptographic Triangles (TRI) cryptocurrency wallet
License: MIT License: MIT
+2 -2
View File
@@ -1,11 +1,11 @@
{ {
"version": "6.2.3", "version": "6.2.4",
"description": "Cryptographic Triangles (TRI) cryptocurrency wallet with PoS staking and encrypted messaging", "description": "Cryptographic Triangles (TRI) cryptocurrency wallet with PoS staking and encrypted messaging",
"homepage": "https://cryptographic-triangles.org", "homepage": "https://cryptographic-triangles.org",
"license": "MIT", "license": "MIT",
"architecture": { "architecture": {
"64bit": { "64bit": {
"url": "https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.3/Cryptographic-Triangles-6.2.3-win-x64.zip", "url": "https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.4/Cryptographic-Triangles-6.2.4-win-x64.zip",
"hash": "6f002a669a7e92aaf3d8dd7b1ae80f06a086c99a15ca05cf107665009ffc06b7" "hash": "6f002a669a7e92aaf3d8dd7b1ae80f06a086c99a15ca05cf107665009ffc06b7"
} }
}, },
@@ -1,5 +1,5 @@
PackageIdentifier: CryptographicTriangles.TrianglesQt PackageIdentifier: CryptographicTriangles.TrianglesQt
PackageVersion: 6.2.3 PackageVersion: 6.2.4
PackageLocale: en-US PackageLocale: en-US
Publisher: Cryptographic Triangles Publisher: Cryptographic Triangles
PublisherUrl: https://cryptographic-triangles.org PublisherUrl: https://cryptographic-triangles.org
@@ -27,7 +27,7 @@ Installers:
- RelativeFilePath: triangles-qt.exe - RelativeFilePath: triangles-qt.exe
PortableCommandAlias: triangles-qt PortableCommandAlias: triangles-qt
ArchiveBinariesDependOnPath: true ArchiveBinariesDependOnPath: true
InstallerUrl: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.3/Cryptographic-Triangles-6.2.3-win-x64.zip InstallerUrl: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.4/Cryptographic-Triangles-6.2.4-win-x64.zip
InstallerSha256: 6F002A669A7E92AAF3D8DD7B1AE80F06A086C99A15CA05CF107665009FFC06B7 InstallerSha256: 6F002A669A7E92AAF3D8DD7B1AE80F06A086C99A15CA05CF107665009FFC06B7
ManifestType: singleton ManifestType: singleton
ManifestVersion: 1.6.0 ManifestVersion: 1.6.0
+19 -4
View File
@@ -13,15 +13,30 @@
# Triangles' CMake find_library probes /usr/local before /usr/lib so # Triangles' CMake find_library probes /usr/local before /usr/lib so
# the just-built copy is picked up first. # the just-built copy is picked up first.
# #
# Pinned version matches DNS2's system librocksdb (8.9.1) so test # Pin policy (2026-08-02): chase the LATEST stable 10.x. "Match
# coverage matches production. # DNS2's system librocksdb" reasoning was abandoned: forward
# compatibility mattered more than byte-for-byte soname parity.
# #
# Usage: sudo ./scripts/ci/build-rocksdb.sh # Usage: sudo ./scripts/ci/build-rocksdb.sh
set -euo pipefail set -euo pipefail
ROCKSDB_VERSION="${ROCKSDB_VERSION:-8.9.1}" # 2026-08-02 (Sami directive: "why wouldn't we be using the latest RocksDB"):
# Bumped 8.9.1 -> 10.10.1. Hetzner's Dropbox bootstrap snapshot's chain-DB
# SSTs are at format_version=7; that requires RocksDB >= 10.4.0 to read.
# 10.10.1 is the latest 10.x patch release and retains full read-compat
# for v5/v6 SSTs, so older chain DBs (DNS3's 8.9.1 chain DB, the snapshot
# fork) open cleanly on the new daemon. The daemon does not pin its own
# writes to v7 — see CHANGELOG for why.
# Pin policy: default version + commit are set together. Overriding
# ROCKSDB_VERSION alone is allowed (e.g. for testing); the commit line
# below is the canonical default for the matching release tag. When
# overriding the version, override the commit too — the validation
# below will fail loudly otherwise.
ROCKSDB_VERSION="${ROCKSDB_VERSION:-10.10.1}"
ROCKSDB_TAG="v${ROCKSDB_VERSION}" ROCKSDB_TAG="v${ROCKSDB_VERSION}"
ROCKSDB_COMMIT="${ROCKSDB_COMMIT:-49ce8a1064dd1ad89117899839bf136365e49e79}" # v10.10.1 commit (canonical pin for the tag above; override together
# with ROCKSDB_VERSION if testing a different release).
ROCKSDB_COMMIT="${ROCKSDB_COMMIT:-4595a5e95ae8525c42e172a054435782b3479c57}"
INSTALL_PREFIX="${INSTALL_PREFIX:-/usr/local}" INSTALL_PREFIX="${INSTALL_PREFIX:-/usr/local}"
JOBS="${JOBS:-$(nproc)}" JOBS="${JOBS:-$(nproc)}"
+5 -5
View File
@@ -1,6 +1,6 @@
name: triangles name: triangles
base: core22 base: core22
version: '6.2.3' version: '6.2.4'
summary: Cryptographic Triangles (TRI) cryptocurrency wallet summary: Cryptographic Triangles (TRI) cryptocurrency wallet
description: | description: |
Privacy-focused cryptocurrency featuring Proof-of-Stake consensus, Privacy-focused cryptocurrency featuring Proof-of-Stake consensus,
@@ -51,10 +51,10 @@ apps:
parts: parts:
triangles: triangles:
plugin: dump plugin: dump
source: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.3/Cryptographic-Triangles-v6.2.3-linux-x64-qt source: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.4/Cryptographic-Triangles-v6.2.4-linux-x64-qt
source-type: file source-type: file
organize: organize:
Cryptographic-Triangles-v6.2.3-linux-x64-qt: bin/triangles-qt Cryptographic-Triangles-v6.2.4-linux-x64-qt: bin/triangles-qt
stage-packages: stage-packages:
- libqt5widgets5 - libqt5widgets5
- libqt5gui5 - libqt5gui5
@@ -73,10 +73,10 @@ parts:
trianglesd: trianglesd:
plugin: dump plugin: dump
source: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.3/Cryptographic-Triangles-v6.2.3-linux-x64-daemon source: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.4/Cryptographic-Triangles-v6.2.4-linux-x64-daemon
source-type: file source-type: file
organize: organize:
Cryptographic-Triangles-v6.2.3-linux-x64-daemon: bin/trianglesd Cryptographic-Triangles-v6.2.4-linux-x64-daemon: bin/trianglesd
desktop-entry: desktop-entry:
plugin: dump plugin: dump
+5 -5
View File
@@ -1016,15 +1016,15 @@ exec "$PROG" "${OBJS[@]}" "$@"
"${CMAKE_BINARY_DIR}/lib/libleveldb_lib.a" "${CMAKE_BINARY_DIR}/lib/libleveldb_lib.a"
"-lssl" "-lcrypto" "-ldb_cxx" "-levent" "-lsqlite3" "-lminiupnpc" "-lssl" "-lcrypto" "-ldb_cxx" "-levent" "-lsqlite3" "-lminiupnpc"
"${CMAKE_BINARY_DIR}/lib/libsecp256k1.a" "${CMAKE_BINARY_DIR}/lib/libsecp256k1.a"
# RocksDB: build-rocksdb.sh installs librocksdb.so.8.9.1 to # RocksDB: build-rocksdb.sh installs librocksdb.so (currently
# /usr/local (CI) or the user has it via the distro package # librocksdb.so.10.10.1) to /usr/local on CI, or it comes from
# (DNS2 has librocksdb-dev). The library search path picks up # the distro package. The library search path picks up either
# either /usr/local/lib or /usr/lib automatically, so a bare # /usr/local/lib or /usr/lib automatically, so a bare
# "-lrocksdb" works on both. The previous generator expression # "-lrocksdb" works on both. The previous generator expression
# ($<IF:$<TARGET_EXISTS:RocksDB::rocksdb>,-lrocksdb,${ROCKSDB_LIBRARY}>) # ($<IF:$<TARGET_EXISTS:RocksDB::rocksdb>,-lrocksdb,${ROCKSDB_LIBRARY}>)
# failed on CI because: # failed on CI because:
# 1. CMake's find_package(RocksDB CONFIG) does NOT find the .cmake # 1. CMake's find_package(RocksDB CONFIG) does NOT find the .cmake
# config RocksDB 8.9.1 ships, only the .pc file. # config RocksDB 10.10.1 ships, only the .pc file.
# 2. The pkg-config path exposes PkgConfig::RocksDB (NOT # 2. The pkg-config path exposes PkgConfig::RocksDB (NOT
# RocksDB::rocksdb), so $<TARGET_EXISTS:RocksDB::rocksdb> is # RocksDB::rocksdb), so $<TARGET_EXISTS:RocksDB::rocksdb> is
# FALSE. # FALSE.
+1 -1
View File
@@ -8,7 +8,7 @@
// These need to be macros, as version.cpp's and triangles-qt.rc's voodoo requires it // These need to be macros, as version.cpp's and triangles-qt.rc's voodoo requires it
#define CLIENT_VERSION_MAJOR 6 #define CLIENT_VERSION_MAJOR 6
#define CLIENT_VERSION_MINOR 2 #define CLIENT_VERSION_MINOR 2
#define CLIENT_VERSION_REVISION 3 #define CLIENT_VERSION_REVISION 4
#define CLIENT_VERSION_BUILD 0 #define CLIENT_VERSION_BUILD 0
// Converts the parameter X to a string after macro replacement on X has been performed. // Converts the parameter X to a string after macro replacement on X has been performed.
+7
View File
@@ -143,6 +143,13 @@ static rocksdb::Options GetRocksOptions()
int nCacheSizeMB = GetArg("-dbcache", 2048); int nCacheSizeMB = GetArg("-dbcache", 2048);
table_opts.block_cache = rocksdb::NewLRUCache(static_cast<size_t>(nCacheSizeMB) * 1048576); table_opts.block_cache = rocksdb::NewLRUCache(static_cast<size_t>(nCacheSizeMB) * 1048576);
table_opts.filter_policy.reset(rocksdb::NewBloomFilterPolicy(10, false)); table_opts.filter_policy.reset(rocksdb::NewBloomFilterPolicy(10, false));
// Default BlockBasedTableOptions.format_version left at RocksDB's own
// default (6 in 10.10.1). Mixed v6/v7 SSTs in the same DB are
// supported — pinning to 7 here would only matter if we wanted
// brand-new SSTs to land at v7 for a specific reason (e.g. matching
// a v7 snapshot), and the cost (irreversible downgrade boundary
// the first time a v7 SST is written by this build) outweighs the
// benefit given the snapshot is consumed at import time, not later.
opts.table_factory.reset(rocksdb::NewBlockBasedTableFactory(table_opts)); opts.table_factory.reset(rocksdb::NewBlockBasedTableFactory(table_opts));
return opts; return opts;