Почему самоубийства используются в контрактном программировании?

Я читаю кусочки и кусочки, что самоубийство в контрактах - это хорошо. Может ли кто-нибудь объяснить, какие преимущества заключаются в самоубийстве по контракту, когда дело доходит до программирования Ethereum? Есть ли разница, если вы используете разные клиенты или реализации или языки?

32 голоса | спросил high110 22 Jam1000000amFri, 22 Jan 2016 01:56:56 +030016 2016, 01:56:56

3 ответа


37

Суициды в Ethereum - это операция (фактически OPCODE) на уровне EVM, независимо от того, какой язык или клиент вы используете.

Например, вызов suicide(address) отправляет весь текущий баланс контракта на address.

Это полезно, когда вы закончили с контрактом, потому что он стоит гораздо меньше газа, чем просто отправка баланса с помощью address.send(this.balance).

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

Этот отрицательный газ вычитает из общей стоимости газа транзакции, поэтому, если вы сначала выполняете некоторые операции по очистке, SUICIDE может снизить затраты на газ.

ответил Tjaden Hess 22 Jam1000000amFri, 22 Jan 2016 08:09:50 +030016 2016, 08:09:50
30

selfdestruct является рекомендуемым термином и может быть найден в более новом коде Solidity и Serpent. Это тот же API и поведение, как описано в других ответах, и является псевдонимом для suicide.

EIP6 описывает мотивацию:

  

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

ответил eth 13 FebruaryEurope/MoscowbSat, 13 Feb 2016 05:18:57 +0300000000amSat, 13 Feb 2016 05:18:57 +030016 2016, 05:18:57
19

Функция suicide() и относительный OPCODE используются, когда у вас есть контракт с ошибкой или нежелательным поведением, и вы хотите избавиться от него.

suicide(address) - лучшая версия, как указано в @ tjaden-hess, когда у вас есть оплачиваемые контракты (контракты, которые получают простые эфиры), эфиры будут перенаправлены на address, который является большой победой.

Когда вы взаимодействуете с сумасшедшим контрактом ПРИМЕЧАНИЕ: Если вы отправляете транзакцию и /или средства на нее, то ваши средства LOST . Обязательно не отправляйте средства или другие транзакции к нему после суицида контракта.

Это проблема, которую вы всегда должны иметь в виду при разработке приложений, которые используют контракты с функцией самоубийства, убедитесь, что адрес контракта удален из вашего приложения после suicide() был вызван на контракт, возможно, вы всегда можете вызвать метод getter , чтобы узнать, отвечает ли контракт действительному значению перед отправкой транзакции и /или переносом эфиров на нее.

Теперь имя метода selfdestruct

У нас есть некоторое описание этого в новых документах твердости: http://solidity.readthedocs.io/en/v0.4.21/units-and-global-variables.html?highlight=selfdestruct#contract-related

Вот сообщение от r /ethereum о самоубийстве с больше информации и небольшой дискуссии об этом.

ответил makevoid 22 Jpm1000000pmFri, 22 Jan 2016 14:01:45 +030016 2016, 14:01:45

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

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

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