Die finaliseRequest-Transaktion wird nicht bestätigt, egal was ich tue. Ich bin mir sicher, dass es an der Übertragungsfunktion scheitert. Ich hatte die Adresse auch auf Adresse zahlbar gemacht und die Funktion auch geändert. Jede Hilfe wäre sehr willkommen.
contract InsuranceClaim{
struct Request {
address payable insuranceRecipient;
string personName;
uint value;
address payable hospitalRecipient;
bool complete;
}
Request[] public requests;
address public claimer;
constructor (address creator) public{
claimer = creator;
}
modifier restricted(){
require(msg.sender==claimer);
_;
}
function createRequest(string memory personName,address payable insuranceRecipient,uint value,address payable hospitalRecipient) public restricted{
Request memory newRequest = Request({
insuranceRecipient:insuranceRecipient,
value:value,
personName:personName,
hospitalRecipient:hospitalRecipient,
complete:false
});
requests.push(newRequest);
}
function finalizeRequest (uint index) public payable restricted{
Request storage request = requests[index];
require(!request.complete);
request.hospitalRecipient.transfer(request.value);
request.complete = true;
}
}
Sieht so aus, als hättest du keinen Ether in deinem Vertrag. Fügen Sie payable
Ihrem Vertrag eine Fallback-Funktion hinzu und übertragen Sie etwas Ether dorthin, bevor Sie von dort übertragen.
oder machen Sie finalizeRequest
die Anfrage abhängig von Ihrer Logik zahlbar.
function finalizeRequest (uint index) public payable restricted {
Markieren Sie die Anfrage auch als abgeschlossen, bevor Sie Ether übertragen. Es ist ein Sicherheitsproblem, das nicht mit Ihrer Frage zusammenhängt.
Lauri Peltonen