Files
teahubxyzandClaude Opus 5.5 5a7f11e49d Orgchain v1.14.1: a belt counts only on its seat's own sat
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
2026-10-15 16:10:18 -07:00

19 KiB

lineage/v0

lineage/v0 is an ordinals metaprotocol for lineage holdings: LLCs, the orgs and agents they birth, the belts and decisions on their record, the items they make, and the orgs and holdings that change hands between them. Every event is an inscription. The chain orders the events and proves who was allowed to make each one; the state (the trees) is stored nowhere, and every indexer that applies these rules to the same inscriptions gets the same trees.

Status: test networks only (Orgchain's in-browser chain and Bitcoin Core regtest). The reference implementation is reduce() in src/orgchain/lineage.js; src/indexer/ord.js and bin/lineage-index.mjs run it over a real ord index.

1. Inscriptions

lineage/v0 uses these fields of the ord envelope (inscriptions):

tag field use
7 metaprotocol exactly lineage/v0; inscriptions without it are not lineage's
5 metadata a CBOR map: op and its fields (section 4), strings except a keyring's proof map, in 520-byte pushes (Orgchain keeps it under 2048 bytes)
3 parent the inscription id of the node that authorizes the event; exactly one, except for found
1 content type text/plain;charset=utf-8; the body is a short label such as birth time (a keyring's is its statement), ignored by the rules
2 pointer puts a child's inscription in its own output when the parent is spent first, and a belt on its recipient's sat (section 7)

The body, delegate (tag 11) and properties (tag 17) carry no meaning here; properties may later carry display traits such as a belt's colour, never authority. Nor do ord's charms, such as a belt's (section 7). Unknown odd tags are ignored. Never use unknown even tags: ord treats such an inscription as unbound, so it has no location.

A reveal is a script-path spend whose tapleaf commits to the envelope script's exact bytes (BIP-341). Orgchain's reveals before v1.9 committed to a re-encoded script; real Bitcoin rejects those, and Orgchain's local chain still loads them.

2. Order

Events fold in chain order: block height, then transaction order in the block, then envelope order in the transaction. ord's inscription numbers follow the same order. Unconfirmed events are provisional, and ord indexes none.

Within a block, the miner sets the order. Events that share an authority are chained, because each one spends that authority's inscription, so their order is fixed. Independent events may land in any order, and outside the conflicts in section 6 that changes nothing.

3. Nodes and authority

A node is created by an accepted found (a holding) or birth (an org or an agent), and its id is that event's inscription id. Each node has a kind (holding, org or agent), a status (active or closed), and, below a holding, an edge: derived (the parent holds the child's seed) or adopted (it graduated and holds its own root). A child's index counts its parent's earlier children of the same kind, orgs and agents separately, and is never reused: an org that changes hands (section 5) takes the next index under its new parent, and its old parent keeps the old one, unused.

An event's parent is the node that authorizes it, and it counts only if the inscribing transaction spends that node's inscription: ord records a parent only then (provenance). Indexers use ord's recorded parents, never the raw tag. So acting for a node means holding its inscription, and moving the inscription moves the authority.

4. Events

op parent metadata effect
found none name a holding; no active holding may already have that name
birth an active holding, org or graduated agent name, kind (org or agent, default org) a child; the parent may not already have an active child of that name
award an active holding, org or graduated agent to, skill, belt (white, green or black) to (any other active node, in any holding) holds that belt in that skill, replacing its earlier belt in it; the award counts only if it is inscribed on to's own sat, so the belt is soulbound (section 7)
decide an active node title (required), why (optional) a decision on the node's record
make an active node name, note (optional) an item, made and first held by the node; a node makes one item per name
keyring the node itself, active taproot, segwit, nostr, ethereum, and proof: each key's signature the node's keys are bound to it, replacing its earlier keyring (section 8)
charter the node itself, active; for a series, its master form; jurisdiction, legal, provider and filing, or of for a series the node's legal form, replacing its earlier charter (section 5)
graduate the child's parent, active of (an active child, org or agent, not yet adopted) the edge becomes adopted, and the child becomes a holding of its own (section 5)
close the node itself, active none the node closes, with every active derived descendant; adopted ones stay open
join the moving org or holding itself, active to (the new parent) half of a move: it asks to join to, and moves there with its tree once to adopts it (section 5)
adopt the new parent, active of (the org or holding) the other half: to takes it in, and it moves once it has joined (section 5)

Names (holdings, children, skills, items) are 1 to 40 lowercase letters, digits or hyphens, starting and ending with a letter or digit, because they become domains. Text fields are trimmed, and only their first characters count: 140 for a title, 400 for a why, 280 for a note, 120 for a legal name. Agents birth and award only once they graduate. An event that breaks a rule is rejected: it stays on the chain and changes nothing. Any other op is rejected.

5. Holdings, graduation, moves and charters

A holding is a root: a found, or a child that graduated. When an org graduates, it and its descendants still in the old holding re-root under it, and it joins the holdings. An agent can graduate too: it goes independent, and as a holding of its own it can birth and award. A graduate's parent stays its parent, so where it came from stays on the record, and its old holding's tree keeps a row for it. A graduation event belongs to both holdings. Its keys change with its new root, and so do its derived descendants', so their keyrings retire (section 8).

In Orgchain a graduation is followed by a handoff: the graduate's fresh root claims its inscription, and the derived key that held it countersigns. After that, only the new root can act for it.

An org or a holding can change hands: move to a new parent, in its own holding or in another, with its tree. Both sides must authorize it, and an event has one parent (section 1), so a move takes two events: a join, whose parent is the moving node (so whoever holds its inscription, its buyer after a sale), names the new parent in to, and an adopt, whose parent is the new parent, names the moving node in of. Either may come first, and the second completes the move. A newer join replaces the node's pending one; an adopt waits for its own join. An org moves with its derived tree, and a holding, or a graduate (which holds its own root), moves whole; an agent moves only with the org it sits in. The new parent is an active holding, org or graduated agent, not the moving node nor anything below it by parent links (so no ancestor of a graduate can join it), with no active child of the moving node's name.

When the move completes, the node takes the next index of its kind under its new parent, and it and its derived descendants still in its old holding re-root into the new one. A holding that moves becomes an org of its new parent and leaves the holdings. Its keys now derive from its new parent at its new index, and so do its derived descendants', so their keyrings retire (section 8); graduated descendants hold their own roots and stay where they are, their parent links pointing into the tree that moved. Its charter goes with it: a series that leaves its master's holding lapses, and so does a sole proprietorship, since an org is not a person. The move records both halves, and each half belongs to both holdings, so the miner may put them in either order within a block. A graduation of a node with a pending join is rejected.

A charter records a node's legal form: what it is off chain. Legal form is an attribute, not an identity, so a node keeps its inscription, history and keys whatever form it takes, and the newest charter counts.

form what it is who may take it chartered by
sole a person trading under their own name a holding or an agent the node
llc a company of its own (for a derived org, one its parent's line controls) a holding, an org or a graduated agent the node
series-llc an LLC that can hold series a holding, an org or a graduated agent the node
series a cell of an ancestor's series LLC an org that ancestor, its master
corp a corporation a holding, an org or a graduated agent the node

jurisdiction is an ISO 3166 code such as US-WY, required for an LLC, a series LLC or a corporation and optional for a sole proprietor; a series takes its master's. legal is the legal name, provider the name of whoever formed it (by the name rule), and filing the SHA-256 of the filed documents, in hex: metadata is public, so a charter carries a hash, never the documents. A series charter names the series in of; its master must be an ancestor whose charter is a series LLC at the time.

Whether a charter stands is read off the tree as it is, not stored: a charter stands while its node is active, and a series also needs its master active, still a series LLC, and in the same holding as the series. A series that graduates, or whose master closes or stops holding series, lapses. Because standing is derived, a charter and a graduation in the same block land the same way in either order. Control follows the inscription, whatever the form.

6. Order-sensitive conflicts

Where independent events conflict within one block, the block's order decides. These are the cases: a close and an act by one of its derived descendants; an award and a close above its recipient that closes it too (the recipient's own close is chained with the award, since both spend its inscription); two foundings with the same name; a keyring and a graduation or close that retires it; two keyrings that list the same key; a join or adoption and a graduation, close or birth that changes the moving node or its new parent. Orgchain keeps a keyring and the graduation that would retire it a block apart, and it freezes a tree that is listed or sold (section 7), so nothing in it acts, and nothing above it graduates or closes it, before its buyer adopts it.

7. Ownership, items and deals

Whoever controls the output that holds an inscription's sat holds that node or item; for indexers that is ord's satpoint. Items and nodes move like any inscription, and one output may hold several. A deal is not an event: ord sees the lot move, and nothing else needs indexing. Orgchain makes deals both ways OpenOrdex does, on a lot that is an item, an org with its tree, or a holding, whole:

  • An offer is a buy order: one transaction with every output the lot sits in and the buyer's coins in, and the lot to the buyer as one output, the price to the seller and the buyer's change out. The buyer signs its inputs first (SIGHASH_ALL), and the lot's holders countersign theirs.
  • An ask is a sell order: the holder signs the lot's input alone with SIGHASH_SINGLE|ANYONECANPAY (0x83), which commits to that input and to the output at its index, the price to the seller, and to nothing else. Any buyer completes it: a small coin of its own, the lot and its funds in; the lot to the buyer's key and the price to the seller out. The small coin leads so that the lot's sats land in the buyer's output, since sats move first in, first out. One input is one output, so a tree is bundled into one before it is listed.

A tree is a node and its active derived descendants, with the items they hold. An org's seller is its parent; a holding's is its owner, whoever holds its root (in Orgchain, the lab wallet), and the price goes to the owner's key. A sold node joins its buyer's tree by join and adopt (section 5); until then the trees still draw it with its seller. In Orgchain a deal on a tree goes like this:

  • Cash-free: before it lists a tree, or accepts an offer on one, the seller takes home the money in it, every node's SegWit coins and gas tank, so the price is for the tree and its items.
  • Listing bundles it: one transaction spends every output that holds the inscription of one of its nodes or items, the lot's own first, and pays them into one output at the lot's key, with a coin of the seller's last for the fee, so no inscription's sat pays it. The ask signs that output, and withdrawing the ask splits it back.
  • After the join and the adopt, the buyer splits the output it bought: one transaction with an output for each inscribed sat, running from it to the next one (the first from the output's start), to the new key of the node whose inscription is on it, or, for an item, to the new key of the node that held it, which the deal records as its layout. A sat's inscriptions never part, so a node's belts stay on its sat.
  • While a tree is listed or sold it is frozen: nothing in it acts or moves money, nothing above it graduates or closes it, nothing in it sells alone, and a listed holding mines nothing. The records of a tree's events (decisions, keyrings and the like) are not part of it: they carry no authority, and stay where they landed. Its nodes' belts ride their sats (below), so they come along.

A belt is soulbound. An award counts only if it is inscribed on to's own sat, the one that carries to's inscription, so the belt goes wherever to goes and is never a lot. Two inscriptions are on one sat when ord gives them the same sat number, or, without its sat index, the same satpoint, which they then share for good. Inscribing on that sat means spending the output that holds it, so to's holder signs, accepting the belt. Orgchain's reveal spends three outputs: that one; the issuer's, the parent; and the commit, which pays the fee. It returns the first two unchanged, and its pointer (tag 2) is the offset of to's sat in the first. A newer belt in a skill is another reinscription on the same sat, over the ones before, so the sat carries the whole ladder in order: white, then green, then black. ord charms each belt ♻️ reinscription and ❤️‍🔥 vindicated: a pointer, or an envelope past the first input, would have cursed it before the jubilee. Belts inscribed anywhere else, as Orgchain's were before v1.14, do not count.

8. Keys and keyrings

Indexers need no keys to fold the trees. Keys say where a node's inscription is expected to live, and who can sign for it. Each holding has a 24-word root (BIP-39), and an org's seed is BIP-85 from its parent's (m/83696968'/39'/0'/24'/i') until it graduates, and from its new parent's at its new index once it moves (a holding that moves becomes an org, and its old root no longer signs for it). An org is account 0 of its seed and its agents are accounts 1 to n. Each account holds its inscription at its BIP-86 Taproot address (m/86'/coin'/account'/0/0), keeps its money at BIP-84 SegWit, and has a NIP-06 npub (m/44'/1237'/account'/0/0) and an Ethereum address (m/44'/60'/account'/0/0). An org's Ethereum key, at account 0, is its legal-control key: the one that holds its entity NFT.

A keyring publishes a node's keys, so other chains and registries can find them without deriving anything. Its parent is the node itself. Its metadata lists four keys, each written the way its chain writes it, and a proof from each:

field key proof, in proof under the same name
taproot the Taproot address that holds the node's inscription, lowercase a BIP-322 simple signature, base64
segwit its P2WPKH address, lowercase, on the same network a BIP-322 simple signature, base64
nostr its npub the BIP-340 signature, in hex, of the NIP-01 event {pubkey, created_at: 0, kind: 1, tags: [], content: statement}
ethereum its address, in EIP-55 case an EIP-191 personal_sign signature: 0x, then r, s and v in hex

Every proof signs the same statement, one line each:

lineage/v0 keyring
node: <the node's inscription id>
taproot: <address>
segwit: <address>
nostr: <npub>
ethereum: <address>

The lines are joined by a line feed, with none after the last. Each key signs the way its own wallets sign a message, so any wallet can make a proof and any library can check one. A Taproot proof is a 64-byte signature (SIGHASH_DEFAULT) or a 65-byte one ending in SIGHASH_ALL; a P2WPKH proof is a low-S DER signature with SIGHASH_ALL and the compressed key. The inscription's body is the statement, for people to read; the rules rebuild it from the metadata.

A keyring is rejected unless every key is well formed and every proof checks out. While a node's keyring stands, its keys are bound to that node, and a keyring that lists a key bound to another node is rejected; a key binds once, whatever network it is written for. A node's newer keyring replaces its older one and frees the keys it no longer lists. A graduation retires the keyrings of the graduate and its derived descendants, since their keys change with the new root, a move retires those of the moving node and its derived descendants, since their keys change with its new parent, and a close retires the keyrings of the nodes it closes. A retired keyring binds nothing, so the node publishes a new one.

Lineage's key tree page also makes an agent's keyring as a nostr event (kind 30078, d = lineage/keyring/v0), signed by its npub and listing its leaves too. The inscription is the chain's record, with a proof from every key.

9. Versions and other chains

Tag 7 carries the version. A new version is a new string with its own rules, which v0 indexers ignore. The events and the rules are chain-agnostic. What another chain must supply is its own proof of order and of authority (a signature by the node's key where nothing is spent). Each holding's events would live on one home chain, and its nodes' keyrings (section 8) bind their keys on the others. Another chain's key joins the keyring in a new version, proven the way that chain's own wallets sign a message.

10. Conformance

tools/regtest rehearses Orgchain's sample on Bitcoin Core regtest, byte for byte, keyrings, belts, asks, offers and whole trees changing hands included (bundled outputs and their splits too), and bin/lineage-index.mjs --compare checks that ord and the lab tell the same story: the same events in the same beats, the same metadata and parents, the same trees and keyrings, and every inscription on the same sat (ord's satpoint), with the same ♻️ reinscription and ❤️‍🔥 vindicated charms. tests/indexer.test.js replays a recorded run. tests/keyring.test.js checks the proofs against BIP-322's published vectors, the key tree page's Ethereum vector, and values cross-checked with bip322-js, ethers and nostr-tools.