Los fondos enviados a un contrato no aparecen en el contrato

Tengo este contrato simple que tiene un método pagadero.

contract Betting is usingOraclize {
  function Betting() {
    //...
  }
  function sendEther() payable returns (uint) {
    return msg.value;
  }

El comportamiento esperado es aceptar ether y almacenarlo en la dirección del contrato. Todo funciona bien, incluida la transacción, excepto que no aparece el saldo. Sigue siendo cero. Aquí están los detalles etherscan del contrato.

Las últimas 2 transacciones se realizaron utilizando el sendEthermétodo invocado utilizado web3.js. Todavía el saldo del contrato es cero.

Respuestas (1)

Para aceptar el Ether de la dirección de la billetera, debe crear una función de respaldo predeterminada que se invocará de forma predeterminada mientras transfiere Ether a ella.

contract Betting is usingOraclize {
/* This event is triggered when this contract receives Ether */
event Transfer(address _from, uint256 _value);
function Betting() {
//...
}
// This function will get triggered when you send Ether to this contract address 
function () payable {
   Transfer(msg.sender, msg.value);
}

}

Para obtener más referencia, consulte la función de respaldo en los documentos de solidez

¡Muchas Gracias por la respuesta! Pero ya estoy usando una función de pago y transferí ether al invocar la función. de la documentación que dice, si la transacción no se maneja correctamente, el éter se devolverá al remitente y la transacción fallará. En mi caso, la transacción tuvo éxito, pero el saldo sigue siendo cero.
Tu solución funcionó. Pero todavía estoy confundido sobre cómo funciona una función alternativa, pero la misma función de pago no funciona. No quiero que los usuarios envíen ethers directamente al contrato. Necesito registrar la cantidad que están enviando y hacer algo de lógica mientras pagan el ether. la función de reserva permite incluso que se produzcan transacciones normales con la dirección del contrato
Para almacenar el valor de ether, puede usar la función de mapeo como, mapping (address => uint256) public fundValue; function () payable{ fundValue[msg.sender] = msg.value; } luego puede acceder a la función de mapeo como fundValue [dirección];