Ich habe einen Vertrag, der zu einem meiner Konten gehört. Wie kann ich die Inhaberschaft auf ein anderes Konto übertragen?
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;
}
}
Adam