1
0
Fork 0
forked from lthn/blockchain

feat(demos): expanded VHS demo library with live data

5 numbered demos using helper scripts against the live system:
01-install     — zero to running node in 30 seconds
02-chain-status — chain info, latest block, on-chain aliases
03-ecosystem-tour — full tour of all 8 services (teaser material)
04-mining      — pool stats, miner connection examples
05-exit-node   — VPN exit node setup and earning

New helpers: last-block.sh, pool-stats.sh, lns-status.sh, explorer-stats.sh
Removed old unnumbered demos.

Co-Authored-By: Charon <charon@lethean.io>
This commit is contained in:
Claude 2026-04-03 13:11:47 +01:00
parent 9e3c6c2223
commit e1292a6445
No known key found for this signature in database
GPG key ID: AF404715446AEB41
26 changed files with 358 additions and 287 deletions

BIN
docker/demos/01-install.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

View file

@ -0,0 +1,54 @@
# 01 — Install Lethean from scratch
# Shows a home user going from zero to running node
Output demos/01-install.gif
Set FontSize 13
Set Width 1000
Set Height 600
Set Theme "Dracula"
Set TypingSpeed 35ms
Set Padding 12
Set Shell bash
Type "# Install Lethean — from zero to running node"
Enter
Sleep 1s
Type "mkdir lethean && cd lethean"
Enter
Sleep 500ms
Type "# Download the compose files"
Enter
Type "curl -sO https://forge.lthn.ai/lthn/blockchain/raw/branch/dev/docker/docker-compose.node.yml"
Enter
Sleep 500ms
Type "curl -sO https://forge.lthn.ai/lthn/blockchain/raw/branch/dev/docker/.env.example"
Enter
Sleep 500ms
Type "cp .env.example .env"
Enter
Sleep 300ms
Type "# Set a wallet password"
Enter
Type "sed -i 's/WALLET_PASSWORD=/WALLET_PASSWORD=my-secure-pass/' .env"
Enter
Sleep 500ms
Type ""
Enter
Type "# Start the node"
Enter
Type "docker compose -f docker-compose.node.yml up -d"
Enter
Sleep 3s
Type ""
Enter
Type "# That's it. Your node is syncing and staking."
Enter
Sleep 2s

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 KiB

View file

@ -0,0 +1,39 @@
# 02 — Chain Status (live data)
Output demos/02-chain-status.gif
Set FontSize 13
Set Width 1000
Set Height 600
Set Theme "Dracula"
Set TypingSpeed 35ms
Set Padding 12
Set Shell bash
Type "# Lethean Chain — Live Status"
Enter
Sleep 500ms
Type "bash demos/helpers/chain-info.sh"
Enter
Sleep 3s
Type ""
Enter
Type "bash demos/helpers/last-block.sh"
Enter
Sleep 3s
Type ""
Enter
Type "# On-chain service discovery via aliases"
Enter
Type "bash demos/helpers/chain-aliases.sh"
Enter
Sleep 4s
Type ""
Enter
Type "# Blocks arrive every ~2 minutes — PoW and PoS alternating"
Enter
Sleep 2s

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 MiB

View file

@ -0,0 +1,87 @@
# 03 — Ecosystem Tour (the teaser material)
# Every service, live data, no fluff
Output demos/03-ecosystem-tour.gif
Set FontSize 13
Set Width 1000
Set Height 700
Set Theme "Dracula"
Set TypingSpeed 30ms
Set Padding 12
Set Shell bash
Type "# Lethean Ecosystem — Full Tour"
Enter
Sleep 500ms
Type "bash health.sh"
Enter
Sleep 4s
Type ""
Enter
Type "# === Chain ==="
Enter
Type "bash demos/helpers/chain-info.sh"
Enter
Sleep 3s
Type ""
Enter
Type "# === Latest Block ==="
Enter
Type "bash demos/helpers/last-block.sh"
Enter
Sleep 3s
Type ""
Enter
Type "# === Wallet ==="
Enter
Type "bash demos/helpers/wallet-address.sh"
Enter
Sleep 2s
Type "bash demos/helpers/wallet-balance.sh"
Enter
Sleep 2s
Type ""
Enter
Type "# === Explorer ==="
Enter
Type "bash demos/helpers/explorer-stats.sh"
Enter
Sleep 3s
Type ""
Enter
Type "# === Mining Pool ==="
Enter
Type "bash demos/helpers/pool-stats.sh"
Enter
Sleep 3s
Type ""
Enter
Type "# === Name Service ==="
Enter
Type "bash demos/helpers/lns-status.sh"
Enter
Sleep 3s
Type ""
Enter
Type "# === Aliases — services advertise on-chain ==="
Enter
Type "bash demos/helpers/chain-aliases.sh"
Enter
Sleep 4s
Type ""
Enter
Type "# Lethean — privacy by default, earn by participating"
Enter
Type "# https://lethean.io"
Enter
Sleep 3s

BIN
docker/demos/04-mining.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 957 KiB

View file

@ -0,0 +1,50 @@
# 04 — Mining
# Shows pool stats and how to connect a miner
Output demos/04-mining.gif
Set FontSize 13
Set Width 1000
Set Height 550
Set Theme "Dracula"
Set TypingSpeed 35ms
Set Padding 12
Set Shell bash
Type "# Lethean Mining — ProgPoWZ GPU Mining"
Enter
Sleep 500ms
Type "bash demos/helpers/pool-stats.sh"
Enter
Sleep 3s
Type ""
Enter
Type "# Get your wallet address for mining"
Enter
Type "bash demos/helpers/wallet-address.sh"
Enter
Sleep 2s
Type ""
Enter
Type "# Connect a GPU miner:"
Enter
Type "echo 'progminer -P stratum+tcp://YOUR_WALLET@localhost:5555'"
Enter
Sleep 1s
Type "echo 't-rex -a progpowz -o stratum+tcp://localhost:5555 -u YOUR_WALLET'"
Enter
Sleep 1s
Type "echo 'teamredminer -a progpow -o stratum+tcp://localhost:5555 -u YOUR_WALLET'"
Enter
Sleep 2s
Type ""
Enter
Type "# Pool dashboard: http://localhost:2117"
Enter
Type "# Block reward: 1 LTHN every ~2 minutes"
Enter
Sleep 2s

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View file

@ -0,0 +1,68 @@
# 05 — Exit Node Setup
# Shows how to run a VPN exit node and earn LTHN
Output demos/05-exit-node.gif
Set FontSize 13
Set Width 1000
Set Height 600
Set Theme "Dracula"
Set TypingSpeed 35ms
Set Padding 12
Set Shell bash
Type "# Lethean VPN Exit Node — Earn LTHN"
Enter
Sleep 500ms
Type "# Configure your exit node"
Enter
Type "cp .env.example .env"
Enter
Sleep 300ms
Type "echo 'WALLET_PASSWORD=my-secure-pass' >> .env"
Enter
Type "echo 'EXIT_PUBLIC_IP=203.0.113.50' >> .env"
Enter
Type "echo 'EXIT_NAME=my-exit' >> .env"
Enter
Sleep 500ms
Type ""
Enter
Type "# Start the exit node stack"
Enter
Type "docker compose -f docker-compose.exit.yml up -d"
Enter
Sleep 3s
Type ""
Enter
Type "# Your exit node runs:"
Enter
Type "echo ' Chain daemon — syncs blockchain'"
Enter
Type "echo ' Wallet — PoS staking + receives payments'"
Enter
Type "echo ' WireGuard VPN — encrypted tunnel for gateway traffic'"
Enter
Type "echo ' Controller — manages peering and on-chain registration'"
Enter
Sleep 2s
Type ""
Enter
Type "# Gateways discover you via on-chain alias:"
Enter
Type "echo ' @my-exit v=lthn1;type=exit;cap=vpn,proxy;ip=203.0.113.50'"
Enter
Sleep 2s
Type ""
Enter
Type "# Open ports 46942/tcp + 51820/udp on your router"
Enter
Type "# Then sit back and earn LTHN"
Enter
Sleep 3s

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 MiB

View file

@ -1,54 +0,0 @@
# Lethean Ecosystem — Full Stack Startup
Output demos/ecosystem-startup.gif
Set FontSize 13
Set Width 1000
Set Height 650
Set Theme "Dracula"
Set TypingSpeed 30ms
Set Padding 12
Type "# Lethean Testnet Ecosystem"
Enter
Sleep 500ms
Type "docker compose -f docker-compose.pull.yml up -d"
Enter
Sleep 3s
Type ""
Enter
Type "# Waiting for chain daemon to sync..."
Enter
Sleep 1s
Type "docker compose -f docker-compose.pull.yml ps | grep lthn | sort"
Enter
Sleep 3s
Type ""
Enter
Type "# All services online — running health check"
Enter
Type "bash health.sh"
Enter
Sleep 4s
Type ""
Enter
Type "# Browse the explorer at http://localhost:3335"
Enter
Type "# Trade DEX at http://localhost:3338"
Enter
Type "# Mine at stratum+tcp://localhost:5555"
Enter
Type "# Resolve .lthn names via DNS at localhost:5354"
Enter
Sleep 1s
Type ""
Enter
Type "# Lethean — privacy by default, earn by participating"
Enter
Sleep 3s

Binary file not shown.

Before

Width:  |  Height:  |  Size: 829 KiB

View file

@ -1,58 +0,0 @@
# Lethean Exit Node — Quick Start Demo
Output demos/exit-node.gif
Set FontSize 14
Set Width 900
Set Height 550
Set Theme "Dracula"
Set TypingSpeed 45ms
Set Padding 15
Type "# Lethean VPN Exit Node — Earn LTHN from Home"
Enter
Sleep 1s
Type "# Configure"
Enter
Type "cp .env.example .env"
Enter
Type 'echo "WALLET_PASSWORD=my-secure-pass" >> .env'
Enter
Type 'echo "EXIT_PUBLIC_IP=$(curl -s ifconfig.me)" >> .env'
Enter
Type 'echo "EXIT_NAME=my-exit-node" >> .env'
Enter
Sleep 500ms
Type ""
Enter
Type "# Start exit node stack"
Enter
Type "docker compose -f docker-compose.exit.yml up -d"
Enter
Sleep 2s
Type ""
Enter
Type "# Check WireGuard VPN server"
Enter
Type "docker exec lthn-exit-wireguard wg show"
Enter
Sleep 2s
Type ""
Enter
Type "# Check controller status"
Enter
Type "docker logs lthn-exit-controller --tail 3"
Enter
Sleep 2s
Type ""
Enter
Type "# Your node is live — gateways will discover it on-chain"
Enter
Type "# Open ports 46942/tcp and 51820/udp on your router"
Enter
Sleep 2s

Binary file not shown.

Before

Width:  |  Height:  |  Size: 646 KiB

View file

@ -1,32 +0,0 @@
# Lethean Ecosystem — Health Check Demo
Output demos/health-check.gif
Set FontSize 14
Set Width 900
Set Height 500
Set Theme "Dracula"
Set TypingSpeed 40ms
Set Padding 15
Type "# Lethean Testnet — All Services Running"
Enter
Sleep 500ms
Type "bash health.sh"
Enter
Sleep 3s
Type ""
Enter
Type "# 14 on-chain aliases registered"
Enter
Type@80ms 'curl -s http://localhost:46941/json_rpc -d '"'"'{"jsonrpc":"2.0","id":"0","method":"get_all_alias_details"}'"'"' -H "Content-Type: application/json" | python3 -c "import sys,json; aliases=json.load(sys.stdin).get('"'"'result'"'"',{}).get('"'"'aliases'"'"',[]); [print(f'"'"' @{a[\"alias\"]:12s} {a.get(\"comment\",\"\")[:50]}'"'"') for a in aliases[:5]]; print(f'"'"' ... {len(aliases)} total'"'"')"'
Enter
Sleep 3s
Type ""
Enter
Type "# Lethean — Privacy by default. Earn by participating."
Enter
Sleep 2s

View file

@ -0,0 +1,15 @@
#!/bin/bash
curl -s localhost:3335/api/get_info | python3 -c "
import sys,json
try:
d=json.load(sys.stdin)
print('Block Explorer')
print(f' Height: {d.get(\"height\",0):,}')
print(f' PoW diff: {d.get(\"pow_difficulty\",0):,}')
print(f' Aliases: {d.get(\"alias_count\",0)}')
print(f' TX count: {d.get(\"tx_count\",0):,}')
print(f' Hashrate: {d.get(\"current_network_hashrate_350\",0):,} H/s')
print(f' URL: http://localhost:3335')
except:
print('Explorer: connecting...')
"

View file

@ -0,0 +1,13 @@
#!/bin/bash
curl -s localhost:46941/json_rpc \
-d '{"jsonrpc":"2.0","id":"0","method":"getlastblockheader"}' \
-H 'Content-Type: application/json' | python3 -c "
import sys,json
b=json.load(sys.stdin)['result']['block_header']
btype = 'PoW' if b.get('major_version',0)==3 else 'PoS'
print(f'Latest Block #{b[\"height\"]:,}')
print(f' Type: {btype}')
print(f' Reward: {b[\"reward\"]/1e12:.4f} LTHN')
print(f' Difficulty: {b[\"difficulty\"]:,}')
print(f' Hash: {b[\"hash\"][:20]}...')
"

View file

@ -0,0 +1,15 @@
#!/bin/bash
echo "Lethean Name Service (LNS)"
curl -s localhost:5553/health | python3 -c "
import sys,json
d=json.load(sys.stdin)
print(f' Mode: {d.get(\"mode\",\"?\")}')
print(f' Names: {d.get(\"names\",0)} cached')
print(f' Status: {d.get(\"status\",\"?\")}')
"
echo ""
echo "Resolving .lthn names:"
for name in charon gateway explorer trading; do
result=$(curl -s "localhost:5553/resolve?name=$name.lthn" | python3 -c "import sys,json; d=json.load(sys.stdin); print('found' if d.get('found') else 'not cached')" 2>/dev/null)
printf " %-16s %s\n" "$name.lthn" "$result"
done

View file

@ -0,0 +1,17 @@
#!/bin/bash
curl -s localhost:2117/stats | python3 -c "
import sys,json
d=json.load(sys.stdin)
pool = d.get('pool',{})
net = d.get('network',{})
cfg = d.get('config',{})
print(f'Lethean Mining Pool')
print(f' Coin: {cfg.get(\"coin\",\"?\")}')
print(f' Algorithm: ProgPoWZ')
print(f' Pool hash: {pool.get(\"hashrate\",0)} H/s')
print(f' Miners: {pool.get(\"miners\",0)}')
print(f' Blocks found: {pool.get(\"totalBlocks\",0)}')
print(f' Net height: {net.get(\"height\",\"?\")}')
print(f' Net diff: {net.get(\"difficulty\",\"?\")}')
print(f' Stratum: stratum+tcp://localhost:5555')
"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 404 KiB

View file

@ -1,50 +0,0 @@
# Lethean Name Service — DNS Resolution
Output demos/lns-dns.gif
Set FontSize 14
Set Width 900
Set Height 500
Set Theme "Dracula"
Set TypingSpeed 40ms
Set Padding 15
Type "# Lethean Name Service — .lthn Domain Resolution"
Enter
Sleep 500ms
Type "# Query the LNS HTTP API"
Enter
Type "curl -s http://localhost:5553/health | python3 -m json.tool"
Enter
Sleep 2s
Type ""
Enter
Type "# Resolve a .lthn name"
Enter
Type "curl -s http://localhost:5553/resolve?name=charon.lthn | python3 -m json.tool"
Enter
Sleep 2s
Type ""
Enter
Type "# DNS query — works with standard dig"
Enter
Type "dig @127.0.0.1 -p 5354 gateway.lthn A +short"
Enter
Sleep 2s
Type ""
Enter
Type "# List all known names"
Enter
Type "curl -s http://localhost:5553/names | python3 -m json.tool | head -20"
Enter
Sleep 3s
Type ""
Enter
Type "# Names are discovered from blockchain aliases automatically"
Enter
Sleep 2s

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

View file

@ -1,43 +0,0 @@
# Lethean Home Node — Quick Start Demo
# Renders to GIF showing how easy it is to run a node
Output demos/node-quickstart.gif
Set FontSize 16
Set Width 1000
Set Height 600
Set Theme "Dracula"
Set TypingSpeed 50ms
Set Padding 20
Type "# Lethean Home Node — Quick Start"
Enter
Sleep 1s
Type "# Step 1: Configure"
Enter
Type "cp .env.example .env"
Enter
Sleep 500ms
Type "# Step 2: Start the node"
Enter
Type "docker compose -f docker-compose.node.yml up -d"
Enter
Sleep 2s
Type "# Step 3: Check chain sync"
Enter
Type@100ms 'curl -s http://localhost:46941/json_rpc -d '"'"'{"jsonrpc":"2.0","id":"0","method":"getinfo"}'"'"' -H "Content-Type: application/json" | python3 -c "import sys,json; d=json.load(sys.stdin)['"'"'result'"'"']; print(f'"'"'Height: {d[\"height\"]}, Status: {d[\"status\"]}'"'"')"'
Enter
Sleep 2s
Type "# Step 4: Check wallet balance"
Enter
Type@100ms 'curl -s http://localhost:46944/json_rpc -d '"'"'{"jsonrpc":"2.0","id":"0","method":"getbalance"}'"'"' -H "Content-Type: application/json" | python3 -c "import sys,json; d=json.load(sys.stdin)['"'"'result'"'"']; print(f'"'"'Balance: {d[\"balance\"]/1e12:.4f} LTHN'"'"')"'
Enter
Sleep 2s
Type "# Node is running, staking automatically!"
Enter
Sleep 2s

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

View file

@ -1,50 +0,0 @@
# Lethean Wallet — Basic Operations
Output demos/wallet-basics.gif
Set FontSize 14
Set Width 900
Set Height 500
Set Theme "Dracula"
Set TypingSpeed 40ms
Set Padding 15
Type "# Lethean Wallet — Basic Operations"
Enter
Sleep 500ms
Type "# Get your wallet address"
Enter
Type "bash demos/helpers/wallet-address.sh"
Enter
Sleep 2s
Type ""
Enter
Type "# Check balance (staking rewards accumulate here)"
Enter
Type "bash demos/helpers/wallet-balance.sh"
Enter
Sleep 2s
Type ""
Enter
Type "# View chain info"
Enter
Type "bash demos/helpers/chain-info.sh"
Enter
Sleep 2s
Type ""
Enter
Type "# Browse on-chain aliases"
Enter
Type "bash demos/helpers/chain-aliases.sh"
Enter
Sleep 3s
Type ""
Enter
Type "# Wallet stakes automatically — PoS rewards arrive as you sleep"
Enter
Sleep 2s