удалить контракт на блокчейне ethereum с помощью web3 [дубликат]

Можно ли удалить или обновить уже развернутый контракт с помощью консоли web3 или truffle или консоли geth ?? если мы знаем детали контракта, такие как адрес и массив ABI, и мы создаем объект контракта, используя web3.js

нравитьсяvar contractObject = web3.eth.contract(abi).at(contractAddress);

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

Мне интересно, есть ли способ вызвать selfDistruct("адрес") с помощью web3.js ??, я указал, что contractObject является объектом контракта

могу я позвонитьcontractObject.selfDistruct("new address to transfer remaining balance")

вопрос здесь объясняет, как обновить существующий контракт, но мне нужен способ удалить существующий контракт, даже если доза контракта не содержит метод seftDistruct().

Ответы (3)

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

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

Вы не можете вызвать код операции Solidity selfDistruct непосредственно из web3.js больше, чем вы можете напрямую изменить переменную в контракте — вы можете взаимодействовать с контрактом только через его методы.

То, что сказал @manuhalo, плюс, вы можете рассмотреть возможность приостановки контракта с помощью метода и модификатора run/stop вместо selfDestruct(), потому что последний создает провал. Первый может кинуть на все способы и вернуть все средства.

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

Как сказал @manuhalo, вы не можете удалить или обновить контракт из web3, если ваш контракт не подлежит обновлению. Так же для вызова selfDestruct нужно иметь в контракте функцию(желательно с названием - Kill), у которой внутри определения будет selfDestruct, тогда только из web3.js можно вызывать


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

«Мы (моя команда) работали над обновляемым контрактом последние несколько недель, и мы придумали решение для обновляемых контрактов после публикации сообщения в блоге от colony.io. Мы смогли реализовать полностью обновляемый контракт, и я бы предложил вам, взгляните на код и блог оба"