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)