Существует ли максимальное количество публичных функций в контракте?

У меня есть два контракта A и B, как разворачивающиеся, так и работающие правильно в ganache (оба они используют менее 6M газа). Теперь я хочу создать третий контракт C, наследующий как A, так и B.

contract C is A, B {
}

Настоящий контракт C не используется для исключения из-за отсутствия газа. Но газ не должен быть проблемой, потому что ganache настроен с блочным газовым пределом в 4 миллиарда.

После того, как пробная версия и ошибка комментируют мой код, я обнаружил, что он не работает с публичной функцией в контракте B. После переопределения функций я обнаружил, что не имеет значения, какая функция, в частности, будет терпеть неудачу, если существует более N общественных функций в контракте В.

Обновление: . Попытка развернуть те же контракты в приватной тестовой сети geth вызывает ошибку «негабаритных данных». Поэтому я думаю, что это не количество публичных функций, а итоговый контракт слишком большой.

5 голосов | спросил Ismael 24 PMpTue, 24 Apr 2018 15:56:26 +030056Tuesday 2018, 15:56:26

1 ответ


4

В geth-коде есть только одно место, где выбрасываются «негабаритные данные». Он находится в func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error.

  

Эвристический предел, отклонять транзакции более 32 КБ для предотвращения атак DOS

Кроме того, существует также предел для размера байт-кода смарт-контракта. Это 24576 байтов (см. protocol_params.go).

maxCodeSize может быть установлен в genesis.json. 32 КБ для ограничения размера TX - это жестко закодированная константа в коде.

ответил ivicaa 25 AMpWed, 25 Apr 2018 07:48:32 +030048Wednesday 2018, 07:48:32

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132