Насколько большим может быть контракт?

Я пытаюсь выяснить, насколько большим может быть контракт? Возможно ли иметь 10к функций? Один миллион? Более?

Есть ли ограничение на размер тела функции?

Нужен ли более крупный контракт для развертывания большего количества газа?

Является ли больший контракт медленнее, чем меньший?

Вы можете распределить свой код по нескольким контрактам. Вам не нужно развертывать код в одной транзакции.
Теперь есть Diamond Standard, который решает проблему максимального размера: github.com/ethereum/EIPs/issues/2535 .

Ответы (2)

Контракты Solidity компилируются в байт-код EVM. Контрактный байт-код стоит 200 газа за байт байт-кода, и, поскольку лимит газа в блоке сейчас составляет 8 миллионов, теоретически вы можете получить примерно 40 000 (немного меньше, поскольку есть дополнительные данные для развертывания/передачи) байтового контракта. Маловероятно, что вы сможете создать контракт такого размера, поскольку в блоках обычно уже не так много дополнительного места. Что касается скорости выполнения, это полностью зависит от вашей реализации.

Изменить: как указал @Ismael, на самом деле существует ограничение в 32 КБ на транзакцию, как описано здесь . На этой странице также говорится, что размер контракта ограничен 24576 байтами, так что я исправлен! EIP для лимита байтов контракта можно найти здесь .

Edit2: Если вы ищете формальное объяснение ограничения размера контракта, ознакомьтесь с определением 97 желтой бумаги :

Желтая бумага Определение 97

То есть выходной размер конечного кода тела не должен превышать 24576 байт.

Также у вас есть жесткое ограничение в 32 КБ на транзакцию ethereum.stackexchange.com/a/46612 .

Вы можете обойти ограничение размера контракта, используя стандарт прозрачного контракта: https://github.com/ethereum/EIPs/issues/1538 .