Picture a relay-race baton hurtling around a track.
Before each hand-off the runner stamps the baton with today’s secret code, then sprints ahead.
Every swap is signed, time-stamped, and etched into Bitcoin forever—so anyone can replay the entire race and verify there was never a duplicate baton.That baton is a Blocktrail. It gives you contract-grade state changes, provable settlement, and full auditability—powered solely by Bitcoin, no new chain or side token in sight.
🏷️ What’s a Blocktrail?
A Blocktrail is a tiny, self-contained ledger riding inside Bitcoin’s main ledger.
state₀ —sha256→ tweak₀ (GENESIS UTXO) spend → state₁ —sha256→ tweak₁ (UTXO₁) spend → state₂ —sha256→ tweak₂ (UTXO₂) ...
- One live output at a time—Bitcoin’s double-spend rule enforces the sequence.
- SHA-256 of your app’s state (a Git commit, JSON blob, DAG root—anything hashable) becomes the Taproot tweak for the next output.
- Whole history on-chain: fetch the tweaks, re-hash the snapshots, and you can replay every step without trusting anyone.
Result: all the “why” and “when” of a smart contract, with nothing but ordinary transactions.
🧩 Think “Git Commits on Bitcoin”
- Genesis: create
state₀
, hash it, anchor it as the GENESIS transaction. - Next commit: update your data →
state₁
, hash again, tweak again, spend GENESIS. - Repeat: the latest UTXO is your repo HEAD; the chain of tweaks is the commit log.
- No forks: Bitcoin consensus permits only one spend of the live UTXO—linear history guaranteed.
🔧 Blocktrail in (Pseudo) JavaScript
Functions like
createGenesisUTXO
,spendUTXO
, andauditChain
are illustrative.
A real blocktrails-js library is the very next milestone.
// keypair controls the trail (can double as Nostr pubkey) const trailKey = generateKeypair(); // { priv, pub } // helper: hash any client-side state object const hashState = state => sha256(JSON.stringify(state)); // 1. GENESIS let state = { owner: "alice", balance: 0 }; let genesis = createGenesisUTXO({ pubkey: trailKey.pub, value: 546n, // sats tweak: hashState(state) // hash of state₀ }); console.log("GENESIS:", genesis.outpoint); // 2. first update → UTXO₁ state.balance += 100; let utxo1 = spendUTXO({ prev: genesis, privkey: trailKey.priv, value: 520n, // minus fee tweak: hashState(state) // hash of state₁ }); console.log("UTXO₁:", utxo1.outpoint); // 3. another update → UTXO₂ state.owner = "bob"; let utxo2 = spendUTXO({ prev: utxo1, privkey: trailKey.priv, value: 500n, tweak: hashState(state) // hash of state₂ }); console.log("UTXO₂:", utxo2.outpoint); // 4. audit anytime const history = auditChain({ tip: utxo2.outpoint }); history.forEach(step => console.log(step.outpoint));
🏗️ Why You Might Care
Need | Blocktrail Delivers |
---|---|
Smart-contract enforcement | Only one valid next state—no VM required. |
Double-spend safety | Bitcoin consensus blocks competing branches. |
Tamper-proof history | Each state hash is burned into the chain. |
Full replay | Rebuild state locally, match hashes, verify every step. |
Zero extra infra | Just Bitcoin transactions. No gas, no databases. |
🧪 What Can You Build?
- 🔄 Supply-chain docs — every warehouse hashes its manifest, tweaks, spends, passes on.
- ✅ One-person-one-vote — ballot UTXO’s tweak is
sha256(choice)
, binding voter intent to a single spend. - 🎮 Game quests — quest token’s tweak is
sha256(save-game)
, so progress is provably unique. - 📈 Prediction markets — each market state (order book, odds, settlement) hashes into the next tweak; payouts are locked to the final on-chain hash.
- 🧾 Regulator-grade receipts — hash your PDF invoice, tweak, create an immutable audit link.
- 💬 Social attestations via Nostr — hash a Nostr event (or thread root), tweak it into the next Blocktrail output, and anchor every reply or edit to Bitcoin—giving posts, likes, or channel memberships an immutable, on-chain audit path while the conversation itself stays lightweight and off-chain.
🔭 Next Up: blocktrails-js
We’re drafting an open-source JavaScript SDK that will:
- Wrap Bitcoin Core or external signers (Ledger, Trezor, WebLN).
- Provide simple helpers:
createGenesisUTXO
,spendUTXO
,auditChain
. - Ship with wallet components that surface “current tip” and commit hashes at a glance.
- Offer explorer overlays that draw Blocktrails as subway lines on mempool graphs.
The library is the next mile on this trail—stay tuned.
TL;DR
Blocktrails link Bitcoin outputs with Taproot tweaks that are SHA-256 hashes of your app’s state.
Start with a GENESIS output, hash-tweak each new state, spend once, and keep moving.
You get smart-contract guarantees—deterministic execution, audit, provable settlement—with nothing but lean, ordinary Bitcoin transactions.
Top comments (0)