Entfernen Sie den Vertrag auf der Ethereum-Blockchain mit web3 [Duplikat]

Ist es möglich, bereits bereitgestellte Verträge mit der Web3- oder Truffle-Konsole oder der Geth-Konsole zu entfernen oder zu aktualisieren ? wenn wir die Vertragsdetails wie Adresse und ABI-Array kennen und wir einen Vertragsgegenstand mit web3.js erstellen

wievar contractObject = web3.eth.contract(abi).at(contractAddress);

dann ist es möglich, diesen Vertrag mit dem erstellten Objekt aus der Blockchain zu entfernen.

Ich bin neugierig, gibt es eine Möglichkeit, selfDistruct ("Adresse") mit web3.js aufzurufen ? Ich habe angegeben, dass contractObject der Vertragsgegenstand ist

kann ich anrufencontractObject.selfDistruct("new address to transfer remaining balance")

Die Frage hier erklärt, wie ein bestehender Vertrag aktualisiert wird, aber ich brauche eine Möglichkeit, einen bestehenden Vertrag zu entfernen, auch wenn der Vertrag die Methode seftDistruct() nicht enthält.

Antworten (3)

Sie können einen Vertrag unter einer bestimmten Adresse nicht aktualisieren. Es gibt Muster, um diese Einschränkung zu umgehen und aktualisierbare Verträge zu haben , zum Beispiel durch einen Front-End-Vertrag an einer festen Adresse, die auf die neueste Version des Vertrags verweist.

Sie können eine Methode für den Vertrag aufrufen, die zu seiner Selbstzerstörung führt, wenn diese Methode bei der Vertragserstellung implementiert wurde und Sie die Anforderungen erfüllen - dh normalerweise sollte eine solche Methode nur Anrufe vom Eigentümer des Vertrags akzeptieren. Schauen Sie sich zum Beispiel den Destructible-Vertrag in der offenen Zeppelin-Bibliothek an .

Sie können den Solidity selfDistruct- Opcode nicht direkt aus web3.js aufrufen, genauso wenig wie Sie eine Variable im Vertrag direkt ändern können – Sie können nur über seine Methoden mit einem Vertrag interagieren.

Was @manuhalo gesagt hat, außerdem sollten Sie erwägen, den Vertrag mit einer Run/Stop-Methode und einem Modifikator anstelle von selfDestruct() zu pausieren, da letzteres ein Senkloch erzeugt. Ersterer kann alle Methoden anwenden und alle Gelder zurückgeben.

Ich hoffe es hilft.

Wie @manuhalo sagte, können Sie einen Vertrag nicht aus web3 entfernen oder aktualisieren, es sei denn, Ihr Vertrag ist aktualisierbar. Um selfDestruct aufzurufen, müssen Sie außerdem eine Funktion (vorzugsweise mit dem Namen - Kill) in Ihrem Vertrag haben, die selfDestruct in der Definition enthält, dann können nur Sie sie von web3.js aufrufen


Da sich diese Frage auf aktualisierbare Verträge bezieht, möchte ich sie mit Ihnen teilen und hoffe, dass dies Ihnen hilft, die Notwendigkeit und eine Möglichkeit zur Implementierung aktualisierbarer Verträge zu verstehen.

„Wir (mein Team) haben in den letzten Wochen an aktualisierbaren Verträgen gearbeitet und kamen zu einer Lösung für aktualisierbare Verträge, nachdem wir einem Blogbeitrag von colony.io gefolgt waren. Wir konnten den vollständig aktualisierbaren Vertrag implementieren und ich würde vorschlagen Sie, werfen Sie einen Blick auf den Code und bloggen Sie beide"