diff --git a/.github/workflows/build-all.yml b/.github/workflows/build-all.yml index 1fa1e78..142a011 100644 --- a/.github/workflows/build-all.yml +++ b/.github/workflows/build-all.yml @@ -9,7 +9,7 @@ on: workflow_dispatch: env: - VERSION: "5.3.5" + VERSION: "5.3.6" jobs: build-windows-qt: diff --git a/DNS2-SEED-NODE-SETUP.md b/DNS2-SEED-NODE-SETUP.md new file mode 100644 index 0000000..1888436 --- /dev/null +++ b/DNS2-SEED-NODE-SETUP.md @@ -0,0 +1,398 @@ +# Triangles Bootstrap Server Setup - DNS2 + +**For:** Krystie (@Krystie7777bot) +**Server:** DNS2 (194.233.88.206) - Ubuntu +**Date:** March 2026 + +--- + +## What This Server Does + +Your server is the **bootstrap server** for the Triangles network. When someone opens a fresh Triangles wallet: + +1. The wallet connects to `bootstrap.cryptographic-triangles.org` on **port 80** +2. If that fails, it falls back to your IP directly: `194.233.88.206` on **port 80** +3. It downloads `/filelist.txt` to see which blockchain files are available +4. It downloads each file listed (mainly `blk0001.dat`, the entire blockchain) +5. The user is now synced and ready to go + +Your IP is hardcoded in the wallet. If your server is down, new users can't bootstrap. + +Your server also runs the Triangles daemon so it doubles as a seed node on **port 24112**. + +--- + +## Step 1: Install nginx + +```bash +sudo apt update +sudo apt install -y nginx curl +``` + +--- + +## Step 2: Download the Daemon + +No building required. Download the pre-built Linux binary from GitHub: + +```bash +cd /tmp +curl -L -o trianglesd https://github.com/SamiAhmed7777/triangles_v5/releases/download/v5.3.6/Cryptographic-Triangles-v5.3.6-linux-x64-daemon +chmod +x trianglesd +sudo mv trianglesd /usr/local/bin/ +``` + +Verify it works: + +```bash +trianglesd --version +``` + +--- + +## Step 3: Configure the Daemon + +```bash +mkdir -p ~/.triangles + +RPC_PASS=$(openssl rand -hex 32) + +cat > ~/.triangles/triangles.conf << EOF +port=24112 +listen=1 +maxconnections=125 +rpcport=19112 +rpcuser=trianglesrpc +rpcpassword=$RPC_PASS +rpcallowip=127.0.0.1 +server=1 +externalip=194.233.88.206 +addnode=74.208.167.19 +txindex=1 +daemon=1 +EOF +``` + +--- + +## Step 4: Get the Blockchain Data + +OpenClaw will send you `blk0001.dat` (or a tarball containing it). Put it in `~/.triangles/`: + +```bash +cd ~/.triangles +# If you received a tarball: +tar xzf /path/to/blockchain-data.tar.gz +# Or if you received blk0001.dat directly: +cp /path/to/blk0001.dat ~/.triangles/ +``` + +After this step you should have: + +``` +~/.triangles/blk0001.dat +~/.triangles/triangles.conf +``` + +Do NOT copy someone else's `wallet.dat` unless you intend to use that wallet. + +--- + +## Step 5: Open Firewall Ports + +You need **two** ports open: + +```bash +sudo ufw allow 80/tcp comment "Bootstrap HTTP server" +sudo ufw allow 24112/tcp comment "Triangles P2P" +sudo ufw enable +sudo ufw status +``` + +Verify both show ALLOW: + +``` +80/tcp ALLOW Anywhere # Bootstrap HTTP server +24112/tcp ALLOW Anywhere # Triangles P2P +``` + +Do NOT open 19112 (RPC). + +--- + +## Step 6: Test the Daemon + +```bash +trianglesd +``` + +Wait 10 seconds, then: + +```bash +trianglesd getinfo +``` + +Look for: +- `"blocks"` around 2,186,940 or higher +- `"connections"` should become 1+ within a couple minutes + +If it works, stop it: + +```bash +trianglesd stop +``` + +--- + +## Step 7: Set Up the Daemon as a systemd Service + +```bash +sudo tee /etc/systemd/system/trianglesd.service << 'EOF' +[Unit] +Description=Triangles Daemon +After=network-online.target +Wants=network-online.target + +[Service] +Type=forking +ExecStart=/usr/local/bin/trianglesd -daemon -datadir=/root/.triangles +ExecStop=/usr/local/bin/trianglesd -datadir=/root/.triangles stop +Restart=on-failure +RestartSec=30 +TimeoutStopSec=120 +LimitNOFILE=65536 + +[Install] +WantedBy=multi-user.target +EOF + +sudo systemctl daemon-reload +sudo systemctl enable trianglesd +sudo systemctl start trianglesd +``` + +If you're running as a non-root user, change `/root/.triangles` to `/home/youruser/.triangles`. + +Verify: + +```bash +sudo systemctl status trianglesd +trianglesd getinfo +``` + +--- + +## Step 8: Set Up the Bootstrap File Server + +This is the main event. + +### 8a. Create the bootstrap directory and tarball + +```bash +sudo mkdir -p /var/www/triangles-bootstrap + +# Create the compressed tarball from the blockchain data +# Only blk0001.dat is needed - the wallet builds its own block index after download +cd ~/.triangles +tar czf /tmp/bootstrap.tar.gz blk0001.dat +sudo mv /tmp/bootstrap.tar.gz /var/www/triangles-bootstrap/ + +# Also create the legacy fallback files (for older wallet versions) +sudo cp ~/.triangles/blk0001.dat /var/www/triangles-bootstrap/ +sudo tee /var/www/triangles-bootstrap/filelist.txt << 'EOF' +blk0001.dat +EOF + +sudo chown -R www-data:www-data /var/www/triangles-bootstrap +``` + +The wallet tries to download `bootstrap.tar.gz` first (compressed, faster). If that's missing, it falls back to downloading `blk0001.dat` directly using `filelist.txt`. After download, the wallet automatically imports the blocks and builds its own index. + +### 8b. Configure nginx + +```bash +sudo rm -f /etc/nginx/sites-enabled/default + +sudo tee /etc/nginx/sites-available/triangles-bootstrap << 'EOF' +server { + listen 80; + server_name bootstrap.cryptographic-triangles.org 194.233.88.206; + + root /var/www/triangles-bootstrap; + + location / { + try_files $uri =404; + } + + send_timeout 600s; + keepalive_timeout 600s; +} +EOF + +sudo ln -sf /etc/nginx/sites-available/triangles-bootstrap /etc/nginx/sites-enabled/ +sudo nginx -t +``` + +That should print `syntax is ok` and `test is successful`. Then: + +```bash +sudo systemctl enable nginx +sudo systemctl restart nginx +``` + +### 8c. Verify it works + +```bash +# Should print "blk0001.dat" +curl http://localhost/filelist.txt + +# Should show HTTP 200 and a Content-Length +curl -I http://localhost/blk0001.dat +``` + +### 8d. Test from outside + +Ask OpenClaw to test from another machine: + +```bash +curl -I http://194.233.88.206/bootstrap.tar.gz +curl http://194.233.88.206/filelist.txt +``` + +If both return HTTP 200, the bootstrap server is live. + +--- + +## Step 9: Keeping Bootstrap Data Fresh + +Periodically rebuild the tarball from the latest blockchain data: + +```bash +sudo systemctl stop trianglesd +cd ~/.triangles +tar czf /tmp/bootstrap.tar.gz blk0001.dat +sudo mv /tmp/bootstrap.tar.gz /var/www/triangles-bootstrap/ +sudo cp ~/.triangles/blk0001.dat /var/www/triangles-bootstrap/ +sudo chown -R www-data:www-data /var/www/triangles-bootstrap +sudo systemctl start trianglesd +``` + +Or set up a weekly cron job: + +```bash +sudo tee /etc/cron.d/triangles-bootstrap-update << 'EOF' +0 4 * * 0 root systemctl stop trianglesd && cd /root/.triangles && tar czf /tmp/bootstrap.tar.gz blk0001.dat && mv /tmp/bootstrap.tar.gz /var/www/triangles-bootstrap/ && cp /root/.triangles/blk0001.dat /var/www/triangles-bootstrap/ && chown -R www-data:www-data /var/www/triangles-bootstrap && systemctl start trianglesd +EOF +``` + +--- + +## Step 10: Tor Hidden Service (Optional) + +```bash +sudo apt install -y tor +``` + +Add to `/etc/tor/torrc`: + +``` +HiddenServiceDir /var/lib/tor/triangles/ +HiddenServiceVersion 3 +HiddenServicePort 24112 127.0.0.1:24112 +``` + +Then: + +```bash +sudo systemctl restart tor +sudo cat /var/lib/tor/triangles/hostname +``` + +Send the `.onion` address to OpenClaw, add `externalip=YOUR_ONION_ADDRESS.onion` to `triangles.conf`, and restart the daemon. + +--- + +## Troubleshooting + +### Bootstrap server isn't working + +```bash +sudo systemctl status nginx +sudo ss -tlnp | grep :80 +ls -lh /var/www/triangles-bootstrap/ +curl http://localhost/filelist.txt +sudo tail -30 /var/log/nginx/error.log +``` + +### Daemon has 0 connections + +```bash +sudo ss -tlnp | grep 24112 +sudo ufw status +trianglesd addnode 74.208.167.19 add +``` + +### Daemon won't start + +```bash +tail -100 ~/.triangles/debug.log +ps aux | grep trianglesd +ls ~/.triangles/.lock +``` + +### "Error loading block database" + +```bash +rm -rf ~/.triangles/txleveldb/ +sudo systemctl restart trianglesd +``` + +--- + +## Quick Reference + +| What | Where / Value | +|------|---------------| +| **Bootstrap files** | `/var/www/triangles-bootstrap/` | +| **bootstrap.tar.gz** | `/var/www/triangles-bootstrap/bootstrap.tar.gz` | +| **filelist.txt** | `/var/www/triangles-bootstrap/filelist.txt` (legacy fallback) | +| **blk0001.dat (web)** | `/var/www/triangles-bootstrap/blk0001.dat` (legacy fallback) | +| **nginx config** | `/etc/nginx/sites-available/triangles-bootstrap` | +| **nginx logs** | `/var/log/nginx/error.log` | +| Daemon binary | `/usr/local/bin/trianglesd` | +| Data directory | `~/.triangles/` | +| Config file | `~/.triangles/triangles.conf` | +| Debug log | `~/.triangles/debug.log` | +| P2P port | **24112** (must be open) | +| HTTP port | **80** (must be open) | +| RPC port | 19112 (localhost only) | +| Restart daemon | `sudo systemctl restart trianglesd` | +| Restart nginx | `sudo systemctl restart nginx` | +| Other seed node | 74.208.167.19 (DNS3-Sami) | +| Contact | OpenClaw on Telegram | + +--- + +## You're Done + +Once you've completed all the steps, your server is: + +1. **A seed node** — other wallets discover and connect to you on port 24112 +2. **A bootstrap server** — new wallets download the blockchain from you on port 80 + +Send OpenClaw your `.onion` address (if you set up Tor) so it can be added to the wallet's onion seed list. + +To confirm everything is running: + +```bash +# Daemon healthy? +trianglesd getinfo + +# nginx serving files? +curl -I http://localhost/bootstrap.tar.gz + +# Ports open externally? +sudo ss -tlnp | grep -E ':(80|24112)\b' +``` + +If all three check out, you're live on the Triangles network. diff --git a/packaging/appstream/org.cryptographic_triangles.TrianglesQt.metainfo.xml b/packaging/appstream/org.cryptographic_triangles.TrianglesQt.metainfo.xml new file mode 100644 index 0000000..e6ccf27 --- /dev/null +++ b/packaging/appstream/org.cryptographic_triangles.TrianglesQt.metainfo.xml @@ -0,0 +1,62 @@ + + + org.cryptographic_triangles.TrianglesQt + MIT + MIT + Cryptographic Triangles + TRI cryptocurrency wallet with staking and encrypted messaging + + +

+ Cryptographic Triangles is a privacy-focused cryptocurrency wallet featuring + Proof-of-Stake consensus, Tor v3 onion routing, and built-in encrypted messaging. +

+

Features:

+ +
+ + org.cryptographic_triangles.TrianglesQt.desktop + + org.cryptographic_triangles.TrianglesQt + + + Finance + Network + P2P + + + https://cryptographic-triangles.org + https://github.com/SamiAhmed7777/triangles_v5/issues + https://github.com/SamiAhmed7777/triangles_v5 + + + triangles-qt + trianglesd + + + + + +

IBD sync optimizations, Linux build fixes, and modern compiler support.

+
+
+ + +

Tor v3 embedded support, OpenSSL 3.x compatibility, and Boost 1.90+ support.

+
+
+
+ + + + + pointing + keyboard + +
diff --git a/packaging/flatpak/org.cryptographic_triangles.TrianglesQt.yml b/packaging/flatpak/org.cryptographic_triangles.TrianglesQt.yml index a0d52b5..4eea63e 100644 --- a/packaging/flatpak/org.cryptographic_triangles.TrianglesQt.yml +++ b/packaging/flatpak/org.cryptographic_triangles.TrianglesQt.yml @@ -19,13 +19,28 @@ modules: build-commands: - install -Dm755 triangles-qt-linux /app/bin/triangles-qt - install -Dm644 triangles-qt.desktop /app/share/applications/org.cryptographic_triangles.TrianglesQt.desktop + - install -Dm644 triangles.svg /app/share/icons/hicolor/scalable/apps/org.cryptographic_triangles.TrianglesQt.svg + - install -Dm644 triangles-128.png /app/share/icons/hicolor/128x128/apps/org.cryptographic_triangles.TrianglesQt.png + - install -Dm644 triangles-256.png /app/share/icons/hicolor/256x256/apps/org.cryptographic_triangles.TrianglesQt.png + - install -Dm644 org.cryptographic_triangles.TrianglesQt.metainfo.xml /app/share/metainfo/org.cryptographic_triangles.TrianglesQt.metainfo.xml sources: - type: file - url: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v5.1.5/triangles-qt-linux - sha256: 19eaadfdf18b899ce8434fe714e690e2db0546597e36037de37a29854fc23aeb + url: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v5.3.6/Cryptographic-Triangles-v5.3.6-linux-x64-qt + sha256: PLACEHOLDER_UPDATE_AFTER_RELEASE dest-filename: triangles-qt-linux - type: file path: triangles-qt.desktop + - type: file + path: ../../src/qt/res/src/triangles.svg + dest-filename: triangles.svg + - type: file + path: ../../src/qt/res/icons/triangles-128.png + dest-filename: triangles-128.png + - type: file + path: ../../src/qt/res/icons/triangles.png + dest-filename: triangles-256.png + - type: file + path: ../../packaging/appstream/org.cryptographic_triangles.TrianglesQt.metainfo.xml - name: trianglesd buildsystem: simple @@ -33,6 +48,6 @@ modules: - install -Dm755 trianglesd-linux /app/bin/trianglesd sources: - type: file - url: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v5.1.5/trianglesd-linux - sha256: 6f5c19d34a2e1f6cdadee095d9e11b25d18b41a0d1602a163ffca7ec80b3da37 + url: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v5.3.6/Cryptographic-Triangles-v5.3.6-linux-x64-daemon + sha256: PLACEHOLDER_UPDATE_AFTER_RELEASE dest-filename: trianglesd-linux diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 2dff30c..9b958e6 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -1,6 +1,6 @@ name: triangles base: core22 -version: '5.1.5' +version: '5.3.6' summary: Cryptographic Triangles (TRI) cryptocurrency wallet description: | Privacy-focused cryptocurrency featuring Proof-of-Stake consensus, @@ -51,10 +51,10 @@ apps: parts: triangles: plugin: dump - source: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v5.1.5/triangles-qt-linux + source: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v5.3.6/Cryptographic-Triangles-v5.3.6-linux-x64-qt source-type: file organize: - triangles-qt-linux: bin/triangles-qt + Cryptographic-Triangles-v5.3.6-linux-x64-qt: bin/triangles-qt stage-packages: - libqt5widgets5 - libqt5gui5 @@ -73,13 +73,19 @@ parts: trianglesd: plugin: dump - source: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v5.1.5/trianglesd-linux + source: https://github.com/SamiAhmed7777/triangles_v5/releases/download/v5.3.6/Cryptographic-Triangles-v5.3.6-linux-x64-daemon source-type: file organize: - trianglesd-linux: bin/trianglesd + Cryptographic-Triangles-v5.3.6-linux-x64-daemon: bin/trianglesd desktop-entry: plugin: dump source: snap/gui organize: triangles-qt.desktop: share/applications/triangles-qt.desktop + + appstream: + plugin: dump + source: packaging/appstream + organize: + org.cryptographic_triangles.TrianglesQt.metainfo.xml: share/metainfo/org.cryptographic_triangles.TrianglesQt.metainfo.xml diff --git a/src/test/DoS_tests.cpp b/src/test/DoS_tests.cpp index b68bfcc..20f4c54 100644 --- a/src/test/DoS_tests.cpp +++ b/src/test/DoS_tests.cpp @@ -275,7 +275,7 @@ BOOST_AUTO_TEST_CASE(DoS_checkSig) mst1 = boost::posix_time::microsec_clock::local_time(); for (unsigned int i = 0; i < 5; i++) for (unsigned int j = 0; j < tx.vin.size(); j++) - BOOST_CHECK(VerifySignature(orphans[j], tx, j, true, SIGHASH_ALL)); + BOOST_CHECK(VerifySignature(orphans[j], tx, j, SIGHASH_ALL)); mst2 = boost::posix_time::microsec_clock::local_time(); msdiff = mst2 - mst1; long nManyValidate = msdiff.total_milliseconds(); @@ -286,13 +286,13 @@ BOOST_AUTO_TEST_CASE(DoS_checkSig) // Empty a signature, validation should fail: CScript save = tx.vin[0].scriptSig; tx.vin[0].scriptSig = CScript(); - BOOST_CHECK(!VerifySignature(orphans[0], tx, 0, true, SIGHASH_ALL)); + BOOST_CHECK(!VerifySignature(orphans[0], tx, 0, SIGHASH_ALL)); tx.vin[0].scriptSig = save; // Swap signatures, validation should fail: std::swap(tx.vin[0].scriptSig, tx.vin[1].scriptSig); - BOOST_CHECK(!VerifySignature(orphans[0], tx, 0, true, SIGHASH_ALL)); - BOOST_CHECK(!VerifySignature(orphans[1], tx, 1, true, SIGHASH_ALL)); + BOOST_CHECK(!VerifySignature(orphans[0], tx, 0, SIGHASH_ALL)); + BOOST_CHECK(!VerifySignature(orphans[1], tx, 1, SIGHASH_ALL)); std::swap(tx.vin[0].scriptSig, tx.vin[1].scriptSig); // Exercise -maxsigcachesize code: @@ -302,7 +302,7 @@ BOOST_AUTO_TEST_CASE(DoS_checkSig) BOOST_CHECK(SignSignature(keystore, orphans[0], tx, 0)); BOOST_CHECK(tx.vin[0].scriptSig != oldSig); for (unsigned int j = 0; j < tx.vin.size(); j++) - BOOST_CHECK(VerifySignature(orphans[j], tx, j, true, SIGHASH_ALL)); + BOOST_CHECK(VerifySignature(orphans[j], tx, j, SIGHASH_ALL)); mapArgs.erase("-maxsigcachesize"); LimitOrphanTxSize(0); diff --git a/src/test/accounting_tests.cpp b/src/test/accounting_tests.cpp index a4f32a1..5c65d1f 100644 --- a/src/test/accounting_tests.cpp +++ b/src/test/accounting_tests.cpp @@ -8,7 +8,7 @@ BOOST_AUTO_TEST_SUITE(accounting_tests) static void -GetResults(CWalletDB& walletdb, std::map& results) +GetResults(CWalletDB& walletdb, std::map& results) { std::list aes; @@ -27,7 +27,7 @@ BOOST_AUTO_TEST_CASE(acc_orderupgrade) std::vector vpwtx; CWalletTx wtx; CAccountingEntry ae; - std::map results; + std::map results; ae.strAccount = ""; ae.nCreditDebit = 1;