ABI Maintenance#
The on-chain Rust source remains authoritative. make idl-check derives the
complete public wire inventory from program/src/instruction.rs::discriminator
and compares its names and bytes with the explicitly non-executable
idl/seesaw.json metadata. Human-readable wire documentation lives in
spec/IX.md. The gate enforces:
- all 73 live public wire tags are present exactly once in metadata, with
reserved holes, permanent Reclaim tombstones and internal
LOGexcluded; - standard
instructions[]contains nine modeled instructions:CreateMarket,SnapshotEnd,ExpireMarket,TopUpExternalProgressReserve,BeginReclaimExternalMarketV1,OpenReclaimExternalMarketV1,ResolveExternalMarketWithReclaimV1,HaltExternalMarketWithReclaimV1, andExtendExternalCloseWithReclaimV1; - generated clients expose builders only for those nine models and do not expose an arbitrary-discriminator constructor;
- each modeled payload and account list agrees with current Rust processors and shared conformance vectors.
RecoverSpline (0x30) is live. 0x31–0x32 are reserved holes;
0x38–0x3F, 0x4A–0x4C and 0x4F are permanent tombstones and cannot be
restored as callable legacy models.
Error definitions are likewise derived from program/src/error.rs. Account
layouts, argument codecs, and client builders are generated from the canonical
IDL where applicable and protected by deterministic regeneration,
account-reader, and shared conformance-vector gates.
Release gate#
Every candidate must pass pnpm --filter @seesaw/client-gen generate:check,
pnpm --dir idl validate, and node scripts/account_reader_contract.mjs --check.
These checks prevent stale generated output, callable unmodeled instructions,
or drift between the wire inventory and current Rust sources.