¿Cómo puedo usar la función de pago para transferir ether fijo en una transacción?


contract MyContract {
    
    address payable[] recipients;
 
    function sendEther(address payable recipient) external payable {
        recipient.transfer(1 ether);
    }
}

Error: transacción a MyContract.sendEther con error: error de VM: revertir. revert La transacción ha sido revertida al estado inicial. Nota: La función llamada debe pagarse si envía valor y el valor que envía debe ser menor que su saldo actual.

Respuestas (1)

El contrato no puede tomar éteres de la dirección de la billetera y transferirlos, debe pasar la cantidad que desea transferir como VALOR . Entonces tu código debería verse así:

function sendEther(address payable recipient) public payable {
    recipient.transfer(msg.value);
}

Luego, si desea transferir solo un éter exacto, puede tener la siguiente condición en su lógica justo encima de la transferencia de éter:

function sendEther(address payable recipient) public payable {
    require(msg.value == 1 ether, 'Only 1 ether allowed to be transfered.');
    recipient.transfer(msg.value);
}
gracias, ¿puede decirme cómo puedo enviar ether a un contrato inteligente desde una cuenta?
Esa es una pregunta diferente a la actual, haga una nueva pregunta en este foro para que otros puedan unirse a la discusión.