¿Cómo llamar al método de cambio de estado del contrato en Ropsten a través de Infura usando web3@1.0.0?

Tengo el siguiente contrato:

pragma solidity ^0.4.24;

contract Escrow {

    address public owner;

    event LogReceivedFunds(address sender, uint amount);
    event LogReturnedFunds(address recipient, uint amount);

    constructor() public {
        owner = msg.sender;
    }

    function() public payable {
        emit LogReceivedFunds(msg.sender, msg.value);
    }

    modifier onlyOwner() {
        require(msg.sender == owner);
        _;
    }

    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }

    function refundBalance() public onlyOwner {
        uint256 balance = address(this).balance;
        msg.sender.transfer(balance);
        emit LogReturnedFunds(msg.sender, balance);
    }

    function kill() public onlyOwner {
        selfdestruct(owner);
    }
}

Me conecté con éxito a Ropsten a través de Infura, como puedo:

  1. Implementar el contrato a través de trufa
  2. Ejecutar callmétodos como getBalance.

Sin embargo, cuando quiero usar enviar para modificar el estado (es decir, reembolsar al propietario del contrato los fondos depositados), recibo esta respuesta:

Error: respuesta JSON RPC no válida: ""

Esto no sucede en Ganache, por lo que creo que es un problema causado por Infura. ¿Hay algún tipo de incompatibilidad?

La refundBalancefunción tiene la onlyOwneretiqueta adjunta. Cuando usa infura, ¿desbloquea correctamente la cuenta del propietario para acceder al contrato?

Respuestas (1)

Infura no admite ninguna operación que requiera una clave privada (como firmar una transacción). Esto se debe a que no almacenan la clave privada de nadie.

Si desea enviar una transacción a través de Infura, primero debe firmarla localmente (usando su clave privada) y luego transmitir la transacción firmada a través de Infura.

¿Puede publicar un ejemplo de cómo preparar y firmar una transacción que realiza una llamada de contrato de estado cambiante con argumentos, por favor?
@kitsune puedes encontrar eso en este repositorio de GitHub . Mira la jscarpeta.