Placement is now a rule of lineage/v0, not just how Orgchain inscribes:
an award counts only if it is inscribed on its recipient's own sat, so any
indexer can check that a belt is soulbound. The reducer compares sats
(satOf): the lab's sat numbers, ord's, or, without ord's sat index, its
satpoints, which two inscriptions share exactly when they share a sat. ord
events now carry the sat number when ord has one. Belts inscribed anywhere
else, as before v1.14, are rejected.
A promotion is another reinscription on the same sat, over the belt before
it: each badge keeps its skill's earlier belts, and Inspect shows the
ladder ("re-inscribed over white (beat 5)"). The sample's sol now goes
white, then green. An award and its recipient's own close no longer
conflict within a block, since both spend the recipient's inscription.
Rehearsed again on Bitcoin Core regtest from height 178: sixteen beats and
133 transactions; ord shows sol's sat carrying sol, its white belt and its
green belt, in order, each belt charmed reinscription and vindicated, and
the compare matches. The fixture is re-recorded.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
58 lines
3.2 KiB
Markdown
58 lines
3.2 KiB
Markdown
# 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 <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 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"
|
|
```
|