Obligation Object Specification
1. ABSTRACT
Specifies the canonical Obligation Object (Ω), the core unit tracked, routed, and netted by the protocol.
2. MOTIVATION
Once an intent is accepted, it must be compiled into a durable object that the network can route, hold state on, and eventually net against other obligations. This proposal fixes that object's shape.
3. TERMINOLOGY
Obligation Object (Ω) — the durable, routable, nettable unit compiled from an accepted Settlement Intent.
4. SPECIFICATION
Ω {
id: ObligationID
originDomain: DomainID
settlementDomain: DomainID
notional: Decimal
unit: CurrencyCode
expiry: Timestamp
executionClass: P2H | H2H | H2P
disclosurePolicy: MINIMAL | STANDARD | DISCLOSED
finalityCondition: WitnessQuorum
state: ObligationState
}
An Obligation Object's state field MUST only transition along the paths defined in NIP-0021 (State Transitions). Compilers MUST assign a globally unique id prefixed Ω-.
5. INVARIANTS
`notional`, `unit`, `originDomain`, and `settlementDomain` are immutable once compiled. `state` MUST only transition along paths defined in NIP-0021.
6. FAILURE CONDITIONS
A compiler MUST reject compilation if the source intent fails NIP-0001 validation. Any mutation of an economic field after compilation invalidates prior graph analysis referencing that object.
7. SECURITY CONSIDERATIONS
Because Ω objects are the unit netted in NIP-0005, any mutation of `notional` or `unit` after compilation invalidates prior graph analysis. Implementations MUST treat compiled Obligation Objects as immutable except for `state` transitions.
8. REFERENCE IMPLEMENTATION
The reference implementation is the NIL-0 simulation network. No production implementation of this proposal exists; behavior described here is normative for the simulation only.