Могу ли я избежать проверки в смарт-контрактах ethereum, написанных для надежной оптимизации газа? - PullRequest
0 голосов
/ 02 февраля 2019

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

и под проверкой я имею в виду: require (), assert (), revert ()

1 Ответ

0 голосов
/ 05 февраля 2019

Есть несколько причин, по которым вы хотели бы использовать то, что вы называете проверкой.Ниже я обрисовал некоторые из них.

1) Гарантия того, что ваш контракт не может войти в неожиданное состояние.Предсказать, как пользователь должен взаимодействовать с контрактом, гораздо проще, чем предсказать, как контракт может быть использован не по назначению, поэтому проверяет, чтобы избежать непредвиденного состояния, помогающего ограничить пути кода и результирующие векторы атак.

2) Отладка и обратная связь с пользователем.Если у вас есть проблема с кодом контракта, использование require () позволяет вам предоставить полезную обратную связь пользователям вашего контракта (обычно ваш код переднего плана)

3) Стоимость этих операций сравнительно мала по сравнениюк потенциальным расходам, связанным с неправильным использованием и / или повторным входом.

...