docs(export): pin admission and attribution rules

This commit is contained in:
Nicholas Dudfield
2026-07-16 19:13:13 +07:00
parent 1ff3ad46c3
commit 5e27d411d1

View File

@@ -22,6 +22,11 @@ account, destination TicketSequence, reserved origin Memo, and bounded timing
fields. Successful apply creates a durable origin-keyed latch. It does not
claim that signatures or a witness already exist.
The target must be foreign. An explicit target `sfNetworkID` equal to the
source network is rejected. When the source network itself uses transaction
encoding without `sfNetworkID`, an absent target `sfNetworkID` is also rejected
because it is ambiguous with self-targeting.
The outer transaction's mandatory `sfLastLedgerSequence` bounds only intent
admission. Successful admission starts a separate publication lifetime on the
new latch; queue delay before admission never consumes that publication window.
@@ -92,9 +97,12 @@ duplicate, misplaced, unsupported, or oversized reserved Memos fail before
signing.
**INV-5 - Live manifests bind committee masters to signing keys.**
The immutable roster names validator master identities. Live share production
and admission use the manifest cache to map a concrete signing key to the
master at its committee position. Missing or ambiguous attribution contributes
The immutable roster names validator master identities. A local producer finds
its position using its configured validator master key and signs with its
configured current validation signing key. Every locally produced or remotely
received share then passes the same admission path, where the live manifest
cache must map that concrete signing key to the roster master at the claimed
committee position. Missing, ambiguous, or mismatched attribution contributes
no share. Manifests do not redefine the stored committee and are never read by
accepted witness apply or historical replay.
@@ -245,6 +253,13 @@ deterministically but lazily removes the expired pending-work link. Expiry does
not revoke released signatures or erase the latch: owner reserve and callback
readiness remain until symmetric completion or explicit erase.
Hook emission is a first-class but separately bounded intent source. One Hook
execution may reserve at most `maxExportsPerHook` exports (currently two), and
those wrappers also consume the normal emitted-transaction allowance. An
emitted `ttEXPORT` must carry an intent and reference a pre-existing committee
digest; it cannot inline-create a committee roster. The protocol constant and
the Hook ABI's `max_export` constant must remain equal.
**INV-13 - Return callbacks remain owner-authorized Imports.**
An XPOP whose proven target transaction carries `sfTicketSequence` takes the
Export callback path only while both Import and Export are enabled. The outer