> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ifalabs.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Contract Addresses

> Verified deployment addresses for the IFÁ Labs oracle across all supported networks — EVM contract addresses and Sui object IDs, with explorer links and verification guidance.

IFÁ Labs deploys oracle infrastructure across every supported network. On EVM chains, this is a single smart contract address. On Sui, it is a set of shared objects — a Package, a Feed Object, and a Verifier Object.

This page is the authoritative reference for all deployed addresses and object IDs. Verify every value against this page and the on-chain source before using it in production.

***

## EVM Live Deployments

| Network                | Type       | Contract Address                             | Block Explorer                                                                                                        |
| ---------------------- | ---------- | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
| **Base Mainnet**       | Production | `0xA9F17344689C2c2328F94464998db1d3e35B80dC` | [View on Basescan](https://basescan.org/address/0xA9F17344689C2c2328F94464998db1d3e35B80dC)                           |
| **Base Sepolia**       | Testnet    | `0xbF2ae81D8Adf3AA22401C4cC4f0116E936e1025b` | [View on Basescan Sepolia](https://sepolia.basescan.org/address/0xbF2ae81D8Adf3AA22401C4cC4f0116E936e1025b)           |
| **AssetChain Testnet** | Testnet    | `0xBAc31e568883774A632275F9c8E7A5Bd117000F7` | [View on AssetChain Explorer](https://scan-testnet.assetchain.org/address/0xBAc31e568883774A632275F9c8E7A5Bd117000F7) |

<Warning>
  Always verify contract addresses on the official block explorer before deploying to production. Never use an address sourced from a third party, a Discord message, or an unofficial repository. This page and the verified on-chain source are the only authoritative references.
</Warning>

***

## EVM Read Contract Links

Access the oracle's read functions directly from the block explorer without writing any code:

| Network                | Read Contract Link                                                                                                                                  |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Base Mainnet**       | [basescan.org/.../readContract](https://basescan.org/address/0xA9F17344689C2c2328F94464998db1d3e35B80dC#readContract)                               |
| **Base Sepolia**       | [sepolia.basescan.org/.../readContract](https://sepolia.basescan.org/address/0xbF2ae81D8Adf3AA22401C4cC4f0116E936e1025b#readContract)               |
| **AssetChain Testnet** | [scan-testnet.assetchain.org/.../readContract](https://scan-testnet.assetchain.org/address/0xBAc31e568883774A632275F9c8E7A5Bd117000F7#readContract) |

***

## Sui Deployments

On Sui, IFÁ Labs is deployed as a native Move package. There are three object IDs you need to know:

| Object                 | ID                                                                   | Description                                                                            |
| ---------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| **Package ID**         | `0x99847c953ee11ca57b6d602494c914d7d82a2d42c4c8a80307331fead5b22c4a` | The published Move package. Used when importing the module in your own Move contracts. |
| **Feed Object ID**     | `0x5d2728b862de08de767e4f8841a38c9452d951c0602e77fc47bfbb3ab03f33f0` | The shared `IfaPriceFeed` object. Pass this when reading prices.                       |
| **Verifier Object ID** | `0x028e5df554ac7d253a132c60bcd13cf32bea9eb8c81d04d685c2a31299fbe43b` | The shared `IfaPriceFeedVerifier` object. Used by the relayer to submit price updates. |

| Network         | Status  | Explorer                                                                                                                         |
| --------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **Sui Testnet** | Testnet | [View package on Suiscan](https://suiscan.xyz/testnet/object/0x99847c953ee11ca57b6d602494c914d7d82a2d42c4c8a80307331fead5b22c4a) |

<Warning>
  **Redeployed contract.** These object IDs were updated following a fresh deployment of the oracle package. If you have any of the previous IDs hardcoded or cached, they now point to a stale package and must be replaced.
</Warning>

<Info>
  When reading prices on Sui, always pass the **Feed Object ID** — not the Package ID. The Package ID is only needed when referencing the module as a dependency in your own Move package's `Move.toml`.
</Info>

### Using Sui Object IDs in Move

```move theme={null}
// In your Move.toml — reference the package as a dependency
[dependencies]
ifa_oracle = { git = "https://github.com/IFA-Labs/oracle_contract_sui.git", rev = "main" }

// In your Move source — pass the feed object by reference
use ifa_oracle::price_feed::{Self, IfaPriceFeed};

public fun read_price(feed: &IfaPriceFeed, asset_id: vector<u8>) {
    let asset_index = bytes32::new(asset_id);
    let (price_feed, exists) = price_feed::get_asset_info(feed, asset_index);
    // ...
}
```

### Using Sui Object IDs in TypeScript

```typescript theme={null}
import { SuiClient, getFullnodeUrl } from "@mysten/sui/client";
import { Transaction } from "@mysten/sui/transactions";

const client = new SuiClient({ url: getFullnodeUrl("testnet") });

// These are the object IDs you pass in transactions
const IFA_SUI_TESTNET = {
  packageId:  "0x99847c953ee11ca57b6d602494c914d7d82a2d42c4c8a80307331fead5b22c4a",
  feedId:     "0x5d2728b862de08de767e4f8841a38c9452d951c0602e77fc47bfbb3ab03f33f0",
  verifierId: "0x028e5df554ac7d253a132c60bcd13cf32bea9eb8c81d04d685c2a31299fbe43b",
} as const;

// Read a price via a devInspect transaction
const tx = new Transaction();
tx.moveCall({
  target: `${IFA_SUI_TESTNET.packageId}::price_feed::get_asset_info`,
  arguments: [
    tx.object(IFA_SUI_TESTNET.feedId),
    tx.pure.vector("u8", Array.from(
      Buffer.from("6ca0cef6107263f3b09a51448617b659278cff744f0e702c24a2f88c91e65a0d", "hex")
    )),
  ],
});

const result = await client.devInspectTransactionBlock({
  transactionBlock: tx,
  sender: "0x0000000000000000000000000000000000000000000000000000000000000000",
});
```

***

## Upcoming Deployments

| Network                | Status  | Target | Notes                                                                  |
| ---------------------- | ------- | ------ | ---------------------------------------------------------------------- |
| **Sui Mainnet**        | Planned | TBD    | Full production deployment following testnet validation                |
| **AssetChain Mainnet** | Planned | TBD    | Full production deployment for RWA-focused protocols                   |
| **Solana**             | Planned | TBD    | Native Solana program — different interface from EVM and Sui contracts |
| **Optimism**           | Planned | TBD    | Additional EVM L2                                                      |
| **Arbitrum**           | Planned | TBD    | Additional EVM L2                                                      |
| **Polygon zkEVM**      | Planned | TBD    | Additional EVM L2                                                      |

<Note>
  Contract addresses and object IDs for upcoming deployments will be added to this page on launch day. Follow [@ifalabs](https://x.com/ifalabs) or join the [Telegram](https://t.me/ifalabs) for deployment announcements.
</Note>

***

## Using EVM Addresses in Your Contracts

### Constant Declaration (Recommended)

Declare the oracle address as a `constant` in your contract. This is the most gas-efficient pattern and prevents the address from being modified after deployment.

```solidity theme={null}
// Base Mainnet
IIfaPriceFeed public constant ORACLE =
    IIfaPriceFeed(0xA9F17344689C2c2328F94464998db1d3e35B80dC);
```

***

### Immutable Declaration (For Multi-Network Deployments)

If your deployment scripts target multiple networks and need to set the address at deploy time rather than compile time, use `immutable`:

```solidity theme={null}
IIfaPriceFeed public immutable ORACLE;

constructor(address oracleAddress) {
    require(oracleAddress != address(0), "Invalid oracle address");
    ORACLE = IIfaPriceFeed(oracleAddress);
}
```

Then pass the correct address per network in your deploy script:

<Tabs>
  <Tab title="Foundry">
    ```solidity theme={null}
        // script/Deploy.s.sol
        contract DeployScript is Script {
            function run() external {
                address oracle = vm.envAddress("ORACLE_ADDRESS");

                vm.startBroadcast();
                new MyProtocol(oracle);
                vm.stopBroadcast();
            }
        }
    ```

    ```bash theme={null}
        # Base Mainnet
        ORACLE_ADDRESS=0xA9F17344689C2c2328F94464998db1d3e35B80dC \
        forge script script/Deploy.s.sol --rpc-url base-mainnet --broadcast

        # Base Sepolia
        ORACLE_ADDRESS=0xbF2ae81D8Adf3AA22401C4cC4f0116E936e1025b \
        forge script script/Deploy.s.sol --rpc-url base-sepolia --broadcast
    ```
  </Tab>

  <Tab title="Hardhat">
    ```javascript theme={null}
        // scripts/deploy.js
        const ORACLE_ADDRESSES = {
            "base-mainnet":       "0xA9F17344689C2c2328F94464998db1d3e35B80dC",
            "base-sepolia":       "0xbF2ae81D8Adf3AA22401C4cC4f0116E936e1025b",
            "assetchain-testnet": "0xBAc31e568883774A632275F9c8E7A5Bd117000F7",
        };

        async function main() {
            const network = hre.network.name;
            const oracle  = ORACLE_ADDRESSES[network];

            if (!oracle) throw new Error(`No oracle address for network: ${network}`);

            const MyProtocol = await ethers.getContractFactory("MyProtocol");
            const contract   = await MyProtocol.deploy(oracle);

            await contract.waitForDeployment();
            console.log(`Deployed to: ${await contract.getAddress()}`);
            console.log(`Oracle:      ${oracle}`);
        }

        main().catch(console.error);
    ```
  </Tab>
</Tabs>

***

## Verifying EVM Contracts On-Chain

Before using any EVM address in production, verify it on the block explorer:

<Steps>
  <Step title="Open the contract on Basescan">
    Navigate to the address on [Basescan](https://basescan.org/address/0xA9F17344689C2c2328F94464998db1d3e35B80dC). The contract should show a green checkmark indicating the source code is verified.
  </Step>

  <Step title="Confirm the contract name">
    Under the **Contract** tab, confirm the contract name matches `IfaPriceFeed`. A mismatch means you have the wrong address.
  </Step>

  <Step title="Cross-reference the ABI">
    The verified ABI should include `getAssetInfo`, `getAssetsInfo`, and the derived pair functions. If these are absent, the address is wrong.
  </Step>

  <Step title="Call getAssetInfo">
    Under **Read Contract**, call `getAssetInfo` with the USDT/USD asset ID: `0x6ca0cef6107263f3b09a51448617b659278cff744f0e702c24a2f88c91e65a0d`. A valid response with `exists = true` and a reasonable price confirms the contract is live and correctly addressed.
  </Step>
</Steps>

***

## Verifying Sui Objects On-Chain

Before using any Sui object ID, verify it on Suiscan:

<Steps>
  <Step title="Open the package on Suiscan">
    Navigate to the [Package ID on Suiscan](https://suiscan.xyz/testnet/object/0x99847c953ee11ca57b6d602494c914d7d82a2d42c4c8a80307331fead5b22c4a). Confirm the package name is `ifa_oracle` and the modules listed include `price_feed`, `verifier`, and `bytes32`.
  </Step>

  <Step title="Verify the Feed Object">
    Navigate to the [Feed Object ID on Suiscan](https://suiscan.xyz/testnet/object/0x5d2728b862de08de767e4f8841a38c9452d951c0602e77fc47bfbb3ab03f33f0). Confirm the object type is `ifa_oracle::price_feed::IfaPriceFeed` and it is a shared object.
  </Step>

  <Step title="Check recent transactions">
    On the Feed Object page, review recent transactions. You should see `submit_price_feed` calls from the relayer — confirming the oracle is actively updating prices.
  </Step>
</Steps>

***

## Network Configuration Reference

### EVM Networks

| Parameter          | Base Mainnet                                 | Base Sepolia                                   | AssetChain Testnet                           |
| ------------------ | -------------------------------------------- | ---------------------------------------------- | -------------------------------------------- |
| **Chain ID**       | 8453                                         | 84532                                          | 42421                                        |
| **RPC URL**        | `https://mainnet.base.org`                   | `https://sepolia.base.org`                     | `https://enugu-rpc.assetchain.org`           |
| **Currency**       | ETH                                          | ETH (test)                                     | Test Token                                   |
| **Block Explorer** | basescan.org                                 | sepolia.basescan.org                           | scan-testnet.assetchain.org                  |
| **Oracle Address** | `0xA9F17344689C2c2328F94464998db1d3e35B80dC` | `0xbF2ae81D8Adf3AA22401C4cC4f0116E936e1025b`   | `0xBAc31e568883774A632275F9c8E7A5Bd117000F7` |
| **Faucet**         | N/A                                          | [base.org/faucet](https://www.base.org/faucet) | N/A                                          |

### Sui Testnet

| Parameter              | Value                                                                |
| ---------------------- | -------------------------------------------------------------------- |
| **Network**            | Sui Testnet                                                          |
| **Explorer**           | [suiscan.xyz/testnet](https://suiscan.xyz/testnet)                   |
| **Package ID**         | `0x99847c953ee11ca57b6d602494c914d7d82a2d42c4c8a80307331fead5b22c4a` |
| **Feed Object ID**     | `0x5d2728b862de08de767e4f8841a38c9452d951c0602e77fc47bfbb3ab03f33f0` |
| **Verifier Object ID** | `0x028e5df554ac7d253a132c60bcd13cf32bea9eb8c81d04d685c2a31299fbe43b` |
| **Faucet**             | [faucet.sui.io](https://faucet.sui.io)                               |

***

## Reporting an Address Discrepancy

If you encounter an address or object ID that claims to be an IFÁ Labs oracle but is not listed on this page, do not use it and report it immediately:

* **Email:** [support@ifalabs.com](mailto:support@ifalabs.com)
* **Telegram:** [t.me/ifalabs](https://t.me/ifalabs)
* **GitHub:** [IFA-Labs/oracle\_contract/issues](https://github.com/IFA-Labs/oracle_contract/issues)

Include the suspicious address or object ID, the network it was found on, and where you encountered it. Address impersonation is a common attack vector in DeFi — reporting suspicious addresses quickly protects the broader ecosystem.

***

## Next Steps

<CardGroup cols={2}>
  <Card title="Function Reference (EVM)" icon="code" href="/function-reference">
    Complete API reference for all EVM oracle contract functions and return types.
  </Card>

  <Card title="Sui Integration Guide" icon="code" href="/sui-read-latest-price">
    Read prices from the IFÁ Labs oracle on Sui using Move or the TypeScript SDK.
  </Card>
</CardGroup>

<CardGroup cols={2}>
  <Card title="ABI Download" icon="download" href="/abi-download">
    Get the official EVM ABI for use in your development tools and scripts.
  </Card>

  <Card title="Network Information" icon="network-wired" href="/network-information">
    Full network reference including RPC endpoints, object IDs, and faucet links.
  </Card>
</CardGroup>
