Как найти ветку 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, записанный в исходном запросе.

docs.chain.link VRF billing