# 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, belts, 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 ` 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 on the same sat (ord's satpoint) with the charms the lab expects (a belt's are ♻️ reinscription and ❤️‍🔥 vindicated), 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). Beats 4, 5 and 9 award four belts, each by a three-input reveal that puts it on its seat's own sat: sol's launch belt goes white, then green, two reinscriptions on sol's sat. The last four beats sell whole trees: time with its six below it, on an offer whose inputs are the seven coins their ten inscriptions sit in, and acme whole, on an ask that signs one output holding fifteen inscriptions on eleven sats; each tree then splits back at its buyer's keys, one inscribed sat to an output, and ord puts every inscription where the lab does, each belt still on its seat's sat (`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" ```