enviar ether de un contrato a otro automáticamente

Quiero transferir ether de Child Contract a Parent Contract automáticamente cada vez que alguien envíe ether a child.

En la función de respaldo, intenté ejecutar la función y está dando error: Error de VM: revertir. revert La transacción ha sido revertida al estado inicial. Nota: El constructor debe pagar si envía valor. Depure la transacción para obtener más información.

Por favor, dígame dónde estoy haciendo mal, traté de ejecutarlo asignando más gasolina también, sin suerte.

Aquí está el código.

pragma solidity ^0.4.18;

contract ParentCompany{
    address public parentAddress;

    function ParentCompany() public{
        parentAddress = msg.sender;
    }
    function getB() public view returns(uint){
        return this.balance;
    }

    function() payable {
    }
}

// Subsidiary will automatically transfer received ether to Parent.
contract Subsidiary{

    address public subsidiaryAddress;
    address parentCompany;
    function Subsidiary(address _parentCompany) public payable{
        subsidiaryAddress = msg.sender;
        parentCompany = _parentCompany;
    }

    function sendToParent() public {
        parentCompany.transfer(this.balance);
    }
    function() payable{

        sendToParent();  
    }
}

// when Fallback function is empty it works fine.

// client will send money to Subsidiary Company
contract Client{
    address clientAddress;

    function Client() public payable{
        clientAddress = msg.sender;
    }
    function payment(address _subCompany, uint _amount) public{
        uint amount = _amount *(10**18);
        _subCompany.transfer(amount);
    }

}

Respuestas (1)

transfersólo reenvía una cantidad muy pequeña de gas (2300). Esto no es suficiente para hacer una segunda transferencia.

Creo que usar callin Clientdebería funcionar como un reemplazo para transfer:

require(_subCompany.call.value(amount)());
Por favor, no utilice los comentarios para hacer nuevas preguntas.