Git commits anchored to Bitcoin via Blocktrails
git-mark binds Bitcoin UTXOs to Git commits using elliptic curve tweaking. Each commit hash becomes a tweak that derives a new pubkey, creating a cryptographic chain linking your repository history to Bitcoin.
Git-mark uses single-use seals to create a two-way binding between Git and Bitcoin:
txo:<network>:<txid>:<vout>?amount=<sats>&pubkey=<hex>[&commit=<git_hash>]
| Field | Description |
|---|---|
network | Bitcoin network (tbtc4, mainnet, signet) |
txid | Transaction ID (64 hex chars) |
vout | Output index |
amount | Value in satoshis |
pubkey | X-only pubkey (64 hex chars) |
commit | Git commit hash (40 hex chars, absent for genesis) |
# Install
npm install -g git-seal
# Initialize in your repo
git mark init
# Set your private key
git config nostr.privkey <64-char-hex>
# Create genesis with your first UTXO
git mark genesis --txid <txid> --vout 0 --amount 1000000
# Make changes and commit
git commit -m "initial state"
# Anchor the commit to Bitcoin
git mark advance --txid <new-txid> --vout 0 --amount 999000
# Show current state
git mark show
# Verify chain integrity
git mark verify
Paste TXO URIs (one per line):
import { Gitmark } from 'git-seal';
// Create instance with private key
const gm = new Gitmark(privateKey, 'tbtc4');
// Initialize genesis
const genesis = gm.genesis(txid, vout, amount);
console.log(genesis.address); // tb1p...
// Advance with git commit
const result = gm.advance(commitHash, newTxid, vout, amount);
console.log(result.uri); // txo:tbtc4:...
// Get current address
console.log(gm.address());
// Export TXO URIs for .well-known/txo/txo.json
const uris = gm.exportTxoJson();
// Verify a chain (no private key needed)
const valid = Gitmark.verify(uris);
if (!valid.valid) console.error(valid.error);
.well-known/
└── txo/
└── txo.json # Array of TXO URIs
MIT