Я получаю следующую ошибку при развертывании моего контракта в Remix:
Инициализация создания контракта возвращает данные длиной более 24576 байт. Развертывание, скорее всего, не удастся. Дополнительная информация: eip-170
Контракт разбит на 2 контракта. A с 250 строками и B (B есть A) с 500 строками. Я также создал библиотеку и экспортировал некоторые из своих функций в эту библиотеку. В настоящее время я загружаю в среду Javascript VM. Стоит отметить, что когда я устанавливаю флажок «Включить оптимизацию» на вкладке «Компиляция», он все равно не работает. У меня есть несколько вопросов:
1) Как я могу проверить размер данных в Remix? Я получаю ошибку, что это более 24кб, как я могу проверить, сколько это точно?
2) Чем это вызвано? Это связано с длиной кода или количеством газа, который выполняется? Если это газ, почему, когда я добавляю намного больше газа к лимиту газа на вкладке «Выполнить» в ремиксе, он все равно дает мне ту же ошибку.
3) Любые распространенные способы уменьшить размер данных, чтобы я мог их развернуть?
Спасибо
Проблема с размером кода, о которой вы сообщили, просто означает, что ваш код компилируется в слишком большую низкоуровневую программу. В нем слишком много байтов.
Ничего связанного с газом или без газа: просто больше разрешенного.
Обычно такие проблемы возникают при очень длинных листингах и/или при наличии очень большой статической константы (массивы, таблицы и т.д.). В этом случае у вас должно быть несколько отдельных программных модулей (как вы, по-видимому, уже сделали) и уменьшить объем требуемой памяти.
НО это может быть проблема, связанная с remix IDE. Прежде чем продолжить, сохраните файлы, очистите кеш браузера и перезапустите браузер. (Кстати, Chrome, похоже, лучше взаимодействует с Remix, чем с другими браузерами...)
С другой стороны, если вы постепенно разрабатываете свой код, добавляя новые функции и тестируя их, прежде чем продолжить, просто попробуйте сделать шаг назад, удалив последнюю добавленную функцию, и убедитесь, что ошибка перестает появляться. После этого упростите все, что сможете.
Если ошибка не перестает появляться при удалении вашего последнего добавления, общий дизайн может быть плохим и по своей природе слишком потребляющим память.
См. Как оценить размер кода моего контракта? он слишком велик для развертывания сейчас !
Важно подчеркнуть, что разделение контракта на несколько контрактов/библиотек уменьшает размер байт-кода тогда и только тогда, когда они могут быть развернуты отдельно, и вы развертываете их отдельно. В противном случае результирующий байт-код будет больше!
Проверьте также свои общедоступные переменные: возможно, некоторые из них могут стать «приватными». В этом случае компилятор не создает для них геттер (чистый результат этого вмешательства, для ясности, зависит от многих других вещей... все равно попробуйте).
Включите оптимизацию смарт-контрактов в ремиксе. Это сработает
sp4c3
Контентоп
sp4c3
Контентоп
sp4c3