UNPKG

@pushchain/core

Version:

Push Chain is a true universal L1 that is 100% EVM compatible. It allows developers to deploy once and make their apps instantly compatible with users from all other L1s (Ethereum, Solana, etc) with zero on-chain code change.

64 lines 2.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PriceFetch = void 0; const tslib_1 = require("tslib"); const enums_1 = require("../constants/enums"); const chain_1 = require("../constants/chain"); const evm_client_1 = require("../vm-client/evm-client"); const abi_1 = require("../constants/abi"); const anchor_1 = require("@coral-xyz/anchor"); const web3_js_1 = require("@solana/web3.js"); const web3_js_2 = require("@solana/web3.js"); const anchor_2 = require("@coral-xyz/anchor"); class PriceFetch { constructor(rpcUrls = {}) { this.rpcUrls = rpcUrls; } getPrice(chain) { return tslib_1.__awaiter(this, void 0, void 0, function* () { const rpcUrls = this.rpcUrls[chain] || chain_1.CHAIN_INFO[chain].defaultRPC; const vm = chain_1.CHAIN_INFO[chain].vm; const { lockerContract } = chain_1.CHAIN_INFO[chain]; if (!lockerContract) { throw new Error(`Locker contract not configured for chain: ${chain}`); } switch (vm) { case enums_1.VM.EVM: { const evmClient = new evm_client_1.EvmClient({ rpcUrls }); const result = yield evmClient.readContract({ abi: abi_1.FEE_LOCKER_EVM, address: lockerContract, functionName: 'getEthUsdPrice_old', }); const [price] = result; return price; } case enums_1.VM.SVM: { const PRICE_ACCOUNT = new web3_js_2.PublicKey('7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE'); const connection = new web3_js_1.Connection(rpcUrls[0], 'confirmed'); const provider = new anchor_2.AnchorProvider(connection, { publicKey: new web3_js_2.PublicKey('EfQYRThwBu4MsU7Lf3D2e68tCtdwfYj6f66ot1e2HNrq'), // eslint-disable-next-line @typescript-eslint/no-explicit-any }, { commitment: 'confirmed' }); const program = new anchor_1.Program(abi_1.FEE_LOCKER_SVM, provider); const result = yield program.methods['getSolPrice']() .accounts({ priceUpdate: PRICE_ACCOUNT, }) .view(); if (!result || !result.price) { throw new Error('Invalid price data returned'); } // Exponent on this function is always NEGATIVE const price = result.price.toNumber(); return BigInt(price); } default: { throw new Error(`Unsupported VM ${vm}`); } } }); } } exports.PriceFetch = PriceFetch; //# sourceMappingURL=price-fetch.js.map