Как сохранить порядок и точность полей в пакете Chainlink MVR

Фид MVR возвращает несколько значений в одном пакете. Если применить точность первого поля ко всем числам, декодер может выдать правдоподобные, но неверные результаты.

Сопоставьте каждому числу его масштаб

Возьмите схему конкретного фида, разберите по ней latestBundle() и прочитайте bundleDecimals() для соответствующих полей. В учебном пакете точность первого числа равна шести, второго — двум. Получаются 123,456789 и 25,00. Пример выводит целую часть и остаток без дополнения нулями.

const values = [123456789n, 2500n];
const scales = [6, 2];
console.log(values.map((v, i) => [v / 10n**BigInt(scales[i]), v % 10n**BigInt(scales[i])]));

Проверяйте пакет целиком

Считайте время публикации и метаданные в том же блоковом контексте, что и значения. Зафиксируйте названия, типы и порядок полей в контрольном примере декодера. Одной проверки длины кортежа недостаточно: два целочисленных поля могут поменяться местами и всё равно пройти ABI-декодирование. Для нечисловых полей применяйте правила их типов.

docs.chain.link MVR feed components