|
|
il y a 2 semaines | |
|---|---|---|
| .. | ||
| src | a615b5a17f chore: linting and typechecking yak shaving to the nth degree | il y a 3 semaines |
| .gitignore | ab0cf6f7d8 chore: updated gitignore to excluse the built dist/ folder | il y a 3 semaines |
| .prettierignore | 6efbe89542 chore: updated prettier ignores to prevent bikeshedding | il y a 2 semaines |
| README.md | 1ae21393f5 feat(evm/sdk/js): add pyth filler (#2832) | il y a 3 mois |
| eslint.config.js | 1ae21393f5 feat(evm/sdk/js): add pyth filler (#2832) | il y a 3 mois |
| jest.config.js | 99a6a2468b fix: tests for all | il y a 2 semaines |
| package.json | 31c364cf41 feat: performed a minor bump all packages, since all were changed in the big dual package update | il y a 2 semaines |
| tsconfig.build.json | 87679545bb chore: removed npm-specific things and removed more packageManager fields | il y a 2 semaines |
| tsconfig.json | fe92275443 chore: migrated all package.json and tsconfig files to a single, modern standard | il y a 3 semaines |
Pyth provides real-time pricing data in a variety of asset classes, including cryptocurrency, equities, FX and commodities. This library allows you to use these real-time prices on EVM-based networks.
$ npm install --save @pythnetwork/pyth-evm-js
$ yarn add @pythnetwork/pyth-evm-js
The fillPythUpdate function helps you automatically determine what Pyth price updates are needed for a transaction and creates the necessary update call.
This function uses the trace_callMany method by default but can be used with debug_traceCall and a bundler as well. See the example below for more information.
import { fillPythUpdate, multicall3Bundler, CallRequest } from "@pythnetwork/pyth-evm-js";
import { createPublicClient, http } from "viem";
import { optimismSepolia } from "viem/chains";
const PYTH_CONTRACT_OP_SEPOLIA = "0x0708325268df9f66270f1401206434524814508b"
const HERMES_ENDPOINT = "https://hermes.pyth.network"
const client = createPublicClient({
chain: optimismSepolia,
transport: http("YOUR_RPC_ENDPOINT"),
});
const call: CallRequest = {
to: "0x3252c2F7962689fA17f892C52555613f36056f22",
data: "0xd09de08a", // Your transaction calldata
from: "0x78357316239040e19fC823372cC179ca75e64b81",
};
// Fill Pyth update data using "trace_callMany"
const pythUpdate = await fillPythUpdate(
client,
call,
PYTH_CONTRACT_OP_SEPOLIA,
HERMES_ENDPOINT,
{
method: "trace_callMany",
maxIter: 5,
},
);
// Fill Pyth update data using "debug_traceCall"
const _pythUpdateWithDebugTraceCall = await fillPythUpdate(
client,
call,
PYTH_CONTRACT_OP_SEPOLIA,
HERMES_ENDPOINT,
{
method: "debug_traceCall",
bundler: multicall3Bundler, // or any function that takes a PythUpdate and a CallRequest and produces a CallRequest
maxIter: 5,
},
);
if (pythUpdate) {
console.log("Pyth update needed:", pythUpdate);
// Bundle the calls together, or pass the pythUpdate.updateData to your contract.
} else {
console.log("No Pyth data needed for this transaction");
}