# Cryptographic Triangles (TRI) Triangles is a privacy-focused cryptocurrency featuring Proof-of-Stake consensus, Tor v3 onion routing, and built-in encrypted messaging. Originally launched in July 2014, the chain was revived in March 2026 after being frozen since December 2022. ## Key Features - **Proof-of-Stake** - Energy-efficient block production with 33% annual staking rewards (coin-age based) - **Hash9 Algorithm** - Unique 13-step hash cascade (Fugue, Hamsi, Groestl, Blake, BMW, Skein, Keccak, Shavite, JH, Luffa, Cubehash, Echo, SIMD) - **Encrypted Messaging** - Send and receive encrypted messages directly through the wallet - **Tor v3 Integration** - Connect and transact over the Tor network with v3 onion hidden services - **120-second Block Time** - Fast confirmations with 2-minute target spacing ## Specifications | Property | Value | |----------|-------| | Algorithm | Hash9 (PoW blocks 0-9000), PoS from block 9001 | | Block Time | ~120 seconds | | Max Supply | 2,222,222 TRI | | PoS Reward | 33% annual, coin-age based | | P2P Port | 24112 | | RPC Port | 19112 | | Protocol | 70205 | ## Network Status The Triangles network operates exclusively over Tor for privacy: **Tor v3 Seeds:** - `jbpfhe7zw3qm67wy3j2ayysp3mnrjobopthnko3b3sgahqtecblwqmid.onion:24112` - `uddaxjbo3lh2zskg7w6gwln4ty5cel7q4c5jbx7fdtv6zf2j47gdlyad.onion:24112` - `el5sirhhleecuctpeeprelzubpqmoqivvra3rzlwbjttinxa4fq3wnid.onion:24112` - `sj5dhybnlp3v4y5niyc5unrnd6s43lyx5ibup7rolyosjbi2u2hsbvyd.onion:24112` - `i3kr5meha7se4ns3wss3h7v46m6uksfzv4wrohdqxpj6n35wyo2bvlid.onion:24112` **HTTP Seed List:** - `seeds.cryptographic-triangles.org/seeds.txt` - Dynamically updated list of active onion peers ## Building from Source Triangles uses CMake. All platforms follow the same build pattern. ### Dependencies | Dependency | Minimum Version | |------------|----------------| | CMake | 3.16+ | | C++ compiler | C++17 support | | OpenSSL | 3.x | | Boost | 1.90+ | | SQLite | 3.x (default wallet database backend) | | Berkeley DB | 5.3 with C++ bindings (legacy wallet backend, used for migration) | | libevent | 2.x | | RocksDB | 7.4+ (default chain database backend) | | LevelDB | bundled (legacy chain DB backend, used for migration) | ### Linux (Ubuntu 24.04 / Debian 12+) Install dependencies: ```bash sudo apt-get install -y build-essential cmake ninja-build \ libboost-all-dev libssl-dev libdb5.3++-dev libevent-dev \ zlib1g-dev libminiupnpc-dev ``` For the Qt wallet, also install: ```bash sudo apt-get install -y qtbase5-dev qt5-qmake libqrencode-dev ``` Build: ```bash cmake -B build -G Ninja -DBUILD_QT=ON cmake --build build ``` ### Linux (AlmaLinux 9 / RHEL 9) Install dependencies: ```bash sudo dnf install -y gcc-c++ cmake ninja-build boost-devel openssl-devel \ libevent-devel zlib-devel miniupnpc-devel ``` BDB 5.3 C++ bindings must be built from source on RHEL-based systems (the `libdb-devel` package does not include C++ headers). Download BDB 5.3.28 from Oracle and build with `--enable-cxx`. Then build as above. ### Windows (MSYS2 MinGW64) Open an MSYS2 MinGW64 shell and install: ```bash pacman -S mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja \ mingw-w64-x86_64-boost mingw-w64-x86_64-openssl \ mingw-w64-x86_64-db mingw-w64-x86_64-miniupnpc \ mingw-w64-x86_64-qt5-base mingw-w64-x86_64-qrencode \ mingw-w64-x86_64-libevent ``` Build: ```bash cmake -B build -G Ninja -DBUILD_QT=ON cmake --build build ``` ### Build Options | Option | Default | Description | |--------|---------|-------------| | `BUILD_QT` | ON | Build the Qt GUI wallet | | `BUILD_DAEMON` | ON | Build the headless daemon | | `BUILD_TESTS` | OFF | Build unit tests | ## Running ### First Run ```bash mkdir -p ~/.triangles cat > ~/.triangles/triangles.conf << 'EOF' port=24112 rpcport=19112 rpcuser=trianglesrpc rpcpassword= rpcallowip=127.0.0.1 staking=1 txindex=1 listen=1 server=1 daemon=1 proxy=127.0.0.1:9050 EOF trianglesd ``` The node will connect to seed nodes over Tor and sync the blockchain automatically. ### Chain Database (RocksDB) The chain database (block index, transaction index, UTXO set, address index) uses **RocksDB by default**. RocksDB gives faster sync and lookups than the legacy LevelDB backend through parallel compaction, bloom filters, and a larger write buffer and block cache (tunable with `-dbcache=`). If you are upgrading a node that already has a LevelDB chain database (`txleveldb/` in your data directory), it is migrated automatically on first launch: the chain state is copied into a new `rocksdb/` directory and verified (record count, UTXO count and value, best-chain hash, and DB format must all match) before use. The original `txleveldb/` directory is left untouched as a fallback and is never modified. To select a backend explicitly: ```bash trianglesd -chaindb=rocksdb # default trianglesd -chaindb=leveldb # legacy backend (retained for fallback/migration) ``` Migration can also be triggered or forced manually: ```bash trianglesd -migratechaindb # migrate txleveldb -> rocksdb if not already done trianglesd -migratechaindbforce # re-migrate, replacing any existing rocksdb/ ``` ### Existing Wallet Holders If you have a `wallet.dat` from the original Triangles network: 1. Place your `wallet.dat` in `~/.triangles/` (Linux) or `%APPDATA%\triangles\` (Windows) 2. Start the wallet - it will sync the blockchain and your balance will appear automatically 3. No migration or special action is needed - all keys and balances are preserved ### Staking To stake, your wallet must be: - Running with `staking=1` in the config - Connected to at least one peer - Containing coins with sufficient coin-age (mature inputs) Check staking status: ```bash trianglesd getstakinginfo ``` ### Trusted Snapshot Publisher (UTXO Snapshots) The daemon verifies that any UTXO snapshot it loads was signed by a **trusted publisher**. Starting with v6.1.8, the trusted publisher can be rotated at runtime via RPC — no rebuild required. The compiled-in fallback (`TG8f76yktTxDrT7JJymY3wVAusXiD3fVvX`, Sami's legacy key) remains in effect if no runtime override is set. ```bash # Rotate to a new publisher trianglesd settrustedv2snapshotpublisher TGotWuftzH7rD9tXC7whE8EXiyC3mr1CrH # Check current publisher trianglesd gettrustedv2snapshotpublisher # Revert to the compiled-in fallback trianglesd unsettrustedv2snapshotpublisher ``` The model is single-slot: calling `settrustedv2snapshotpublisher` atomically drops the previous publisher. See `docs/snapshot-publisher.md` for the full operator guide. ### Encrypted Messaging Send and receive encrypted messages between wallet addresses: ```bash # Enable messaging trianglesd smsgenable # Send a message trianglesd smsgsend "Hello from Triangles!" # Check inbox trianglesd smsginbox all # Send anonymous message trianglesd smsgsendanon "Anonymous message" ``` Messages are encrypted end-to-end using AES and distributed through the peer network in time-bucketed batches. ### Tor Support Triangles is designed as a Tor-only network. Install the Tor daemon and configure your proxy: ``` # triangles.conf proxy=127.0.0.1:9050 ``` To run your own hidden service, add to `/etc/tor/torrc`: ``` HiddenServiceDir /var/lib/tor/triangles/ HiddenServiceVersion 3 HiddenServicePort 24112 127.0.0.1:24112 ``` Then set `externalip=` in `triangles.conf`. ## RPC Commands The JSON-RPC CLI is `triangles-cli`. For full flag reference, custom data-dir setups, and the full list of operations, see **[doc/triangles-cli.md](doc/triangles-cli.md)**. Quick start: ```bash # Default datadir (Linux: ~/.cryptographic-triangles) triangles-cli getinfo # Custom datadir — most production nodes need this triangles-cli -datadir=/var/lib/triangles getinfo ``` ### General - `getinfo` - Node status, balance, block height, connections - `getpeerinfo` - Connected peer details - `getstakinginfo` - Staking status and weight ### Wallet - `getbalance` - Current balance - `listunspent` - Unspent transaction outputs - `sendtoaddress ` - Send TRI - `getnewaddress` - Generate new receiving address ### Messaging - `smsgenable` / `smsgdisable` - Toggle secure messaging - `smsgsend ` - Send encrypted message - `smsgsendanon ` - Send anonymous message - `smsginbox [all|unread|clear]` - View received messages - `smsgoutbox [all|clear]` - View sent messages - `smsglocalkeys` - List messaging-enabled addresses - `smsgscanchain` - Scan blockchain for public keys ### Trusted Snapshot Publisher (v6.1.8+) - `settrustedv2snapshotpublisher
` - Atomically replace the trusted snapshot publisher (previous one dropped immediately). Persists to `/snapshot-publisher.json`. - `gettrustedv2snapshotpublisher` - Returns the currently active runtime publisher and whether a runtime override is in effect. - `unsettrustedv2snapshotpublisher` - Clear the runtime override and revert to the compiled-in fallback list. See `docs/snapshot-publisher.md` for the full operator guide. ## Chain History - **July 16, 2014** - Genesis block - **Block 0-9000** - Proof-of-Work mining phase (Hash9) - **Block 9001+** - Proof-of-Stake only - **Block 17,651** - V5 hard fork (removed Tor v2, disabled checkpoint master key) - **December 8, 2022** - Chain frozen (all nodes offline) - **March 11, 2026** - Chain revived, staking resumed ## Project Structure ``` src/ main.cpp - Core blockchain logic, block/tx validation, message routing miner.cpp - Staking miner thread net.cpp - P2P networking init.cpp - Daemon initialization wallet.cpp - Wallet management smessage.cpp/h - Encrypted messaging system kernel.cpp - PoS kernel (stake validation) checkpoints.cpp - Hardcoded checkpoints net_bootstrap.h - DNS/IP seed configuration onionseed.h - Tor v3 onion seed addresses tor/ onion_v3.cpp/h - Tor v3 hidden service management tor_crypto_compat.h - Ed25519/SHA3 crypto compatibility ``` ## License Distributed under the MIT/X11 software license. See `COPYING` for details. ## Links - Website: [cryptographic-triangles.org](https://cryptographic-triangles.org) - Explorer: [blocks.cryptographic-triangles.org](https://blocks.cryptographic-triangles.org)