Orgchain v1.7: items, standing offers and the first deal; a Mainnet setting

The chain takes ordinary spends of up to eight inputs and outputs, whose
key-path signatures may carry SIGHASH_SINGLE|ANYONECANPAY (0x83); reveals
keep their two-in, two-out shape. A new make op records an item, an
inscription its maker holds. Any node can offer test BTC for an item another
node holds, in any holding: the buyer's SegWit key signs the whole deal, the
offer stands in the lab, and the holder accepts by countersigning the item's
input, so the item and the payment swap in one transaction. Offers go stale
when a promised coin moves or a side re-keys or closes, and payments spend
unpromised coins first. Sends take up to eight coins. Mainnet is a third
mining setting: no holding mines, beats pay the lab wallet, and holdings are
funded from it. The sample ends on lineage's open offer for sol's launch-kit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
This commit is contained in:
teahubxyzandClaude Opus 5.5 committed 2026-10-15 00:32:29 -07:00
1 parent 32e8131500
commit 69a97544da
15 files changed
+764 -111

No files matched your search

+26 -10
View File
@@ -7,8 +7,9 @@ inscription on a private toy chain in your browser, and its parent inscription i
chain itself records who did what, and when.
- **Found** a holding (a root: the LLC). **Birth** orgs and agents under any org. **Award** a belt (one skill, one
seat). **Decide** (a decision on a node's record). **Graduate** an org (its edge flips from derived to adopted).
**Close** a node (derived children close with it; graduated ones hold their own roots and stay open).
seat). **Decide** (a decision on a node's record). **Make** an item (an inscription its maker holds, and can sell).
**Graduate** an org (its edge flips from derived to adopted). **Close** a node (derived children close with it;
graduated ones hold their own roots and stay open).
- **Time.** A beat is a block. At the default tempo each act is its own beat; at 10, 30 or 60 seconds, acts are cued and
land together on the next beat; on manual they wait for *Beat now*. The slider and *Replay* show a holding as it
stood at any beat.
@@ -16,8 +17,10 @@ chain itself records who did what, and when.
every active holding mines, and each beat's 50 test BTC splits pro rata by hashrate, a dial from 0 to 9 on each
holding (1 unless set), one coinbase output per holding; under *Last act* the holding behind the latest act or send
takes the whole beat (with nothing cued, *Beat now* pays the one being worked in), so at a timed tempo acts race
for the next beat. **Send** moves test BTC from any active node to any other, in
its holding or another, signed by the sender's BIP-84 key: at most two coins in, at most 50 test BTC out, and the
for the next beat; under *Mainnet* no holding mines, as on mainnet: beats pay the lab wallet, standing in for the
world's miners, and **Fund** moves test BTC from it to a holding, the way you'd fund a seed from a wallet you
already have. **Send** moves test BTC from any active node to any other, in
its holding or another, signed by the sender's BIP-84 key: at most eight coins in, at most 50 test BTC out, and the
toy chain's fixed 500-sat fee. Sends land like acts, at once or cued, and *Beat now* mines a beat even when nothing
is cued. A graduation moves each re-keyed node's money to its new address along with its inscription. Balances
follow the slider, the timeline lists every reward, send and gas top-up, and Inspect has the exact amounts and the
@@ -27,6 +30,13 @@ chain itself records who did what, and when.
up from its own money 0.0001 test BTC at a time. A node with neither can't act until someone sends it money, and a
graduating org pays for the claim on its new root itself. The lab wallet pays only for foundings (a holding owns
nothing until it mines) and for holdings that predate lab keys.
- **Deals.** Any active node can **Offer** on an item another node holds, in any holding: OpenOrdex's buy order, with
a price. Its SegWit key signs the whole deal at once (SIGHASH_ALL): the item and its own coins in; the item to its
Taproot key, the price to the holder's SegWit address and its change out. Nothing reaches the chain until the
holder **Accepts** by countersigning the item's input, so the offer stands, kept in the lab like a PSBT in an
order book, until it is accepted, withdrawn, or goes stale (a coin it promised moved, or a side closed or re-keyed).
The buyer pays the fee; a price of 0 is a free claim. Payments spend coins no offer has promised first. Accepted
offers stay as the deals' receipts, and the timeline and Inspect show each deal (`src/orgchain/offers.js`).
- **One interpretation.** `src/orgchain/lineage.js` folds `lineage/v0` events into trees, and vets every act before
anything is signed. Events it rejects stay on the chain and show as rejected; they just don't change the tree.
- **Keys.** Each holding gets its own 24-word lab root, and every node has lineage's keys at its place in the tree
@@ -46,8 +56,9 @@ chain itself records who did what, and when.
BIP-380 checksums), and its leaves' private keys (OpenSSH, DKIM, WireGuard, PKCS#8, Headscale). Hidden again on
every selection; lab keys only.
Test coins and test keys only: a local chain, the lab wallet (the faucet that pays for foundings) and each holding's lab
root, kept in this browser (`localStorage`, key `orgchain:lab:v1`). Nothing here is a real key; minting a real root is
Test coins and test keys only: a local chain, the lab wallet (the faucet that pays for foundings, and under *Mainnet*
the wallet holdings are funded from) and each holding's lab root, kept in this browser (`localStorage`, key
`orgchain:lab:v1`). Nothing here is a real key; minting a real root is
the operator's call.
## Events
@@ -60,11 +71,14 @@ the operator's call.
| `birth` | the parent | `name`, `kind` (`org` or `agent`) |
| `award` | the issuing org or holding | `to`, `skill`, `belt` (`white`, `green`, `black`) |
| `decide` | the deciding node | `title`, `why` |
| `make` | the making node, which then holds the item | `name`, `note` |
| `graduate` | the child's parent (then the handoff to the child's fresh root) | `of` |
| `close` | the node itself | none |
Names are domain labels (lowercase letters, digits, hyphens). Org and agent indices count separately and are never
reused.
reused. The metadata says what an event means; the parent it spends proves who was allowed to make it; who holds an
item afterwards is the chain's to say, never the metadata's. Metadata is public and permanent: an item's note is for a
hash or a link, never a secret or a document.
## Build and test
@@ -83,9 +97,11 @@ Deploy: copy `dist/` to `ventures/lineage/orgchain/` on `teahubxyz/time` `gh-pag
## Built on Super Testnet
The chain, wallet, inscriptions, metadata and index (`src/adapters`, `src/upstream`, with `src/storage.js` and
`src/miner.js`) are [Super Testnet](https://supertestnet.lol)'s, with their tests (`tests/adapters.test.js`) and two
additions: the chain also moves native SegWit (P2WPKH) payments, BIP-143 signatures included, and a coinbase may
split its reward across up to 64 outputs (`tests/money.test.js`).
`src/miner.js`) are [Super Testnet](https://supertestnet.lol)'s, with their tests (`tests/adapters.test.js`) and three
additions: the chain also moves native SegWit (P2WPKH) payments, BIP-143 signatures included; a coinbase may split
its reward across up to 64 outputs; and ordinary spends take up to eight inputs and outputs, whose key-path
signatures may carry SIGHASH_SINGLE|ANYONECANPAY (0x83, the sell-order flag), while reveals keep their two-in,
two-out shape (`tests/money.test.js`).
See `PROVENANCE.md` and `public/licenses/`. Lineage's key derivation and the claim and
countersign handoff (`src/adapters/lineage-keys.js`, `src/adapters/handoff.js`, with their spec vectors in
`tests/keys.test.js`) come from the `tree` branch. The full lab (explorer, delegates, recursion and