Как обработать ответ OffchainLookup при чтении контракта Ethereum
Контракт может намеренно откатить вызов чтения и попросить клиента получить внешние данные. Обработчик CCIP Read должен закончить обратный вызов, прежде чем использовать ответ.
Декодируйте запрос и проверьте инициатора
Данные отката с селектором ниже могут содержать OffchainLookup. Извлеките sender, адреса URL, данные запроса, селектор обратного вызова и дополнительные данные. Сравните sender с адресатом исходного вызова. Расхождение возможно при необработанном вложенном запросе.
OffchainLookup(address,string[],bytes,bytes4,bytes) → 0x556f1830
Выполните запрос к шлюзу в предусмотренном формате, получите байты ответа и вызовите указанную функцию на исходном контракте с ответом и дополнительными данными. Итог чтения возвращает эта функция. Сырые байты шлюза ещё не прошли проверку контрактом.
Ограничьте внешний запрос
В серверном обработчике ограничьте допустимые URL и сетевые назначения, размер ответа, число переходов и глубину рекурсивных запросов. При историческом чтении выполняйте обратный вызов на том же блоке. Недоступность шлюза может сорвать и корректный запрос. eips.ethereum.org ERC-3668