Hilfe bei der Verwendung von msg.value und transfer()

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.

Antworten (1)

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 1in das Textfeld eingeben und etheraus der Dropdown-Liste rechts daneben auswählen.)