Przeglądaj źródła

chore(dev-hub) Second batch migrated

Aditya Arora 2 tygodni temu
rodzic
commit
d60c5c8476
30 zmienionych plików z 1659 dodań i 21 usunięć
  1. 1 1
      apps/developer-hub/content/docs/entropy/generate-random-numbers-evm.mdx
  2. 1 1
      apps/developer-hub/content/docs/entropy/set-custom-gas-limits.mdx
  3. 0 14
      apps/developer-hub/content/docs/price-feeds/core/api-instances-and-providers.mdx
  4. 1 2
      apps/developer-hub/content/docs/price-feeds/core/api-instances-and-providers/benchmarks.mdx
  5. 0 1
      apps/developer-hub/content/docs/price-feeds/core/api-instances-and-providers/hermes.mdx
  6. 0 2
      apps/developer-hub/content/docs/price-feeds/core/api-instances-and-providers/index.mdx
  7. 16 0
      apps/developer-hub/content/docs/price-feeds/core/api-instances-and-providers/pythnet-rpc.mdx
  8. 18 0
      apps/developer-hub/content/docs/price-feeds/core/api-reference.mdx
  9. 112 0
      apps/developer-hub/content/docs/price-feeds/core/best-practices.mdx
  10. 17 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/aptos.mdx
  11. 33 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/cosmwasm.mdx
  12. 206 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/evm.mdx
  13. 14 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/fuel.mdx
  14. 23 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/index.mdx
  15. 25 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/iota.mdx
  16. 16 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/meta.json
  17. 19 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/movement.mdx
  18. 10 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/near.mdx
  19. 37 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/pythnet.mdx
  20. 41 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/solana.mdx
  21. 14 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/starknet.mdx
  22. 29 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/sui.mdx
  23. 15 0
      apps/developer-hub/content/docs/price-feeds/core/contract-addresses/ton.mdx
  24. 153 0
      apps/developer-hub/content/docs/price-feeds/core/create-tradingview-charts.mdx
  25. 6 0
      apps/developer-hub/content/docs/price-feeds/core/create-your-first-pyth-app/evm/meta.json
  26. 568 0
      apps/developer-hub/content/docs/price-feeds/core/create-your-first-pyth-app/evm/part-1.mdx
  27. 111 0
      apps/developer-hub/content/docs/price-feeds/core/create-your-first-pyth-app/evm/part-2.mdx
  28. 20 0
      apps/developer-hub/content/docs/price-feeds/core/create-your-first-pyth-app/index.mdx
  29. 30 0
      apps/developer-hub/content/docs/price-feeds/core/current-fees.mdx
  30. 123 0
      apps/developer-hub/content/docs/price-feeds/core/derive-cross-rate.mdx

+ 1 - 1
apps/developer-hub/content/docs/entropy/generate-random-numbers-evm.mdx

@@ -84,7 +84,7 @@ function requestRandomNumber() external payable {
 
 This method returns a sequence number and emits a [`Requested`](https://github.com/pyth-network/pyth-crosschain/blob/main/target_chains/ethereum/entropy_sdk/solidity/EntropyEventsV2.sol#L30) event. You can store this sequence number to identify the request in next step.
 
-Note that there are several variants of `requestV2` that allow the caller to configure the provider fulfilling the request and the gas limit for the callback. Refer [request callback variants](./entropy/request-callback-variants.mdx) for more details.
+Note that there are several variants of `requestV2` that allow the caller to configure the provider fulfilling the request and the gas limit for the callback. Refer [request callback variants](./entropy/request-callback-variants) for more details.
 
 Please see the method documentation in the [IEntropyV2 interface](https://github.com/pyth-network/pyth-crosschain/blob/main/target_chains/ethereum/entropy_sdk/solidity/IEntropyV2.sol).
 

+ 1 - 1
apps/developer-hub/content/docs/entropy/set-custom-gas-limits.mdx

@@ -10,7 +10,7 @@ Custom gas limits are useful when your callback function requires more gas than
 
 ## Prerequisites
 
-Before following this guide, you should first complete the basic setup from the [Generate Random Numbers in EVM Contracts](./entropy/generate-random-numbers-evm.mdx) guide. This guide builds upon that foundation and assumes you have:
+Before following this guide, you should first complete the basic setup from the [Generate Random Numbers in EVM Contracts](./entropy/generate-random-numbers-evm) guide. This guide builds upon that foundation and assumes you have:
 
 - Installed the Pyth Entropy Solidity SDK
 - Set up your contract with the `IEntropyConsumer` interface

+ 0 - 14
apps/developer-hub/content/docs/price-feeds/core/api-instances-and-providers.mdx

@@ -1,14 +0,0 @@
----
-title: API Instances and Providers
-description: Access API instances and providers for Pyth Price Feeds
-slug: /price-feeds/core/api-instances-and-providers
----
-
-This documentation explains how to get access to API instances and providers for Pyth Price Feeds.
-See the following guides to learn more about how to access each service:
-
-- [Hermes](api-instances-and-providers/hermes.mdx)
-- [Pythnet RPC](api-instances-and-providers/pythnet-rpc.mdx)
-- [Benchmarks/Historical Price](api-instances-and-providers/benchmarks.mdx)
-
-

+ 1 - 2
apps/developer-hub/content/docs/price-feeds/core/api-instances-and-providers/benchmarks.mdx

@@ -1,5 +1,5 @@
 ---
-title: Benchmarks API Instances
+title: Benchmarks
 description: Access Benchmarks API instances for Pyth Price Feeds
 slug: /price-feeds/core/api-instances-and-providers/benchmarks
 ---
@@ -11,4 +11,3 @@ The Pyth Data Association hosts a public instance of the Benchmarks API at the f
 | Stable  | https://benchmarks.pyth.network |
 
 There is currently no Benchmarks instance for the Beta channel.
-

+ 0 - 1
apps/developer-hub/content/docs/price-feeds/core/api-instances-and-providers/hermes.mdx

@@ -50,4 +50,3 @@ The Pyth Data Association provides a Helm chart for running Hermes in
 [charts](https://github.com/pyth-network/charts/tree/main/charts/hermes) repository. Please refer to the chart's readme
 for the configuration values.
 You will need a Pythnet RPC to run Hermes; see the [guide for accessing a Pythnet RPC](pythnet-rpc.mdx).
-

+ 0 - 2
apps/developer-hub/content/docs/price-feeds/core/api-instances-and-providers/index.mdx

@@ -10,5 +10,3 @@ See the following guides to learn more about how to access each service:
 - [Hermes](api-instances-and-providers/hermes.mdx)
 - [Pythnet RPC](api-instances-and-providers/pythnet-rpc.mdx)
 - [Benchmarks/Historical Price](api-instances-and-providers/benchmarks.mdx)
-
-

+ 16 - 0
apps/developer-hub/content/docs/price-feeds/core/api-instances-and-providers/pythnet-rpc.mdx

@@ -0,0 +1,16 @@
+---
+title: Pythnet RPC
+description: Access Pythnet RPC providers for Pyth price feeds
+slug: /price-feeds/core/api-instances-and-providers/pythnet-rpc
+---
+
+You will need a Pythnet RPC to run Hermes, which you can obtain from any of the Pythnet RPC
+providers below:
+
+- [Triton](https://triton.one)
+- [P2P](https://p2p.org)
+- [Blockdaemon](https://blockdaemon.com/)
+- [Figment](https://figment.io)
+
+Alternatively, you can host Pythnet RPC yourself, but this is discouraged due to the potential high cost and maintenance
+involved in operating it. If you still wish to run it, please contact the Pyth team for more information.

+ 18 - 0
apps/developer-hub/content/docs/price-feeds/core/api-reference.mdx

@@ -0,0 +1,18 @@
+---
+title: API Reference
+description: Explore interactive Pyth API references for on-chain and off-chain integrations
+slug: /price-feeds/core/api-reference
+---
+
+The API reference is a comprehensive guide to the various APIs -- both on- and off-chain -- that developers can use in their applications.
+Developers can consult this reference to better understand what methods exist and what they do.
+The API reference is interactive, so developers can try out the APIs from the website to better understand their behavior.
+
+The following on-chain contracts are documented in the API reference:
+
+- [EVM](https://api-reference.pyth.network/price-feeds/evm/getPriceNoOlderThan)
+
+Hermes also has interactive API documentation hosted by the service itself:
+
+- [Hermes](https://hermes.pyth.network/docs/)
+- [Benchmarks / Historical Prices](https://benchmarks.pyth.network/docs)

+ 112 - 0
apps/developer-hub/content/docs/price-feeds/core/best-practices.mdx

@@ -0,0 +1,112 @@
+---
+title: Best Practices
+description: Learn how to integrate Pyth price feeds safely and effectively
+slug: /price-feeds/core/best-practices
+---
+
+This page provides some technical details about Pyth price feeds that are necessary to use them safely and correctly.
+Please read this page before using Pyth price feeds in your application.
+
+## Fixed-Point Numeric Representation
+
+Price feeds represent numbers in a fixed-point format. The same exponent is used for both the price and confidence interval. The integer representation of these values can be computed by multiplying by `10^exponent`. As an example, imagine Pyth reported the following values for AAPL/USD:
+
+| Field      | Value    |
+| ---------- | -------- |
+| `exponent` | -5       |
+| `conf`     | 1500     |
+| `price`    | 12276250 |
+
+The confidence interval is `1500 * 10^(-5) = $0.015`, and the price is `12276250 * 10^(-5) = $122.7625`.
+
+## Price Availability
+
+Sometimes, Pyth will not be able to provide a current price for a product.
+This situation can happen for various reasons.
+For example, US equity markets only trade during certain hours, and outside those hours, it's not clear what an equity's price is.
+Pyth price feeds follow the traditional market hours for each asset class. \
+Consult [Market Hours](./market-hours) to know the market hours for each asset class.
+
+Alternatively, a network outage (at the internet level, blockchain level, or at multiple data providers) may prevent the protocol from producing new price updates.
+(Such outages are unlikely, but integrators should still be prepared for the possibility.)
+In such cases, Pyth may return a stale price for the product.
+
+Integrators should be careful to avoid accidentally using a stale price.
+The Pyth SDKs guard against this failure mode by incorporating a staleness check by default.
+Querying the current price will fail if too much time has elapsed since the last update.
+The SDKs expose this failure condition in an idiomatic way: for example, the Rust SDK may return `None`, and the Solidity SDK may revert the transaction.
+The SDK provides a sane default for the staleness threshold, but users may configure it to suit their use case.
+
+## Adversarial selection
+
+Pull updates give users of Pyth Network some ability to select which price to use in a transaction.
+This ability is highly circumscribed by various constraints: on-chain prices must move forward in time and cannot be from too far in the past.
+However, users can still choose any price update that satisfies these constraints.
+This ability is functionally equivalent to latency: it allows users to see the price in the future before using a price from the past.
+
+The simplest way to guard against this attack vector is to incorporate a **staleness check** to ensure that the price used in a transaction is sufficiently recent.
+
+The Pyth SDK provides the [`getPriceNoOlderThan()`](https://api-reference.pyth.network/price-feeds/evm/getPriceNoOlderThan) method to help users guard against this attack vector. This method returns the most recent price update that is not older than a specified threshold.
+Highly latency-sensitive protocols may wish to reduce the threshold to a few seconds to better suit their needs.
+Please also see the section below on [latency mitigations](#latency) for additional ideas on how latency-sensitive protocols can minimize the impact of oracle latency.
+
+## Latency
+
+Developers integrating Pyth Network price feeds should account for the difference in latency between on-chain oracles and off-chain sources (e.g. centralized exchanges).
+Although Pyth Network is designed with low latency in mind, no on-chain oracle can match the latency of an off-chain source due to the added overhead for consensus and security.
+The threat model for integrating protocols should assume that adversaries see price changes a short time before the protocol does.
+In this threat model, protocol designers should avoid situations where a Pyth price update must race against an adversary's transaction.
+Adversaries are highly likely to win these races, as they have a head start, and sophisticated adversaries can additionally optimize their network latencies or pay miners for priority blockspace.
+
+### Latency Mitigations for Derivative Protocols[^1]
+
+Derivative protocols are encouraged to consider the following strategies to mitigate the impact of oracle latency:
+
+1. **Use Delayed Settlement**: Derivative protocols can introduce a delay between the time an order is created and the time it is executed. This delay gives the protocol time to observe price changes and reject trades/transactions that profit over latency.
+   Suppose a user submits a trade transaction at a time `t`. The protocol should execute the trade by using the price at the time `t`, which will be available to the protocol after a short delay.
+   The protocol can fetch this price update of a specific timestamp from [Hermes](https://hermes.pyth.network/docs/#/rest/timestamp_price_updates) and can use [`parsePriceFeedUpdates()`](https://api-reference.pyth.network/price-feeds/evm/parsePriceFeedUpdates) to parse the prices and submit to prevent price frontrunning.
+
+1. **Use a Spread**: Pyth provides a confidence interval for each price update. Derivative protocols can use this confidence interval to determine the range in which the true price probably lies.
+   By using the lower bound of the confidence interval, derivative protocols can protect themselves from price manipulation that drives the price down. By using the upper bound of the confidence interval, derivative protocols can protect themselves from price manipulation that drives the price up.
+
+1. **Enforce Position Holding**: Derivative protocols can enforce hold times on positions to prevent users from exploiting oracle latency.
+   For example, a protocol could require users to hold an asset or a position for a certain period before they can trade or close it.
+   This hold time gives the protocol time to observe price changes and reject trades that profit over latency.
+
+## Confidence Intervals
+
+At every point in time, Pyth publishes both a price and a confidence interval for each product. For example, Pyth may publish the current price of bitcoin as \$50000 ± \$10. Pyth publishes a confidence interval because, in real markets, there is _no one single price for a product_. For example, at any given time, bitcoin trades at different prices at different venues around the world. While these prices are typically similar, they can diverge for a number of reasons, such as when a cryptocurrency exchange blocks withdrawals on an asset. If this happens, prices diverge because arbitrageurs can no longer bring prices across exchanges into line. Alternatively, prices on different venues can differ simply because an asset is highly volatile at a particular point in time. At such times, bid/ask spreads tend to be wider, and trades on different markets at around the same time tend to occur at a wider range of prices.
+
+In a Pyth feed, each publisher specifies an interval `(p_i-c_i, p_i+c_i)` in the form of their price and confidence submission. This interval is intended to achieve 95% coverage, i.e. the publisher expresses the belief that this interval contains the “true” price with 95% probability. The resulting aggregate interval `(μ-σ, μ+σ)`, where `μ` represents the aggregate price and `σ` represents the aggregate confidence, is a good estimate of a range in which the true price lies.
+
+To explain this, consider two cases of publisher estimates. In the first case, there is 100% overlap of all the publishers’ intervals, i.e. each publisher submits the same interval `(p-c, p+c)`. In this case, the aggregate confidence interval is exactly that interval, so the aggregate confidence interval provides 100% coverage of the publishers’ intervals. This first case represents normal operating conditions, where most publishers agree about the price of an asset.
+
+In the second case, each publisher specifies an interval that is disjoint from each of the other publishers’ intervals. In this case, the aggregate confidence interval can be seen to contain at least the 25th percentile and at least the 75th percentile of the set of points consisting of each of the publisher’s price, price plus confidence, and price plus confidence. As a result, the aggregate confidence interval is somewhat analogous to an interquartile range of the data, which is a reasonable measure of the spread of a set of points. Note that this is not an IQR of the prices alone of the publishers but rather of the set composed of the 3 points that each publisher submits. Moreover, note that the IQR does not include the most extreme publishers’ prices on either side; this property is necessary to ensure that a small group of publishers cannot manipulate the aggregate confidence interval. This second case represents an atypical scenario where publishers all disagree. Such circumstances are rare but can occur during market volatility or unusual events.
+
+The aggregate confidence interval interpolates between the two cases above as publishers’ prices begin to diverge. In situations closer to case 1 where there is significant overlap of the individual publishers’ intervals, the aggregate interval `(μ-σ, μ+σ)` will capture most of the spread of the individual publishers. In the situation where the prices look more like case 2 with greater disjointness due to different views of the price across different venues, that aggregate interval may be in some eyes an imperfect measure of spread because there may be a number of individual price intervals that lie outside the aggregate interval. In this case, a protocol has a couple of options:
+
+1. It can use a discounted price in the direction favorable to it. For example, a lending protocol valuing a user’s collateral can use the lower valuation price `μ-σ`. When valuing an outstanding loan position consisting of tokens a user has borrowed from the protocol, it can use the higher end of the interval by using the price `μ+σ`. This allows the protocol to be conservative with regard to its own health and safety when making valuations.
+2. It can decide that there is too much uncertainty when `σ/μ` exceeds some threshold and choose to pause any new activity that depends on the price of this asset.
+
+To expand upon the first option, it is recommended to use the confidence interval to protect your users from these unusual market conditions. The simplest way to do so is to use Pyth's confidence interval to compute a _range_ in which the true price probably lies. This principle is common sense. Imagine that you are lending money to a friend, and your friend pledges a bitcoin as collateral. Also imagine that Pyth says the bitcoin price is \$50000 +- \$1000. (Note that \$1000 is an unusually large confidence interval for bitcoin; the confidence interval is typically \$50 dollars). You therefore calculate that the true price is between \$49000 and \$51000. When originating the loan, you would value the bitcoin at \$49000. The lower price is conservative in this instance because it limits the amount of borrowing that is possible while the price is uncertain. On the other hand, if you were to issue a loan of bitcoin, you would value the borrowed bitcoin at \$51000. The higher price is conservative, as it protects you from allowing someone to borrow in excess during times of increased volatility.
+
+The same principle would apply if you wrote a derivative contract. If someone wants to open a derivative contract with you, you would value their collateral at the lower price. However, if you were deciding whether someone's margin limits were violated, you could value their outstanding leveraged position at the higher price. If a contract needs to be settled at a price, you could take approaches such as the following:
+
+1. Using Pyth's exponential moving average price, which represents estimates of the average price of the asset over a specified time period (e.g., over the past 1 hour). The exponential moving average price is computed such that it lessens the influence of prices with wide confidence intervals. You may find more details in [EMA Price Aggregation](./how-pyth-works/ema-price-aggregation.mdx).
+2. Using the aggregate price, which is Pyth's best estimate of the price at a single point in time. The quality of this estimate depends on the width of the confidence interval at settlement time and on occasion, it may be imprecise. However, it is the best you can do with Pyth data if you need a single price at that exact point in time.
+3. Defining the contract to depend on confidence. For example, you could create an option that refunds the option premium to the buyer (so both sides of the transaction are even) if the strike price is within the confidence interval at settlement time. You could also create a contract that delayed settlement until the confidence interval was sufficiently small. If you choose this second option, you should ensure that your contract is guaranteed to eventually settle even if the confidence interval never narrows.
+
+## Pricing Futures-Based Assets
+
+For assets like commodities, interest rates, and even volatility indices, pricing is primarily derived from futures contracts. These contracts form a series of prices for different delivery dates, collectively known as the futures curve. While the **front-month contract** is the most actively traded and often seen as the benchmark, it **doesn't** represent the current price of the asset but rather a proxy of the near-term price of the asset at the time of delivery.
+
+This reliance on futures, in the absence of a native spot price, means that market expectations, logistical constraints, amongst other factors can heavily influence the front-month price.
+For example, in times of extreme market stress, the front-month contract turn **negative** when traders avoid delivery, distorting its usefulness as a representative market signal. This happened in the case of the 2020 oil crash, where the front-month price of WTI Crude oil turned negative due to a lack of storage capacity, making applications that rely exclusively on the front-month price unreliable.
+
+Thus it is important that each contract **should have a weighted stratergy** based on the their expiration dates. As the front month approaches expiry, least weight should be allocated on this contract and the weights of the other contracts are determined proportionally. A daily re-adjusted strategy should be applied by the end user of the price feeds.
+
+##
+
+[^1]:
+    _The strategies and methodologies outlined in this page, including those addressing price latency mitigation, are provided solely for informational purposes and might not fully eliminate the discussed problems. Do your own research before using them. \
+    Refer to [Terms of Use](https://www.pyth.network/terms-of-use) for more information._

+ 17 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/aptos.mdx

@@ -0,0 +1,17 @@
+---
+title: Price Feed Contract Addresses on Aptos
+description: Find Pyth price feed contract addresses on Aptos networks
+slug: /price-feeds/core/contract-addresses/aptos
+---
+
+import CopyAddress from "../../../../../src/components/CopyAddress";
+
+Pyth is currently deployed on Aptos Mainnet, Aptos Testnet, and Movement devnet.
+
+When deploying contracts using Pyth, the [named addresses](https://diem.github.io/move/address.html#named-addresses) `pyth`, `wormhole` and `deployer` need to be defined at compile time. These addresses are the same across both Aptos Mainnet and Testnet:
+
+| Named Address | Value                                                                                                                                                                                               |
+| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `pyth`        | <CopyAddress address={`0x7e783b349d3e89cf5931af376ebeadbfab855b3fa239b7ada8f5a92fbea6b387`} url="https://aptscan.ai/accounts/0x7e783b349d3e89cf5931af376ebeadbfab855b3fa239b7ada8f5a92fbea6b387" /> |
+| `wormhole`    | <CopyAddress address={`0x5bc11445584a763c1fa7ed39081f1b920954da14e04b32440cba863d03e19625`} url="https://aptscan.ai/accounts/0x5bc11445584a763c1fa7ed39081f1b920954da14e04b32440cba863d03e19625" /> |
+| `deployer`    | <CopyAddress address={`0xb31e712b26fd295357355f6845e77c888298636609e93bc9b05f0f604049f434`} url="https://aptscan.ai/accounts/0xb31e712b26fd295357355f6845e77c888298636609e93bc9b05f0f604049f434" /> |

+ 33 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/cosmwasm.mdx

@@ -0,0 +1,33 @@
+---
+title: Price Feed Contract Addresses on CosmWasm Networks
+description: Find Pyth price feed contract addresses across CosmWasm ecosystems
+slug: /price-feeds/core/contract-addresses/cosmwasm
+---
+
+Pyth is currently available on the following cosmwasm chains:
+
+### Stable
+
+| Network           | Contract address                                                     |
+| ----------------- | -------------------------------------------------------------------- |
+| Injective Mainnet | `inj12j43nf2f0qumnt2zrrmpvnsqgzndxefujlvr08`                         |
+| Osmosis Mainnet   | `osmo13ge29x4e2s63a8ytz2px8gurtyznmue4a69n5275692v3qn3ks8q7cwck7`    |
+| Neutron Mainnet   | `neutron1m2emc93m9gpwgsrsf2vylv9xvgqh654630v7dfrhrkmr5slly53spg85wv` |
+| Xion Mainnet      | `xion18nsqwhfwnqzs4vkxdr02x40awm0gz9pl0wn4ecsl8qqra2vxqppq57qx5a`    |
+| Osmosis Test 5    | `osmo1hpdzqku55lmfmptpyj6wdlugqs5etr6teqf7r4yqjjrxjznjhtuqqu5kdh`    |
+| Sei Atlantic 2    | `sei1w2rxq6eckak47s25crxlhmq96fzjwdtjgdwavn56ggc0qvxvw7rqczxyfy`     |
+| Sei Pacific 1     | `sei15d2tyq2jzxmpg32y3am3w62dts32qgzmds9qnr6c87r0gwwr7ynqal0x38`     |
+| Neutron Pion 1    | `neutron15ldst8t80982akgr8w8ekcytejzkmfpgdkeq4xgtge48qs7435jqp87u3t` |
+| Juno              | `juno1eacsrua27njc35pxz37y97gmcjs899t59f8pf0rkejjyvtmhws5q6lxsdd`    |
+| Xion testnet 2    | `xion1wptw89weav8tnpgxg4fyhcahgk8yy99lka3w308536ktadkvjwxqe463hl`    |
+
+### Beta
+
+| Network        | Contract address                                                     |
+| -------------- | -------------------------------------------------------------------- |
+| Injective      | `inj18rlflp3735h25jmjx97d22c72sxk260amdjxlu`                         |
+| Osmosis Test 5 | `osmo1lltupx02sj99suakmuk4sr4ppqf34ajedaxut3ukjwkv6469erwqtpg9t3`    |
+| Sei Atlantic 2 | `sei1kpntez76v38yuxhhaaahdmvjxnr5tkr8tq077smefs7uw70rj5yqw2aewy`     |
+| Neutron Pion 1 | `neutron16zwrmx3zgggmxhzau86xfycm42cr4sj888hdvzsxya3qarp6zhhqzhlkvz` |
+| Juno           | `juno1h93q9kwlnfml2gum4zj54al9w4jdmuhtzrh6vhycnemsqlqv9l9snnznxs`    |
+| Rol            | `rol1pvrwmjuusn9wh34j7y520g8gumuy9xtl3gvprlljfdpwju3x7ucszdyfs8`     |

+ 206 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/evm.mdx

@@ -0,0 +1,206 @@
+---
+title: Price Feed Contract Addresses on EVM Networks
+description: Find Pyth price feed contract addresses on supported EVM mainnets and testnets
+slug: /price-feeds/core/contract-addresses/evm
+---
+
+import CopyAddress from "../../../../../src/components/CopyAddress";
+
+Pyth is currently available on the EVM networks below using Pyth Stable price sources that are accessible via Hermes Stable.
+
+## Mainnets
+
+| Network           | Contract address                                                                                                                                                     |
+| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| 0G                | <CopyAddress address="0x2880ab155794e7179c9ee2e38200202908c17b43" url="https://chainscan.0g.ai/address/0x2880ab155794e7179c9ee2e38200202908c17b43" />                |
+| Abstract          | <CopyAddress address="0x8739d5024B5143278E2b15Bd9e7C26f6CEc658F1" url="https://abscan.org/address/0x8739d5024B5143278E2b15Bd9e7C26f6CEc658F1" />                     |
+| Apechain          | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://apechain.calderaexplorer.xyz/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />   |
+| Arbitrum          | <CopyAddress address="0xff1a0f4744e8582DF1aE09D5611b887B6a12925C" url="https://arbiscan.io/address/0xff1a0f4744e8582df1ae09d5611b887b6a12925c" />                    |
+| Aurora            | <CopyAddress address="0xF89C7b475821EC3fDC2dC8099032c05c6c0c9AB9" url="https://explorer.aurora.dev/address/0xF89C7b475821EC3fDC2dC8099032c05c6c0c9AB9" />            |
+| Avalanche         | <CopyAddress address="0x4305FB66699C3B2702D4d05CF36551390A4c69C6" url="https://snowtrace.io/address/0x4305fb66699c3b2702d4d05cf36551390a4c69c6" />                   |
+| Berachain         | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://berascan.com/address/0x2880ab155794e7179c9ee2e38200202908c17b43" />                   |
+| Bittensor         | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://evm.taostats.io/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                |
+| Blast             | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://blastscan.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                   |
+| BNB               | <CopyAddress address="0x4D7E825f80bDf85e913E0DD2A2D54927e9dE1594" url="https://bscscan.com/address/0x4d7e825f80bdf85e913e0dd2a2d54927e9de1594" />                    |
+| BTTC              | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://bttcscan.com/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                   |
+| Base              | <CopyAddress address="0x8250f4aF4B972684F7b336503E2D6dFeDeB1487a" url="https://basescan.org/address/0x8250f4aF4B972684F7b336503E2D6dFeDeB1487a" />                   |
+| Boba              | <CopyAddress address="0x4374e5a8b9C22271E9EB878A2AA31DE97DF15DAF" url="https://bobascan.com/address/0x4374e5a8b9C22271E9EB878A2AA31DE97DF15DAF" />                   |
+| Camp Network      | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://camp.cloud.blockscout.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />      |
+| Canto             | <CopyAddress address="0x98046Bd286715D3B0BC227Dd7a956b83D8978603" url="https://canto.dex.guru/address/0x78357316239040e19fc823372cc179ca75e64b81" />                 |
+| Celo              | <CopyAddress address="0xff1a0f4744e8582DF1aE09D5611b887B6a12925C" url="https://celoscan.io/address/0xff1a0f4744e8582df1ae09d5611b887b6a12925c" />                    |
+| Chiliz            | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://scan.chiliz.com/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                |
+| Conflux eSpace    | <CopyAddress address="0xe9d69CdD6Fe41e7B621B4A688C5D1a68cB5c8ADc" url="https://evm.confluxscan.io/address/0xe9d69cdd6fe41e7b621b4a688c5d1a68cb5c8adc" />             |
+| Core DAO          | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://scan.coredao.org/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />               |
+| Cronos            | <CopyAddress address="0xE0d0e68297772Dd5a1f1D99897c581E2082dbA5B" url="https://cronoscan.com/address/0xe0d0e68297772dd5a1f1d99897c581e2082dba5b" />                  |
+| Cronos zkEVM      | <CopyAddress address="0x056f829183Ec806A78c26C98961678c24faB71af" url="https://explorer.zkevm.cronos.org/address/0x056f829183ec806a78c26c98961678c24fab71af" />      |
+| EOS               | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://explorer.evm.eosnetwork.com/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />    |
+| EVMOS             | <CopyAddress address="0x354bF866A4B006C9AF9d9e06d9364217A8616E12" url="https://www.mintscan.io/evmos/evm/contract/0x354bF866A4B006C9AF9d9e06d9364217A8616E12" />     |
+| Ethereum          | <CopyAddress address="0x4305FB66699C3B2702D4d05CF36551390A4c69C6" url="https://etherscan.io/address/0x4305fb66699c3b2702d4d05cf36551390a4c69c6" />                   |
+| Etherlink         | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer.etherlink.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />         |
+| Eventum           | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer.evedex.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />            |
+| Fantom            | <CopyAddress address="0xff1a0f4744e8582DF1aE09D5611b887B6a12925C" url="https://explorer.fantom.network/address/0xff1a0f4744e8582DF1aE09D5611b887B6a12925C" />        |
+| Filecoin          | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://filfox.info/en/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                 |
+| Flow              | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://evm.flowscan.io/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                |
+| Gnosis            | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://gnosisscan.io/address/0x2880ab155794e7179c9ee2e38200202908c17b43" />                  |
+| Gravity           | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer.gravity.xyz/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />           |
+| Hedera            | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://hashscan.io/mainnet/contract/0.0.4622850" />                                          |
+| Hemi              | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer.hemi.xyz/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />              |
+| Horizen EON       | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://eon-explorer.horizenlabs.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />    |
+| HyperEVM          | <CopyAddress address="0xe9d69CdD6Fe41e7B621B4A688C5D1a68cB5c8ADc" url="https://purrsec.com/address/0xe9d69cdd6fe41e7b621b4a688c5d1a68cb5c8adc" />                    |
+| Injective EVM     | <CopyAddress address="0x36825bf3Fbdf5a29E2d5148bfe7Dcf7B5639e320" url="https://blockscout.injective.network/address/0x36825bf3Fbdf5a29E2d5148bfe7Dcf7B5639e320" />   |
+| Injective inEVM   | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://inevm.calderaexplorer.xyz/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />      |
+| Ink               | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer.inkonchain.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />        |
+| Iota              | <CopyAddress address="0x8D254a21b3C86D32F7179855531CE99164721933" url="https://explorer.evm.iota.org/address/0x8D254a21b3C86D32F7179855531CE99164721933" />          |
+| Kava              | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://explorer.kava.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />               |
+| KCC               | <CopyAddress address="0xE0d0e68297772Dd5a1f1D99897c581E2082dbA5B" url="https://explorer.kcc.io/en/address/0xe0d0e68297772dd5a1f1d99897c581e2082dba5b" />             |
+| Kaia              | <CopyAddress address="0x2880ab155794e7179c9ee2e38200202908c17b43" url="https://kaiascan.io/address/0x2880ab155794e7179c9ee2e38200202908c17b43" />                    |
+| LightLink Phoenix | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://phoenix.lightlink.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />           |
+| Linea             | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://explorer.linea.build/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />           |
+| Manta             | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://pacific-explorer.manta.network/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" /> |
+| Mantle            | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://mantlescan.xyz/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                 |
+| Merlin            | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://scan.merlinchain.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />            |
+| Meter             | <CopyAddress address="0xbFe3f445653f2136b2FD1e6DdDb5676392E3AF16" url="https://scan.meter.io/address/0xbfe3f445653f2136b2fd1e6dddb5676392e3af16" />                  |
+| Mezo              | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer.mezo.org/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />              |
+| Mode              | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://explorer.mode.network/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />          |
+| Morph             | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer.morphl2.io/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />            |
+| Neon              | <CopyAddress address="0x7f2dB085eFC3560AFF33865dD727225d91B4f9A5" url="https://neonscan.org/address/0x7f2dB085eFC3560AFF33865dD727225d91B4f9A5" />                   |
+| OpBNB             | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://opbnbscan.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                  |
+| Optimism          | <CopyAddress address="0xff1a0f4744e8582DF1aE09D5611b887B6a12925C" url="https://optimistic.etherscan.io/address/0xff1a0f4744e8582df1ae09d5611b887b6a12925c" />        |
+| Plasma            | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://plasmascan.to/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                  |
+| Polygon           | <CopyAddress address="0xff1a0f4744e8582DF1aE09D5611b887B6a12925C" url="https://polygonscan.com/address/0xff1a0f4744e8582df1ae09d5611b887b6a12925c" />                |
+| Polygon zkEVM     | <CopyAddress address="0xC5E56d6b40F3e3B5fbfa266bCd35C37426537c65" url="https://www.oklink.com/polygon-zkevm/address/0xc5e56d6b40f3e3b5fbfa266bcd35c37426537c65" />   |
+| Polynomial        | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer.polynomial.fi/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />         |
+| Ronin             | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://app.roninchain.com/address/0x2880ab155794e7179c9ee2e38200202908c17b43" />             |
+| Scroll            | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://blockscout.scroll.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />           |
+| Superseed         | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer.superseed.xyz/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />         |
+| Sei EVM           | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://seitrace.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43?chain=pacific-1" />   |
+| Shimmer           | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://explorer.evm.shimmer.network/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />   |
+| Skate             | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://scan.skatechain.org/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />            |
+| Sonic             | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://sonicscan.org/address/0x2880ab155794e7179c9ee2e38200202908c17b43" />                  |
+| Soneium           | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://soneium.blockscout.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />         |
+| Story Protocol    | <CopyAddress address="0xD458261E832415CFd3BAE5E416FdF3230ce6F134" url="https://www.storyscan.xyz/address/0xD458261E832415CFd3BAE5E416FdF3230ce6F134" />              |
+| Swellchain        | <CopyAddress address="0xDd24F84d36BF92C65F92307595335bdFab5Bbd21" url="https://explorer.swellnetwork.io/address/0xDd24F84d36BF92C65F92307595335bdFab5Bbd21" />       |
+| Taiko             | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://taikoscan.network/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />              |
+| Unichain          | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://uniscan.xyz/address/0x2880ab155794e7179c9ee2e38200202908c17b43" />                    |
+| Viction           | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://tomoscan.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                    |
+| WEMIX             | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://explorer.wemix.com/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />             |
+| Worldchain        | <CopyAddress address="0xe9d69cdd6fe41e7b621b4a688c5d1a68cb5c8adc" url="https://worldscan.org/address/0xe9d69cdd6fe41e7b621b4a688c5d1a68cb5c8adc" />                  |
+| ZKFair            | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://scan.zkfair.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                 |
+| zkSync Era        | <CopyAddress address="0xf087c864AEccFb6A2Bf1Af6A0382B0d0f6c5D834" url="https://explorer.zksync.io/address/0xf087c864AEccFb6A2Bf1Af6A0382B0d0f6c5D834" />             |
+| zetachain         | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://zetachain.blockscout.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />       |
+
+## Testnets
+
+| Network                           | Contract address                                                                                                                                                                                        |
+| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Abstract testnet                  | <CopyAddress address="0x47F2A9BDAd52d65b66287253cf5ca0D2b763b486" url="https://explorer.testnet.abs.xyz/address/0x47F2A9BDAd52d65b66287253cf5ca0D2b763b486" />                                          |
+| ApeChain (testnet)                | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://curtis.explorer.caldera.xyz/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                       |
+| Arbitrum Blueberry (testnet)      | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://arb-blueberry.gelatoscout.com/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                     |
+| Arbitrum Sepolia (testnet)        | <CopyAddress address="0x4374e5a8b9C22271E9EB878A2AA31DE97DF15DAF" url="https://sepolia-explorer.arbitrum.io/address/0x4374e5a8b9C22271E9EB878A2AA31DE97DF15DAF" />                                      |
+| Aurora testnet                    | <CopyAddress address="0x74f09cb3c7e2A01865f424FD14F6dc9A14E3e94E" url="https://explorer.testnet.aurora.dev/address/0x74f09cb3c7e2A01865f424FD14F6dc9A14E3e94E" />                                       |
+| BNB testnet                       | <CopyAddress address="0x5744Cbf430D99456a0A8771208b674F27f8EF0Fb" url="https://testnet.bscscan.com/address/0x5744Cbf430D99456a0A8771208b674F27f8EF0Fb" />                                               |
+| BTTC testnet                      | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://testnet.bttcscan.com/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                              |
+| Base Sepolia (testnet)            | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://base-sepolia.blockscout.com/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                       |
+| Berachain Bepolia testnet         | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://bepolia.beratrail.io/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                              |
+| Bittensor testnet                 | <CopyAddress address="0x41955476936DdA8d0fA98b8d1778172F7E4fCcA1" url="" />                                                                                                                             |
+| Blast Sepolia                     | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://testnet.blastscan.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                              |
+| Ble testnet                       | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer-ethena-testnet-0.t.conduit.xyz/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                           |
+| Boba Goerli (testnet)             | <CopyAddress address="0x8D254a21b3C86D32F7179855531CE99164721933" url="https://testnet.bobascan.com/address/0x8D254a21b3C86D32F7179855531CE99164721933" />                                              |
+| Boba Sepolia (testnet)            | <CopyAddress address="0x8D254a21b3C86D32F7179855531CE99164721933" url="https://28882.testnet.routescan.io/address/0x8D254a21b3C86D32F7179855531CE99164721933" />                                        |
+| Canto testnet                     | <CopyAddress address="0x26DD80569a8B23768A1d80869Ed7339e07595E85" url="https://testnet-explorer.canto.neobase.one/address/0x26DD80569a8B23768A1d80869Ed7339e07595E85" />                                |
+| Celo Alfajores (testnet)          | <CopyAddress address="0x74f09cb3c7e2A01865f424FD14F6dc9A14E3e94E" url="https://explorer.celo.org/alfajores/address/0x74f09cb3c7e2A01865f424FD14F6dc9A14E3e94E" />                                       |
+| Chiado (Gnosis testnet)           | <CopyAddress address="0x98046Bd286715D3B0BC227Dd7a956b83D8978603" url="https://blockscout.com/gnosis/chiado/address/0x98046Bd286715D3B0BC227Dd7a956b83D8978603" />                                      |
+| Chiliz testnet                    | <CopyAddress address="0x23f0e8FAeE7bbb405E7A7C3d60138FCfd43d7509" url="https://spicy-explorer.chiliz.com/address/0x23f0e8FAeE7bbb405E7A7C3d60138FCfd43d7509" />                                         |
+| Conflux eSpace testnet            | <CopyAddress address="0xDd24F84d36BF92C65F92307595335bdFab5Bbd21" url="https://evmtestnet.confluxscan.io/address/0xDd24F84d36BF92C65F92307595335bdFab5Bbd21" />                                         |
+| Core DAO testnet                  | <CopyAddress address="0x8D254a21b3C86D32F7179855531CE99164721933" url="https://scan.test.btcs.network/address/0x8D254a21b3C86D32F7179855531CE99164721933" />                                            |
+| Converge testnet                  | <CopyAddress address="0x87047526937246727E4869C5f76A347160e08672" url="https://explorer-converge-testnet-1.t.conduit.xyz/address/0x87047526937246727E4869C5f76A347160e08672" />                         |
+| Cronos testnet                    | <CopyAddress address="0x36825bf3Fbdf5a29E2d5148bfe7Dcf7B5639e320" url="https://cronos.org/explorer/testnet3/address/0x36825bf3Fbdf5a29E2d5148bfe7Dcf7B5639e320" />                                      |
+| Cronos zkEVM Testnet              | <CopyAddress address="0xB1DB1498902F08E16E11F1a423ec9CCB9537E1D6" url="https://explorer.zkevm.cronos.org/testnet/address/0xb1db1498902f08e16e11f1a423ec9ccb9537e1d6" />                                 |
+| Dela Deperp Testnet               | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://sepolia-delascan.deperp.com/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                       |
+| Dela Deperp Mithreum Testnet      | <CopyAddress address="0xe9d69CdD6Fe41e7B621B4A688C5D1a68cB5c8ADc" url="https://mithreum-sepolia.deperp.com/address/0xe9d69CdD6Fe41e7B621B4A688C5D1a68cB5c8ADc" />                                       |
+| EOS testnet                       | <CopyAddress address="0x0708325268dF9F66270F1401206434524814508b" url="https://explorer.testnet.evm.eosnetwork.com/address/0x0708325268dF9F66270F1401206434524814508b" />                               |
+| Etherlink Ghostnet testnet        | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://testnet.explorer.etherlink.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                    |
+| Etherlink Shadownet testnet       | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://shadownet.explorer.etherlink.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                  |
+| Eventum testnet                   | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://testnet-blockscout.eh-dev.app/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                     |
+| EVMOS testnet                     | <CopyAddress address="0x74f09cb3c7e2A01865f424FD14F6dc9A14E3e94E" url="https://evm.evmos.dev/address/0x74f09cb3c7e2A01865f424FD14F6dc9A14E3e94E" />                                                     |
+| Fantom testnet                    | <CopyAddress address="0x5744Cbf430D99456a0A8771208b674F27f8EF0Fb" url="https://testnet.ftmscan.com/address/0x5744Cbf430D99456a0A8771208b674F27f8EF0Fb" />                                               |
+| Filecoin calibration              | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://calibration.filfox.info/en/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                        |
+| Flow Testnet                      | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://evm-testnet.flowscan.io/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                           |
+| Fluent testnet                    | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://testnet.fluentscan.xyz/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                            |
+| Fuji (Avalanche testnet)          | <CopyAddress address="0x23f0e8FAeE7bbb405E7A7C3d60138FCfd43d7509" url="https://testnet.snowtrace.io/address/0x23f0e8FAeE7bbb405E7A7C3d60138FCfd43d7509" />                                              |
+| Giwa Testnet                      | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://sepolia-explorer.giwa.io/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                          |
+| Hedera testnet                    | <CopyAddress address="0xa2aa501b19aff244d90cc15a4cf739d2725b5729" url="https://hashscan.io/testnet/contract/0.0.3042133" />                                                                             |
+| Hemi testnet                      | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://testnet.explorer.hemi.xyz/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                         |
+| Hoodi                             | <CopyAddress address="0x87047526937246727E4869C5f76A347160e08672" url="https://hoodi.etherscan.io/address/0x87047526937246727E4869C5f76A347160e08672" />                                                |
+| HyperEVM testnet                  | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://testnet.purrsec.com/address/0x2880ab155794e7179c9ee2e38200202908c17b43" />                                               |
+| Injective inEVM testnet           | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://inevm-testnet.explorer.caldera.xyz/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                |
+| Kakarot Sepolia testnet           | <CopyAddress address="0xe9d69CdD6Fe41e7B621B4A688C5D1a68cB5c8ADc" url="https://sepolia.kakarotscan.org/address/0xe9d69CdD6Fe41e7B621B4A688C5D1a68cB5c8ADc" />                                           |
+| Kava testnet                      | <CopyAddress address="0xfA25E653b44586dBbe27eE9d252192F0e4956683" url="https://explorer.testnet.kava.io/address/0xfA25E653b44586dBbe27eE9d252192F0e4956683" />                                          |
+| KCC testnet                       | <CopyAddress address="0x74f09cb3c7e2A01865f424FD14F6dc9A14E3e94E" url="https://scan-testnet.kcc.network/address/0x74f09cb3c7e2A01865f424FD14F6dc9A14E3e94E" />                                          |
+| Klaytn                            | <CopyAddress address="0x2880ab155794e7179c9ee2e38200202908c17b43" url="https://baobab.klaytnfinder.io/account/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                            |
+| Injective EVM                     | <CopyAddress address="0x23f0e8FAeE7bbb405E7A7C3d60138FCfd43d7509" url="https://testnet.blockscout.injective.network/address/0x23f0e8FAeE7bbb405E7A7C3d60138FCfd43d7509" />                              |
+| Ink Sepolia                       | <CopyAddress address="0x2880ab155794e7179c9ee2e38200202908c17b43" url="https://explorer-sepolia.inkonchain.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                   |
+| Kaia testnet                      | <CopyAddress address="0x2880ab155794e7179c9ee2e38200202908c17b43" url="https://kairos.kaiascan.io/address/0x2880ab155794e7179c9ee2e38200202908c17b43?tabId=txList&page=1" />                            |
+| LightLink Pegasus                 | <CopyAddress address="0x5D289Ad1CE59fCC25b6892e7A303dfFf3a9f7167" url="https://pegasus.lightlink.io/address/0x5D289Ad1CE59fCC25b6892e7A303dfFf3a9f7167" />                                              |
+| Linea Goerli                      | <CopyAddress address="0xdF21D137Aadc95588205586636710ca2890538d5" url="https://goerli.lineascan.build/address/0xdF21D137Aadc95588205586636710ca2890538d5" />                                            |
+| Linea Sepolia                     | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://sepolia.lineascan.build/address/0xa2aa501b19aff244d90cc15a4cf739d2725b5729" />                                           |
+| Manta testnet                     | <CopyAddress address="0x41c9e39574F40Ad34c79f1C99B66A45eFB830d4c" url="https://pacific-explorer.testnet.manta.network/address/0x41c9e39574F40Ad34c79f1C99B66A45eFB830d4c" />                            |
+| Manta Sepolia                     | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://pacific-explorer.sepolia-testnet.manta.network/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                    |
+| Mantle sepolia                    | <CopyAddress address="0x98046Bd286715D3B0BC227Dd7a956b83D8978603" url="https://explorer.sepolia.mantle.xyz/address/0x98046Bd286715D3B0BC227Dd7a956b83D8978603" />                                       |
+| MegaEth Testnet                   | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://www.megaexplorer.xyz/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                              |
+| Merlin testnet                    | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://testnet-scan.merlinchain.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                       |
+| Merlin testnet V2                 | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://testnet-scan-v2.merlinchain.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                    |
+| Meter testnet                     | <CopyAddress address="0x5a71C07a0588074443545eE0c08fb0375564c3E4" url="https://scan-warringstakes.meter.io/address/0x5a71C07a0588074443545eE0c08fb0375564c3E4" />                                       |
+| Mezo testnet                      | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer.test.mezo.org/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                            |
+| Mode testnet                      | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://sepolia.explorer.mode.network/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                     |
+| Monad testnet                     | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://testnet.monadexplorer.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                         |
+| Monad testnet - beta oracle       | <CopyAddress address="0xad2B52D2af1a9bD5c561894Cdd84f7505e1CD0B5" url="https://testnet.monadexplorer.com/address/0xad2B52D2af1a9bD5c561894Cdd84f7505e1CD0B5" />                                         |
+| Morph Hoodi                       | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer-hoodi.morphl2.io/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                         |
+| Morph Holesky testnet             | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://explorer-holesky.morphl2.io/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                       |
+| Morph testnet                     | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://explorer-testnet.morphl2.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                       |
+| Mumbai (Polygon testnet)          | <CopyAddress address="0xFC6bd9F9f0c6481c6Af3A7Eb46b296A5B85ed379" url="https://mumbai.polygonscan.com/address/0xFC6bd9F9f0c6481c6Af3A7Eb46b296A5B85ed379" />                                            |
+| Neon devnet                       | <CopyAddress address="0x0708325268dF9F66270F1401206434524814508b" url="https://devnet.neonscan.org/address/0x0708325268dF9F66270F1401206434524814508b" />                                               |
+| Olive Testnet                     | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://olive-network-testnet.explorer.caldera.xyz/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                        |
+| OpBNB Testnet                     | <CopyAddress address="0x41c9e39574F40Ad34c79f1C99B66A45eFB830d4c" url="https://testnet.opbnbscan.com/address/0x41c9e39574F40Ad34c79f1C99B66A45eFB830d4c" />                                             |
+| Optimism Goerli (testnet)         | <CopyAddress address="0xDd24F84d36BF92C65F92307595335bdFab5Bbd21" url="https://goerli-optimism.etherscan.io/address/0xDd24F84d36BF92C65F92307595335bdFab5Bbd21" />                                      |
+| Optimism Sepolia (testnet)        | <CopyAddress address="0x0708325268dF9F66270F1401206434524814508b" url="https://optimism-sepolia.blockscout.com/address/0x0708325268dF9F66270F1401206434524814508b" />                                   |
+| Optimism Celestia Raspberry       | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://opcelestia-raspberry.gelatoscout.com/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                              |
+| Orange Avalanche Subnet (testnet) | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://subnets-test.avax.network/orangetest/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                              |
+| Polygon Amoy testnet              | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://www.oklink.com/amoy/address/0x2880ab155794e7179c9ee2e38200202908c17b43" />                                               |
+| Polygon Blackberry testnet        | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://polygon-blackberry.gelatoscout.com/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                |
+| Polygon zkEVM testnet             | <CopyAddress address="0xFf255f800044225f54Af4510332Aa3D67CC77635" url="https://www.oklink.com/polygon-zkevm-testnet/address/0xff255f800044225f54af4510332aa3d67cc77635" />                              |
+| Polynomial testnet                | <CopyAddress address="0x23f0e8FAeE7bbb405E7A7C3d60138FCfd43d7509" url="https://explorerl2new-polynomial-network-testnet-x0tryg8u1c.t.conduit.xyz/address/0x23f0e8FAeE7bbb405E7A7C3d60138FCfd43d7509" /> |
+| Reya testnet                      | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://reya-cronos.blockscout.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                        |
+| Saigon (Ronin testnet)            | <CopyAddress address="0xEbe57e8045F2F230872523bbff7374986E45C486" url="https://saigon-app.roninchain.com/address/0xEbe57e8045F2F230872523bbff7374986E45C486" />                                         |
+| Sei EVM testnet                   | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://seitrace.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43?chain=atlantic-2" />                                     |
+| Scroll Sepolia                    | <CopyAddress address="0x41c9e39574F40Ad34c79f1C99B66A45eFB830d4c" url="https://sepolia-blockscout.scroll.io/address/0x41c9e39574F40Ad34c79f1C99B66A45eFB830d4c" />                                      |
+| Sepolia (Ethereum testnet)        | <CopyAddress address="0xDd24F84d36BF92C65F92307595335bdFab5Bbd21" url="https://sepolia.etherscan.io/address/0xDd24F84d36BF92C65F92307595335bdFab5Bbd21" />                                              |
+| Shimmer testnet                   | <CopyAddress address="0x8D254a21b3C86D32F7179855531CE99164721933" url="https://explorer.evm.testnet.shimmer.network/address/0x8D254a21b3C86D32F7179855531CE99164721933" />                              |
+| Skate testnet                     | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://testnet.skalenodes.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                            |
+| Soneium (testnet)                 | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://soneium-minato.blockscout.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                     |
+| Sonic Blaze Testnet               | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://blaze.soniclabs.com/address/0x2880ab155794e7179c9ee2e38200202908c17b43" />                                               |
+| Sonic New Testnet                 | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://testnet.sonicscan.org/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                             |
+| Story Testnet                     | <CopyAddress address="0x36825bf3Fbdf5a29E2d5148bfe7Dcf7B5639e320" url="https://aeneid.storyscan.xyz/address/0x36825bf3Fbdf5a29E2d5148bfe7Dcf7B5639e320" />                                              |
+| Superseed Testnet                 | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://sepolia-explorer.superseed.xyz/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                    |
+| Swellchain Testnet                | <CopyAddress address="0x26DD80569a8B23768A1d80869Ed7339e07595E85" url="https://swell-testnet-explorer.alt.technology/address/0x26DD80569a8B23768A1d80869Ed7339e07595E85" />                             |
+| Tabi Testnet                      | <CopyAddress address="0x5744Cbf430D99456a0A8771208b674F27f8EF0Fb" url="https://testnetv2.tabiscan.com/address/0x5744Cbf430D99456a0A8771208b674F27f8EF0Fb" />                                            |
+| Taiko Hekla                       | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://hekla.taikoscan.network/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                           |
+| Taiko Hoodi                       | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://hoodi.taikoscan.network/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                           |
+| Unichain Sepolia                  | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://unichain-sepolia.blockscout.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                                   |
+| Viction testnet                   | <CopyAddress address="0x5D289Ad1CE59fCC25b6892e7A303dfFf3a9f7167" url="https://testnet.tomoscan.io/address/0x5D289Ad1CE59fCC25b6892e7A303dfFf3a9f7167" />                                               |
+| WEMIX testnet                     | <CopyAddress address="0x26DD80569a8B23768A1d80869Ed7339e07595E85" url="https://explorer.test.wemix.com/address/0x26DD80569a8B23768A1d80869Ed7339e07595E85" />                                           |
+| Worldchain testnet                | <CopyAddress address="0x2880aB155794e7179c9eE2e38200202908C17B43" url="https://worldchain-sepolia.explorer.alchemy.com/address/0x2880aB155794e7179c9eE2e38200202908C17B43" />                           |
+| ZKFair testnet                    | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://testnet-scan.zkfair.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" />                                            |
+| zetachain testnet                 | <CopyAddress address="0x0708325268dF9F66270F1401206434524814508b" url="https://explorer.zetachain.com/address/0x0708325268dF9F66270F1401206434524814508b" />                                            |
+| zkSync Era Goerli (testnet)       | <CopyAddress address="0x8739d5024B5143278E2b15Bd9e7C26f6CEc658F1" url="https://goerli.explorer.zksync.io/address/0x8739d5024B5143278E2b15Bd9e7C26f6CEc658F1" />                                         |
+| zkSync Era Sepolia (testnet)      | <CopyAddress address="0x056f829183Ec806A78c26C98961678c24faB71af" url="https://sepolia.explorer.zksync.io/address/0x056f829183Ec806A78c26C98961678c24faB71af" />                                        |
+
+Pyth is available on the following network using Pyth Beta price sources:
+
+| Network              | Contract address                                                                                                                                                   |
+| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| Horizen GOBI testnet | <CopyAddress address="0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" url="https://gobi-explorer.horizenlabs.io/address/0xA2aa501b19aff244D90cc15a4Cf739D2725B5729" /> |
+
+## Price Feed IDs
+
+The price feed IDs for EVM chains are available [here](../price-feeds.mdx)

+ 14 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/fuel.mdx

@@ -0,0 +1,14 @@
+---
+title: Price Feed Contract Addresses on Fuel
+description: Find Pyth price feed contract addresses on Fuel mainnet and testnet
+slug: /price-feeds/core/contract-addresses/fuel
+---
+
+import CopyAddress from "../../../../../src/components/CopyAddress";
+
+Pyth is currently deployed on Fuel Mainnet and Fuel Testnet.
+
+| Network      | Contract address                                                                                                                                                                                                  |
+| ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Fuel Mainnet | <CopyAddress address={`0x1c86fdd9e0e7bc0d2ae1bf6817ef4834ffa7247655701ee1b031b52a24c523da`} url="https://app.fuel.network/contract/0x1c86fdd9e0e7bc0d2ae1bf6817ef4834ffa7247655701ee1b031b52a24c523da" />         |
+| Fuel Testnet | <CopyAddress address={`0x5d17f54708afd01530c2e0ffb123cd21e92461aae8450de2cc08d0fd330cf240`} url="https://app-testnet.fuel.network/contract/0x5d17f54708afd01530c2e0ffb123cd21e92461aae8450de2cc08d0fd330cf240" /> |

+ 23 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/index.mdx

@@ -0,0 +1,23 @@
+---
+title: Contract Addresses
+description: Find deployed Pyth contract addresses across supported blockchains
+slug: /price-feeds/core/contract-addresses
+---
+
+The following sections list the addresses of deployed Pyth Price Feed contracts across blockchains.
+The contracts are split by ecosystem into several different documents:
+
+- [EVM](./contract-addresses/evm)
+- [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)
+- [CosmWasm](./contract-addresses/cosmwasm)
+- [NEAR](./contract-addresses/near)
+- [Starknet](./contract-addresses/starknet)
+- [Pythnet](./contract-addresses/pythnet)
+
+Please see the relevant ecosystem document to find the Pyth contract address on your blockchain of choice.

+ 25 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/iota.mdx

@@ -0,0 +1,25 @@
+---
+title: Price Feed Contract Addresses on IOTA
+description: Find Pyth price feed contract addresses on IOTA networks
+slug: /price-feeds/core/contract-addresses/iota
+---
+
+Pyth is currently deployed on IOTA mainnet and testnet.
+
+#### IOTA mainnet
+
+| Name                | Address                                                                                                                                                                     |
+| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Pyth State ID       | [`0x6bc33855c7675e006f55609f61eebb1c8a104d8973a698ee9efd3127c210b37f`](https://explorer.iota.org/object/0x6bc33855c7675e006f55609f61eebb1c8a104d8973a698ee9efd3127c210b37f) |
+| Pyth Package ID     | [`0x7792c84e1f8683dac893126712f7cf3ba5fcc82450839f0a481215f60199769f`](https://explorer.iota.org/object/0x7792c84e1f8683dac893126712f7cf3ba5fcc82450839f0a481215f60199769f) |
+| Wormhole State ID   | [`0xd43b448afc9dd01deb18273ec39d8f27ddd4dd46b0922383874331771b70df73`](https://explorer.iota.org/object/0xd43b448afc9dd01deb18273ec39d8f27ddd4dd46b0922383874331771b70df73) |
+| Wormhole Package ID | [`0x88b00a6f1d56966d48680ffad3b42d7a25b01c519b73732a0858e0314a960801`](https://explorer.iota.org/object/0x88b00a6f1d56966d48680ffad3b42d7a25b01c519b73732a0858e0314a960801) |
+
+#### IOTA testnet
+
+| Name                | Address                                                                                                                                                                                     |
+| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Pyth State ID       | [`0x68dda579251917b3db28e35c4df495c6e664ccc085ede867a9b773c8ebedc2c1`](https://explorer.iota.org/object/0x68dda579251917b3db28e35c4df495c6e664ccc085ede867a9b773c8ebedc2c1?network=testnet) |
+| Pyth Package ID     | [`0x23994dd119480ea614f7623520337058dca913cb1bb6e5d8d51c7b067d3ca3bb`](https://explorer.iota.org/object/0x23994dd119480ea614f7623520337058dca913cb1bb6e5d8d51c7b067d3ca3bb?network=testnet) |
+| Wormhole State ID   | [`0x8bc490f69520a97ca1b3de864c96aa2265a0cf5d90f5f3f016b2eddf0cf2af2b`](https://explorer.iota.org/object/0x8bc490f69520a97ca1b3de864c96aa2265a0cf5d90f5f3f016b2eddf0cf2af2b?network=testnet) |
+| Wormhole Package ID | [`0xfca58c557f09cddb7930588c4e2a4edbe3cdded1ac1ed2270aa2dfa8d2b9ae0d`](https://explorer.iota.org/object/0xfca58c557f09cddb7930588c4e2a4edbe3cdded1ac1ed2270aa2dfa8d2b9ae0d?network=testnet) |

+ 16 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/meta.json

@@ -0,0 +1,16 @@
+{
+  "pages": [
+    "[EVM](./contract-addresses/evm)",
+    "[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)",
+    "[CosmWasm](./contract-addresses/cosmwasm)",
+    "[NEAR](./contract-addresses/near)",
+    "[Starknet](./contract-addresses/starknet)",
+    "[Pythnet](./contract-addresses/pythnet)"
+  ]
+}

+ 19 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/movement.mdx

@@ -0,0 +1,19 @@
+---
+title: Price Feed Contract Addresses on Movement
+description: Find Pyth price feed contract addresses on Movement networks
+slug: /price-feeds/core/contract-addresses/movement
+---
+
+import CopyAddress from "../../../../../src/components/CopyAddress";
+
+## Mainnet
+
+Use the following addresses for the Movement Mainnet and testnets:
+
+| Named Address | Value                                                                                                                                                                                                             |
+| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `pyth`        | <CopyAddress address={`0x9357e76fe965c9956a76181ee49f66d51b7f9c3800182a944ed96be86301e49f`} url="https://explorer.movementlabs.xyz/account/0x9357e76fe965c9956a76181ee49f66d51b7f9c3800182a944ed96be86301e49f" /> |
+| `wormhole`    | <CopyAddress address={`0x9236893d6444b208b7e0b3e8d4be4ace90b6d17817ab7d1584e46a33ef5c50c9`} url="https://explorer.movementlabs.xyz/account/0x9236893d6444b208b7e0b3e8d4be4ace90b6d17817ab7d1584e46a33ef5c50c9" /> |
+| `deployer`    | <CopyAddress address={`0xa3ad2d9c8114b9a4fe97d45b7a9d3c731148d936b0f5dd396fc20a53a11a70da`} url="https://explorer.movementlabs.xyz/account/0xa3ad2d9c8114b9a4fe97d45b7a9d3c731148d936b0f5dd396fc20a53a11a70da" /> |
+
+`deployer` and `wormhole` are implementation details of the Pyth contract: you will not need to interact with these.

+ 10 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/near.mdx

@@ -0,0 +1,10 @@
+---
+title: Price Feed Contract Addresses on NEAR
+description: Find Pyth price feed contract addresses on NEAR networks
+slug: /price-feeds/core/contract-addresses/near
+---
+
+| Network      | Contract address      |
+| ------------ | --------------------- |
+| NEAR Mainnet | `pyth-oracle.near`    |
+| NEAR Testnet | `pyth-oracle.testnet` |

+ 37 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/pythnet.mdx

@@ -0,0 +1,37 @@
+---
+title: Price Feed Contract Addresses on Pythnet
+description: Find Pyth price feed contract addresses on Pythnet
+slug: /price-feeds/core/contract-addresses/pythnet
+---
+
+import { Callout } from "fumadocs-ui/components/callout";
+
+<Callout type="warning" title="Use These Addresses for Pythnet Only">
+  **Important:** The addresses on this page are for the Pythnet network itself,
+  which is used to construct and deliver Pyth prices to other blockchains. If
+  you are building an application on EVM, Solana, SVM, or another chain, you
+  should use the Pyth program deployed on your target chain instead. Please
+  refer to the [Contract Addresses](/price-feeds/contract-addresses) page and
+  select your specific blockchain environment.
+</Callout>
+
+The following tables contain the addresses of the programs deployed on Pythnet environments that operate together to construct Pyth prices and deliver them to other blockchains:
+
+Note: Pythnet is the mainnet network for Pyth, and Pythtest is a testnet for development purposes.
+
+#### Pythnet
+
+| Program                                                                                                 | Program address                                |
+| ------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
+| [Oracle Program](https://github.com/pyth-network/pyth-client/tree/main)                                 | `FsJ3A3u2vn5cTVofAjvy6y5kwABJAqYWpe4975bi2epH` |
+| [Remote Executor](https://github.com/pyth-network/pyth-crosschain/tree/main/governance/remote_executor) | `exe6S3AxPVNmy46L4Nj6HrnnAVQUhwyYzMSNcnRn3qq`  |
+| [Message Buffer](https://github.com/pyth-network/pyth-crosschain/tree/main/pythnet/message_buffer)      | `7Vbmv1jt4vyuqBZcpYPpnVhrqVe5e6ZPb6JxDcffRHUM` |
+
+#### Pythtest
+
+| Program                                                                                                 | Program address                                |
+| ------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
+| [Oracle Program](https://github.com/pyth-network/pyth-client/tree/main)                                 | `gSbePebfvPy7tRqimPoVecS2UsBvYv46ynrzWocc92s`  |
+| [Oracle Program](https://github.com/pyth-network/pyth-client/tree/main)                                 | `8tfDNiaEyrV6Q1U4DEXrEigs9DoDtkugzFbybENEbCDz` |
+| [Remote Executor](https://github.com/pyth-network/pyth-crosschain/tree/main/governance/remote_executor) | `exe6S3AxPVNmy46L4Nj6HrnnAVQUhwyYzMSNcnRn3qq`  |
+| [Message Buffer](https://github.com/pyth-network/pyth-crosschain/tree/main/pythnet/message_buffer)      | `7Vbmv1jt4vyuqBZcpYPpnVhrqVe5e6ZPb6JxDcffRHUM` |

+ 41 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/solana.mdx

@@ -0,0 +1,41 @@
+---
+title: Price Feed Contract Addresses on Solana/SVM
+description: Find Pyth price feed contract addresses on Solana and other SVM chains
+slug: /price-feeds/core/contract-addresses/solana
+---
+
+import CopyAddress from "../../../../../src/components/CopyAddress";
+
+The Pyth Oracle consists of two different programs.
+
+The **Solana receiver program** is deployed at the following addresses:
+
+| Network         | Program address                                                                                                                                                                                                                                                                   |
+| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Solana Mainnet  | <CopyAddress address={`rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ`} url="https://explorer.solana.com/address/rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ" />                                                                                                                     |
+| Solana Devnet   | <CopyAddress address={`rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ`} url="https://explorer.solana.com/address/rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ?cluster=devnet" />                                                                                                      |
+| Eclipse Mainnet | <CopyAddress address={`rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ`} url="https://explorer.dev.eclipsenetwork.xyz/address/rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ" />                                                                                                         |
+| Eclipse Testnet | <CopyAddress address={`rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ`} url="https://explorer.dev.eclipsenetwork.xyz/address/rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ?cluster=testnet" />                                                                                         |
+| Mantis Testnet  | <CopyAddress address={`rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ`} url="https://explorer.solana.com/address/rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ?cluster=custom&customUrl=https%3A%2F%2Fmantis-testnet-rollup.composable-shared-artifacts.composablenodes.tech%2Frpc" /> |
+| Sonic Mainnet   | <CopyAddress address={`rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ`} url="https://explorer.sonic.game/address/rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ?cluster=mainnet" />                                                                                                     |
+| Sonic Testnet   | <CopyAddress address={`rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ`} url="https://explorer.sonic.game/address/rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ?cluster=testnet" />                                                                                                     |
+| Sonic Devnet    | <CopyAddress address={`rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ`} url="https://explorer.sonic.game/address/rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ?cluster=devnet" />                                                                                                      |
+| Atlas Testnet   | <CopyAddress address={`rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ`} url="https://explorer.atlas.xyz/address/rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ" />                                                                                                                      |
+| Mantis Mainnet  | <CopyAddress address={`rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ`} url="https://explorer.solana.com/address/rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ?cluster=custom&customUrl=https%3A%2F%2Fmantis-rollup.composable-shared-artifacts.composablenodes.tech%2Frpc" />         |
+| Fogo Testnet    | <CopyAddress address={`rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ`} url="https://explorer.fogo.io/address/rec5EKMGg6MxZYaMdyBfgwp4d5rB9T1VQH5pJv5LtFJ" />                                                                                                                        |
+
+The **Price feed program** is deployed at the following addresses:
+
+| Network         | Program address                                                                                                                                                                                                                                                                   |
+| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Solana Mainnet  | <CopyAddress address={`pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT`} url="https://explorer.solana.com/address/pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT" />                                                                                                                     |
+| Solana Devnet   | <CopyAddress address={`pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT`} url="https://explorer.solana.com/address/pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT?cluster=devnet" />                                                                                                      |
+| Eclipse Mainnet | <CopyAddress address={`pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT`} url="https://explorer.dev.eclipsenetwork.xyz/address/pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT" />                                                                                                         |
+| Eclipse Testnet | <CopyAddress address={`pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT`} url="https://explorer.dev.eclipsenetwork.xyz/address/pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT?cluster=testnet" />                                                                                         |
+| Mantis Testnet  | <CopyAddress address={`pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT`} url="https://explorer.solana.com/address/pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT?cluster=custom&customUrl=https%3A%2F%2Fmantis-testnet-rollup.composable-shared-artifacts.composablenodes.tech%2Frpc" /> |
+| Sonic Mainnet   | <CopyAddress address={`pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT`} url="https://explorer.sonic.game/address/pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT?cluster=mainnet" />                                                                                                     |
+| Sonic Testnet   | <CopyAddress address={`pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT`} url="https://explorer.sonic.game/address/pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT?cluster=testnet" />                                                                                                     |
+| Sonic Devnet    | <CopyAddress address={`pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT`} url="https://explorer.sonic.game/address/pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT?cluster=devnet" />                                                                                                      |
+| Atlas Testnet   | <CopyAddress address={`pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT`} url="https://explorer.atlas.xyz/address/pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT" />                                                                                                                      |
+| Mantis Mainnet  | <CopyAddress address={`pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT`} url="https://explorer.solana.com/address/pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT?cluster=custom&customUrl=https%3A%2F%2Fmantis-rollup.composable-shared-artifacts.composablenodes.tech%2Frpc" />         |
+| Fogo Testnet    | <CopyAddress address={`pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT`} url="https://explorer.fogo.io/address/pythWSnswVUd12oZpeFP8e9CVaEqJg25g1Vtc2biRsT" />                                                                                                                        |

+ 14 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/starknet.mdx

@@ -0,0 +1,14 @@
+---
+title: Price Feed Contract Addresses on Starknet
+description: Find Pyth price feed contract addresses on Starknet networks
+slug: /price-feeds/core/contract-addresses/starknet
+---
+
+import CopyAddress from "../../../../../src/components/CopyAddress";
+
+Pyth is deployed on both Starknet Mainnet and Testnet.
+
+| Network          | Contract address                                                                                                                                                                                              |
+| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Starknet Mainnet | <CopyAddress address={`0x062ab68d8e23a7aa0d5bf4d25380c2d54f2dd8f83012e047851c3706b53d64d1`} url="https://starkscan.co/contract/0x062ab68d8e23a7aa0d5bf4d25380c2d54f2dd8f83012e047851c3706b53d64d1" />         |
+| Starknet Testnet | <CopyAddress address={`0x07f2b07b6b5365e7ee055bda4c0ecabd867e6d3ee298d73aea32b027667186d6`} url="https://sepolia.starkscan.co/contract/0x07f2b07b6b5365e7ee055bda4c0ecabd867e6d3ee298d73aea32b027667186d6" /> |

+ 29 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/sui.mdx

@@ -0,0 +1,29 @@
+---
+title: Price Feed Contract Addresses on Sui
+description: Find Pyth price feed contract addresses on Sui networks
+slug: /price-feeds/core/contract-addresses/sui
+---
+
+Pyth is currently available on the following sui-based chains:
+
+### Stable channel
+
+#### Sui Mainnet
+
+| Name                | Address                                                                                                                                                                   |
+| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Pyth State ID       | [`0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8`](https://explorer.sui.io/object/0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8) |
+| Pyth Package ID     | [`0x04e20ddf36af412a4096f9014f4a565af9e812db9a05cc40254846cf6ed0ad91`](https://explorer.sui.io/object/0x04e20ddf36af412a4096f9014f4a565af9e812db9a05cc40254846cf6ed0ad91) |
+| Wormhole State ID   | [`0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c`](https://explorer.sui.io/object/0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c) |
+| Wormhole Package ID | [`0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a`](https://explorer.sui.io/object/0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a) |
+
+### Beta channel
+
+#### Sui Testnet
+
+| Name                | Address                                                                                                                                                                                   |
+| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Pyth State ID       | [`0x243759059f4c3111179da5878c12f68d612c21a8d54d85edc86164bb18be1c7c`](https://explorer.sui.io/object/0x2d82612a354f0b7e52809fc2845642911c7190404620cec8688f68808f8800d8?network=testnet) |
+| Pyth Package ID     | [`0xabf837e98c26087cba0883c0a7a28326b1fa3c5e1e2c5abdb486f9e8f594c837`](https://explorer.sui.io/object/0xf7114cc10266d90c0c9e4b84455bddf29b40bd78fe56832c7ac98682c3daa95b?network=testnet) |
+| Wormhole State ID   | [`0x31358d198147da50db32eda2562951d53973a0c0ad5ed738e9b17d88b213d790`](https://explorer.sui.io/object/0xebba4cc4d614f7a7cdbe883acc76d1cc767922bc96778e7b68be0d15fce27c02?network=testnet) |
+| Wormhole Package ID | [`0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94`](https://explorer.sui.io/object/0xf47329f4344f3bf0f8e436e2f7b485466cff300f12a166563995d3888c296a94?network=testnet) |

+ 15 - 0
apps/developer-hub/content/docs/price-feeds/core/contract-addresses/ton.mdx

@@ -0,0 +1,15 @@
+---
+title: Price Feed Contract Addresses on TON
+description: Find Pyth price feed contract addresses on TON networks
+slug: /price-feeds/core/contract-addresses/ton
+---
+
+import CopyAddress from "../../../../../src/components/CopyAddress";
+
+Pyth is currently deployed on TON Mainnet and TON Testnet. If you are using the deprecated TON Mainnet deployment, please migrate to the new address.
+
+| Network                  | Contract address                                                                                                                                                        |
+| ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| TON Mainnet (deprecated) | <CopyAddress address={`EQBU6k8HH6yX4Jf3d18swWbnYr31D3PJI7PgjXT-flsKHqql`} url="https://tonscan.org/address/EQBU6k8HH6yX4Jf3d18swWbnYr31D3PJI7PgjXT-flsKHqql" />         |
+| TON Mainnet              | <CopyAddress address={`EQBgtfuGIzWLiOzpZO48_psYvco4xRtkAbdbmTwy0_o95LtZ`} url="https://tonscan.org/address/EQBgtfuGIzWLiOzpZO48_psYvco4xRtkAbdbmTwy0_o95LtZ" />         |
+| TON Testnet              | <CopyAddress address={`EQB4ZnrI5qsP_IUJgVJNwEGKLzZWsQOFhiaqDbD7pTt_f9oU`} url="https://testnet.tonscan.org/address/EQB4ZnrI5qsP_IUJgVJNwEGKLzZWsQOFhiaqDbD7pTt_f9oU" /> |

+ 153 - 0
apps/developer-hub/content/docs/price-feeds/core/create-tradingview-charts.mdx

@@ -0,0 +1,153 @@
+---
+title: How to Create TradingView Charts
+description: Learn how to build TradingView charts powered by Pyth price feeds
+slug: /price-feeds/core/create-tradingview-charts
+---
+
+import { Tab, Tabs } from "fumadocs-ui/components/tabs";
+
+The TradingView integration allows users to view Pyth prices on their own website. All Pyth prices made available through the TradingView integration are originating from [Pythnet](/price-feeds/core/how-pyth-works/pythnet).
+
+## Choosing an Implementation Method for TradingView Integration
+
+There are primarily two methods to integrate TradingView with your website to display Pyth prices:
+
+### 1. Using the TradingView Widget
+
+- **Advantages**:
+  - **Simplicity**: This is a plug-and-play solution which allows for quick integration. You won't need to engage in complex setup processes or handle any backend configurations.
+- **Disadvantages**:
+  - **Limited Customization**: The widget comes as-is, and while you can change basic parameters like the `symbol` or `theme`, more advanced customizations are restricted.
+
+### 2. Using the Datafeed URL with Charting Library
+
+- **Advantages**:
+  - **Deep Customization**: Suited for those who need a deeper level of integration and customization. By utilizing the UDF-compatible URL, you can tailor the look, feel, and functionality of the chart to better fit your application's needs.
+- **Disadvantages**:
+  - **Added Complexity**: Integrating the Charting Library requires more technical know-how and potentially more time compared to the simpler widget integration.
+
+When deciding between the two, consider the user experience you want to provide, the technical expertise at hand, and the time you can allocate to the integration. For a rapid deployment with minimal adjustments, the TradingView Widget is the way to go. If you need more control and are prepared for a deeper dive into the implementation, the Datafeed URL with the Charting Library would be your best choice.
+
+## TradingView Widget
+
+1. Add the following script(s) from [TradingView](https://www.tradingview.com/widget/advanced-chart/) to your website depending on your framework:
+
+<Tabs items={["HTML", "React"]}>
+  <Tab value="HTML">
+
+```html copy
+<!-- TradingView Widget BEGIN -->
+<div class="tradingview-widget-container">
+  <div id="tradingview"></div>
+  <script
+    type="text/javascript"
+    src="https://s3.tradingview.com/tv.js"
+  ></script>
+  <script type="text/javascript">
+    new TradingView.widget({
+      autosize: true,
+      symbol: "PYTH:BTCUSD",
+      interval: "D",
+      timezone: "Etc/UTC",
+      theme: "light",
+      style: "1",
+      locale: "en",
+      toolbar_bg: "#f1f3f6",
+      enable_publishing: false,
+      allow_symbol_change: true,
+      container_id: "tradingview",
+    });
+  </script>
+</div>
+<!-- TradingView Widget END -->
+```
+
+  </Tab>
+  <Tab value="React">
+
+```jsx copy
+// TradingViewWidget.jsx
+import { useEffect, useRef } from "react";
+
+let tvScriptLoadingPromise;
+
+export default function TradingViewWidget() {
+  const onLoadScriptRef = useRef();
+
+  useEffect(() => {
+    onLoadScriptRef.current = createWidget;
+
+    if (!tvScriptLoadingPromise) {
+      tvScriptLoadingPromise = new Promise((resolve) => {
+        const script = document.createElement("script");
+        script.id = "tradingview-widget-loading-script";
+        script.src = "https://s3.tradingview.com/tv.js";
+        script.type = "text/javascript";
+        script.onload = resolve;
+
+        document.head.appendChild(script);
+      });
+    }
+
+    tvScriptLoadingPromise.then(
+      () => onLoadScriptRef.current && onLoadScriptRef.current(),
+    );
+
+    return () => (onLoadScriptRef.current = null);
+
+    function createWidget() {
+      if (document.getElementById("tradingview") && "TradingView" in window) {
+        new window.TradingView.widget({
+          autosize: true,
+          symbol: "PYTH:BTCUSD",
+          interval: "D",
+          timezone: "Etc/UTC",
+          theme: "light",
+          style: "1",
+          locale: "en",
+          toolbar_bg: "#f1f3f6",
+          enable_publishing: false,
+          allow_symbol_change: true,
+          container_id: "tradingview",
+        });
+      }
+    }
+  }, []);
+
+  return (
+    <div className="tradingview-widget-container">
+      <div id="tradingview" />
+    </div>
+  );
+}
+```
+
+  </Tab>
+</Tabs>
+
+2. Replace the `symbol` parameter with the Pyth symbol you want to display. For example, to display the price of Ethereum, use `symbol: "PYTH:ETHUSD"`.
+
+3. Replace the `interval` parameter with the time interval you want to display. For example, to display the price of Ethereum in 1-minute intervals, use `interval: "1"`. Possible resolutions are daily (D or 1D, 2D ... ), weekly (1W, 2W ...), monthly (1M, 2M...) and an intra-day resolution – minutes(1, 2 ...).
+
+4. Replace the `timezone` parameter with the timezone you want to display. For example, to display the price of Ethereum in the Eastern Time Zone, use `timezone: "America/New_York"`.
+
+5. Replace the `theme` parameter with the theme you want to display. For example, to display the price of Ethereum in dark mode, use `theme: "dark"`.
+
+6. There is a fully working open-source example of the TradingView integration by one of Pyth's contributors [here](https://github.com/cctdaniel/pyth-tv-example). The example application is deployed [here](https://pyth-tv-example.vercel.app/).
+
+Note: The TradingView plug-and-play widget does not allow for much customization. If you want to customize the widget, you can use the [TradingView Charting Library](https://www.tradingview.com/HTML5-stock-forex-bitcoin-charting-library/). Please see the next section for more details.
+
+## Using Datafeed URL with Charting Library
+
+We also provide a UDF-compatible URL that follows the [TradingView UDF spec](https://www.tradingview.com/charting-library-docs/latest/connecting_data/UDF). You can implement your own datafeed utilizing the API or use the built-in UDF adapter with the API. If you need a step-by-step guide, refer to the [How to connect data via Datafeed API](https://www.tradingview.com/charting-library-docs/latest/tutorials/implement_datafeed_tutorial/) tutorial, or you can reference the example [here](https://github.com/cctdaniel/pyth-tv-charting-lib), the main files that may be of interest are: [datafeed.js](https://github.com/cctdaniel/pyth-tv-charting-lib/blob/main/src/utils/datafeed.js) and [streaming.js](https://github.com/cctdaniel/pyth-tv-charting-lib/blob/main/src/utils/streaming.js).
+
+The datafeed URL is [here](https://benchmarks.pyth.network/v1/shims/tradingview) and documentation can be found [here](https://benchmarks.pyth.network/redoc)
+
+### Example
+
+- Symbol Info: https://benchmarks.pyth.network/v1/shims/tradingview/symbol_info
+- History: https://benchmarks.pyth.network/v1/shims/tradingview/history?symbol=Crypto.ETH/USD&resolution=1&from=1690338541&to=1690338741
+- Stream of prices: https://benchmarks.pyth.network/v1/shims/tradingview/streaming
+- Config: https://benchmarks.pyth.network/v1/shims/tradingview/config
+- Symbols: https://benchmarks.pyth.network/v1/shims/tradingview/symbols?symbol=Crypto.BTC/USD
+- Search: https://benchmarks.pyth.network/v1/shims/tradingview/search?query=bitcoin

+ 6 - 0
apps/developer-hub/content/docs/price-feeds/core/create-your-first-pyth-app/evm/meta.json

@@ -0,0 +1,6 @@
+{
+  "pages": [
+    "[Part 1: Create Pyth App](./create-your-first-pyth-app/evm/part-1)",
+    "[Part 2: Deploy Pyth App](./create-your-first-pyth-app/evm/part-2)"
+  ]
+}

+ 568 - 0
apps/developer-hub/content/docs/price-feeds/core/create-your-first-pyth-app/evm/part-1.mdx

@@ -0,0 +1,568 @@
+---
+title: Create your first Pyth app on EVM
+description: Build and test an EVM app using Pyth price feeds
+slug: /price-feeds/core/create-your-first-pyth-app/evm/part-1
+---
+
+import { Step, Steps } from "fumadocs-ui/components/steps";
+
+In this tutorial, we will use real-time Pyth price data to mint an NFT in exchange for $1 of ETH.
+Our solidity contract will read the price of ETH/USD from Pyth and use it to calculate the amount of ETH required to mint the NFT.
+
+This tutorial will cover the following topics:
+
+- Create a contract that reads the ETH/USD price from Pyth using [pyth-sdk-solidity](https://github.com/pyth-network/pyth-crosschain/tree/main/target_chains/ethereum/sdk/solidity)
+- Learn how to update Pyth prices to avoid Stale data.
+- Deploy the contract to OP-sepolia testnet.
+- Update and Fetch price using [hermes-client](https://github.com/pyth-network/pyth-crosschain/tree/main/apps/hermes/client/js).
+
+This tutorial is divided into two parts:
+
+- [Part 1:](./part-1) Create a contract and fetch prices from Pyth oracles. \
+- [Part 2:](.//part-2) Deploy Your Pyth App
+
+## Create a contract and fetch prices from Pyth oracles
+
+In this part of the tutorial, we will create a contract that reads the price from Pyth and uses it to calculate the amount of ETH required to mint an NFT.
+After that, we will write tests to ensure that the contract works as expected.
+
+### Preliminaries
+
+This tutorial uses Foundry to perform the contract development tasks.
+Please make sure these are installed on your system before continuing.
+
+- [foundry](https://book.getfoundry.sh/getting-started/installation)
+- [node](https://nodejs.org/en/download/)
+- [curl](https://curl.se/download.html)
+- [jq](https://stedolan.github.io/jq/download/)
+
+<Steps>
+<Step>
+
+### Create a Foundry project
+
+Create a new directory to hold your app and a `contracts` directory within.
+Here `forge init` command will initialize an empty foundry project creating several subdirectories within `contracts`.
+
+```bash copy
+mkdir my_first_pyth_app
+mkdir my_first_pyth_app/contracts && cd my_first_pyth_app/contracts
+forge init
+```
+
+The `src` directory will hold your contract code, and the `test` directory will hold unit tests.
+Both directories are initialized with some sample contract code and tests.
+
+Try it out by running `forge test`.
+This command should print out something like this:
+
+```
+[⠢] Compiling...
+No files changed, compilation skipped
+
+Running 2 tests for test/Counter.t.sol:CounterTest
+[PASS] testFuzz_SetNumber(uint256) (runs: 256, μ: 27864, ~: 28409)
+[PASS] test_Increment() (gas: 28379)
+Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 12.30ms
+
+Ran 1 test suites: 2 tests passed, 0 failed, 0 skipped (2 total tests)
+```
+
+The Foundry project has been successfully initialized!
+At this point, delete the sample code from `src` and the test file from `test` -- we won't need them anymore.
+
+```bash copy
+rm -r src/* test/* scripts/*
+```
+
+</Step>
+
+<Step>
+
+### Install the Pyth SDK
+
+Pyth provides a Solidity SDK that can be used to interact with one-chain Pyth Price Feed contracts.
+It exposes multiple [methods](/price-feeds/core/api-reference) to read and interact with the contracts.
+
+Use `npm` to add the Pyth SDK:
+
+```bash copy
+npm init -y
+npm install @pythnetwork/pyth-sdk-solidity
+```
+
+Next, run the following command to create a text file `contracts/remappings.txt`:
+
+```bash copy
+echo '@pythnetwork/pyth-sdk-solidity/=node_modules/@pythnetwork/pyth-sdk-solidity' > remappings.txt
+```
+
+This line tells Foundry where to find the Pyth SDK so that you can import it from Solidity contracts.
+
+</Step>
+
+<Step>
+
+### Create a contract
+
+Next, open `src/MyFirstPythContract.sol` in your favorite editor and add the following code:
+
+```solidity copy filename="MyFirstPythContract.sol"
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.13;
+
+import { console2 } from "forge-std/Test.sol";
+import "@pythnetwork/pyth-sdk-solidity/IPyth.sol";
+
+contract MyFirstPythContract {
+  IPyth pyth;
+  bytes32 ethUsdPriceId;
+
+  constructor(address _pyth, bytes32 _ethUsdPriceId) {
+    pyth = IPyth(_pyth);
+    ethUsdPriceId = _ethUsdPriceId;
+  }
+}
+
+```
+
+Notice that this code block imports the `IPyth` interface from the SDK you installed earlier.
+This interface is the primary way to interact with the Pyth price feeds contract.
+The constructor instantiates this interface with the address of the Pyth contract.
+It also takes an `_ethUsdPriceId`.
+We will see how to populate both parameters later on.
+
+Next, add a `mint` function to your contract:
+
+```solidity copy filename="MyFirstPythContract.sol"
+contract MyFirstPythContract {
+  // ... other functions omitted
+
+  function mint() public payable {
+    PythStructs.Price memory price = pyth.getPriceNoOlderThan(
+      ethUsdPriceId,
+      60
+    );
+
+    uint ethPrice18Decimals = (uint(uint64(price.price)) * (10 ** 18)) /
+      (10 ** uint8(uint32(-1 * price.expo)));
+    uint oneDollarInWei = ((10 ** 18) * (10 ** 18)) / ethPrice18Decimals;
+
+    console2.log("required payment in wei");
+    console2.log(oneDollarInWei);
+
+    if (msg.value >= oneDollarInWei) {
+      // User paid enough money.
+      // TODO: mint the NFT here
+    } else {
+      revert InsufficientFee();
+    }
+  }
+
+  // Error raised if the payment is not sufficient
+  error InsufficientFee();
+}
+
+```
+
+This function first reads a `Price` from the pyth contract if it is updated within the last 60 seconds.
+It then performs some arithmetic on the price in order to calculate how much the caller needs to pay. This conversion
+assumes that 10^18 wei is equal to the native token (ETH in this example); in some networks (like Hedera) the decimal
+places are different and you need to change the math.
+If the caller has not paid enough, the function reverts.
+
+Try out your changes by running `forge build`:
+
+```
+[⠒] Compiling...
+[⠘] Compiling 28 files with 0.8.23
+[⠊] Solc 0.8.23 finished in 2.71s
+Compiler run successful!
+```
+
+The contract compiles!
+
+</Step>
+
+<Step>
+
+### Create a test
+
+Before deploying the contract, let's write a test to make sure it works.
+Open `test/MyFirstPythContract.t.sol` in your favorite editor and add the following code:
+
+```solidity copy filename="MyFirstPythContract.t.sol"
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.13;
+
+import { Test, console2 } from "forge-std/Test.sol";
+import { MyFirstPythContract } from "../src/MyFirstPythContract.sol";
+import { MockPyth } from "@pythnetwork/pyth-sdk-solidity/MockPyth.sol";
+
+contract MyFirstPythContractTest is Test {
+  MockPyth public pyth;
+  bytes32 ETH_PRICE_FEED_ID = bytes32(uint256(0x1));
+  MyFirstPythContract public app;
+
+  uint256 ETH_TO_WEI = 10 ** 18;
+
+  function setUp() public {
+    pyth = new MockPyth(60, 1);
+    app = new MyFirstPythContract(address(pyth), ETH_PRICE_FEED_ID);
+  }
+
+  function createEthUpdate(
+    int64 ethPrice
+  ) private view returns (bytes[] memory) {
+    bytes[] memory updateData = new bytes[](1);
+    updateData[0] = pyth.createPriceFeedUpdateData(
+      ETH_PRICE_FEED_ID,
+      ethPrice * 100000, // price
+      10 * 100000, // confidence
+      -5, // exponent
+      ethPrice * 100000, // emaPrice
+      10 * 100000, // emaConfidence
+      uint64(block.timestamp), // publishTime
+      uint64(block.timestamp) // prevPublishTime
+    );
+
+    return updateData;
+  }
+
+  function setEthPrice(int64 ethPrice) private {
+    bytes[] memory updateData = createEthUpdate(ethPrice);
+    uint value = pyth.getUpdateFee(updateData);
+    vm.deal(address(this), value);
+    pyth.updatePriceFeeds{ value: value }(updateData);
+  }
+
+  function testMint() public {
+    setEthPrice(100);
+
+    vm.deal(address(this), ETH_TO_WEI);
+    app.mint{ value: ETH_TO_WEI / 100 }();
+  }
+
+  function testMintRevert() public {
+    setEthPrice(99);
+
+    vm.deal(address(this), ETH_TO_WEI);
+    vm.expectRevert();
+    app.mint{ value: ETH_TO_WEI / 100 }();
+  }
+}
+
+```
+
+Take a look at the two `test` functions at the end of this file.
+These tests set the price of Ether to a specific value, then call `mint`.
+The tests use a mock implementation of Pyth and some helper methods defined above to set the price of Ether.
+
+Try your tests by running `forge test -vvv`
+
+```
+[⠢] Compiling...
+[⠔] Compiling 1 files with 0.8.23
+[⠒] Solc 0.8.23 finished in 1.23s
+Compiler run successful!
+
+Running 2 tests for test/MyFirstPythContract.t.sol:MyFirstPythContractTest
+[PASS] testMint() (gas: 197064)
+Logs:
+  required payment in wei
+  10000000000000000
+
+[PASS] testMintRevert() (gas: 197468)
+Logs:
+  required payment in wei
+  10101010101010101
+
+Test result: ok. 2 passed; 0 failed; 0 skipped; finished in 702.58µs
+
+Ran 1 test suites: 2 tests passed, 0 failed, 0 skipped (2 total tests)
+```
+
+The tests pass!
+The tests also print out the required payment to successfully mint the NFT -- these originate from the `console2.log` statements in `MyFirstPythContract`.
+Notice that the payment is higher in the second test: when the price of ETH is \$99 (instead of \$100), more ETH is required to reach \$1.
+This difference demonstrates that your contract is successfully reading the price of ETH/USD from Pyth.
+
+</Step>
+
+<Step>
+
+### Update Pyth prices
+
+While our code above seems to work properly, it has a problem.
+To see this problem, let's add another test to the test suite:
+
+```solidity copy filename="MyFirstPythContract.t.sol"
+contract MyFirstPythContractTest is Test {
+  // ... prior tests omitted ...
+
+  function testMintStalePrice() public {
+    setEthPrice(100);
+
+    skip(120);
+
+    vm.deal(address(this), ETH_TO_WEI);
+    app.mint{ value: ETH_TO_WEI / 100 }();
+  }
+}
+
+```
+
+Notice that this test is the same as the first test, except it adds a call to [`skip`](https://book.getfoundry.sh/reference/forge-std/skip) in the middle.
+
+Now run `forge test -vvv`
+
+```
+[FAIL. Reason: StalePrice()] testMintStalePrice() (gas: 192722)
+```
+
+Oh no, the test fails with a `StalePrice` error!
+When our contract calls `getPriceNoOlderThan(.., 60)`, it checks the timestamp on the blockchain and compares it to the timestamp for the Pyth price.
+If the Pyth price's timestamp is more than 60 seconds in the past, then a `StalePrice` error occurs.
+`skip` moves the timestamp on the blockchain forward, which triggers the error.
+
+We can fix this problem, but first, let's fix the test case.
+Add a call to `vm.expectRevert()` as shown below:
+
+```solidity {10} copy filename="MyFirstPythContract.t.sol "
+contract MyFirstPythContractTest is Test {
+  // ... prior tests omitted ...
+  function testMintStalePrice() public {
+    setEthPrice(100);
+
+    skip(120);
+
+    vm.deal(address(this), ETH_TO_WEI);
+    // Add this line
+    vm.expectRevert();
+    app.mint{ value: ETH_TO_WEI / 100 }();
+  }
+}
+
+```
+
+To fix the `StalePrice` error, add a new function to `MyFirstPythContract`:
+
+```solidity copy filename="MyFirstPythContract.sol"
+contract MyFirstPythContract {
+  // ... prior code omitted
+
+  function updateAndMint(bytes[] calldata pythPriceUpdate) external payable {
+    uint updateFee = pyth.getUpdateFee(pythPriceUpdate);
+    pyth.updatePriceFeeds{ value: updateFee }(pythPriceUpdate);
+
+    mint();
+  }
+}
+
+```
+
+The end of this function calls the `mint` function we defined before.
+Before that, however, the function calls [`updatePriceFeeds`](https://api-reference.pyth.network/price-feeds/evm/updatePriceFeeds) on the Pyth contract.
+This function takes a payload of `bytes[]` that is passed into the function itself.
+The Pyth contract requires a fee to perform this update; the code snippet above calculates the needed fee using [`getUpdateFee`](https://api-reference.pyth.network/price-feeds/evm/getUpdateFee).
+The caller of this function can pass in a recent Pyth price update as this payload, guaranteeing that the `StalePrice` error won't occur.
+
+We can test this function by adding the following snippet to the test file:
+
+```solidity copy filename="MyFirstPythContract.t.sol"
+contract MyFirstPythContractTest is Test {
+  // ... prior tests omitted ...
+  function testUpdateAndMint() public {
+    bytes[] memory updateData = createEthUpdate(100);
+
+    vm.deal(address(this), ETH_TO_WEI);
+    app.updateAndMint{ value: ETH_TO_WEI / 100 }(updateData);
+  }
+}
+
+```
+
+Note that this test creates and passes a price update directly to `updateAndMint` instead of calling `setEthPrice` like
+the previous tests. For this test, we created a mock price update using the testing library.
+When the contract is deployed, we will retrieve the price update from a web service.
+
+Run this new test with `forge test -vvv`
+
+```
+[⠢] Compiling...
+[⠰] Compiling 1 files with 0.8.23
+[⠔] Solc 0.8.23 finished in 1.19s
+Compiler run successful!
+
+Running 4 tests for test/MyFirstPythContract.t.sol:MyFirstPythContractTest
+[PASS] testMint() (gas: 197148)
+Logs:
+  required payment in wei
+  10000000000000000
+
+[PASS] testMintRevert() (gas: 197575)
+Logs:
+  required payment in wei
+  10101010101010101
+
+[PASS] testMintStalePrice() (gas: 193074)
+[PASS] testUpdateAndMint() (gas: 197067)
+Logs:
+  required payment in wei
+  10000000000000000
+
+Test result: ok. 4 passed; 0 failed; 0 skipped; finished in 1.54ms
+
+Ran 1 test suites: 4 tests passed, 0 failed, 0 skipped (4 total tests)
+```
+
+The test passes!
+
+Congratulations! We have successfully created a contract that reads the price of ETH/USD from Pyth and uses it to calculate the amount of ETH required to mint an NFT.
+
+In this part of the tutorial, we learned how to create a contract that reads the price from Pyth oracle and how to update the price to avoid stale data.
+We also wrote tests to ensure that the contract works as expected.
+
+Our final contract code should look like this:
+
+```solidity copy filename="MyFirstPythContract.sol"
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.13;
+
+import { console2 } from "forge-std/Test.sol";
+import "@pythnetwork/pyth-sdk-solidity/IPyth.sol";
+
+contract MyFirstPythContract {
+  IPyth pyth;
+  bytes32 ethUsdPriceId;
+
+  constructor(address _pyth, bytes32 _ethUsdPriceId) {
+    pyth = IPyth(_pyth);
+    ethUsdPriceId = _ethUsdPriceId;
+  }
+
+  function mint() public payable {
+    PythStructs.Price memory price = pyth.getPriceNoOlderThan(
+      ethUsdPriceId,
+      60
+    );
+    console2.log("price of ETH in USD");
+    console2.log(price.price);
+
+    uint ethPrice18Decimals = (uint(uint64(price.price)) * (10 ** 18)) /
+      (10 ** uint8(uint32(-1 * price.expo)));
+    uint oneDollarInWei = ((10 ** 18) * (10 ** 18)) / ethPrice18Decimals;
+
+    console2.log("required payment in wei");
+    console2.log(oneDollarInWei);
+
+    if (msg.value >= oneDollarInWei) {
+      // User paid enough money.
+      // TODO: mint the NFT here
+    } else {
+      revert InsufficientFee();
+    }
+  }
+
+  function updateAndMint(bytes[] calldata pythPriceUpdate) external payable {
+    uint updateFee = pyth.getUpdateFee(pythPriceUpdate);
+    pyth.updatePriceFeeds{ value: updateFee }(pythPriceUpdate);
+
+    mint();
+  }
+
+  // Error raised if the payment is not sufficient
+  error InsufficientFee();
+}
+
+```
+
+And our test file should look like this:
+
+```solidity copy filename="MyFirstPythContract.t.sol"
+// SPDX-License-Identifier: UNLICENSED
+pragma solidity ^0.8.13;
+
+import { Test, console2 } from "forge-std/Test.sol";
+import { MyFirstPythContract } from "../src/MyFirstPythContract.sol";
+import { MockPyth } from "@pythnetwork/pyth-sdk-solidity/MockPyth.sol";
+
+contract MyFirstPythContractTest is Test {
+  MockPyth public pyth;
+  bytes32 ETH_PRICE_FEED_ID = bytes32(uint256(0x1));
+  MyFirstPythContract public app;
+
+  uint256 ETH_TO_WEI = 10 ** 18;
+
+  function setUp() public {
+    pyth = new MockPyth(60, 1);
+    app = new MyFirstPythContract(address(pyth), ETH_PRICE_FEED_ID);
+  }
+
+  function createEthUpdate(
+    int64 ethPrice
+  ) private view returns (bytes[] memory) {
+    bytes[] memory updateData = new bytes[](1);
+    updateData[0] = pyth.createPriceFeedUpdateData(
+      ETH_PRICE_FEED_ID,
+      ethPrice * 100000,
+      10 * 100000,
+      -5,
+      ethPrice * 100000,
+      10 * 100000,
+      uint64(block.timestamp),
+      uint64(block.timestamp)
+    );
+
+    return updateData;
+  }
+
+  function setEthPrice(int64 ethPrice) private {
+    bytes[] memory updateData = createEthUpdate(ethPrice);
+    uint value = pyth.getUpdateFee(updateData);
+    console2.log("value: ", value);
+    vm.deal(address(this), value);
+    pyth.updatePriceFeeds{ value: value }(updateData);
+  }
+
+  function testMint() public {
+    setEthPrice(100);
+
+    vm.deal(address(this), ETH_TO_WEI);
+    app.mint{ value: ETH_TO_WEI / 100 }();
+  }
+
+  function testMintRevert() public {
+    setEthPrice(99);
+
+    vm.deal(address(this), ETH_TO_WEI);
+    vm.expectRevert();
+    app.mint{ value: ETH_TO_WEI / 100 }();
+  }
+
+  function testMintStalePrice() public {
+    setEthPrice(100);
+
+    skip(120);
+
+    vm.deal(address(this), ETH_TO_WEI);
+
+    vm.expectRevert();
+    app.mint{ value: ETH_TO_WEI / 100 }();
+  }
+
+  function testUpdateAndMint() public {
+    bytes[] memory updateData = createEthUpdate(100);
+
+    vm.deal(address(this), ETH_TO_WEI);
+    app.updateAndMint{ value: ETH_TO_WEI / 100 }(updateData);
+  }
+}
+
+```
+
+</Step>
+
+</Steps>
+
+Check out [Part 2](./part-2.mdx) to learn how to deploy our contract to OP-sepolia testnet and fetch prices using hermes-client.

Plik diff jest za duży
+ 111 - 0
apps/developer-hub/content/docs/price-feeds/core/create-your-first-pyth-app/evm/part-2.mdx


+ 20 - 0
apps/developer-hub/content/docs/price-feeds/core/create-your-first-pyth-app/index.mdx

@@ -0,0 +1,20 @@
+---
+title: Create your first Pyth app
+description: Build your first application that consumes Pyth price feeds
+slug: /price-feeds/core/create-your-first-pyth-app
+---
+
+import { Callout } from "fumadocs-ui/components/callout";
+
+This tutorial walks through creating a complete application that uses Pyth Price feeds.
+The application includes a smart contract and an off-chain code invoking the contract.
+
+<Callout type="info" title="Getting Started">
+  The tutorial is an in-depth walkthrough of contract development; more
+  experienced developers may want to refer to [Use Real-time Price
+  Data](./use-real-time-data.mdx) for a more concise version.
+</Callout>
+
+Please choose your environment to get started:
+
+- [EVM](./create-your-first-pyth-app/evm/part-1)

+ 30 - 0
apps/developer-hub/content/docs/price-feeds/core/current-fees.mdx

@@ -0,0 +1,30 @@
+---
+title: Current Fees
+description: Review current update fees across supported Pyth networks
+slug: /price-feeds/core/current-fees
+---
+
+import { Callout } from "fumadocs-ui/components/callout";
+
+The following tables shows the total fees payable when updating a price feed.
+Please note the fees shown below is the amount paid in `msg.value` per price feed update.
+
+<Callout type="info" title="Default Fee">
+  **Note**: The default fee of all chains **not** mentioned below is **1 (one)**
+  unit of the smallest denomination of the blockchain's native token (e.g., **1
+  wei on Ethereum**).
+</Callout>
+
+| **Network** | **Fees**         |
+| ----------- | ---------------- |
+| Aurora      | 0.000003 **ETH** |
+| Avalanche   | 0.00025 **AVAX** |
+| Conflux     | 0.1 **CFX**      |
+| Cronos      | 0.06 **CRO**     |
+| Meter       | 0.02 **MTR**     |
+| opBNB       | 0.000186 **BNB** |
+| Ronin       | 0.001 **RON**    |
+| Sei         | 0.01 **SEI**     |
+| Shimmer     | 1 **SMR**        |
+| Swellchain  | 0.00005 **ETH**  |
+| Worldchain  | 0.00001 **ETH**  |

+ 123 - 0
apps/developer-hub/content/docs/price-feeds/core/derive-cross-rate.mdx

@@ -0,0 +1,123 @@
+---
+title: Derive Cross Rate
+description: Learn how to derive synthetic cross rates using Pyth price feeds
+slug: /price-feeds/core/derive-cross-rate
+---
+
+import { Tab, Tabs } from "fumadocs-ui/components/tabs";
+
+This guide shows how to combine two price feeds to derive a cross rate. These are also known as "synthetic" price feeds.
+Cross rates or Synthetic Price feeds are useful for trading pairs that are not directly supported by Pyth.
+
+<Tabs items={["EVM", "SVM"]}>
+  <Tab value="EVM">
+### EVM
+
+For example, if you want to trade the price of **`ETH/EUR{:jsx}`**, which is not directly supported by Pyth, you can combine the price of **`ETH/USD{:jsx}`** and **`EUR/USD{:jsx}`** to derive the price of **`ETH/EUR{:jsx}`**.
+
+$$
+\large{\text{ETH/EUR} = \text{ETH/USD} \div \text{EUR/USD}}
+$$
+
+### Derive a cross rate
+
+The Pyth Solidity SDK provides [`deriveCrossRate`](https://github.com/pyth-network/pyth-crosschain/blob/main/target_chains/ethereum/sdk/solidity/PythUtils.sol#L77) function to combine two price feeds.
+This method is available in [Pyth solidity SDK](https://github.com/pyth-network/pyth-crosschain/tree/main/target_chains/ethereum/sdk/solidity).
+
+This method takes the following parameters:
+
+- `price1`: The first price feed value, representing a / b (e.g., ETH/USD). Must be a signed integer (int64).
+- `expo1`: The exponent for price1, indicating the number of decimal places.
+- `price2`: The second price feed value, representing c / b (e.g., EUR/USD).
+- `expo2`: The exponent for price2.
+- `targetExponent`: The desired exponent for the output cross rate (a / c). The result will be scaled to this exponent.
+
+Returns:
+
+- `crossRate`: The computed cross rate (a / c), scaled to targetExponent.
+
+### Example
+
+```solidity copy
+pragma solidity ^0.8.0;
+
+import "@pythnetwork/pyth-sdk-solidity/IPyth.sol";
+import "@pythnetwork/pyth-sdk-solidity/PythStructs.sol";
+import "@pythnetwork/pyth-sdk-solidity/PythUtils.sol";
+
+contract ExampleCrossRate {
+  IPyth public pyth;
+
+  constructor(address _pythContract) {
+    pyth = IPyth(_pythContract);
+  }
+
+  // priceUpdate should include both price feeds
+  function getEthPerEur(
+    bytes32 ethUsdId,
+    bytes32 eurUsdId,
+    bytes[] calldata priceUpdate
+  ) external payable returns (int64 price, int32 expo) {
+    // Update both feeds
+    uint fee = pyth.getUpdateFee(priceUpdate);
+    pyth.updatePriceFeeds{ value: fee }(priceUpdate);
+
+    // Fetch prices
+    PythStructs.Price memory ethUsd = pyth.getPriceNoOlderThan(ethUsdId, 60);
+    PythStructs.Price memory eurUsd = pyth.getPriceNoOlderThan(eurUsdId, 60);
+
+    // Derive ETH/EUR = ETH/USD / EUR/USD
+    int32 targetExpo = -8;
+    int64 ethPerEur = PythUtils.deriveCrossRate(
+      ethUsd.price,
+      ethUsd.expo,
+      eurUsd.price,
+      eurUsd.expo,
+      targetExpo
+    );
+
+    return (ethPerEur, targetExpo);
+  }
+}
+
+```
+
+#### ⚠️ Things to Keep in Mind
+
+- The function reverts if either price is **negative**, or if any exponent is **less than -255**.
+- The result is rounded down. If the result is smaller than 1 in the given `targetExponent{:jsx}`, it will return 0.
+- Confidence intervals are not derived in this function. If needed, you have to derive them manually.
+- Reverts with `PythErrors.ExponentOverflow{:jsx}` if `targetExponent + expo1 - expo2{:jsx}` is outside the range **[-58, 58]**.
+
+### Additional Resources
+
+You may find these additional resources helpful.
+
+#### How to use real-time data in EVM contracts
+
+The [How to use real-time data in EVM contracts](./use-real-time-data/evm.mdx) guide provides a step-by-step guide on how to use real-time data in EVM contracts.
+
+#### Price Feed IDs
+
+The [Price Feed IDs](./price-feeds.mdx) page lists the price feed IDs for each asset supported by Pyth.
+
+  </Tab>
+
+  <Tab value="SVM">
+### SVM
+
+The Pyth Rust SDK provides [`get_price_in_quote`](https://github.com/pyth-network/pyth-sdk-rs/blob/d6598dcf8b556cd97bb597661cdc012398371be1/pyth-sdk/src/price.rs#L90) function to combine two price feeds.
+This method is available in [Pyth Rust SDK](https://github.com/pyth-network/pyth-sdk-rs/tree/main/pyth-sdk).
+
+### Example
+
+```rust copy
+let btc_usd: Price = ...;
+let eth_usd: Price = ...;
+// -8 is the desired exponent for the result
+let btc_eth: Price = btc_usd.get_price_in_quote(&eth_usd, -8);
+println!("BTC/ETH price: ({} +- {}) x 10^{}", price.price, price.conf, price.expo);
+```
+
+  </Tab>
+</Tabs>

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików