Zugriff auf Gelder, die an die Smart-Contract-Adresse gesendet werden

Wenn jemand einen Smart Contract erstellt (und Eigentümer dieses Vertrags ist), kann diese Person dann ETH und andere Token sammeln, die an die Adresse des Smart Contract gesendet werden?

Dies ist eine Obermenge des möglichen Duplikats, da es auf Gelder wie Token zugreift, nicht nur auf ETH.

Antworten (2)

Dies ist nur möglich, wenn der Ersteller eines Smart Contracts dies ermöglicht . Wenn ein Vertrag keine Auszahlungsfunktion () implementiert, kann das Geld vom Eigentümer unwiederbringlich sein.

Dies ist ein Feature, kein Fehler. Möchten Sie, dass der Ether-Delta-Smart-Contract-Ersteller alle Ether und Token aus dem Vertrag nach Lust und Laune abzieht? Nein.

Ein Smart Contract hat keine Eigentümer- oder Auszahlungsmechanismen, es sei denn, sie wurden im Vertrag kodiert. Dies verleiht Smart Contracts die Fähigkeit, vertrauenswürdig zu sein: Es ist möglich, Verträge zu verwenden, ohne dem Eigentümer zu vertrauen, indem man den Code des Vertrags sorgfältig versteht.

Abheben von ERC-20-Token

Wenn Sie ein Smart-Contract-Autor sind und ERC-20-Token abheben möchten, müssen Sie zwei Schritte ausführen.

Schritt 1: Fügen Sie diese Schnittstelle (Teilmenge von ERC-20) über Ihrem Vertrag hinzu

contract Token {
    function transfer(address _to, uint _value) returns (bool success);
    function balanceOf(address _owner) constant returns (uint balance);
}

Schritt 2: Hier ist eine Funktion, die Sie Ihrem Vertrag hinzufügen können

function withdrawTokens(address tokenContract) external onlyOwner {
    Token tc = Token(tokenContract);

    tc.transfer(owner, tc.balanceOf(this));
}

Dies setzt voraus, dass Sie sich selbst als owner. Da Ihr Vertrag viele verschiedene Arten von Token erhalten kann, müssen Sie withdrawTokensvon jedem tokenContract. Wenn owneres sich um einen anderen Vertrag handelt, muss dieser auch eine withdrawTokensFunktion haben, um zu verhindern, dass Token im ownerVertrag hängen bleiben.

Äther abziehen

Der Code ist einfacher:

function withdrawEther() external onlyOwner {
    owner.transfer(this.balance);
}

Wenn owneres sich um einen anderen Vertrag handelt, muss er auch eine withdrawEtherFunktion haben, um zu verhindern, dass Ether im ownerVertrag hängen bleibt.

Eine weitere Referenz: Wie man Ether von einem Vertrag zurückzieht

Danke, also wenn der Vertrag bereits abgelaufen ist und keine solche Funktion hat, sind Gelder steckengeblieben? Kann es aktualisiert werden, damit dies hinzugefügt werden kann?
@nikolaivkov Ja, Gelder werden stecken bleiben. Ebenso kann ein Vertrag auch nicht aktualisiert werden, es sei denn, er verfügt bereits über einen Code, der es ihm ermöglicht, auf irgendeine Weise aktualisiert zu werden.