Files
orgchain/tools/regtest
teahubxyzandClaude Opus 5.5 74ed801176 Orgchain v1.13: whole trees change hands
An org now changes hands with its tree, the derived orgs and agents below
it and the items they hold, and a holding changes hands whole, sold by its
owner, whom the lab wallet plays (the price goes there). Sales stay
cash-free: the money in the tree, every gas tank included, goes to the
seller first, and the items go with the tree.

An ask signs one input, so listing a tree bundles every inscription in it
into one output at the lot's key; an offer spends every output the tree sits
in and merges them. After the join and the adopt, which now move a holding
too (it becomes its buyer's next org), the buyer splits the output back, one
inscription to an output at its new key, each item with the node that held
it, by the layout the deal recorded. A listed or sold tree is frozen whole:
nothing in it acts, sends, is funded or sells alone, nothing above it
graduates or closes it, and a listed holding mines nothing. Graduation roots
are kept by graduation event, since a node can graduate, move and graduate
again. Transactions take up to 64 inputs and outputs.

Rehearsed on Bitcoin Core regtest from height 144: sixteen beats and 131
transactions, time with its six below it bought on an offer, and acme sold
whole on an ask, eleven inscriptions in one output, then split again; ord
puts every inscription in the same output as the lab.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 14:51:52 -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, asks, offers and whole trees changing hands 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              # sixteen 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)

A chain can hold several rehearsals. Each one founds its own holdings, so to compare or record only the latest, pass the height of its funding block: --from <height> to the index, and the same height after the lab to record.mjs.

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, a join and its adoption included; that changes nothing (SPEC.md, sections 2 and 5). The last four beats sell whole trees: time with its six below it, on an offer whose inputs are their seven inscriptions, and acme whole, on an ask that signs one output holding eleven; each tree then splits back at its buyer's keys, one inscription to an output, and ord puts every one where the lab does (SPEC.md, section 7).

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"