What Is Deployed on Sui
Four packages are live on Sui Testnet:Oracle Contract
The core price feed. Stores and exposes stablecoin prices via shared objects. This is what your protocol integrates against.
Faucet
Multi-token testnet faucet. Claim SUI and WAL for development and testing.
Swap Contract
Live heterogeneous liquidity pool. Deposit, withdraw, swap, and sweep across SUI, CNGN, ZARP, and other listed assets — priced directly by the oracle.
HLP Token
Heterogeneous Liquidity Provider token. Issued to liquidity providers in the swap pool. Minted and burned automatically by the swap contract.
The swap contract is now live, not just planned. See Sui Swap Contract for the full integration guide.
Sui Testnet Object IDs
Oracle
Faucet
How Sui Differs from EVM
This is the most important section for developers coming from the EVM integration. Every one of these differences will cause a bug if you miss it.1. Shared Objects Instead of Contract Addresses
On EVM you call a function on a contract address. On Sui, the price feed is stored in a shared object — a piece of on-chain state that any transaction can reference.2. Positive Decimal Convention
EVM returns a negativeint8 decimal (e.g. -18). Sui returns a positive u8 decimal (e.g. 18). The math is identical — divide by 10^18 — but the sign is different.
3. Timestamps Are in Milliseconds
On EVM,block.timestamp is in seconds. On Sui, clock::timestamp_ms(clock) is in milliseconds.
4. Derived Pair Decimal Is Always 30
On EVM, derived pairs inherit the decimal from the underlying assets. On Sui, all derived pairs always returndecimal = 30 — regardless of which assets are involved. derived_price is always scaled by 10^30.
5. Missing Assets Abort — No False Flag
On EVM,getAssetInfo returns exists = false for unsupported assets. On Sui, derived pair functions abort the transaction if either underlying asset is missing.
get_asset_info and get_assets_info are safe — they return a bool exists flag. But get_pair_by_id and all batch pair functions abort on missing assets.
6. Asset IDs Use a Different Format
The underlying 32-byte values are identical across all networks. But on Sui they are passed asvector<u8> wrapped in a Bytes32 struct — not as bytes32 hex strings.
7. Built-In Freshness Helper
The Sui contract exposesprice_feed::is_fresh directly — you don’t need to implement the staleness subtraction yourself.
Supported Assets on Sui
All feeds available on EVM are also available on Sui Testnet. Asset IDs are identical across chains — only the format differs.Architecture Overview
IfaPriceFeed — the bottom shared object. You never interact with the verifier directly. The relayer and verifier are IFÁ Labs infrastructure. The Swap Contract is itself a consumer of the oracle, exactly like any other protocol you’d build.
Integration Checklist
Before writing your first line of Move or TypeScript, confirm these:1
Sui CLI installed and testnet environment active
2
Testnet SUI available for gas
Price reads via
devInspectTransactionBlock are free. You need SUI for deploying your own contracts. Claim from the IFÁ Labs Faucet or faucet.sui.io.3
Feed Object ID saved — not Package ID
The value you use in transactions is:
0x5d2728b862de08de767e4f8841a38c9452d951c0602e77fc47bfbb3ab03f33f0Not the Package ID. Save this now.4
Understood the millisecond timestamp convention
All
last_update_time values and the max_age parameter in is_fresh are in milliseconds. 3_600_000 = 1 hour.5
Asset IDs formatted correctly for Sui
No
0x prefix. Use x"..." hex literal syntax in Move. Use Buffer.from("...", "hex") in TypeScript.What to Integrate Against
Coming Soon on Sui
Next Steps
Read Latest Price
Full code examples for reading prices in Move and TypeScript.
Sui Swap Contract
Deposit, withdraw, swap, and sweep on the live testnet liquidity pool.
Function Reference
Complete reference for every public function in the Sui Move oracle contract.
Testnet Faucet
Claim testnet SUI and WAL for development.

