JSPM

@pythnetwork/pyth-ton-js

0.2.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2469
  • Score
    100M100P100Q143020F
  • License Apache-2.0

Pyth Network TON Utilities

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-js

Usage

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/crypto
import { 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.