OFT compatibility
Use the standard IOFT quote and send surface on each asset's local facade. Do not treat that facade as an independently administered LayerZero OApp.
| Surface | Omnisea behavior | Integration rule |
|---|---|---|
| quoteOFT / quoteSend / send | Standard IOFT call shapes | Call the local adapter or OFT, not router.send |
| token() | Underlying ERC-20 on origin; OFT itself remotely | Use it for balances and approvals |
| approvalRequired() | True on adapter, false on remote OFT | Approve underlying to adapter only |
| Native payment | Includes LayerZero cost and flat asset fee | Pay quoteSend.nativeFee once, plus transaction gas |
| payInLzToken | Unsupported | Always false; lzTokenFee must be zero |
| oftCmd | Empty or exactly 32 bytes naming a destination restorer | Do not put unrelated route commands here |
| extraOptions | Combined with router defaults | Empty for plain transfers; include compose gas for compose |
| peers(eid) | Informational predicted EVM facade; zero for non-EVM peers | Not proof of deployment; messaging peers live on the router |
| owner() | Permanent EVM creator, not an OApp administrator | Use creator() for canonical bytes32 identity |
| Per-token admin setters | Revert Unsupported | No setPeer, setDelegate, setEnforcedOptions, ownership transfer or renounce |
| Compose callback _from | Destination asset facade | Authenticate that facade, not the shared router |
| Packet sender/receiver | Shared routers | Track router GUIDs; do not expect per-OFT PacketSent addresses |
Amounts and precision
Parse source amounts using the token's local decimals. Shared precision is at most six decimals; dust remains with the sender. Percentage fees are deducted before destination credit. Use quoteOFT receipt amounts for your minimum and UI, not a handwritten percentage calculation. quoteSend needs the real sender as its call account.
Existing OFT integrations
A wallet that uses only token, approvalRequired, quoteOFT, quoteSend and send can reuse that flow with the above constraints. Tools that configure OApp delegates, peers, security stacks or ownership need an Omnisea-specific management path. The standard interface is not a promise that every OFT extension exists here.
The LayerZero OFT quickstart is useful background for the IOFT transfer and compose shapes. Omnisea's own release ABIs, shared-router semantics and recovery rules are authoritative for this integration.
Future non-EVM routes
The wire format uses bytes32 identities, but only the EVM implementation is supplied today. Do not truncate a non-EVM creator to an address. owner() returning zero for such an identity would not imply renounced ownership. Use the wire specification and test vectors when building a new VM implementation; EVM compose and compliance calls do not automatically translate to another VM.