Я читаю кусочки, которые самоуничтожаются в рамках контрактов, это хорошо. Может ли кто-нибудь объяснить, в чем преимущества самоуничтожения контракта, когда дело доходит до программирования Ethereum? Есть ли разница, если вы используете разные клиенты, реализации или языки?
Самоуничтожение в Ethereum — это операция (фактически OPCODE) на уровне EVM, независимо от того, какой язык или клиент вы используете.
Например, вызов selfdestruct(address)
отправляет весь текущий баланс контракта на address
.
Это полезно, когда вы закончили с контрактом, потому что это стоит гораздо меньше газа, чем просто отправка баланса с помощью address.send(this.balance)
.
Фактически, код операции SELFDESTRUCT использует отрицательный газ , потому что операция освобождает место в блокчейне, очищая все данные контракта.
Этот отрицательный газ вычитается из общей стоимости газа транзакции, поэтому, если вы сначала выполняете некоторые операции по очистке, SELFDESTRUCT может сократить ваши расходы на газ.
Примечание: этот вопрос изначально задавался о коде suicide
операции, который selfdestruct
тем временем стал соответствовать EIP6 .
selfdestruct
это рекомендуемый термин, который можно найти в более новых версиях кода Solidity и Serpent. Это тот же API и поведение, как описано в других ответах, и это псевдоним для suicide
.
EIP6 описывает мотивацию:
Основная причина, по которой мы изменили термин «самоубийство», — показать, что люди важнее кода, а Ethereum — достаточно зрелый проект, чтобы осознать необходимость изменений. Самоубийство — серьезная тема, и мы должны приложить все возможные усилия, чтобы не затронуть тех в нашем сообществе разработчиков, которые страдают депрессией или недавно потеряли кого-то в результате самоубийства.
Функция selfdestruct()
и относительный OPCODE используются, когда у вас есть контракт с ошибкой или нежелательным поведением, и вы хотите от него избавиться.
Это selfdestruct(address)
лучшая версия, как указал @tjaden-hess, когда у вас есть контракты с оплатой (контракты, которые получают эфиры), эфиры будут перенаправлены, address
что является большой победой.
Когда вы взаимодействуете с саморазрушающимся контрактом, ОБРАТИТЕ ВНИМАНИЕ: если вы отправляете транзакцию и/или средства на него, ваши средства ПОТЕРЯНЫ . Не отправляйте на него средства или другие транзакции после самоуничтожения контракта.
Это проблема, которую вы всегда должны иметь в виду при разработке приложений, использующих контракты с функцией самоуничтожения, убедитесь, что адрес контракта удален из вашего приложения после selfdestruct()
вызова контракта, возможно, вы всегда можете вызвать метод получения для посмотрите, отвечает ли контракт допустимым значением, прежде чем отправлять транзакцию и/или переводить на него эфиры.
Обновлять
Имя метода теперь selfdestruct
. У нас есть его описание в новой документации Solidity .
Вот пост от r/ethereum о самоубийстве с дополнительной информацией и небольшим обсуждением этого.
selfdestruct()
том, что если у вас есть опасный ошибочный контракт, вы можете «расторгнуть» его.ИМХО selfdestruct
это плохая вещь, которую никогда не следует внедрять. Это нарушает принцип неизменности контракта и создает множество проблем:
selfdestruct
, в большинстве случаев теряются, проверка того, что контракт не самоуничтожается перед передачей, не очень помогает, потому что передача может быть запущена с помощьюselfdestruct
Почему
selfdestructs
используются в контрактном программировании
После создания контракта в блокчейне Ethereum его нельзя изменить.
ПРЕИМУЩЕСТВА ИСПОЛЬЗОВАНИЯ САМОРАЗРУШЕНИЯ
+-----------------+---------------------------------------------------------------------------------------+
| Benefit | Reasoning |
+-----------------+---------------------------------------------------------------------------------------+
| Stop Execution | If you no longer want the contract running, you can selfdestruct it to “turn it off”. |
| Eliminate Bugs | (Similar to above). You can kill off smart contracts that are buggy. |
| Lower Gas Price | It costs less gas to selfdestruct a contract. |
+-----------------+---------------------------------------------------------------------------------------+
Тьяден Хесс
высокий110
Тьяден Хесс
высокий110