@pythnetwork/pyth-lazer-sui-js
v0.3.0
Published
TypeScript SDK for the Pyth Lazer Sui contract
Downloads
121
Keywords
Readme
Pyth Lazer Sui JS SDK
This package provides utilities to create a Sui Programmable Transaction to parse & verify a Pyth Lazer price update on-chain.
Build
From the repository root:
pnpm turbo build -F @pythnetwork/pyth-lazer-sui-jsQuickstart
A runnable example is provided at examples/FetchAndVerifyUpdate.ts. It:
- connects to Lazer via
@pythnetwork/pyth-lazer-sdk, - fetches a single
leEcdsapayload, - composes a Sui transaction calling
parse_and_verify_le_ecdsa_update.
Run the example
# Your Sui private key in Bech32 format
# SUI_KEY=
# Lazer contract state ID
# STATE_ID=
# Your Lazer API token
# LAZER_TOKEN=
SUI_FULLNODE_URL="https://fullnode.mainnet.sui.io:443"
pnpm run example:fetch-and-verify \
--fullnode-url "$SUI_FULLNODE_URL" \
--state-id "$STATE_ID" \
--lazer-token "$LAZER_TOKEN"The script's core logic is summarized below:
import { SuiClient } from "@mysten/sui/client";
import { Transaction } from "@mysten/sui/transactions";
import { PythLazerClient } from "@pythnetwork/pyth-lazer-sdk";
import { addParseAndVerifyLeEcdsaUpdateCall } from "@pythnetwork/pyth-lazer-sui-js";
// 1. Fetch the price update from Pyth Lazer in "leEcdsa" format:
const lazer = await PythLazerClient.create({ token: lazerToken });
const latestPrice = await lazer.getLatestPrice({
priceFeedIds: [1],
properties: ["price", "bestBidPrice", "bestAskPrice", "exponent"],
formats: ["leEcdsa"],
channel: "fixed_rate@200ms",
jsonBinaryEncoding: "hex",
});
const update = Buffer.from(latestPrice.leEcdsa?.data ?? "", "hex");
// 2. Create a new Sui transaction:
const client = new SuiClient({ url: fullnodeUrl });
const tx = new Transaction();
// 3. Add the parse and verify call:
const verifiedUpdate = await addParseAndVerifyLeEcdsaUpdateCall({
client,
tx,
stateObjectId: stateId,
update,
});
// 4. Consume `verifiedUpdate` in your own contract with additional calls...
// 5. Sign and execute the transaction:
const result = await client.signAndExecuteTransaction({
transaction: tx,
signer,
});References
- Pyth Lazer Sui contract:
lazer/contracts/sui/ - Lazer JS SDK (data source):
lazer/sdk/js/ - Mysten Sui TS SDK docs: https://sdk.mystenlabs.com/typescript/transaction-building/basics
