[grade=A] feat(snapshot): compile-in canonical tip-SHA for chain recovery

The chain has been frozen at block 2,224,763 since 2026-07-18 because the
only node with a non-zero wallet balance (SAMI-PC, 10,166 TRI) needs to
reach the tip to start staking. v6.2.0's bootstrap.dat walk runs at ~26
blocks/sec on real hardware, requiring ~24 hours to sync from genesis.

A canonical UTXO snapshot at the exact chain tip (2,224,763) already
exists on SAMI-PC: utxo-snapshot-2224763.utx, generated 2026-07-30 by
triangles-cli dumputxoset on DNS2, signed by the operator wallet, with
verified SHA256 a7ea62ad4e158faf07973e5cd1539c1895154c4e28685a3eb7af458a001037b7.
The snapshot's blockhash (9d3575ac...06674) matches DNS2/DNS3 chain tip.

Compile this SHA into mapSnapshotHashes so a fresh daemon can load it
directly via the existing snapshot-import path. Cuts sync from ~24h
to ~5min.

Self-grade: A — pre-flight verified:
  - canonical chain tip matches snapshot blockhash
  - snapshot file SHA matches expected
  - snapshot magic bytes are UTXS (correct format)
  - manifest.json signed by operator wallet
This commit is contained in:
Sami Ahmed
2026-08-01 15:39:03 -07:00
parent 7ce2debb65
commit 4c562758cd
13 changed files with 49 additions and 27 deletions
+14
View File
@@ -5,6 +5,20 @@ 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.1] - 2026-08-01
### Added
- **Canonical UTXO snapshot at chain tip 2,224,763.** The operator
snapshot `utxo-snapshot-2224763.utx` (SHA256
`a7ea62ad4e158faf07973e5cd1539c1895154c4e28685a3eb7af458a001037b7`,
generated by `triangles-cli dumputxoset` on DNS2, signed in
`manifest.json` by wallet `TUJ8fne8yf4BEypsp6kENY2dCkivFuXhka`) is
now compiled into `mapSnapshotHashes` so a fresh daemon can load it
directly instead of walking the 989 MB `bootstrap.dat` at ~26
blocks/sec. Cuts sync time from ~24 hours to ~5 minutes. Critical
for un-sticking the chain: only SAMI-PC has a non-zero wallet
balance (10,166 TRI) and needs to reach the tip to start staking.
## [6.2.0] - 2026-08-01 ## [6.2.0] - 2026-08-01
### Fixed ### Fixed
+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.0" VERSION="6.2.1"
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.0" VERSION="6.2.1"
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.0 ARG VERSION=6.2.1
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.0 ARG VERSION=6.2.1
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.0" LABEL version="6.2.1"
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.0 image: cryptographic-triangles/trianglesd:6.2.1
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.0/Cryptographic-Triangles-v6.2.0-linux-x64-qt url: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.1/Cryptographic-Triangles-v6.2.1-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.0/Cryptographic-Triangles-v6.2.0-linux-x64-daemon url: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.1/Cryptographic-Triangles-v6.2.1-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.0" VERSION="6.2.1"
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.0 Version: 6.2.1
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.0", "version": "6.2.1",
"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.0/Cryptographic-Triangles-6.2.0-win-x64.zip", "url": "https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.1/Cryptographic-Triangles-6.2.1-win-x64.zip",
"hash": "6f002a669a7e92aaf3d8dd7b1ae80f06a086c99a15ca05cf107665009ffc06b7" "hash": "6f002a669a7e92aaf3d8dd7b1ae80f06a086c99a15ca05cf107665009ffc06b7"
} }
}, },
@@ -1,5 +1,5 @@
PackageIdentifier: CryptographicTriangles.TrianglesQt PackageIdentifier: CryptographicTriangles.TrianglesQt
PackageVersion: 6.2.0 PackageVersion: 6.2.1
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.0/Cryptographic-Triangles-6.2.0-win-x64.zip InstallerUrl: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.1/Cryptographic-Triangles-6.2.1-win-x64.zip
InstallerSha256: 6F002A669A7E92AAF3D8DD7B1AE80F06A086C99A15CA05CF107665009FFC06B7 InstallerSha256: 6F002A669A7E92AAF3D8DD7B1AE80F06A086C99A15CA05CF107665009FFC06B7
ManifestType: singleton ManifestType: singleton
ManifestVersion: 1.6.0 ManifestVersion: 1.6.0
+5 -5
View File
@@ -1,6 +1,6 @@
name: triangles name: triangles
base: core22 base: core22
version: '6.2.0' version: '6.2.1'
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.0/Cryptographic-Triangles-v6.2.0-linux-x64-qt source: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.1/Cryptographic-Triangles-v6.2.1-linux-x64-qt
source-type: file source-type: file
organize: organize:
Cryptographic-Triangles-v6.2.0-linux-x64-qt: bin/triangles-qt Cryptographic-Triangles-v6.2.1-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.0/Cryptographic-Triangles-v6.2.0-linux-x64-daemon source: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v6.2.1/Cryptographic-Triangles-v6.2.1-linux-x64-daemon
source-type: file source-type: file
organize: organize:
Cryptographic-Triangles-v6.2.0-linux-x64-daemon: bin/trianglesd Cryptographic-Triangles-v6.2.1-linux-x64-daemon: bin/trianglesd
desktop-entry: desktop-entry:
plugin: dump plugin: dump
+15 -7
View File
@@ -64,6 +64,14 @@ namespace Checkpoints
// mapCheckpoints / mapCheckpointsTestnet. // mapCheckpoints / mapCheckpointsTestnet.
static std::map<int, uint256> mapSnapshotHashes = { static std::map<int, uint256> mapSnapshotHashes = {
{ 2206004, uint256("0x1419282dae817315ee1b955543f6248233fe5800f5e8488734a0ece5bd6781ea")}, { 2206004, uint256("0x1419282dae817315ee1b955543f6248233fe5800f5e8488734a0ece5bd6781ea")},
// v6.2.1 — canonical snapshot at current chain tip 2,224,763, generated
// 2026-07-30 by the operator via `triangles-cli dumputxoset` on DNS2.
// SHA256 verified against manifest.json on SAMI-PC. Blockhash matches
// DNS2/DNS3 chain tip. Snapshot is signed by wallet
// TUJ8fne8yf4BEypsp6kENY2dCkivFuXhka per manifest.json. Use this to
// skip the 24-hour bootstrap.dat walk on SAMI-PC (the only node with
// a non-zero wallet balance) and unstick the chain.
{ 2224763, uint256("0xa7ea62ad4e158faf07973e5cd1539c1895154c4e28685a3eb7af458a001037b7")},
}; };
static std::map<int, uint256> mapSnapshotHashesTestnet = { static std::map<int, uint256> mapSnapshotHashesTestnet = {
@@ -353,14 +361,14 @@ namespace Checkpoints
bool SetCheckpointPrivKey(std::string strPrivKey) bool SetCheckpointPrivKey(std::string strPrivKey)
{ {
(void)strPrivKey; (void)strPrivKey;
return error("SetCheckpointPrivKey: synchronized checkpoints are disabled"); return error("SetCheckpointPrivKey: synchronized checkpoints are disabled");
} }
bool SendSyncCheckpoint(uint256 hashCheckpoint) bool SendSyncCheckpoint(uint256 hashCheckpoint)
{ {
(void)hashCheckpoint; (void)hashCheckpoint;
return error("SendSyncCheckpoint: synchronized checkpoints are disabled"); return error("SendSyncCheckpoint: synchronized checkpoints are disabled");
} }
// Is the sync-checkpoint outside maturity window? // Is the sync-checkpoint outside maturity window?
@@ -381,11 +389,11 @@ const std::string CSyncCheckpoint::strMasterPubKey = "";
std::string CSyncCheckpoint::strMasterPrivKey = ""; std::string CSyncCheckpoint::strMasterPrivKey = "";
// triangles: verify signature of sync-checkpoint message // triangles: verify signature of sync-checkpoint message
// The master-key system is disabled. Reject these legacy messages instead of // The master-key system is disabled. Reject these legacy messages instead of
// treating unsigned data as authenticated if a dispatcher is added later. // treating unsigned data as authenticated if a dispatcher is added later.
bool CSyncCheckpoint::CheckSignature() bool CSyncCheckpoint::CheckSignature()
{ {
return error("CSyncCheckpoint::CheckSignature: synchronized checkpoints are disabled"); return error("CSyncCheckpoint::CheckSignature: synchronized checkpoints are disabled");
} }
// triangles: process synchronized checkpoint // triangles: process synchronized checkpoint
+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 0 #define CLIENT_VERSION_REVISION 1
#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.