Package Exports
- @pythnetwork/pyth-ton-js
- @pythnetwork/pyth-ton-js/lib/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@pythnetwork/pyth-ton-js) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Pyth Network TON SDK
This SDK provides a JavaScript interface for interacting with the Pyth Network on the TON blockchain.
Installation
npm install @pythnetwork/pyth-ton-jsUsage
Here's a basic example of how to use the SDK:
npm install @pythnetwork/pyth-ton-js @pythnetwork/hermes-client @ton/core @ton/ton @ton/cryptoimport { TonClient, Address, WalletContractV4 } from "@ton/ton";
import { toNano } from "@ton/core";
import { mnemonicToPrivateKey } from "@ton/crypto";
import { HermesClient } from "@pythnetwork/hermes-client";
import {
PythContract,
PYTH_CONTRACT_ADDRESS_TESTNET,
calculateUpdatePriceFeedsFee,
} from "@pythnetwork/pyth-ton-js";
const BTC_PRICE_FEED_ID =
"0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43";
async function main() {
const client = new TonClient({
endpoint: "https://testnet.toncenter.com/api/v2/jsonRPC",
apiKey: "your-api-key-here", // Optional, but note that without api-key you need to send requests once per second
});
const contractAddress = Address.parse(PYTH_CONTRACT_ADDRESS_TESTNET);
const contract = client.open(PythContract.createFromAddress(contractAddress));
const guardianSetIndex = await contract.getCurrentGuardianSetIndex();
console.log("Guardian Set Index:", guardianSetIndex);
const price = await contract.getPriceUnsafe(BTC_PRICE_FEED_ID);
console.log("BTC Price from TON contract:", price);
const hermesEndpoint = "https://hermes.pyth.network";
const hermesClient = new HermesClient(hermesEndpoint);
const priceIds = [BTC_PRICE_FEED_ID];
const latestPriceUpdates = await hermesClient.getLatestPriceUpdates(
priceIds,
{
encoding: "hex",
}
);
console.log("Hermes BTC price:", latestPriceUpdates.parsed?.[0].price);
const numUpdates = 1; // Only BTC price
const updateData = Buffer.from(latestPriceUpdates.binary.data[0], "hex");
console.log("Update data:", updateData);
// NOTE: As of 2025/10/19 There's a bug with TON Access (https://ton.access.orbs.network) RPC service where if you provide an
// update data buffer with length of more than ~320 then the rpc returns error 404 and the function fails. In this case you can use the
// contract.getSingleUpdateFee() method to get the single update fee and multiply it by the number of updates you want to perform.
const updateFee = await contract.getUpdateFee(updateData);
console.log("Update fee:", updateFee);
const mnemonic = "your mnemonic here";
const key = await mnemonicToPrivateKey(mnemonic.split(" "));
const wallet = WalletContractV4.create({
publicKey: key.publicKey,
workchain: 0,
});
const provider = client.open(wallet);
await contract.sendUpdatePriceFeeds(
provider.sender(key.secretKey),
updateData,
calculateUpdatePriceFeedsFee(numUpdates) + BigInt(updateFee)
);
console.log("Price feeds updated successfully.");
const updatedPrice = await contract.getPriceUnsafe(BTC_PRICE_FEED_ID);
console.log("Updated BTC Price from TON contract:", updatedPrice);
}
main().catch(console.error);API Reference
PythContract
The main class for interacting with the Pyth contract on TON.
Methods:
getCurrentGuardianSetIndex(provider: ContractProvider): Promise<number>getPriceUnsafe(provider: ContractProvider, priceFeedId: string): Promise<PriceInfo>getPriceNoOlderThan(provider: ContractProvider, timePeriod: number, priceFeedId: string): Promise<PriceInfo>getEmaPriceUnsafe(provider: ContractProvider, priceFeedId: string): Promise<PriceInfo>getEmaPriceNoOlderThan(provider: ContractProvider, timePeriod: number, priceFeedId: string): Promise<PriceInfo>getUpdateFee(provider: ContractProvider, vm: Buffer): Promise<number>getSingleUpdateFee(provider: ContractProvider): Promise<number>sendUpdatePriceFeeds(provider: ContractProvider, via: Sender, updateData: Buffer, updateFee: bigint): Promise<void>
Constants
PYTH_CONTRACT_ADDRESS_TESTNET: The address of the Pyth contract on the TON testnet.