diff --git a/docker/demos/01-install.gif b/docker/demos/01-install.gif new file mode 100644 index 00000000..388ba644 Binary files /dev/null and b/docker/demos/01-install.gif differ diff --git a/docker/demos/01-install.tape b/docker/demos/01-install.tape new file mode 100644 index 00000000..278cbae1 --- /dev/null +++ b/docker/demos/01-install.tape @@ -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 diff --git a/docker/demos/02-chain-status.gif b/docker/demos/02-chain-status.gif new file mode 100644 index 00000000..929e56ac Binary files /dev/null and b/docker/demos/02-chain-status.gif differ diff --git a/docker/demos/02-chain-status.tape b/docker/demos/02-chain-status.tape new file mode 100644 index 00000000..21a4d019 --- /dev/null +++ b/docker/demos/02-chain-status.tape @@ -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 diff --git a/docker/demos/03-ecosystem-tour.gif b/docker/demos/03-ecosystem-tour.gif new file mode 100644 index 00000000..deb20611 Binary files /dev/null and b/docker/demos/03-ecosystem-tour.gif differ diff --git a/docker/demos/03-ecosystem-tour.tape b/docker/demos/03-ecosystem-tour.tape new file mode 100644 index 00000000..a012585f --- /dev/null +++ b/docker/demos/03-ecosystem-tour.tape @@ -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 diff --git a/docker/demos/04-mining.gif b/docker/demos/04-mining.gif new file mode 100644 index 00000000..242c4594 Binary files /dev/null and b/docker/demos/04-mining.gif differ diff --git a/docker/demos/04-mining.tape b/docker/demos/04-mining.tape new file mode 100644 index 00000000..20fe8dd7 --- /dev/null +++ b/docker/demos/04-mining.tape @@ -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 diff --git a/docker/demos/05-exit-node.gif b/docker/demos/05-exit-node.gif new file mode 100644 index 00000000..53e26dec Binary files /dev/null and b/docker/demos/05-exit-node.gif differ diff --git a/docker/demos/05-exit-node.tape b/docker/demos/05-exit-node.tape new file mode 100644 index 00000000..805a663e --- /dev/null +++ b/docker/demos/05-exit-node.tape @@ -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 diff --git a/docker/demos/ecosystem-startup.gif b/docker/demos/ecosystem-startup.gif deleted file mode 100644 index ff16a8a8..00000000 Binary files a/docker/demos/ecosystem-startup.gif and /dev/null differ diff --git a/docker/demos/ecosystem-startup.tape b/docker/demos/ecosystem-startup.tape deleted file mode 100644 index 20babfc7..00000000 --- a/docker/demos/ecosystem-startup.tape +++ /dev/null @@ -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 diff --git a/docker/demos/exit-node.gif b/docker/demos/exit-node.gif deleted file mode 100644 index 62c2a3ed..00000000 Binary files a/docker/demos/exit-node.gif and /dev/null differ diff --git a/docker/demos/exit-node.tape b/docker/demos/exit-node.tape deleted file mode 100644 index 639888f6..00000000 --- a/docker/demos/exit-node.tape +++ /dev/null @@ -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 diff --git a/docker/demos/health-check.gif b/docker/demos/health-check.gif deleted file mode 100644 index 7baad7c5..00000000 Binary files a/docker/demos/health-check.gif and /dev/null differ diff --git a/docker/demos/health-check.tape b/docker/demos/health-check.tape deleted file mode 100644 index 548e9ca8..00000000 --- a/docker/demos/health-check.tape +++ /dev/null @@ -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 diff --git a/docker/demos/helpers/explorer-stats.sh b/docker/demos/helpers/explorer-stats.sh new file mode 100755 index 00000000..1146289a --- /dev/null +++ b/docker/demos/helpers/explorer-stats.sh @@ -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...') +" diff --git a/docker/demos/helpers/last-block.sh b/docker/demos/helpers/last-block.sh new file mode 100755 index 00000000..9ca90f07 --- /dev/null +++ b/docker/demos/helpers/last-block.sh @@ -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]}...') +" diff --git a/docker/demos/helpers/lns-status.sh b/docker/demos/helpers/lns-status.sh new file mode 100755 index 00000000..00af08a5 --- /dev/null +++ b/docker/demos/helpers/lns-status.sh @@ -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 diff --git a/docker/demos/helpers/pool-stats.sh b/docker/demos/helpers/pool-stats.sh new file mode 100755 index 00000000..464e719a --- /dev/null +++ b/docker/demos/helpers/pool-stats.sh @@ -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') +" diff --git a/docker/demos/lns-dns.gif b/docker/demos/lns-dns.gif deleted file mode 100644 index 62591a84..00000000 Binary files a/docker/demos/lns-dns.gif and /dev/null differ diff --git a/docker/demos/lns-dns.tape b/docker/demos/lns-dns.tape deleted file mode 100644 index 420231d8..00000000 --- a/docker/demos/lns-dns.tape +++ /dev/null @@ -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 diff --git a/docker/demos/node-quickstart.gif b/docker/demos/node-quickstart.gif deleted file mode 100644 index 9c3c02d1..00000000 Binary files a/docker/demos/node-quickstart.gif and /dev/null differ diff --git a/docker/demos/node-quickstart.tape b/docker/demos/node-quickstart.tape deleted file mode 100644 index 4d043f21..00000000 --- a/docker/demos/node-quickstart.tape +++ /dev/null @@ -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 diff --git a/docker/demos/wallet-basics.gif b/docker/demos/wallet-basics.gif deleted file mode 100644 index fa6a2368..00000000 Binary files a/docker/demos/wallet-basics.gif and /dev/null differ diff --git a/docker/demos/wallet-basics.tape b/docker/demos/wallet-basics.tape deleted file mode 100644 index 756ef8f7..00000000 --- a/docker/demos/wallet-basics.tape +++ /dev/null @@ -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