La transacción finaliseRequest no se confirma sin importar lo que haga. Estoy seguro de que está fallando en la función de transferencia. Hice la dirección a la dirección pagadera también y también cambié la función. Cualquier ayuda sería muy apreciada.
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;
}
}
Parece que no tienes éter en tu contrato. Agregue payable
la función de respaldo a su contrato y transfiera algo de éter allí antes de transferirlo.
o haga finalizeRequest
la solicitud pagadera según su lógica.
function finalizeRequest (uint index) public payable restricted {
Además, marque la solicitud como completa antes de transferir ether. Es un problema de seguridad que no está relacionado con su pregunta.
Lauri Peltonen