Innerhalb von Remix verwende ich eine Adresse (addr1), um den Vertrag bereitzustellen, und eine andere (addr2), um eine Funktion innerhalb des Vertrags aufzurufen. Die Funktion ist eine einfache Übertragungsfunktion. Ich übertrage 1000000000000000000 Wei (1 Äther) von Adresse2 zu Adresse1. Es kann jedoch nicht übertragen werden und meine Ausgabe gibt immer wieder falsch zurück. Was ist hier falsch?
Außerdem verwende ich die SafeMath-Bibliothek für die sub
, es ist dasselbe wie subtrahieren.
function transferToOwner() payable returns (bool) {
owner.transfer(msg.value.sub(1000000000000000000));
return true;
}
Der richtige Weg, dies zu tun, wäre wie folgt:
function transferToOwner() payable returns (bool) {
owner.transfer(msg.value);
return true;
}
Dadurch wird eine beliebige Menge an Eth weitergeleitet, die die Person, die diese Funktion aufruft, gesendet hat.
Wenn Sie nur 1 eth senden möchten, unabhängig davon, was sie gesendet haben, als sie die Funktion aufgerufen haben, würde es so aussehen:
function transferToOwner() payable returns (bool) {
//Sender should forward at least 1 ether.
require(msg.value > 1 ether);
uint amountToSend = 1 ether;
uint change = msg.value - amountToSend; // Do something with the change. Return it to sender, maybe?
//If you don't do anything with the change, it will be stuck on this contract
owner.transfer(1 ether);
return true;
}
JorahFriendzone
pabloruiz55
JorahFriendzone
pabloruiz55
JorahFriendzone
pabloruiz55
Mäher