{"id":46573531,"url":"https://github.com/8144225309/superscalar","last_synced_at":"2026-04-14T17:01:16.979Z","repository":{"id":340296793,"uuid":"1165400402","full_name":"8144225309/SuperScalar","owner":"8144225309","description":"Implementation of SuperScalar — Bitcoin Lightning channel factories that onboard N users in one shared UTXO. No soft fork required.","archived":false,"fork":false,"pushed_at":"2026-04-13T21:55:00.000Z","size":21195,"stargazers_count":15,"open_issues_count":5,"forks_count":1,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-04-13T23:33:21.656Z","etag":null,"topics":["bitcoin","channel-factory","layer2","lightning-network","musig2","taproot"],"latest_commit_sha":null,"homepage":"https://SuperScalar.win","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/8144225309.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":["https://superscalar.win"]}},"created_at":"2026-02-24T05:57:37.000Z","updated_at":"2026-04-11T04:34:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/8144225309/SuperScalar","commit_stats":null,"previous_names":["8144225309/superscalar"],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/8144225309/SuperScalar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8144225309%2FSuperScalar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8144225309%2FSuperScalar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8144225309%2FSuperScalar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8144225309%2FSuperScalar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/8144225309","download_url":"https://codeload.github.com/8144225309/SuperScalar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/8144225309%2FSuperScalar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31806209,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T11:13:53.975Z","status":"ssl_error","status_checked_at":"2026-04-14T11:13:53.299Z","response_time":153,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bitcoin","channel-factory","layer2","lightning-network","musig2","taproot"],"created_at":"2026-03-07T09:15:28.936Z","updated_at":"2026-04-14T17:01:16.969Z","avatar_url":"https://github.com/8144225309.png","language":"C","funding_links":["https://superscalar.win"],"categories":[],"sub_categories":[],"readme":"# SuperScalar\n\n[![CI](https://github.com/8144225309/SuperScalar/workflows/CI/badge.svg)](https://github.com/8144225309/SuperScalar/actions)\n[![Release](https://img.shields.io/github/v/release/8144225309/SuperScalar)](https://github.com/8144225309/SuperScalar/releases)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Bitcoin](https://img.shields.io/badge/Bitcoin-Lightning-orange.svg)](https://delvingbitcoin.org/t/superscalar-laddered-timeout-tree-structured-decker-wattenhofer-factories/1143)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)\n\n\u003e v0.1.11 — 29/29 signet exhibition tests passed (S1–S30, S26 removed as security fix), LSPS2 server crash fix, chain gossip hash correction, admin RPC block height, BOLT 12 invoice flow, accumulated fee persistence (schema v17). 1362 unit tests, 42 regtest integration tests.\n\nImplementation of [ZmnSCPxj's SuperScalar design](https://delvingbitcoin.org/t/superscalar-laddered-timeout-tree-structured-decker-wattenhofer-factories/1143) — laddered timeout-tree-structured Decker-Wattenhofer channel factories for Bitcoin.\n\nA Bitcoin channel factory protocol combining:\n\n- **Decker-Wattenhofer invalidation** — alternating kickoff/state layers with decrementing nSequence\n- **Timeout-sig-trees** — N-of-N MuSig2 key-path with CLTV timeout script-path fallback\n- **Poon-Dryja channels** — standard Lightning channels at leaf outputs with HTLCs\n- **LSP + N clients** — the LSP participates in every branch; no consensus changes required\n\n## Features\n\n| Area | What's Implemented |\n|------|--------------------|\n| **Cryptography** | MuSig2 (key agg, 2-round signing, nonce pools), Schnorr adaptor signatures, PTLC key turnover, shachain revocation, 2-leaf taptree with script-path revocation penalty |\n| **Transport** | BOLT #8 Noise_XK encrypted transport (ChaCha20-Poly1305, key rotation, phase timeouts), BOLT #7 gossip (node_announcement, channel_announcement, channel_update, gossip queries), Tor hidden services + SOCKS5 |\n| **Persistence** | SQLite3 with 27 tables — factory state, channels, HTLCs, watchtower data; full crash recovery |\n| **Wire Protocol** | Full BOLT #2 commitment (update_add/fulfill/fail HTLC, commitment_signed, revoke_and_ack, update_fee), BOLT #4 multi-hop onion (Sphinx, keysend TLV), BOLT #11 invoice, BOLT #12 offers + blinded paths, LSPS0/1/2, MPP (10-part / 32-payment), AMP, Dijkstra pathfinding over gossip graph, PTLC state machine, dual-fund v2, cooperative close, factory lifecycle, reconnection |\n| **Signing** | Distributed MuSig2 signing for factory creation (2-round N-of-N ceremony) and per-leaf advance (single-round 2-of-2) |\n| **Security** | Client + LSP + standalone watchtowers, breach detection + penalty broadcast (key-path and script-path) + L-stock burn, per-client close addresses, encrypted keyfiles (PBKDF2 600K iterations), encrypted backup/restore (PBKDF2 + ChaCha20-Poly1305), BIP39 mnemonic seed recovery, per-IP connection rate limiting, shell-free subprocess execution |\n| **Operations** | Web dashboard, JSON diagnostic reports, interactive CLI, configurable economics (fee splits, placement modes), UTXO coin selection, RBF fee bumping |\n| **Testing** | 1362 unit + 42 regtest integration + 29 signet exhibition tests (S1–S30, S16 removed), CI on every push (Linux, macOS, ARM64, sanitizers, cppcheck, coverage, fuzz) |\n\n## Quick Start\n\nFrom a fresh Ubuntu machine to a running demo in 5 commands:\n\n```bash\nsudo apt install build-essential cmake libsqlite3-dev python3  # dependencies\ngit clone https://github.com/8144225309/SuperScalar.git \u0026\u0026 cd SuperScalar\nmkdir -p build \u0026\u0026 cd build \u0026\u0026 cmake .. \u0026\u0026 make -j$(nproc) \u0026\u0026 cd ..\nsource tools/setup_regtest.sh                                   # starts bitcoind, funds wallet\nbash tools/run_demo.sh --basic                                  # factory + payments + close (~30s)\n```\n\nCreates a 5-of-5 factory, opens 4 channels, runs payments, and cooperative-closes. If `bitcoind` is already running, `run_demo.sh` detects it.\n\n## Build\n\n**System prerequisites**: a C compiler (gcc/clang), CMake 3.14+, SQLite3 dev headers, Python 3 (for tooling)\n\n```bash\n# Ubuntu / Debian\nsudo apt install build-essential cmake libsqlite3-dev python3\n\n# macOS (SQLite3 ships with Xcode; install CMake via Homebrew if needed)\nbrew install cmake\n```\n\n```bash\nmkdir -p build \u0026\u0026 cd build\ncmake .. \u0026\u0026 make -j$(nproc 2\u003e/dev/null || sysctl -n hw.logicalcpu 2\u003e/dev/null || echo 4)\n```\n\n**Auto-fetched** (CMake FetchContent):\n- [secp256k1-zkp](https://github.com/BlockstreamResearch/secp256k1-zkp) — MuSig2, Schnorr, adaptor signatures\n- [cJSON](https://github.com/DaveGamble/cJSON) — JSON parsing\n\n**Optional build flags:**\n\n```bash\ncmake .. -DENABLE_SANITIZERS=ON   # AddressSanitizer + UBSan (debug builds)\ncmake .. -DENABLE_COVERAGE=ON     # gcov instrumentation for lcov reports\nCC=clang cmake .. -DENABLE_FUZZING=ON  # libFuzzer targets (requires clang)\n```\n\n## Tests\n\n1362 automated tests (unit + regtest integration) plus 29 signet exhibition tests (S1–S30, S16 removed). CI runs automated suites on every push — Linux, macOS, ARM64, AddressSanitizer, cppcheck static analysis, coverage, and libFuzzer.\n\nSee [docs/testing-guide.md](docs/testing-guide.md) for the full testing guide.\n\n```bash\ncd build\n\n# Unit tests only (no bitcoind needed)\n./test_superscalar --unit\n\n# Integration tests (needs bitcoind -regtest)\nbitcoind -regtest -daemon -rpcuser=rpcuser -rpcpassword=rpcpass \\\n  -fallbackfee=0.00001 -txindex=1\n./test_superscalar --regtest\nbitcoin-cli -regtest -rpcuser=rpcuser -rpcpassword=rpcpass stop\n\n# All tests\n./test_superscalar --all\n\n# Manual flag tests (29 tests, needs bitcoind running)\npython3 tools/manual_tests.py all           # run all tests\npython3 tools/manual_tests.py demo          # run a single test\npython3 tools/manual_tests.py --list        # list available tests\n# Logs: /tmp/mt_lsp.log, /tmp/mt_client_*.log\n\n# Test orchestrator (36 multi-process scenarios)\npython3 tools/test_orchestrator.py --scenario all\npython3 tools/test_orchestrator.py --list   # list scenarios\n```\n\n---\n\n## Fund Recovery\n\nDetect and recover funds stuck in factory leaf outputs after force-close tests or interrupted exhibitions:\n\n```bash\n# Scan for unspent exhibition outputs\npython3 tools/recover_exhibition_funds.py --network signet --scan\n\n# Sweep stuck funds back to wallet\npython3 tools/recover_exhibition_funds.py --network signet --sweep\n\n# Preview without broadcasting\npython3 tools/recover_exhibition_funds.py --network signet --sweep --dry-run\n\n# For production factory recovery (via admin RPC):\n# 1. Start LSP with --rpc-file /tmp/lsp_rpc\n# 2. Call sweepfactory: echo '{\"method\":\"sweepfactory\",\"params\":{\"factory_id\":0,\"dest_spk_hex\":\"...\"}}' | nc -U /tmp/lsp_rpc\n```\n\nExhibition keys are deterministic (LSP=0x01, clients=0x2222/3333/4444/5555), so all leaf outputs are recoverable via MuSig2 key-path spend.\n\n---\n\n## Demos\n\nAll demos require a built project (`build/` directory with binaries) and `bitcoind -regtest`.\n\n### One-Command Demo Runner\n\nThe easiest way to see SuperScalar in action:\n\n```bash\nbash tools/run_demo.sh --basic       # Factory + payments + cooperative close (~30s)\nbash tools/run_demo.sh --breach      # + watchtower detects breach, broadcasts penalty (~60s)\nbash tools/run_demo.sh --rotation    # + PTLC turnover + factory ladder rotation (~2min)\nbash tools/run_demo.sh --all         # All three scenarios sequentially\n```\n\n`run_demo.sh` handles pre-flight checks, auto-starts `bitcoind` if needed, funds the wallet, launches the LSP + 4 clients, and prints colored output.\n\n#### What each demo shows\n\n| Demo | What happens |\n|------|-------------|\n| `--basic` | Creates a 5-of-5 MuSig2 factory (100k sats), opens 4 channels, runs 4 payments with real preimage validation, cooperative-closes everything in a single on-chain tx |\n| `--breach` | Runs `--basic` first, then broadcasts a **revoked** commitment tx. The watchtower detects the breach and broadcasts a penalty tx that sweeps the cheater's funds |\n| `--rotation` | Runs `--basic`, then performs PTLC key turnover (adaptor sigs extract every client's key over the wire), closes Factory 0, creates Factory 1, runs payments in the new factory, and closes — demonstrating zero-downtime laddering |\n\n### Manual Demo (Minimal)\n\n```bash\n# Terminal: start LSP + auto-fork 4 clients, run demo, close\ncd build\nbash ../tools/demo.sh\n```\n\n### LSP Test Flags\n\nThese flags run after the `--demo` payment sequence completes:\n\n```bash\n# Watchtower breach test (LSP detects its own revoked commitment)\n./superscalar_lsp --port 9735 --demo --breach-test\n\n# Cheat daemon (broadcast revoked commitment, sleep — clients detect breach)\n./superscalar_lsp --port 9735 --demo --cheat-daemon\n\n# CLTV timeout recovery (mine past timeout, LSP recovers via script-path)\n./superscalar_lsp --port 9735 --demo --test-expiry\n\n# Distribution tx (pre-signed nLockTime tx defaults funds to clients)\n./superscalar_lsp --port 9735 --demo --test-distrib\n\n# PTLC key turnover (adaptor sigs, LSP can close alone afterward)\n./superscalar_lsp --port 9735 --demo --test-turnover\n\n# Full factory rotation (PTLC wire msgs + new factory + payments)\n./superscalar_lsp --port 9735 --demo --test-rotation\n\n# DW counter advance (broadcast state TXs with decreasing nSequence)\n./superscalar_lsp --port 9735 --demo --test-dw-advance\n\n# DW exhibition (full tree broadcast, all layers visible on-chain)\n./superscalar_lsp --port 9735 --demo --test-dw-exhibition\n\n# Per-leaf advance (individual leaf state update, 3-of-3 signing)\n./superscalar_lsp --port 9735 --demo --test-leaf-advance\n\n# L-stock burn (unilateral exit burns LSP liquidity stock output)\n./superscalar_lsp --port 9735 --demo --test-burn\n\n# Dual factory (two concurrent independent factories)\n./superscalar_lsp --port 9735 --demo --test-dual-factory\n\n# BOLT11 bridge (Lightning ↔ factory bridge via CLN plugin)\n./superscalar_lsp --port 9735 --demo --test-bridge\n\n# HTLC force-close (force-close with HTLC outputs, preimage reveal)\n./superscalar_lsp --port 9735 --demo --test-htlc-force-close\n```\n\n### Test Orchestrator\n\nMulti-party scenario testing with automatic process management. Stdlib-only Python3.\n\n```bash\npython3 tools/test_orchestrator.py --list                        # Show scenarios\npython3 tools/test_orchestrator.py --scenario all_watch          # All clients detect breach\npython3 tools/test_orchestrator.py --scenario partial_watch --k 2  # 2 of 4 detect\npython3 tools/test_orchestrator.py --scenario nobody_home        # No clients, breach undetected\npython3 tools/test_orchestrator.py --scenario late_arrival       # Clients restart after breach\npython3 tools/test_orchestrator.py --scenario cooperative_close  # Clean shutdown\npython3 tools/test_orchestrator.py --scenario timeout_expiry     # LSP reclaims via CLTV\npython3 tools/test_orchestrator.py --scenario factory_breach     # Old factory tree broadcast\npython3 tools/test_orchestrator.py --scenario all                # Run all scenarios\n```\n\n---\n\n## Web Dashboard\n\nA real-time monitoring dashboard for SuperScalar deployments. Stdlib-only Python3 (no pip install needed).\n\n![SuperScalar Dashboard](docs/dashboard-screenshot.png)\n\n### Launch\n\n```bash\n# Demo mode (no databases required — shows synthetic data)\npython3 tools/dashboard.py --demo\n\n# With real databases from a running deployment\npython3 tools/dashboard.py \\\n  --lsp-db /path/to/lsp.db \\\n  --client-db /path/to/client.db \\\n  --btc-cli bitcoin-cli \\\n  --btc-network signet \\\n  --btc-rpcuser superscalar \\\n  --btc-rpcpassword superscalar123\n\n# Launch alongside the demo runner\nbash tools/run_demo.sh --all --dashboard\n```\n\nThen open **http://localhost:8080** in your browser.\n\n### Dashboard Tabs\n\n| Tab | What it shows |\n|-----|---------------|\n| **Overview** | Process status (bitcoind, CLN, bridge, LSP, client), blockchain height, wallet balance, system health |\n| **Factory** | Factory state (ACTIVE/DYING/EXPIRED), creation block, participant keys, DW epoch, funding txid |\n| **Channels** | Per-channel balances (local/remote), commitment number, HTLC count, state |\n| **Protocol** | Factory tree node visualization (kickoff + state nodes), signatures, wire message log |\n| **Lightning** | CLN node info, peers, channels, forwarding stats (requires `--cln-a-dir` / `--cln-b-dir`) |\n| **Watchtower** | Old commitment tracking, breach detection status, penalty tx history |\n| **Events** | Recent 100 wire messages with timestamp, direction, type, peer label, payload summary |\n\nThe dashboard auto-refreshes every 5 seconds. Status indicators: green = healthy, yellow = warning, red = error.\n\n### Dashboard Flags\n\n| Flag | Default | Purpose |\n|------|---------|---------|\n| `--port` | 8080 | HTTP server port |\n| `--demo` | off | Use synthetic data (no databases needed) |\n| `--lsp-db` | — | Path to LSP SQLite database |\n| `--client-db` | — | Path to client SQLite database |\n| `--btc-cli` | bitcoin-cli | Path to bitcoin-cli |\n| `--btc-network` | signet | Bitcoin network |\n| `--btc-rpcuser` | — | Bitcoin RPC username |\n| `--btc-rpcpassword` | — | Bitcoin RPC password |\n| `--cln-cli` | lightning-cli | Path to lightning-cli |\n| `--cln-a-dir` | — | CLN Node A data directory |\n| `--cln-b-dir` | — | CLN Node B data directory |\n\n---\n\n## Running on Signet\n\nSuperScalar works on signet (and testnet4) with real Bitcoin transactions. This guide walks through a full factory lifecycle: create, pay, close.\n\n### Prerequisites\n\n- A synced `bitcoind` running on signet with a funded wallet\n- The built `superscalar_lsp` and `superscalar_client` binaries\n- At least ~50,000 sats in the wallet (factory funding + fees)\n\n### 1. Start bitcoind\n\n```bash\nbitcoind -signet -daemon -txindex=1 -fallbackfee=0.00001 \\\n  -rpcuser=YOUR_USER -rpcpassword=YOUR_PASS\n```\n\nIf your `bitcoind` is in a non-standard location or uses a custom datadir, note the paths — you'll need `--cli-path` and `--datadir` below.\n\nGet signet coins from a faucet (e.g. https://signetfaucet.com) if your wallet is empty.\n\n### 2. Generate keys\n\nThe LSP and each client need a unique 32-byte secret key. On signet, deterministic keys are blocked — you must provide real ones.\n\n```bash\n# Generate random keys (requires openssl or /dev/urandom)\nLSP_KEY=$(openssl rand -hex 32)\nCLIENT1_KEY=$(openssl rand -hex 32)\nCLIENT2_KEY=$(openssl rand -hex 32)\n\n# Or use encrypted keyfiles (prompted for passphrase)\n./superscalar_lsp --keyfile lsp.key --passphrase \"your passphrase\" ...\n```\n\nSave these keys. If the LSP crashes and restarts (with `--db`), it needs the same key to recover channels.\n\n### 3. Start the LSP\n\n```bash\n./superscalar_lsp \\\n  --network signet \\\n  --port 9735 \\\n  --clients 2 \\\n  --amount 50000 \\\n  --seckey $LSP_KEY \\\n  --daemon \\\n  --db lsp.db \\\n  --cli-path /path/to/bitcoin-cli \\\n  --rpcuser YOUR_USER \\\n  --rpcpassword YOUR_PASS \\\n  --wallet YOUR_WALLET\n```\n\n| Flag | Why |\n|------|-----|\n| `--network signet` | Use signet instead of regtest |\n| `--wallet YOUR_WALLET` | Use your existing funded wallet (skips `createwallet`) |\n| `--db lsp.db` | Persist factory, channels, HTLCs — survives crashes |\n| `--daemon` | Long-lived mode (Ctrl+C for cooperative close) |\n| `--amount 50000` | Fund the factory with 50k sats |\n\nOptional flags: `--datadir`, `--rpcport` if your bitcoind uses non-standard paths.\n\nThe LSP will:\n1. Check wallet balance (fails if insufficient)\n2. Query fee estimate from the node\n3. Listen for client connections\n4. Wait for all clients to connect before proceeding\n\n### 4. Connect clients\n\nIn separate terminals (or machines — use `--host` for remote):\n\n```bash\n# Client 1\n./superscalar_client \\\n  --network signet \\\n  --seckey $CLIENT1_KEY \\\n  --port 9735 \\\n  --host 127.0.0.1 \\\n  --daemon \\\n  --db client1.db \\\n  --cli-path /path/to/bitcoin-cli \\\n  --rpcuser YOUR_USER \\\n  --rpcpassword YOUR_PASS\n\n# Client 2\n./superscalar_client \\\n  --network signet \\\n  --seckey $CLIENT2_KEY \\\n  --port 9735 \\\n  --host 127.0.0.1 \\\n  --daemon \\\n  --db client2.db \\\n  --cli-path /path/to/bitcoin-cli \\\n  --rpcuser YOUR_USER \\\n  --rpcpassword YOUR_PASS\n```\n\nOnce all clients connect, the ceremony runs automatically:\n\n1. **Factory creation**: LSP funds a MuSig2 UTXO, all parties co-sign the tree\n2. **Funding confirmation**: LSP broadcasts and waits for 1 confirmation (~10 min on signet)\n3. **Channel setup**: Basepoint exchange, channel ready\n4. **Daemon mode**: LSP and clients stay online, forwarding HTLCs\n\n### 5. Send payments\n\nFrom a client using `--send`:\n\n```bash\n./superscalar_client \\\n  --network signet \\\n  --seckey $CLIENT1_KEY \\\n  --port 9735 \\\n  --send 1:1000:$(openssl rand -hex 32)\n```\n\nFormat: `--send DEST_CLIENT:AMOUNT_SATS:PREIMAGE_HEX`\n\nOr in daemon mode, payments flow through the LSP automatically when triggered via the wire protocol.\n\n### 6. Shutdown\n\nPress **Ctrl+C** on the LSP. It will:\n1. Cooperatively close the factory (single on-chain tx)\n2. Wait for confirmation\n3. Exit cleanly\n\nIf the LSP crashes instead, restart with the same `--seckey` and `--db`. It will recover the factory and channels from the database and accept client reconnections.\n\n### Monitoring\n\n```bash\npython3 tools/dashboard.py \\\n  --lsp-db lsp.db \\\n  --client-db client1.db \\\n  --btc-cli /path/to/bitcoin-cli \\\n  --btc-network signet \\\n  --btc-rpcuser YOUR_USER \\\n  --btc-rpcpassword YOUR_PASS\n```\n\nOpen http://localhost:8080 for real-time factory, channel, and payment status.\n\n### Testnet4 Timing\n\nDefault factory parameters are production-grade (4320-block active period ≈ 30 days). For initial testnet4 testing, use shorter cycles to iterate faster:\n\n```bash\n./superscalar_lsp \\\n  --network testnet4 \\\n  --active-blocks 50 --dying-blocks 20 \\\n  --step-blocks 5 --states-per-layer 2 \\\n  --confirm-timeout 7200 \\\n  ...\n```\n\n| Parameter | Default (non-regtest) | Recommended (testnet4 testing) | Effect |\n|-----------|----------------------|-------------------------------|--------|\n| `--active-blocks` | 4320 (~30 days) | 50 (~8 hours) | Factory active period |\n| `--dying-blocks` | 432 (~3 days) | 20 (~3 hours) | Factory dying period |\n| `--step-blocks` | 10 | 5 | BIP68 relative lock per DW layer |\n| `--states-per-layer` | 4 | 2 | DW states per tree layer |\n| `--confirm-timeout` | 7200 (2 hours) | 7200 | Max wait for TX confirmation |\n\nWith `--step-blocks 5`, a full DW tree force-close takes ~30 blocks (~5 hours) instead of ~300 blocks (~2 days).\n\n### Troubleshooting\n\n| Problem | Fix |\n|---------|-----|\n| \"wallet balance insufficient\" | Fund your wallet via faucet, or use `--wallet` to point at a funded wallet |\n| \"cannot connect to bitcoind\" | Check `--cli-path`, `--rpcuser`, `--rpcpassword`, `--datadir` match your setup |\n| \"funding tx not confirmed within timeout\" | Signet blocks are ~10 min; increase `--confirm-timeout` if needed |\n| Client \"expected FACTORY_PROPOSE\" | LSP isn't running or wrong `--host`/`--port` |\n| LSP crash recovery not working | Must use same `--seckey` and `--db` as the original run |\n\n---\n\n## Standalone Binaries\n\n### superscalar_lsp\n\n```\nsuperscalar_lsp [OPTIONS]\n```\n\n| Flag | Argument | Default | Description |\n|------|----------|---------|-------------|\n| `--port` | PORT | 9735 | Listen port |\n| `--clients` | N | 4 | Number of clients |\n| `--arity` | N | 2 | Leaf arity: 1 (per-client leaves) or 2 (paired leaves) |\n| `--amount` | SATS | 100000 | Funding amount |\n| `--network` | MODE | regtest | regtest / signet / testnet / mainnet |\n| `--daemon` | — | off | Long-lived daemon mode |\n| `--demo` | — | off | Run scripted demo sequence |\n| `--db` | PATH | — | SQLite persistence |\n| `--fee-rate` | N | 1000 | Fee rate (sat/kvB) |\n| `--keyfile` | PATH | — | Encrypted keyfile |\n| `--passphrase` | PASS | — | Keyfile passphrase |\n| `--cli-path` | PATH | bitcoin-cli | Bitcoin CLI binary |\n| `--rpcuser` | USER | rpcuser | Bitcoin RPC username |\n| `--rpcpassword` | PASS | rpcpass | Bitcoin RPC password |\n| `--datadir` | PATH | — | Bitcoin datadir |\n| `--rpcport` | PORT | — | Bitcoin RPC port |\n| `--wallet` | NAME | superscalar_lsp | Bitcoin wallet (skip createwallet if set) |\n| `--confirm-timeout` | SECS | 3600/7200 | Confirmation polling timeout |\n| `--report` | PATH | — | Write JSON diagnostic report |\n| `--breach-test` | — | off | Broadcast revoked commitment, trigger penalty |\n| `--cheat-daemon` | — | off | Broadcast revoked commitment, sleep (clients detect) |\n| `--test-expiry` | — | off | Mine past CLTV, recover via timeout script |\n| `--test-distrib` | — | off | Broadcast pre-signed distribution tx |\n| `--test-turnover` | — | off | PTLC key turnover, close with extracted keys |\n| `--test-rotation` | — | off | Full factory rotation lifecycle |\n| `--force-close` | — | off | Broadcast factory tree on-chain, wait for confirmations |\n| `--test-dw-advance` | — | off | Broadcast state TXs with decreasing nSequence (DW counter advance) |\n| `--test-dw-exhibition` | — | off | Full DW tree broadcast, all layers visible on-chain |\n| `--test-leaf-advance` | — | off | Per-leaf state advance via 3-of-3 signing |\n| `--test-burn` | — | off | Unilateral exit: burn L-stock output |\n| `--test-dual-factory` | — | off | Run two concurrent independent factories |\n| `--test-bridge` | — | off | BOLT11 Lightning ↔ factory bridge via CLN plugin |\n| `--test-htlc-force-close` | — | off | Force-close with live HTLC outputs, preimage reveal |\n| `--routing-fee-ppm` | N | 0 | Routing fee in parts-per-million (0 = free) |\n| `--lsp-balance-pct` | N | 50 | LSP's share of channel capacity (0-100) |\n| `--placement-mode` | MODE | sequential | Client placement: sequential / inward / outward |\n| `--economic-mode` | MODE | lsp-takes-all | Fee model: lsp-takes-all / profit-shared |\n| `--default-profit-bps` | N | 0 | Default profit share per client (basis points) |\n| `--no-jit` | — | off | Disable JIT channel fallback |\n| `--jit-amount` | SATS | auto | Per-client JIT channel funding amount |\n| `--max-connections` | N | clients | Max inbound connections to accept (1..LSP_MAX_CLIENTS) |\n| `--accept-timeout` | SECS | 0 | Max seconds to wait for each client to connect |\n| `--active-blocks` | N | 20/4320 | Factory active period in blocks |\n| `--dying-blocks` | N | 10/432 | Factory dying period in blocks |\n| `--cli` | — | off | Interactive CLI in daemon mode (pay/status/rotate/close) |\n| `--step-blocks` | N | 10 | DW step blocks (nSequence decrement per state) |\n| `--states-per-layer` | N | 4 | DW states per layer (2-256) |\n| `--settlement-interval` | N | 144 | Blocks between profit settlements |\n| `--payments` | N | 0 | Number of HTLC payments to process |\n| `--cltv-timeout` | N | auto | Factory CLTV timeout (absolute block height) |\n| `--tor-proxy` | HOST:PORT | — | SOCKS5 proxy for Tor |\n| `--tor-control` | HOST:PORT | — | Tor control port for hidden service |\n| `--tor-password` | PASS | — | Tor control auth password |\n| `--onion` | — | off | Create Tor hidden service on startup |\n| `--tor-only` | — | off | Refuse all non-.onion outbound connections |\n| `--bind` | ADDRESS | 0.0.0.0 | Restrict listen address (auto `127.0.0.1` with `--onion`) |\n| `--tor-password-file` | PATH | — | Read Tor control password from file (avoids argv exposure) |\n| `--backup` | PATH | — | Create encrypted backup of DB + keyfile and exit |\n| `--restore` | PATH | — | Restore from encrypted backup and exit |\n| `--backup-verify` | PATH | — | Verify backup integrity and exit |\n| `--fee-bump-after` | N | 6 | Blocks before first RBF fee bump |\n| `--fee-bump-max` | N | 3 | Maximum fee bump attempts |\n| `--fee-bump-multiplier` | F | 1.5 | Fee rate multiplier per bump |\n| `--generate-mnemonic` | — | off | Generate 24-word BIP39 mnemonic, derive keyfile, and exit |\n| `--from-mnemonic` | WORDS | — | Derive keyfile from BIP39 mnemonic words |\n| `--mnemonic-passphrase` | PASS | \"\" | Optional BIP39 passphrase for seed derivation |\n| `--max-conn-rate` | N | 10 | Max inbound connections per minute per IP |\n| `--max-handshakes` | N | 4 | Max concurrent handshakes |\n| `--regtest` | — | off | Shorthand for --network regtest |\n| `--i-accept-the-risk` | — | off | Required for mainnet operation |\n| `--version` | — | — | Show version and exit |\n| `--help` | — | — | Show help and exit |\n\n### superscalar_client\n\n```\nsuperscalar_client [OPTIONS]\n```\n\n| Flag | Argument | Default | Description |\n|------|----------|---------|-------------|\n| `--seckey` | HEX | **required** | 32-byte secret key |\n| `--port` | PORT | 9735 | LSP port |\n| `--host` | HOST | 127.0.0.1 | LSP host |\n| `--daemon` | — | off | Daemon mode (auto-fulfill HTLCs, client watchtower) |\n| `--db` | PATH | — | SQLite persistence |\n| `--network` | MODE | regtest | Network mode |\n| `--fee-rate` | N | 1000 | Fee rate (sat/kvB) |\n| `--keyfile` | PATH | — | Encrypted keyfile |\n| `--passphrase` | PASS | — | Keyfile passphrase |\n| `--cli-path` | PATH | bitcoin-cli | Bitcoin CLI binary |\n| `--rpcuser` | USER | rpcuser | Bitcoin RPC username |\n| `--rpcpassword` | PASS | rpcpass | Bitcoin RPC password |\n| `--datadir` | PATH | — | Bitcoin datadir |\n| `--rpcport` | PORT | — | Bitcoin RPC port |\n| `--lsp-pubkey` | HEX | — | LSP static pubkey (33-byte compressed hex) for NK authentication |\n| `--tor-proxy` | HOST:PORT | — | SOCKS5 proxy for Tor (e.g. `127.0.0.1:9050`) |\n| `--tor-only` | — | off | Refuse all non-.onion outbound connections |\n| `--auto-accept-jit` | — | off | Auto-accept JIT channel offers |\n| `--generate-mnemonic` | — | off | Generate 24-word BIP39 mnemonic, derive keyfile, and exit |\n| `--from-mnemonic` | WORDS | — | Derive keyfile from BIP39 mnemonic words |\n| `--mnemonic-passphrase` | PASS | \"\" | Optional BIP39 passphrase for seed derivation |\n| `--i-accept-the-risk` | — | off | Required for mainnet operation |\n| `--version` | — | — | Show version and exit |\n| `--help` | — | — | Show help and exit |\n\n### superscalar_bridge\n\n```\nsuperscalar_bridge [OPTIONS]\n```\n\n| Flag | Argument | Default | Description |\n|------|----------|---------|-------------|\n| `--lsp-host` | HOST | 127.0.0.1 | LSP host |\n| `--lsp-port` | PORT | 9735 | LSP port |\n| `--plugin-port` | PORT | 9736 | CLN plugin listen port |\n| `--lsp-pubkey` | HEX | — | LSP static pubkey (33-byte compressed hex) for NK authentication |\n| `--tor-proxy` | HOST:PORT | — | SOCKS5 proxy for Tor (e.g. `127.0.0.1:9050`) |\n| `--version` | — | — | Show version and exit |\n\n### superscalar_watchtower\n\nStandalone watchtower that monitors the blockchain for stale-state broadcasts independently of the LSP.\n\n```\nsuperscalar_watchtower [OPTIONS]\n```\n\n| Flag | Argument | Default | Description |\n|------|----------|---------|-------------|\n| `--db` | PATH | **required** | Path to LSP SQLite database (opened read-only) |\n| `--network` | MODE | regtest | Bitcoin network |\n| `--poll-interval` | SECS | 30 | Seconds between block scans |\n| `--cli-path` | PATH | bitcoin-cli | Path to bitcoin-cli binary |\n| `--rpcuser` | USER | rpcuser | Bitcoin RPC username |\n| `--rpcpassword` | PASS | rpcpass | Bitcoin RPC password |\n| `--datadir` | PATH | — | Bitcoin datadir |\n| `--rpcport` | PORT | — | Bitcoin RPC port |\n| `--version` | — | — | Show version and exit |\n\nThe watchtower opens the database read-only (no write contention with the LSP) and broadcasts penalty transactions if it detects a breach. Run it on a separate machine for defense-in-depth.\n\n---\n\n## Documentation\n\n| Guide | Audience | What It Covers |\n|-------|----------|----------------|\n| [LSP Operator Guide](docs/lsp-operator-guide.md) | LSP operators | Full deployment: Bitcoin Core setup, key management, all CLI flags, economics config, backup/restore, crash recovery, CLN bridge, monitoring |\n| [Client User Guide](docs/client-user-guide.md) | End users | Connecting to an LSP, receiving payments, watchtower security, Tor, reconnection, troubleshooting |\n| [Demo Walkthrough](docs/demo-walkthrough.md) | Everyone | Step-by-step for every demo: automated (one-command), manual (subcommands), fully manual (individual binaries), test orchestrator |\n| [Testing Guide](docs/testing-guide.md) | Developers | Running tests, understanding each test suite, writing new tests, sanitizer builds, adversarial test explanations |\n| [Deployment \u0026 Coordination](docs/deployment-coordination.md) | Operators + Users | Multi-machine deployment, Tor setup, Lightning bridge, factory lifecycle, monitoring, security checklist |\n| [Mainnet Audit](docs/mainnet-audit.md) | Developers | Internal security audit: 4 gaps identified, all 4 now fixed (BIP39, PBKDF2, atomic DB, shell-free exec) |\n| [Contributing](CONTRIBUTING.md) | Contributors | How to help: test on signet, report bugs, review code, submit patches |\n\n---\n\n## Architecture\n\n### Factory Tree (LSP + 4 Clients)\n\n```\n                    funding UTXO (5-of-5)\n                          |\n                   kickoff_root (5-of-5, nSeq=disabled)\n                          |\n                    state_root (5-of-5, nSeq=DW layer 0)\n                    /                    \\\n         kickoff_left (3-of-3)    kickoff_right (3-of-3)\n         {LSP, A, B}              {LSP, C, D}\n         nSeq=disabled            nSeq=disabled\n              |                        |\n        state_left (3-of-3)      state_right (3-of-3)\n        nSeq=DW layer 1          nSeq=DW layer 1\n        /     |     \\            /     |     \\\n     chan_A  chan_B  L_stock   chan_C  chan_D  L_stock\n```\n\n- **6 transactions** in the tree, all pre-signed cooperatively via MuSig2\n- **Alternating kickoff/state layers** prevents the cascade problem\n- **Leaf outputs**: 2 Poon-Dryja channels + 1 LSP liquidity stock per branch\n- **L-stock outputs**: Shachain-based invalidation with burn path for old states\n\n### Decker-Wattenhofer Invalidation\n\nNewer states get shorter relative timelocks, so they always confirm first:\n\n```\nState 0 (oldest): nSequence = 432 blocks  \u003c- trapped behind newer states\nState 1:          nSequence = 288 blocks\nState 2:          nSequence = 144 blocks\nState 3 (newest): nSequence = 0 blocks    \u003c- confirms immediately\n```\n\nMulti-layer counter works like an odometer: 2 layers x 4 states = 16 epochs.\n\n**Per-leaf advance**: Left and right subtrees can advance independently (only 3 signers needed per leaf instead of all 5). When a leaf exhausts its states, the root layer advances and both leaves reset. When all DW states are exhausted, the factory is rotated (old factory cooperatively closed, new factory created with fresh states).\n\n### Timeout-Sig-Trees\n\n```\nOutput key = TapTweak(internal_key, merkle_root)\n  Key path:    MuSig2(subset N-of-N)  — cooperative spend\n  Script path: \u003ccltv_timeout\u003e OP_CHECKLOCKTIMEVERIFY OP_DROP \u003cLSP_pubkey\u003e OP_CHECKSIG\n```\n\nIf clients disappear, the LSP can unilaterally recover funds after the timeout.\n\n### Payment Channels\n\nEach leaf channel is a standard Poon-Dryja Lightning channel:\n\n```\nCommitment TX:\n  Input:  leaf output (2-of-2 MuSig key-path)\n  Output 0: to_local  (revocable with per-commitment point)\n  Output 1: to_remote (immediate)\n  Output 2+: HTLC outputs (offered/received)\n```\n\nRevocation via random per-commitment secrets, penalty sweeps on breach, 2-leaf taproot HTLC trees, cooperative close via single key-path spend.\n\n### Wire Protocol\n\n54 message types over TCP with length-prefixed JSON framing. TLV binary codec available for BOLT-compatible encoding (version negotiated via HELLO/HELLO_ACK):\n\n| Category | Messages |\n|----------|----------|\n| Handshake | HELLO, HELLO_ACK |\n| Factory | PROPOSE, NONCES, PSIGS, READY, FACTORY_PROPOSE |\n| Channel | BASEPOINTS, CHANNEL_NONCES, CHANNEL_READY, CLOSE_REQUEST, CLOSE_COMPLETE |\n| HTLC | ADD_HTLC, COMMITMENT_SIGNED, REVOKE_AND_ACK, FULFILL_HTLC, FAIL_HTLC |\n| Revocation | LSP_REVOKE_AND_ACK |\n| Bridge | BRIDGE_HELLO through BRIDGE_PAY_RESULT (8 types) |\n| Reconnect | RECONNECT, RECONNECT_ACK |\n| Invoice | CREATE_INVOICE, INVOICE_CREATED, REGISTER_INVOICE |\n| PTLC | PTLC_PRESIG, PTLC_ADAPTED_SIG, PTLC_COMPLETE |\n| Epoch/Leaf | EPOCH_RESET_PROPOSE/PSIG/DONE, LEAF_ADVANCE_PROPOSE/PSIG/DONE |\n| Path Signing | PATH_NONCE_BUNDLE, PATH_ALL_NONCES, PATH_PSIG_BUNDLE, PATH_SIGN_DONE |\n| JIT | JIT_OFFER, JIT_ACCEPT, JIT_READY, JIT_MIGRATE |\n| Error | ERROR |\n\n### Connection Topology (with CLN Bridge)\n\n```\nCLN (lightningd)\n  └── cln_plugin.py (htlc_accepted hook + superscalar-pay RPC)\n        └── superscalar_bridge (port 9736 ← plugin, port 9735 → LSP)\n              │   ↑ NK-authenticated Noise handshake (--lsp-pubkey)\n              │   ↑ Optional Tor/SOCKS5 (--tor-proxy)\n              └── superscalar_lsp (port 9735)\n                    ├── client 1\n                    ├── client 2\n                    ├── client 3\n                    └── client 4\n```\n\n---\n\n## Modules\n\n| Module | File | Purpose |\n|--------|------|---------|\n| `dw_state` | dw_state.c | nSequence state machine, odometer-style multi-layer counter |\n| `musig` | musig.c | MuSig2 key aggregation, 2-round signing, split-round protocol, nonce pools |\n| `tx_builder` | tx_builder.c | Raw tx serialization, BIP-341 key-path sighash, witness finalization |\n| `tapscript` | tapscript.c | TapLeaf/TapBranch hashing, CLTV timeout scripts, control blocks |\n| `factory` | factory.c | Factory tree: build, sign, advance, per-leaf advance, timeout-sig-tree outputs, cooperative close |\n| `shachain` | shachain.c | BOLT #3 shachain, compact storage, epoch-to-index mapping |\n| `channel` | channel.c | Poon-Dryja channels: commitment txs, revocation, penalty, HTLCs |\n| `adaptor` | adaptor.c | MuSig2 adaptor signatures, PTLC key turnover |\n| `ladder` | ladder.c | Ladder manager: overlapping factory lifecycle, migration |\n| `wire` | wire.c | TCP transport, JSON framing, 54 message types |\n| `lsp` | lsp.c | LSP server: factory creation, cooperative close |\n| `client` | client.c | Client: factory ceremony, channel ops, rotation |\n| `lsp_channels` | lsp_channels.c | HTLC forwarding, event loop, factory rotation, per-leaf advance |\n| `lsp_bridge` | lsp_bridge.c | Bridge invoice registry, HTLC origin tracking, bridge message handling |\n| `lsp_rotation` | lsp_rotation.c | Factory rotation: PTLC turnover, cooperative close, ladder management |\n| `lsp_demo` | lsp_demo.c | Demo payment sequences, balance printing, external invoice creation |\n| `persist` | persist.c | SQLite3: 27 tables for full state persistence |\n| `bridge` | bridge.c | CLN bridge daemon |\n| `fee` | fee.c | Configurable fee estimation |\n| `watchtower` | watchtower.c | Breach detection + penalty broadcast (LSP + client-side, factory nodes) |\n| `keyfile` | keyfile.c | Encrypted keyfile storage |\n| `jit_channel` | jit_channel.c | JIT channel fallback for offline/low-balance clients |\n| `noise` | noise.c | Noise protocol encrypted transport (NN + NK patterns) |\n| `tor` | tor.c | SOCKS5 proxy client, Tor hidden service creation via control port |\n| `crypto_aead` | crypto_aead.c | AEAD encryption primitives |\n| `report` | report.c | JSON diagnostic report generation |\n| `ceremony` | ceremony.c | Factory creation ceremony: parallel client collection, timeout handling, quorum |\n| `bip39` | bip39.c | BIP39 mnemonic generation, validation, entropy round-trip, PBKDF2-HMAC-SHA512 seed derivation |\n| `backup` | backup.c | Encrypted backup/restore of DB + keyfile (PBKDF2-HMAC-SHA256 600K iterations + ChaCha20-Poly1305), v1/v2 auto-detection |\n| `wire_tlv` | wire_tlv.c | TLV (Type-Length-Value) binary codec for BOLT-compatible wire protocol |\n| `rate_limit` | rate_limit.c | Per-IP sliding-window connection rate limiting with concurrent handshake cap |\n| `regtest` | regtest.c | bitcoin-cli subprocess harness (fork/execvp on POSIX, popen fallback), UTXO coin selection, RBF fee bumping |\n| `util` | util.c | SHA-256, tagged hashing, hex, byte utilities |\n\n## Known Limitations\n\n| Area | Status | Notes |\n|------|--------|-------|\n| **Gossip (BOLT #7)** | Route hints | Full gossip impossible (off-chain); SCID + route hints in BOLT #11 invoices |\n| **Onion routing** | By design | Single-hop hub-and-spoke; cross-factory routing goes through CLN bridge |\n| **BOLT #11 encoding** | Delegated | Invoice creation handled by CLN; SuperScalar provides route hints |\n| **Hashlock burn** | By design | Enforced by `factory_build_burn_tx()`, not Script (would require covenant opcodes) |\n| **Wire protocol** | JSON + TLV | JSON framing with TLV codec available; full binary migration incremental |\n\n## Security\n\nSee [SECURITY.md](SECURITY.md) for the vulnerability disclosure policy.\n\nSuperScalar is pre-1.0 software. Mainnet requires `--i-accept-the-risk`. No external audit has been performed yet. An internal audit found 4 gaps — all fixed. See [docs/mainnet-audit.md](docs/mainnet-audit.md).\n\n## Get Involved\n\nSuperScalar needs real-world testing on signet and testnet over weeks and months — multi-party factories, reconnections, breach detection, factory rotation, long-lived daemon sessions.\n\n**Testnet4 on-chain exhibition in progress**: All 13 SuperScalar structures (cooperative close, DW force-close, DW advance, DW exhibition, per-leaf advance, L-stock burn, breach + penalty, CLTV timeout, distribution TX, BOLT11 bridge, HTLC force-close, factory rotation, dual factory) have been validated on regtest and are being broadcast to testnet4 as a public proof-of-concept. Follow [github.com/8144225309/SuperScalar/issues](https://github.com/8144225309/SuperScalar/issues) for TXIDs and results as each structure confirms.\n\n**How to help:**\n\n1. **Run a factory on testnet4 or signet** — Follow the [Running on Signet](#running-on-signet) guide (works for testnet4 too). Even a 2-client factory running for a few days produces valuable data.\n2. **Run the test orchestrator** — `python3 tools/test_orchestrator.py --scenario all` exercises 36 multi-party scenarios.\n3. **Report bugs** — Open an issue at [github.com/8144225309/SuperScalar/issues](https://github.com/8144225309/SuperScalar/issues). Include logs, network, and steps to reproduce.\n4. **Review the code** — The [internal audit](docs/mainnet-audit.md) is a good starting point. Cryptography lives in `src/musig.c`, `src/tapscript.c`, `src/channel.c`, `src/noise.c`.\n\nJoin the [Discussions](https://github.com/8144225309/SuperScalar/discussions) for questions, ideas, and coordination.\n\n## Related Projects\n\n| Project | Description |\n|---------|-------------|\n| [superscalar-cln](https://github.com/8144225309/superscalar-cln) | SuperScalar channel factory plugin for Core Lightning (bLIP-56) |\n| [lightning (bLIP-56 fork)](https://github.com/8144225309/lightning/tree/blip-56) | Core Lightning fork with pluggable channel factory support |\n| [superscalar-wallet](https://github.com/8144225309/superscalar-wallet) | Web-based wallet UI for SuperScalar factory management |\n| [superscalar-docs](https://github.com/8144225309/superscalar-docs) | Protocol documentation and visual guides |\n| [superscalar.win](https://superscalar.win) | SuperScalar explainer and documentation site |\n\n## License\n\nMIT\n\n---\n\n## Support\n\nSuperScalar is building the infrastructure Bitcoin needs to scale to millions of self-custodial users — no soft fork required, no compromise on sovereignty. This is independent open-source work, built in public, funded entirely by the community it serves.\n\nYour contribution keeps development moving forward.\n\nBitcoin: `bc1qym7552af6exkn68zuqcv5nhstaktkgtvjwfvmm`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F8144225309%2Fsuperscalar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F8144225309%2Fsuperscalar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F8144225309%2Fsuperscalar/lists"}