Wie kann Vertragseigentum von einem Konto auf ein anderes übertragen werden?

Ich habe einen Vertrag, der zu einem meiner Konten gehört. Wie kann ich die Inhaberschaft auf ein anderes Konto übertragen?

Kann jemand diese Antwort in weniger technischer Sprache ausdrücken und sie bitte Schritt für Schritt erläutern? Ich habe einige OMG-Token in einem alten Vertrag, die ich nicht an eine neue Wallet-Adresse senden kann. Was muss ich zuerst tun? Verwenden Sie die Registerkarte „Verträge“ auf MyEtherWallet? Aber dann welche Funktion auswählen und welche Informationen wo eingeben? Vielen Dank.

Antworten (2)

Ihr Vertrag muss eine Eigentumsübertragungsfunktion implementieren. Das wird es tun:

address public owner;
function transfer(address newOwner) public {
    if (msg.sender != owner) throw;
    owner = newOwner;
}

Die Leute schreiben dies oft in einen Owned-Vertrag, den Sie in anderen Verträgen erben können. Zum Beispiel:

contract Owned {
    address public owner;
    modifier onlyOwner() {
        if (msg.sender != owner) throw;
        _;
    }
    function transfer(address newOwner) public onlyOwner {
        owner = newOwner;
    }
}

Dann in Ihren anderen Verträgen:

contract myContract is Owned {
    function test() public onlyOwner {
        //....
    }
}

Es gibt einen Haken in der vorherigen Antwort. Das Eigentum würde auch dann übertragen, wenn der Eigentümer versehentlich eine leere Adresse sendet. Ein besserer Weg wäre, vor der Eigentumsübertragung eine Prüfung hinzuzufügen.

modifier onlyOwner() {
    if (msg.sender != owner) throw;
    _;
}
function transferOwnership (address newOwner) onlyOwner{
    //check if not empty
    if (newOwner != 0x0){
        owner = newOwner;
    }
}