SIM
← NIPS
NIP-0002

Obligation Object Specification

STATUS
FINAL
TYPE
CORE
AUTHORS
NIL Research
CREATED
2023-04-19
VERSION
1.2.0

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.