SPEC.md writes lineage/v0 down as an ordinals metaprotocol: the envelope fields, chain order, authority by verified parents, every rule, ownership by sat. bin/lineage-index.mjs reads lineage events from a real ord server and folds them with the same reducer the lab uses. tools/regtest rehearses the sample on Bitcoin Core regtest with standardness on: the lab's own action code signs on a chain funded only by coins imported from regtest (LocalChain.importCoin), each beat's transactions are broadcast byte for byte and mined, ord indexes them, and --compare checks the same events in the same beats, the same metadata and parents, every inscription in the same output and the same trees. tests/indexer.test.js replays a recorded run. The first rehearsal found that reveals committed to tapscript's re-encoded tapleaf, which real Bitcoin rejects. They now commit to the exact script bytes, and the local chain checks script paths per BIP-341/342, still loading reveals made before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
6.7 KiB
Provenance
Reviewed 2026-10-04 against the exact upstream revisions below. Upstream repositories were inspected outside this worktree; only the small adaptations identified here were imported. Original adapter/UI code is distinct from the upstream projects and is not endorsed by their authors.
| Upstream | Revision | License | Use in v0 |
|---|---|---|---|
| supertestnet/testnet_generator | 498be4cc775ef18e7ff17357d007918518f47b98 |
CC0-1.0 | getVin/getVout object helpers from index.html adapted into src/upstream/primitives.js; converted to ES exports, explicit scripts, explicit final sequence. Inspiration for browser-owned UTXO chain, immediate 50-coin reward, button mining and integrated explorer. The upstream consensus/Script engine and relay system are not imported. |
| supertestnet/inscriptions-online | 470b8bdf29ead319cff9dc119a005cbf58ee598c |
CC0-1.0 | index.html ord envelope array adapted in src/adapters/inscription.js. Modern tapscript API, locally extended with MIME/byte payloads, explicit data-push encoding, 16 KiB cap, tag-3 parent serialization, parent-preserving child reveals and repeated tag-5 CBOR metadata fields. Single commit/reveal, same-wallet destination, no external broadcast or fee services. These extensions and the safe preview UI are original local adapter code. |
| supertestnet/vanilla-js-browser-wallet | 19ae5097f4645bf5b1103a39abc04155a8b072fc |
CC0-1.0 | Conceptual inspiration for minimal vanilla-JS wallet and local signing. No copied implementation. |
| supertestnet/node_faker | 2fae6056a7e93322a00a4150468934542ddc937d |
CC0-1.0 | Evaluated, not imported: its bitcoind-like API obtains data through Electrum connections. That introduces an unnecessary external backend for the self-contained v0. LocalRPC is a new, intentionally partial in-process read facade, not a claim of node_faker compatibility. |
The upstream CC0 legal text is retained unchanged at public/licenses/supertestnet-CC0.txt. Source comments identify the exact adapted code and revisions.
Runtime dependencies are pinned in package.json and package-lock.json:
- @cmdcode/tapscript 1.5.3, Christopher Scott, upstream, CC-BY-1.0. Used for transaction encoding, signing/verification, Taproot commitments and addresses, and the BIP-143 digests and signatures of SegWit payments. Installed package license retained unchanged at
public/licenses/tapscript.txt. Library source is unmodified; Vite bundles/minifies it for the browser. - @noble/curves 1.9.7, Paul Miller and contributors, upstream, MIT. Used for key generation/validation and public keys, and to verify the low-S DER signatures of SegWit payments: secp256k1 for chain and nostr keys, Ed25519 and X25519 for lineage's leaves. License retained at
public/licenses/noble-curves.txt. - @noble/hashes 1.8.0, Paul Miller and contributors, upstream, MIT. Used for synthetic block hashes, BIP-85's HMAC, the leaves' HKDF-SHA256 and the RIPEMD-160 of P2WPKH key hashes. License retained at
public/licenses/noble-hashes.txt. - @scure/base 1.2.6, Paul Miller, upstream, MIT. Used for bech32 npubs and base64 leaf keys. License retained at
public/licenses/scure-base.txt. - @scure/bip32 1.7.0, Patricio Palladino and Paul Miller, upstream, MIT. Used for HD derivation under the BIP-85, BIP-86, BIP-84 and NIP-06 paths. License retained at
public/licenses/scure-bip32.txt. - @scure/bip39 1.6.0, Patricio Palladino and Paul Miller, upstream, MIT. Used for the 24-word lab roots and their seeds. License retained at
public/licenses/scure-bip39.txt.
Five local changes to the engine, all original code in src/adapters/chain.js, tested in tests/money.test.js, with Super Testnet's tests (tests/adapters.test.js) passing unchanged. Orgchain v1.5: the chain also accepts native SegWit (P2WPKH) outputs and SIGHASH_ALL P2WPKH spends, verified per BIP-143, so lineage accounts can hold and send test BTC at their BIP-84 addresses; everything about inscriptions stays Taproot-only. Orgchain v1.6: a coinbase may split the block reward across up to 64 outputs (mineTo; mine still pays one script), so one beat can pay several holdings. Orgchain v1.7: ordinary (non-reveal) spends may take up to eight inputs and outputs (MAX_IO), and their key-path Taproot signatures may carry SIGHASH_SINGLE|ANYONECANPAY (0x83, the sell-order flag), so one transaction can carry a deal: an item, the buyer's coins, the price and change. Reveals keep their two-in, two-out shape and default signatures. Orgchain v1.9: a chain may start from coins imported from a real chain (importCoin; MetadataIndex numbers their sats the same way, importRanges in src/adapters/sats.js), so the regtest rehearsal can broadcast the lab's transactions byte for byte; and a reveal's script path is checked per BIP-341 and BIP-342 against the exact script bytes (tapscriptValid), with tapscript's own check kept as a fallback so labs saved earlier still load. That rehearsal also found that the inscription adapter (src/adapters/inscription.js, adapted from inscriptions-online) committed its reveals to tapscript's encodeScript of a hex script, which re-encodes one-byte pushes, so real Bitcoin rejected them; it now commits to the exact bytes (tapleafOf). Tested in tests/indexer.test.js.
Vite and Playwright are build/test dependencies, not runtime network services. Their installed package notices remain in the locked dependency installation. No unlicensed upstream code was copied.
The bounded JSON/CBOR codec, byte-derived MetadataIndex, trusted event-counter reducer, local API facade and persisted auto-miner schedule are original adapter code. Metadata encoding and endpoint naming were checked against the Ordinals metadata and endpoint references; no ord source code was copied.