Maximum call stack size exceeded
RangeError: Maximum call stack size exceeded
Зачем вообще такое писать
NFT устроены так, что внутри у них есть число — индекс. Он уникальный в рамках коллекции. Обычно индексы начинаются с нуля и идут по возрастанию: 0, 1, 2, 3 и так далее. Но только не в коллекциях gomining.
У них первый индекс в коллекции — 348903. Сомнительно, но ок: у ребят сквозная нумерация индексов на всех блокчейнах. Но это только начало. Далее примерно тысяча индексов идет последовательно с шагом в единицу до 350002, после чего идёт пропуск на 9 номеров — следующий индекс 350012. И таких пропусков — 863 штуки.
Всё было бы нормально, если бы такую коллекцию нужно было просто заминтить. Тогда никаких проблем нет — можно подставлять нужные индексы в нужные NFT, как это сделано, например, в коллекциях TON DNS или Telegram Usernames.
Но коллекции gomining должны были продаваться с ланчпада. Ланчпад — это лендинг с одной кнопкой «Купить NFT». Кнопка списывает у пользователя TON и минтит NFT на кошелёк. Весь процесс покупки и минтинга происходит полностью ончейн, вся логика зашита в смарт-контрактах.
В этой логике было очень удобно считать от нуля до максимального количества NFT и использовать этот счётчик как индекс NFT. Такой подход хорошо работал несколько лет для «обычных» коллекций, но на gomining всё сломалось.
Так я узнал что нельзя написать 863 условия подряд, контракт не соберется. Но можно разбить их по 200 штук и разнести по разным функциям, тогда будет работать
В итоге я сделал так:
https://tonviewer.com/EQCN7SkHxlSkRwXopX5iReUDuhCDaGyBevt6Bp3D2jZQU0gb?section=code




