Как найти ветку callback Chainlink VRF, которой не хватает газа
Случайное слово было сгенерировано, но контракт-потребитель не сохранил результат. Одна из веток обработчика может превысить лимит газа, указанный при запросе.
Измерьте самую дорогую ветку
Воспроизведите разные входы callback на состоянии, близком к рабочему. Включите первую запись в хранилище и наибольшую поддерживаемую партию. Пример сравнивает три замера с выбранным лимитом. Третьей ветке не хватает 7000 газа, хотя первые две прошли.
const limit = 100_000;
const samples = [68_000, 83_000, 107_000];
console.log(samples.map(used => limit - used));
Разделите получение слова и распределение результата
В callback можно сохранить ID запроса и полученные слова, а действия с переменной стоимостью выполнить отдельной транзакцией. Сопоставьте событие исполнения координатора с состоянием потребителя, чтобы отличить попытку вызова от сохранения результата. Даже при сбое обработчика возможны списания. Увеличение бюджета внешней транзакции само по себе не меняет лимит callback, записанный в исходном запросе.