Files
orgchain/tools/regtest
teahubxyzandClaude Opus 5.5 6998ae47aa Orgchain v1.10: keyrings, each key signing in its own chain's standard
A new lineage/v0 op binds a node's keys in one inscription whose parent is the
node itself: its Taproot and SegWit addresses, its npub and its Ethereum
address. Every key signs the same statement the way its own wallets sign a
message: BIP-322 simple signatures for the Bitcoin addresses, a NIP-01 note
(kind 1, created_at 0) for the npub, EIP-191 for Ethereum. The reducer checks
every proof, binds a standing keyring's keys to its node, lets the newest
keyring replace the older, and retires keyrings at a graduation (the keys
change with the new root) and at a close.

Every account gets an Ethereum key at m/44'/60'/account'/0/0; an org's, at
account 0, is the key tree page's legal-control key and matches its published
vector. Keyring is the ninth verb; Inspect shows each node's keyring and the
statement its keys signed, and Reveal its Ethereum private key. The sample
publishes three keyrings, and lineage's retires when it graduates.

Tests pin BIP-322's published vectors and values cross-checked with
bip322-js, ethers and nostr-tools. The regtest rehearsal, rerun with five
keyrings, confirmed 89 transactions on Bitcoin Core; ord's 26 events fold to
the same trees and keyrings, every proof checked from ord's copy, and the
fixture is re-recorded.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 10:48:28 -07:00
..

Regtest rehearsal

Lineage is an ordinals metaprotocol (SPEC.md). This folder checks that on real Bitcoin Core and real ord: the lab's own action code makes the yolopreneur sample, keyrings included, Bitcoin Core (regtest, standardness on) accepts its transactions byte for byte, ord indexes the inscriptions, and the same reducer folds ord's view back into the same trees.

Regtest is local and private: nothing is downloaded, blocks are mined on demand, and the data folders stay a few MB. Test coins only.

Start

brew install bitcoin ord
mkdir -p ~/lineage-regtest/bitcoin ~/lineage-regtest/ord
cp tools/regtest/bitcoin.conf ~/lineage-regtest/bitcoin/
bitcoind -datadir=$HOME/lineage-regtest/bitcoin -daemon
bitcoin-cli -datadir=$HOME/lineage-regtest/bitcoin createwallet funder
ord --regtest --bitcoin-data-dir $HOME/lineage-regtest/bitcoin --data-dir $HOME/lineage-regtest/ord \
  server --address 127.0.0.1 --http-port 8088 --polling-interval 1s &

bitcoin.conf keeps mainnet's standardness rules (acceptnonstdtxn=0) and lowers the minimum relay fee to 0.1 sat/vB, since the lab pays a fixed 500 sats per transaction.

Rehearse, index, compare

node tools/regtest/rehearse.mjs              # nine beats; saves the lab to tools/regtest/out/lab.json
node bin/lineage-index.mjs --from 100 --compare tools/regtest/out/lab.json
node tools/regtest/record.mjs                # refresh tests/fixtures/regtest-rehearsal.json (public data only)

The rehearsal funds the lab wallet with real regtest coins (LocalChain.importCoin) and pays every local beat to an unspendable key, so nothing it signs spends a coin regtest doesn't have. After each beat it broadcasts that beat's transactions and mines one regtest block. --compare checks that every event landed in the same beat with the same metadata and parent, that every inscription sits in the same output, and that both fold into the same trees. Within a block the miner may order independent events differently from the lab; that changes nothing (SPEC.md, section 2).

out/ holds the lab backup, test keys included, and is not committed.

Stop

bitcoin-cli -datadir=$HOME/lineage-regtest/bitcoin stop
pkill -f "ord --regtest"