Продолжаем разбирать основные принцип работы с Chainlink.
Не думайте, что значение latestRoundData всегда будет получено
Большинство оракулов Chainlink могут быть с контролем доступа, например код агрегатора stETH / ETH. Вызовы view функций будут ревертиться, если вызывающий попал в черный список.
Есть вероятность, что в будущем доступ к оракулам Chainlink будет ограничен для платных клиентов (в настоящее время Chainlink субсидируется и не имеет модели монетизации для своих наиболее используемых фидов).
Если вы создаете неизменяемый протокол с резервным оракулом, имеет смысл окружить вызов latestRoundData() оператором try-catch, чтобы иметь возможность "варианта 2" на такой случай.
function getLatestData() public view returns (uint256) {
try dataFeed.latestRoundData() returns (
/* uint80 roundId */,
int256 answer,
/* uint256 startedAt */,
uint256 updatedAt,
/* uint80 answeredInRound */
) {
// validate and return
} catch {
// use fallback oracle
}
}
Проверяйте качество Feed
Chainlink подразделяет свои фиды на 6 категорий в зависимости от их назначения и стабильности. В идеальном случае вы должны включать в свой протокол только проверенные фиды, поскольку они имеют самую высокую гарантию долгосрочной надежности.
Новые пары ценовых фидов будут иметь статус Provisional в течение первых 90 дней после их выпуска, в течение которых их параметры могут измениться. Monitored Feeds - это фиды, «находящиеся на рассмотрении команды Chainlink Labs для поддержки стабильности широкой экосистемы», что означает, что они недавно стали нестабильными или менее ликвидными, чем хотелось бы.
Будьте особенно бдительны при интеграции пользовательских и специализированных фидов, поскольку они могут иметь различную семантику ответов, предположения о доверии и гарантии актуальности.
Категория Deprecating - это худшая категория, если вы создаете неизменяемый протокол, хотя ни один Chainlink Feed еще не был выведен из употребления.
Делайте форк осторожно
Если вы форкаете код, написанный в 2021 году или ранее, дважды проверьте, что в нем нет вызовов latestAnswer(). Этот метод уже устарел, и вам следует заменить вызовы latestAnswer() на latestRoundData().
Модель доверия
Всегда полезно проверить исходный код и состояние развернутых контрактов, связанных с фидом. Обычно это выглядит примерно так: EACAggregatorProxy (контракт, который вы вызываете через AggregatorV3Interface), принадлежащий мультисигу. Мультисиг может передавать право собственности и менять агрегатор. Агрегатор содержит такие интересные параметры, как:
1. transmitters - адреса, на которые разрешено отправлять ответы,
2. minAnswer и maxAnswer, определяющие, что считается правильным ответом,
3. decimals числа ответа.
Вот несколько выводов, которые я сделал во время написания этой статьи:
1. Фид цены Ethereum stETH / ETH считает допустимым ответ в диапазоне от 0,001ETH до 100ETH.
2. Мультисиг, используемый в фидах Optimism, имеет 20 подписантов, но порог выполнения составляет всего 3! У половины подписантов нет ETH и они никогда не совершали транзакций на Optimism. Такая же сомнительная система существует на нескольких альтернативных блокчейнах.
3. Цена LINK менее 0,1 доллара США считается недействительной благодаря фиду LINK / USD.
Убедитесь, что вы понимаете и принимаете предположения о доверии к фидам, прежде чем интегрировать их в свое приложение.
В понедельник разберем еще пару последних пунктов на эту тему.
#chainlink