Как рассчитать перекрёстный курс по двум фидам Chainlink разной точности

Приложение выражает цену актива A в единицах B через два долларовых фида. Если напрямую поделить их целочисленные ответы, при разной точности ошибка может достигать ста раз.

Сократите общую валюту котировки

Допустим, A стоит 12,50 USD при восьми знаках точности, а B — 2,50 USD при шести. После нормализации один A стоит пять B. Пример выводит 5 000 000 миллионных долей B. Перенесите масштабы в числитель и знаменатель, оставьте целочисленное деление на конец и получите фактическую точность из обоих прокси.

const aUsd = 1250000000n, aScale = 8n;
const bUsd = 2500000n, bScale = 6n;
const microB = aUsd * 10n**(bScale + 6n) / (bUsd * 10n**aScale);
console.log(microB.toString());

Проверьте оба наблюдения до расчёта

Прочитайте оба фида в контексте одного блока и сравните время каждого обновления. Общий блок не гарантирует одновременное наблюдение цен. Для положительных цен отбрасывайте нулевые и отрицательные значения и задайте правило округления. При фиксированной разрядности промежуточное произведение может переполниться даже при небольшом итоговом отношении. Обратному курсу нужна отдельная подпись единиц.

docs.chain.link Using Data Feeds