Skip to main content

Real-world asset settlement

Real-world assets (RWA) — invoices, equipment, real estate, milestones, audit reports — bring off-chain truth into on-chain finance. The hard part is the same as in insurance: the chain can't see whether the deliverable actually showed up. OMY provides the verification primitive.

The pattern​

┌──────────────────────────────────────────────────────┐
│ Escrow contract on TON │
│ │
│ Collateral: $50,000 USDT │
│ Milestones: │
│ M1 — Site inspection signed off by Auditor A │
│ M2 — Materials delivered (POD from courier) │
│ M3 — Final assembly verified by Auditor B │
│ M4 — Certification issued by Authority C │
│ │
│ On each milestone: ask OMY, release payment │
└──────────────────────────────────────────────────────┘

Each milestone is a yes/no question. The escrow contract asks one at a time; when the oracle returns YES, the next tranche of payment releases to the counterparty.

Example: equipment delivery​

Project Atlas-7 — A buyer escrows $50,000 USDT against a 4-milestone equipment-purchase contract with a vendor.

MilestoneTrigger questionVerification source
M1 Site inspection"Did Auditor A sign off on site preparedness by 2026-04-15?"Signed PDF report; URL pinned in question
M2 Materials delivered"Did courier ABC mark POD complete for shipment X by 2026-05-15?"Courier's tracking page
M3 Final assembly"Did Auditor B verify equipment commissioning per spec by 2026-06-15?"Signed acceptance report
M4 Certification"Did Authority C issue Certificate X by 2026-06-30?"Public registry lookup

For each milestone:

  1. Escrow contract calls RequestResolution with the milestone question
  2. OMY assertion lifecycle runs (propose → liveness → finalize)
  3. On OracleResult:
  • YES → release next tranche to vendor
  • NO → halt escrow, optionally trigger dispute / refund

If the project completes all 4 milestones, the full $50,000 has flowed to the vendor. If a milestone fails (NO), the buyer keeps the remaining escrow — possibly with a discretionary refund window before final lockout.

Why RWA is harder than prediction markets​

Three properties that make RWA settlement uniquely demanding:

  1. The questions are more subjective. Did the inspector sign off "properly"? Was the equipment "to spec"? Reasonable people disagree. Mitigated by referencing specific documents + signing authorities, but the residual risk is real.
  2. The stakes are large. A single milestone can release tens of thousands of USDT. Bond sizing must match.
  3. The dispute window is long. Off-chain verification of a complex milestone may take days. 7-day liveness is not unusual.

Bond sizing​

For RWA escrow, the bond should reflect the value of the milestone, not the average pool size:

milestone_bond = max(
min_bond_floor, // e.g., 1 000 USDT for any milestone
5% × milestone_value // 5% of the tranche being released
)

For a $25,000 milestone tranche, bond = $1,250. Beyond MAX_BOND_CAP (10,000 USDT), OMY delegates security to the resolver — so high-value milestones should route to a resolver chosen for that escrow specifically (a senior committee, or DVM stake escrowed against this market).

Question templates for RWA​

The single most important integration detail. RWA questions get disputed when they leave room for interpretation. Some templates that work:

Document-signature pattern​

"Did the document at https://escrow.example/m1-report.pdf (SHA-256: abc...123) contain a valid signature from Auditor A's GPG key xyz... and a recommendation field equal to "approved", as of 2026-04-15 23:59 UTC?"

Why it works: the document URL is fixed, the hash is fixed, the field name is fixed, the signing key is fixed, the deadline is fixed. There's exactly one correct answer.

Authority-registry pattern​

"Does the public registry at https://reg.example.gov/cert/X show that Certificate X was issued to entity Acme Corp before 2026-06-30 00:00 UTC?"

Why it works: registry, query, entity name, deadline all specified.

Performance-threshold pattern​

"Did Auditor B's commissioning report (URL + hash) certify that the equipment passed all 12 test cases in spec V1.2 (URL + hash) within 30 days of the M2 completion timestamp?"

Why it works: report URL, spec URL, test count, time bound all specified.

See Question templates for the full guide.

Anti-fraud considerations​

import {DocFeatures, DocFeature} from '@site/src/components/docs/DocFeatures';

Don't trust "the auditor said it's done". Pin the document hash + signing key in the question. Auditor must sign within the verification window. If the milestone has multiple verifiable sources (registry + auditor + public news), reference all of them. Disagreements should be rare and surfaced. The auditor is now a trust assumption. Treat them like a multi-sig signer — vet, document, and budget for the case where they're compromised. A NO answer might mean "the auditor said no" OR "the verification source was unreachable". Distinguish — your contract should treat these differently.