Skip to main content

Получение аккаунта ценового фида

Мы выводим PDA аккаунта цены, используя следующие сиды (seeds)
  • “price feed” (buffer)
  • “pyth-lazer” (buffer)
  • feedID (buffer) — выбранный актив. Список поддерживаемых фидов можно найти здесь
  • price program idPriCems5tHihc6UDXDjzjeawomAwBduWMGAi8ZUjppd
// seeds: ["price_feed", "pyth-lazer", feed_id_as_string]
function deriveFeedAddress (feedId: string) {
  const [addr] = web3.PublicKey.findProgramAddressSync(
  [Buffer.from('price_feed'), Buffer.from('pyth-lazer'), Buffer.from(feedId)],
  PROGRAM ID
  );
  return addr
}

Разбор данных аккаунта

Ончейн-аккаунт хранит заголовок и поля с ценовыми данными. Мы читаем сырые байты и выполняем декодирование. Смещение цены: 73 байта от начала Тип: Знаковое 64-битное целое число (i64) Применение экспоненты: Масштабируйте сырую цену, используя экспоненту аккаунта
const addr = deriveFeedAddress(feed.id);
const PRICE_OFFSET = 73;

const dv = new DataView(ai.data.buffer, ai.data.byteOffset, ai.data.byteLength);
const raw = dv.getBigUint64(PRICE_OFFSET, true);
const price = Number(raw) * Math.pow(10, feed.exponent);

Демо

Поток цен в реальном времени

Реализация

Узнайте, как получить доступ к нашим оракулам в ончейне

Пример Кода

Ознакомьтесь с нашим репозиторием на GitHub