Существует ли максимальное количество публичных функций в контракте?
У меня есть два контракта A и B, как разворачивающиеся, так и работающие правильно в ganache (оба они используют менее 6M газа). Теперь я хочу создать третий контракт C, наследующий как A, так и B.
contract C is A, B {
}
Настоящий контракт C не используется для исключения из-за отсутствия газа. Но газ не должен быть проблемой, потому что ganache настроен с блочным газовым пределом в 4 миллиарда.
После того, как пробная версия и ошибка комментируют мой код, я обнаружил, что он не работает с публичной функцией в контракте B. После переопределения функций я обнаружил, что не имеет значения, какая функция, в частности, будет терпеть неудачу, если существует более N общественных функций в контракте В.
Обновление: . Попытка развернуть те же контракты в приватной тестовой сети geth вызывает ошибку «негабаритных данных». Поэтому я думаю, что это не количество публичных функций, а итоговый контракт слишком большой.
1 ответ
В geth-коде есть только одно место, где выбрасываются «негабаритные данные». Он находится в func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error
.
Эвристический предел, отклонять транзакции более 32 КБ для предотвращения атак DOS
Кроме того, существует также предел для размера байт-кода смарт-контракта. Это 24576 байтов (см. protocol_params.go
).
maxCodeSize
может быть установлен в genesis.json. 32 КБ для ограничения размера TX - это жестко закодированная константа в коде.