Интеграция с Pyth Network (оракулы)

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1 услугВсе 1306 услуг
Интеграция с Pyth Network (оракулы)
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Направления блокчейн-разработки
Этапы блокчейн-разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1221
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1163
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    855
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1056
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    828

Интеграция с Pyth Network (оракулы)

Pyth Network — альтернатива Chainlink с принципиально иной моделью: first-party data sources. Цены поставляют напрямую финансовые институты — Jane Street, Jump Trading, Cboe. Данные обновляются sub-second (400ms latency). Pyth доминирует в Solana и активно растёт в EVM экосистеме через cross-chain infrastructure.

Pull vs Push oracle модель

Chainlink (Push): операторы периодически обновляют цену на-chain. Цена всегда доступна в смарт-контракте. Обновления происходят по time-based или deviation-based triggers. Газ платит протокол Chainlink.

Pyth (Pull): цены обновляются off-chain постоянно. Для использования on-chain — пользователь включает price update в свою транзакцию. Газ платит конечный пользователь. Это даёт sub-second свежесть без постоянных on-chain транзакций.

EVM интеграция

Установка

npm install @pythnetwork/pyth-sdk-solidity
npm install @pythnetwork/pyth-evm-js

Смарт-контракт

import "@pythnetwork/pyth-sdk-solidity/IPyth.sol";
import "@pythnetwork/pyth-sdk-solidity/PythStructs.sol";

contract PythConsumer {
    IPyth pyth;
    bytes32 constant ETH_USD_PRICE_ID = 
        0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace;
    
    constructor(address pythAddress) {
        pyth = IPyth(pythAddress);
    }
    
    // updateData передаётся от пользователя (получен с Pyth Hermes API)
    function doSomethingWithPrice(bytes[] calldata updateData) external payable {
        // Обновить цену (пользователь оплачивает fee)
        uint fee = pyth.getUpdateFee(updateData);
        pyth.updatePriceFeeds{value: fee}(updateData);
        
        // Получить обновлённую цену
        PythStructs.Price memory price = pyth.getPriceNoOlderThan(
            ETH_USD_PRICE_ID,
            60  // max age in seconds
        );
        
        // price.price — int64 (может быть отрицательным, но реально нет для цен)
        // price.expo — степень 10 (обычно -8, значит делить на 10^8)
        // price.conf — доверительный интервал
        
        int256 ethPrice = price.price * int256(10 ** (18 + price.expo));
    }
}

Frontend: получение updateData

import { PriceServiceConnection } from "@pythnetwork/pyth-evm-js";

const connection = new PriceServiceConnection("https://hermes.pyth.network");

const ETH_USD_PRICE_ID = "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace";

// Получить последнее обновление цены для включения в транзакцию
const priceUpdateData = await connection.getLatestVaas([ETH_USD_PRICE_ID]);

// Передать в контракт вместе с транзакцией
await contract.doSomethingWithPrice(priceUpdateData, {
    value: updateFee
});

Confidence interval

Уникальная особенность Pyth — каждая цена включает confidence interval (conf). Это стандартное отклонение цены по источникам.

PythStructs.Price memory price = pyth.getPriceNoOlderThan(priceId, 60);

// Если confidence слишком высокий — цена ненадёжна
// Например, если conf > 1% от цены — отказать
require(
    price.conf * 100 < uint64(price.price),
    "Price confidence too wide"
);

Это позволяет протоколу защититься от периодов низкой уверенности в цене (market disruptions).

Solana интеграция

use pyth_sdk_solana::load_price_feed_from_account_info;

pub fn get_price(price_account: &AccountInfo) -> Result<i64> {
    let price_feed = load_price_feed_from_account_info(price_account)?;
    let current_price = price_feed
        .get_price_no_older_than(clock.unix_timestamp, 60)?;
    Ok(current_price.price)
}

Pyth особенно хорош для протоколов требующих high-frequency price updates (perp DEX, lending с liquidations в волатильных условиях).