What Is Deployed on Sui
Three 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.
HLP Token
Heterogeneous Liquidity Provider token. Foundation for the upcoming Sui swap contract. Not yet available for integration.
Sui Testnet Object IDs
Oracle
| Object | ID |
|---|---|
| Package ID | 0x4d165602d4bb3a7d428a3aa567e27cbe03c9de2ed5995f8c13d1adc4cd3d196f |
| Feed Object ID | 0x9d5fc0fce3dc11efd95ef4b3218f3b45ff17012fbc629b35529f66833e46d91a |
| Verifier Object ID | 0x49ba59356bdd51f42ed433f452099e32251601027d4e7d39bf86e8e1c12c3ad5 |
Faucet
| Object | ID |
|---|---|
| Package ID | 0xf77385d9dc49cf4774c0411a2b36d89d294ad5fe42ab1f52cc7d515044b1fa27 |
| Registry ID | 0x5c0dc844ba7647af146e9edf7618bdbf47025dd0816e60db7ad9256cafda1054 |
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.
| Chain | Decimal field | Formula |
|---|---|---|
| EVM | -18 (int8) | price / 10^(-decimal) = price / 10^18 |
| Sui | 18 (u8) | price / 10^decimal = price / 10^18 |
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.| Asset | Category | Asset ID |
|---|---|---|
| USDT/USD | Global | 0x6ca0cef6107263f3b09a51448617b659278cff744f0e702c24a2f88c91e65a0d |
| USDC/USD | Global | 0xf989296bde68043d307a2bc0e59de3445defc5f292eb390b80d78162c8a6b13d |
| CNGN/USD | Emerging Market | 0x83a18c73cf75a028a24b79cbedb3b8d8ba363b748a3210ddbcaa95eec3b87b3a |
| ZARP/USD | Emerging Market | 0x12373a3b1c4827c84bf6d7b11df100442695d0abfdb7a20d30a41d67d58e75a8 |
| BRZ/USD | Emerging Market | 0xbc60b55b031dce1ee5679098bf2f35d66a94a566124e2b233324d2bafcc6d5b5 |
| ETH/USD | Reference | 0x8c3fb07cab369fe230ca4e45d095f796c4c1a30131f1799766d4fec5ee1325c0 |
Architecture Overview
IfaPriceFeed — the bottom shared object. You never interact with the verifier directly. The relayer and verifier are IFÁ Labs infrastructure.
Integration Checklist
Before writing your first line of Move or TypeScript, confirm these: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.Feed Object ID saved — not Package ID
The value you use in transactions is:
0x9d5fc0fce3dc11efd95ef4b3218f3b45ff17012fbc629b35529f66833e46d91aNot the Package ID. Save this now.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.What to Integrate Against
| If you are building… | Use this |
|---|---|
| A Move smart contract on Sui | ifa_oracle::price_feed — import as a Move dependency |
| A TypeScript frontend or backend | Sui TypeScript SDK + devInspectTransactionBlock |
| A quick test or CLI check | Sui CLI client call |
| An AI tool or agent | IFÁ Labs MCP Server — get_network_info returns Sui object IDs |
Coming Soon on Sui
| Feature | Status |
|---|---|
| Sui Mainnet deployment | Planned — after testnet validation |
| Sui swap contract | In development — HLP token deployed |
| Additional Sui feeds | Based on ecosystem demand |
Next Steps
Read Latest Price
Full code examples for reading prices in Move and TypeScript.
Function Reference
Complete reference for every public function in the Sui Move contracts.
Testnet Faucet
Claim testnet SUI and WAL for development.
Contract Addresses
All Sui object IDs and EVM addresses in one place.

