Transacción de contrato a contrato con Ether

Tengo algunos problemas para crear dos contratos que interactúan. El primer contrato debe recibir ether de un usuario en una función payRate() y reenviar el monto a otro contrato, que se guarda en el grupo de direcciones. Ambas funciones (la función payRate() y la función receivePayment()) son pagaderas y receivePayment() está funcionando si la llama un usuario. La minería de los contratos funciona bien, pero el uso de las funciones falla. También probé una versión diferente con pequeñas cantidades fijas de éter, el mismo resultado.

El entorno que utilicé es Visual Studio Code con la extensión Solidity como compilador y Parity (cadena de desarrollo).

    pragma solidity ^0.4.18;

    contract sendEther {

    address owner;
    address pool;
    uint amountPaid;

    function sendEther(address _pool) public {
    pool = _pool;
    owner = msg.sender;
    }

    function payRate() payable {
       require(pool != address(0));

       pool.transfer(msg.value);
       amountPaid += msg.value;

       //other ways of sending i tried:
       //TransactionPool test = TransactionPool(pool);
       //test.receivePayment().value(msg.value);

       //pool.call.value(msg.value)(bytes4(keccak256("receivePayment()")));
    }
    }

y

    pragma solidity ^0.4.18;

    contract TransactionPool {

    address owner;
    uint totalPayments;

    function TransactionPool() public {
       owner = msg.sender;
    }

    function receivePayment() public payable {
       totalPayments += msg.value;
    }

    function() payable public { //fallback function
       totalPayments += msg.value;
    }
    }

¡Gracias!

¿Qué mensaje de error estás recibiendo?

Respuestas (1)

Verifique la sintaxis para hacer una llamada externa en documentos de solidity

function payRate() payable {
   require(pool != address(0));

   amountPaid += msg.value;

   TransactionPool(pool).receivePayment.value(msg.value)();
}

El error es que pool.transfer(msg.value);esto invoca la función de respaldo del grupo con solo 2300 de estipendio de gasolina, y el respaldo del grupo intenta modificar los pagos totales y quedarse sin combustible.