diff --git a/pages/price-feeds/contract-addresses.mdx b/pages/price-feeds/contract-addresses.mdx
index a771e278..25f37016 100644
--- a/pages/price-feeds/contract-addresses.mdx
+++ b/pages/price-feeds/contract-addresses.mdx
@@ -7,6 +7,7 @@ The contracts are split by ecosystem into several different documents:
- [Solana/SVM](contract-addresses/solana)
- [Aptos](contract-addresses/aptos)
- [Sui](contract-addresses/sui)
+- [IOTA](contract-addresses/iota)
- [Movement](contract-addresses/movement)
- [TON](contract-addresses/ton)
- [Fuel](contract-addresses/fuel)
diff --git a/pages/price-feeds/contract-addresses/_meta.json b/pages/price-feeds/contract-addresses/_meta.json
index da5d5082..1ad2188b 100644
--- a/pages/price-feeds/contract-addresses/_meta.json
+++ b/pages/price-feeds/contract-addresses/_meta.json
@@ -3,6 +3,7 @@
"solana": "Solana / SVM",
"aptos": "Aptos",
"sui": "Sui",
+ "iota": "IOTA",
"movement": "Movement",
"ton": "TON",
"fuel": "Fuel",
diff --git a/pages/price-feeds/contract-addresses/iota.mdx b/pages/price-feeds/contract-addresses/iota.mdx
new file mode 100644
index 00000000..8869a28d
--- /dev/null
+++ b/pages/price-feeds/contract-addresses/iota.mdx
@@ -0,0 +1,14 @@
+# Price Feed Contract Addresses on IOTA
+
+#### IOTA testnet
+
+| Name | Address |
+| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Pyth State ID | [`0x68dda579251917b3db28e35c4df495c6e664ccc085ede867a9b773c8ebedc2c1`](https://explorer.rebased.iota.org/object/0x68dda579251917b3db28e35c4df495c6e664ccc085ede867a9b773c8ebedc2c1?network=testnet) |
+| Pyth Package ID | [`0x23994dd119480ea614f7623520337058dca913cb1bb6e5d8d51c7b067d3ca3bb`](https://explorer.rebased.iota.org/object/0x23994dd119480ea614f7623520337058dca913cb1bb6e5d8d51c7b067d3ca3bb?network=testnet) |
+| Wormhole State ID | [`0x8bc490f69520a97ca1b3de864c96aa2265a0cf5d90f5f3f016b2eddf0cf2af2b`](https://explorer.rebased.iota.org/object/0x8bc490f69520a97ca1b3de864c96aa2265a0cf5d90f5f3f016b2eddf0cf2af2b?network=testnet) |
+| Wormhole Package ID | [`0xfca58c557f09cddb7930588c4e2a4edbe3cdded1ac1ed2270aa2dfa8d2b9ae0d`](https://explorer.rebased.iota.org/object/0xfca58c557f09cddb7930588c4e2a4edbe3cdded1ac1ed2270aa2dfa8d2b9ae0d?network=testnet) |
+
+#### IOTA mainnet
+
+Coming soon.
diff --git a/pages/price-feeds/contract-addresses/sui.mdx b/pages/price-feeds/contract-addresses/sui.mdx
index d0f9c90c..39a80d5b 100644
--- a/pages/price-feeds/contract-addresses/sui.mdx
+++ b/pages/price-feeds/contract-addresses/sui.mdx
@@ -13,15 +13,6 @@ Pyth is currently available on the following sui-based chains:
| Wormhole State ID | [`0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c`](https://explorer.sui.io/object/0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c) |
| Wormhole Package ID | [`0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a`](https://explorer.sui.io/object/0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a) |
-#### IOTA testnet
-
-| Name | Address |
-| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| Pyth State ID | [`0x68dda579251917b3db28e35c4df495c6e664ccc085ede867a9b773c8ebedc2c1`](https://explorer.rebased.iota.org/object/0x68dda579251917b3db28e35c4df495c6e664ccc085ede867a9b773c8ebedc2c1?network=testnet) |
-| Pyth Package ID | [`0x23994dd119480ea614f7623520337058dca913cb1bb6e5d8d51c7b067d3ca3bb`](https://explorer.rebased.iota.org/object/0x23994dd119480ea614f7623520337058dca913cb1bb6e5d8d51c7b067d3ca3bb?network=testnet) |
-| Wormhole State ID | [`0x8bc490f69520a97ca1b3de864c96aa2265a0cf5d90f5f3f016b2eddf0cf2af2b`](https://explorer.rebased.iota.org/object/0x8bc490f69520a97ca1b3de864c96aa2265a0cf5d90f5f3f016b2eddf0cf2af2b?network=testnet) |
-| Wormhole Package ID | [`0xfca58c557f09cddb7930588c4e2a4edbe3cdded1ac1ed2270aa2dfa8d2b9ae0d`](https://explorer.rebased.iota.org/object/0xfca58c557f09cddb7930588c4e2a4edbe3cdded1ac1ed2270aa2dfa8d2b9ae0d?network=testnet) |
-
### Beta channel
#### Sui Testnet
diff --git a/pages/price-feeds/use-real-time-data.mdx b/pages/price-feeds/use-real-time-data.mdx
index 3c1032ba..085057e5 100644
--- a/pages/price-feeds/use-real-time-data.mdx
+++ b/pages/price-feeds/use-real-time-data.mdx
@@ -15,6 +15,7 @@ Then, consult the relevant ecosystem guide to get started using Pyth real-time p
- [Aptos](use-real-time-data/aptos.md)
- [CosmWasm](use-real-time-data/cosmwasm.md)
- [Sui](use-real-time-data/sui.md)
+- [IOTA](use-real-time-data/iota.md)
- [Near](use-real-time-data/sui.md)
Pyth price feeds can also be used in off-chain applications.
diff --git a/pages/price-feeds/use-real-time-data/_meta.json b/pages/price-feeds/use-real-time-data/_meta.json
index 90b6e676..9a646f50 100644
--- a/pages/price-feeds/use-real-time-data/_meta.json
+++ b/pages/price-feeds/use-real-time-data/_meta.json
@@ -5,6 +5,7 @@
"fuel": "in Fuel Contracts",
"aptos": "in Aptos Contracts",
"sui": "in Sui Contracts",
+ "iota": "in IOTA Contracts",
"ton": "in TON Contracts",
"cosmwasm": "in CosmWasm Contracts",
"near": "in Near Contracts",
diff --git a/pages/price-feeds/use-real-time-data/iota.mdx b/pages/price-feeds/use-real-time-data/iota.mdx
new file mode 100644
index 00000000..07eca884
--- /dev/null
+++ b/pages/price-feeds/use-real-time-data/iota.mdx
@@ -0,0 +1,184 @@
+import { Callout, Tabs } from "nextra/components";
+
+# How to Use Real-Time Data in IOTA Contracts
+
+This guide explains how to use real-time Pyth data in IOTA applications.
+
+## Install Pyth SDK
+
+Use the following dependency in your `Move.toml` file to use the latest Pyth IOTA package and its dependencies:
+
+
+
+
+```sh copy
+[dependencies.Pyth]
+git = "https://github.com/pyth-network/pyth-crosschain.git"
+subdir = "target_chains/iota/contracts"
+rev = "iota-contract-testnet"
+
+[dependencies.Wormhole]
+git = "https://github.com/pyth-network/pyth-crosschain.git"
+subdir = "target_chains/iota/contracts/vendor/wormhole_iota_testnet/wormhole"
+rev = "iota-contract-testnet"
+
+[dependencies.Iota]
+git = "https://github.com/iotaledger/iota.git"
+subdir = "crates/iota-framework/packages/iota-framework"
+rev = "751c23caf24efd071463b9ffd07eabcb15f44f31"
+```
+
+
+
+
+Pyth also provides a javascript SDK to construct transaction blocks that update price feeds:
+
+
+
+ ```sh
+ # NPM
+ npm install --save @pythnetwork/pyth-iota-js
+
+ # Yarn
+ yarn add @pythnetwork/pyth-iota-js
+ ```
+
+
+
+
+## Write Contract Code
+
+The code snippet below provides a general template for what your contract code should look like:
+
+```rust {18} copy
+module pyth_example::main {
+ use iota::clock::Clock;
+ use pyth::price_info;
+ use pyth::price_identifier;
+ use pyth::price;
+ use pyth::pyth;
+ use pyth::price_info::PriceInfoObject;
+
+ const E_INVALID_ID: u64 = 1;
+
+ public fun use_pyth_price(
+ // Other arguments
+ clock: &Clock,
+ price_info_object: &PriceInfoObject,
+ ){
+ let max_age = 60;
+ // Make sure the price is not older than max_age seconds
+ let price_struct = pyth::get_price_no_older_than(price_info_object,clock, max_age);
+
+ // Check the price feed ID
+ let price_info = price_info::get_price_info_from_price_info_object(price_info_object);
+ let price_id = price_identifier::get_bytes(&price_info::get_price_identifier(&price_info));
+
+ // ETH/USD price feed ID
+ // The complete list of feed IDs is available at https://pyth.network/developers/price-feed-ids
+ // Note: IOTA uses the Pyth price feed ID without the `0x` prefix.
+ assert!(price_id!=x"ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace", E_INVALID_ID);
+
+ // Extract the price, decimal, and timestamp from the price struct and use them
+ let decimal_i64 = price::get_expo(&price_struct);
+ let price_i64 = price::get_price(&price_struct);
+ let timestamp_sec = price::get_timestamp(&price_struct);
+ }
+}
+```
+
+One can consume the price by calling `pyth::get_price` abovementioned or other utility functions on the `PriceInfoObject` in the Move module
+
+The code snippet below provides an example of how to update the Pyth price feeds:
+
+```ts copy
+import { IotaPriceServiceConnection, IotaPythClient } from "@pythnetwork/pyth-iota-js";
+import { Transaction } from "@iota/iota-sdk/transactions";
+
+// Get the Stable Hermes service URL from https://docs.pyth.network/price-feeds/api-instances-and-providers/hermes
+const connection = new IotaPriceServiceConnection("https://hermes-beta.pyth.network");
+
+const priceIDs = [
+ // You can find the IDs of prices at https://pyth.network/developers/price-feed-ids
+ "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43", // BTC/USD price ID
+ "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace", // ETH/USD price ID
+];
+
+const priceUpdateData = await connection.getPriceFeedsUpdateData(priceIDs);
+
+// It is either injected from the browser (https://www.npmjs.com/package/@iota/dapp-kit)
+// or instantiated in the backend via some private key (https://www.npmjs.com/package/@iota/iota-sdk)
+const wallet: SignerWithProvider = getWallet();
+// Get the state IDs of the Pyth and Wormhole contracts from
+// https://docs.pyth.network/price-feeds/contract-addresses/iota
+const wormholeStateId = "0x8bc490f69520a97ca1b3de864c96aa2265a0cf5d90f5f3f016b2eddf0cf2af2b";
+const pythStateId = "0x68dda579251917b3db28e35c4df495c6e664ccc085ede867a9b773c8ebedc2c1";
+
+const client = new IotaPythClient(wallet.provider, pythStateId, wormholeStateId);
+const tx = new Transaction();
+const priceInfoObjectIds = await client.updatePriceFeeds(tx, priceFeedUpdateData, priceIDs);
+
+tx.moveCall({
+ target: `pyth_example::main::use_pyth_price`,
+ arguments: [
+ ..., // other arguments needed for your contract
+ tx.object(priceInfoObjectIds[0]),
+ ],
+});
+
+const txBlock = {
+ transaction: tx,
+ wallet,
+ options: {
+ showEffects: true,
+ showEvents: true,
+ },
+};
+
+const result = await wallet.signAndExecuteTransaction(txBlock);
+```
+
+By calling the `updatePriceFeeds` function, the `IotaPythClient` adds the necessary transactions to the transaction block to update the price feeds.
+
+
+
+Your IOTA Move module **should NOT** have a hard-coded call to `pyth::update_single_price_feed.` In other words, a contract should **never call** the IOTA Pyth `pyth::update_single_price_feed` entry point. Instead, it should be called directly from client code (e.g., Typescript or Rust).
+
+When IOTA contracts are [upgraded](https://docs.iota.org/developer/iota-101/move-overview/package-upgrades/introduction), the address changes, which makes the old address no longer valid. If your module has a hard-coded call to `pyth::update_single_price_feed` living at a fixed call-site, it may eventually get bricked due to how Pyth upgrades are implemented. (Pyth only allow users to interact with the most recent package version for security reasons).
+
+Therefore, you should build a [IOTA programmable transaction](https://docs.iota.org/developer/iota-101/transactions/ptb/programmable-transaction-blocks-overview) that first updates the price by calling `pyth::update_single_price_feed` at the latest call-site from the client-side and then call a function in your contract that invokes `pyth::get_price` on the `PriceInfoObject` to get the recently updated price.
+You can use `IOTAPythClient` to build such transactions and handle all the complexity of updating the price feeds.
+
+Consult [Fetch Price Updates](../fetch-price-updates) for more information on how to fetch the `pyth_price_update`.
+
+
+
+## Additional Resources
+
+You may find these additional resources helpful for developing your IOTA application.
+
+### CLI Example
+
+[This example](https://github.com/pyth-network/pyth-crosschain/tree/main/target_chains/iota/cli) shows how to update prices on a IOTA network. It does the following:
+
+1. Fetches update data from Hermes for the given price feeds.
+1. Call the Pyth IOTA contract with a price update.
+
+You can run this example with `npm run example-relay`. A full command that updates prices on the IOTA testnet looks like this:
+
+```bash
+export IOTA_KEY=YOUR_PRIV_KEY;
+npm run example-relay -- --feed-id "ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace" \
+--hermes "https://hermes.pyth.network" \
+--full-node "https://api.testnet.iota.cafe" \
+--pyth-state-id "0x68dda579251917b3db28e35c4df495c6e664ccc085ede867a9b773c8ebedc2c1" \
+--wormhole-state-id "0x8bc490f69520a97ca1b3de864c96aa2265a0cf5d90f5f3f016b2eddf0cf2af2b"
+```
+
+### Contract Addresses
+
+Consult [IOTA Contract Addresses](../contract-addresses/iota) to find the package IDs.
+
+### Pyth Price Feed IDs
+
+Consult [Pyth Price Feed IDs](https://pyth.network/developers/price-feed-ids) to find Pyth price feed IDs for various assets.
diff --git a/pages/price-feeds/use-real-time-data/sui.mdx b/pages/price-feeds/use-real-time-data/sui.mdx
index ae18f58c..07a94ae4 100644
--- a/pages/price-feeds/use-real-time-data/sui.mdx
+++ b/pages/price-feeds/use-real-time-data/sui.mdx
@@ -8,7 +8,7 @@ This guide explains how to use real-time Pyth data in Sui applications.
Use the following dependency in your `Move.toml` file to use the latest Pyth Sui package and its dependencies:
-
+
```sh copy
[dependencies.Pyth]
@@ -49,32 +49,12 @@ subdir = "crates/sui-framework/packages/sui-framework"
rev = "041c5f2bae2fe52079e44b70514333532d69f4e6"
````
-
-
-
-```sh copy
-[dependencies.Pyth]
-git = "https://github.com/pyth-network/pyth-crosschain.git"
-subdir = "target_chains/sui/contracts"
-rev = "sui-contract-iota-testnet"
-
-[dependencies.Wormhole]
-git = "https://github.com/pyth-network/pyth-crosschain.git"
-subdir = "target_chains/sui/contracts/vendor/wormhole_iota_testnet/wormhole"
-rev = "sui-contract-iota-testnet"
-
-[dependencies.Iota]
-git = "https://github.com/iotaledger/iota.git"
-subdir = "crates/iota-framework/packages/iota-framework"
-rev = "751c23caf24efd071463b9ffd07eabcb15f44f31"
-```
-
Pyth also provides a javascript SDK to construct transaction blocks that update price feeds:
-
+
```sh
# NPM
@@ -85,16 +65,6 @@ Pyth also provides a javascript SDK to construct transaction blocks that update
```
-
- ```sh
- # NPM
- npm install --save @pythnetwork/pyth-iota-js
-
- # Yarn
- yarn add @pythnetwork/pyth-iota-js
- ```
-
-
## Write Contract Code