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.