Является ли хорошей практикой бросать в Solidity Constructor

Если у меня есть Smart Contract с другим контрактом как параметр, параметр может быть неопределенным, что было бы плохо. Правильно ли иметь инструкцию require(address(paramContract) != 0x0) в конструкторе?

Я искушаюсь сделать это, потому что это имеет смысл, но звучит неправильно, чтобы иметь возможный бросок в конструкторе

3 голоса | спросил CodingYourLife 6 PMpFri, 06 Apr 2018 16:02:15 +030002Friday 2018, 16:02:15

2 ответа


1

Подумайте о газе

Выбрасывание исключения с помощью require спасет вас или всех, кто пытается развернуть контракт, израсходовав газ, если аргументы неверны.

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

Если у контракта есть ошибка, создатель получит уведомление от своего клиента о том, что транзакция не будет успешной, и затем они смогут дважды проверить свои параметры, чтобы увидеть, что они сделали неправильно.

ответил norganna 6 PMpFri, 06 Apr 2018 16:14:30 +030014Friday 2018, 16:14:30
1

Нет. Это не так.

Приоритет должен заключаться в том, чтобы контракт всегда защищал целостность состояния приложения. Недопустимая конфигурация не должна разрешаться, даже если это результат ошибки разработчика /операции /развертывания.

Разрешение контракта продолжать, как будто ничего плохого, когда на самом деле что-то очень неправильно, неверно, по-моему . Я думаю о конкретном инциденте, который привел к потере более 100 миллионов долларов США. Как и в случае большинства катастроф, есть несколько факторов, которые следует учитывать. Можно подумать о различных мерах безопасности, любой из которых предотвратил бы неудачную последовательность событий.

Аргументы конструктора не являются единственным способом обеспечения полностью правильной конфигурации до начала нормальной обработки. Можно рассмотреть процесс с несколькими вызовами нескольких контрактов для подстройки взаимозависимостей. Это было бы хорошо, если бы «нормальные» функции были защищены чем-то вроде onlyIfInitialized.

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

Надеюсь, это поможет.

ответил Rob Hitchens B9lab 7 AMpSat, 07 Apr 2018 02:47:46 +030047Saturday 2018, 02:47:46

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

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

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