Ich versuche, ein Beispiel für eine Eigentumsübertragung zu machen, indem ich das Eigentum durch Senden von Ether übertrage. Ich habe versucht, msg.value und transfer() zu verwenden, um Ether von Besitzer B an Besitzer A zu senden, damit Besitzer B den Besitz übernehmen kann.
address public previousOwner;
address public currentOwner;
uint public txTimeStamp;
event transferred();
function transfer() external payable onlyOwnerB {
require (msg.value == 1 ether);
ownerA.transfer(1 ether);
previousOwner = ownerA;
currentOwner = ownerB;
txTimeStamp = now;
emit transferred();
}
Ich habe auch eine Fallback-Funktion, um Geld zu erhalten:
function receiveTxPay() public payable returns (bool) {
return true;
}
Ich verwende den Remix-Compiler in einer Javascript-VM, wobei Besitzer A eine der Adressen ist und Besitzer B eine andere. Ich habe darauf geachtet, die transfer()-Funktion als Eigentümer B aufzurufen. Aber immer wenn ich die Funktion aufrufe, erhalte ich eine „transact to Contract.transfer() errored: VM error: revert.“ Fehler. Ich habe auch versucht, nur die Zeile require(msg.value == 1 ether) und auch nur die Zeile transfer() zu verwenden. Wenn Sie all dies versuchen, wird dieselbe Fehlermeldung zurückgegeben.
Beide Zeilen werden fehlschlagen, wenn Sie im Rahmen Ihrer Transaktion nicht 1 Ether an den Vertrag gesendet haben, also gehe ich davon aus, dass Sie das nicht tun. Sie müssen das Feld "Wert" oben rechts auf 1 Ether setzen. (Stellen Sie sicher, dass Sie etwas 1
in das Textfeld eingeben und ether
aus der Dropdown-Liste rechts daneben auswählen.)