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
30 lines
2.6 KiB
Markdown
30 lines
2.6 KiB
Markdown
# AGENTS.md
|
|
|
|
Orgchain is lineage's app for creating and operating lineage holdings on Super Testnet's toy chain.
|
|
|
|
- Test-only, always: no mainnet funds, no hidden signing, no custody, and nothing presented as a real key.
|
|
- Lineage semantics live in one place, `src/orgchain/lineage.js`. The UI never interprets events itself, and every act
|
|
is vetted by that reducer before it is signed. A new op means a reducer change, its tests and the README's table.
|
|
- The engine (`src/adapters`, `src/upstream`, `src/storage.js`, `src/miner.js`) is Super Testnet's. Compose with it
|
|
rather than rewriting it, and keep its tests passing. Preserve upstream licenses and provenance. Its local
|
|
changes are P2WPKH payments, a coinbase split across up to 64 outputs, and ordinary spends of up to eight inputs
|
|
and outputs whose key-path signatures may carry 0x83, all in `src/adapters/chain.js` (PROVENANCE.md); keep them
|
|
small and tested.
|
|
- Money lives in `src/orgchain/money.js`: beats pay the holdings (split by hashrate, or all to the last act; under
|
|
Mainnet none mine, and the lab wallet funds them), sends spend SegWit coins only, so an inscription can never leave
|
|
as change, and balances are read off the chain, never stored. Gas (`src/orgchain/actions.js`): every act is paid by
|
|
the actor's own keys and checked before anything is signed; the lab wallet pays only for foundings and for holdings
|
|
that predate lab keys.
|
|
- Deals live in `src/orgchain/offers.js`: the buyer pre-signs the whole transaction and the holder countersigns.
|
|
An offer is signatures kept in the lab, never chain state, and who holds an item is read off the chain, never
|
|
from metadata. Inscription metadata is public and permanent, so never put a secret in it (item notes included).
|
|
- Keys follow the tree (`src/orgchain/keys.js`): store roots only (one per holding, one per graduated org) and derive
|
|
every other key from its position. Every act is signed by whichever key holds the authorizing inscription.
|
|
- A node's chain key is its account's BIP-86 Taproot key (`m/86'/1'/account'/0/0`); SegWit is BIP-84 at the same
|
|
account and holds its money. Leaves are HKDF-SHA256 (salt `lineage/v0`) and must stay byte for byte with lineage's key tree page;
|
|
`tests/keys.test.js` holds values read off that page.
|
|
- Secrets show only behind Reveal, reset on every selection, and match the key tree page byte for byte (the tests pin
|
|
hashes of the page's own output).
|
|
- The page makes no network requests; keep it that way (the deployed CSP sets `connect-src 'none'`).
|
|
- Before shipping: `npm test`, `npm run build`, `npm run test:e2e`.
|