Oryn relies on contracts to enforce settlement, and services to coordinate the correct parameters.

Core guarantees

GuaranteeEnforced by
Only the secret holder can claim before expiryVault checks sha256(preimage) == commitmentHash.
Funds can be cancelled after expiryVault checks block.number >= depositedAt + expiryBlocks.
A vault settles onces_settled blocks claim-after-cancel and cancel-after-claim.
Vault addresses are parameter-boundFactory salt includes chain ID and escrow parameters.
Hop destinations cannot be redirectedclaimHop verifies recipient-signed hop authorization.

What the contracts do not guarantee

Contracts cannot guarantee:
  • quote quality
  • solver availability
  • RPC uptime
  • watcher latency
  • frontend correctness
  • that a user chose the intended destination address
That is why integrators should display clear order state and give users transaction hashes.

Service-level checks

ServiceImportant checks
Orderbookquote exists, quote is not expired, quote is not consumed, amounts match exactly, commitment hash is unique
Relayersecret length, preimage hash, vault deployment, settled state, hop route fields, hop signature, dedupe lock
Watcherevent source, block number, transaction hash, matching vault address

Integration rules

  • Generate secrets with secure randomness.
  • Never reuse a commitment hash.
  • Do not reveal the secret until the destination side is ready to claim.
  • Treat orderbook state as indexed chain state, not a replacement for transaction verification.
  • For hop routes, sign the exact hop payload the vault verifies.
If your app handles secrets, logs are part of your threat model. Avoid logging raw preimages in client analytics, server traces, crash reports, or support tools.