Pyth is live
on Aptos
With the recent launch of Pythnet - a dedicated app-chain for Pyth price aggregation - and the integration with the Wormhole Protocol, your dApp can now permissionlessly request and consume any of the 200+ Pyth price feeds directly on Aptos.
What is Pyth?
The Pyth network is a first-party financial oracle network designed to publish continuous real-world data on-chain in a tamper-resistant, decentralized, and self-sustainable environment.
The network is designed to incentivize market participants — exchanges, market makers, and financial services providers — to share directly on-chain the price data collected as part of their existing operations. The network then aggregates this first-party price data and makes it available for free to either on- or off-chain applications.
In less than a year, the network secured more than $2.0B in total value, supported up to $3.8B in monthly trading volume ($30B+ in total), and exceeded 500K client downloads.
Pyth currently supports 200+ price feeds including crypto, equities (including the full US 30), FX, metals and more — and updates twice per second without any access restriction. It will also soon support Aptos ecosystem tokens.
More details can be found here.
How does Pyth Work
on Aptos ?
Pyth prices are published on Pythnet and relayed to Aptos using the Wormhole Network as a cross-chain message passing protocol. Wormhole observes when Pyth prices on Pythnet have changed and publishes an off-chain signed message attesting to this fact.
This signed price update message can then be submitted to the Pyth contract. The contract verifies the Wormhole message and updates the on-chain Pyth price to the new price.
Pyth does not automatically submit the prices to the Aptos networks; protocols and users are responsible for updating the on-chain Pyth price before using it.
To learn more, please visit the docs.
How to integrate Pyth
feeds on Aptos
Pyth stores prices off-chain to minimize gas fees, which allows Pyth to offer a wider selection of products and faster update times. To use Pyth prices on-chain, they must be fetched from an off-chain price service.
The AptosPriceServiceConnection class can be used to interact with these services, providing a way to fetch these prices directly in your code. The following example wraps an existing RPC provider and shows how to obtain Pyth prices and submit them to the network:
1const connection = new AptosPriceServiceConnection(
2const connection = new AptosPriceServiceConnection(
3 "https://xc-testnet.pyth.network"
4); // See Price Service endpoints section below for other endpoints
5
6const priceIds = [
7 // You can find the ids of prices at https://pyth.network/developers/price-feed-ids/#pyth-cross-chain-testnet
8 "0xf9c0172ba10dfa4d19088d94f5bf61d3b54d5bd7483a322a982e1373ee8ea31b", // BTC/USD price id in testnet
9 "0xca80ba6dc32e08d06f1aa886011eed1d77c77be9eb761cc10d72b7d0a2fd57a6", // ETH/USD price id in testnet
10];
11
12// 'getPythLatestPriceFeeds' returns a 'PriceFeed' for each price id. It contains all information about a price and has
13// utility functions to get the current and exponentially-weighted moving average price, and other functionality.
14const priceFeeds = connection.getPythLatestPriceFeeds(priceIds);
15console.log(priceFeeds[0].getCurrentPrice()); // Price { conf: '1234', expo: -8, price: '12345678' }
16console.log(priceFeeds[1].getEmaPrice()); // Exponentially-weighted moving average price
17
18// In order to use Pyth prices in your protocol you need to submit the price update data to Pyth contract in your target
19// chain. 'getPriceUpdateData' creates the update data which can be submitted to your contract. Then your contract should
20// call the Pyth Contract with this data.
21const priceUpdateData = await connection.getPriceUpdateData(priceIds);
22
23// Create a transaction and submit to your contract using the price update data
24const client = new AptosClient(endpoint);
25let result = await client.generateSignSubmitWaitForTransaction(
26 sender,
27 new TxnBuilderTypes.TransactionPayloadEntryFunction(
28 TxnBuilderTypes.EntryFunction.natural(
29 "0x..::your_module",
30 "do_something",
31 [],
32 [priceUpdateData]
33 )
34 )
35);
Start integrating
Read the DocsAnything else you need?
Get to know Pyth's unique metrics: Confidence Interval. And integrate it!
Tired of USD-denominated markets? Get your non-USD prices easily with this function.
For further testing, you have the ability to deploy the Pyth contract locally and mock its behavior. More details are available here.