Mostrar datos de otro contrato en Solidity

El código compila bien. Pero da el siguiente error, cuando se activa el evento LogData. LogAddress funciona bien. ¿Tengo que configurar captadores explícitos para las variables de estado?

Transact to browser/Test.sol:Factory.getContract con error: error de VM: código de operación no válido. El constructor debe pagar si envía valor. La ejecución podría haber tirado. Depure la transacción para obtener más información.

pragma solidity ^0.4.15;

contract TestContract {

    uint public iD;
    bytes32 public name;
    function setAttr(uint _id, bytes32 _name) {
        iD = _id;
        name = _name;
    }
}

contract Factory {

    TestContract myTest;
    address contractAddress;
    function Factory () {
        myTest = new TestContract();
        myTest.setAttr(100,"0x111");
        contractAddress = address(myTest);
    }

    event LogData(uint _mydata, bytes32 _name);
    event LogAddress(address _add);
    function getContract() {
        myTest = TestContract(contractAddress);
        LogAddress(contractAddress);
        LogData(myTest.iD(), myTest.name());
    }

}

Respuestas (1)

Acabo de jugar con él hasta que funcione.

pragma solidity ^0.4.15;

contract TestContract {

  uint public iD;
  bytes32 public name;
  function TestContract(uint _id, bytes32 _name) public {
    iD = _id;
    name = _name;
  }
}

contract Factory {

  TestContract myTest;
  TestContract testContract;
  function Factory () public {
    testContract = new TestContract(100,"0x123");
  }

  event LogData(uint _mydata, bytes32 _name);
  event LogAddress(address _add);
  function getContract() public {
    LogAddress(testContract);
    LogData(testContract.iD(), testContract.name());
  }
}

Espero eso ayude.

Gracias @RobHitchens, los cambios anteriores funcionan ahora. Tuve una pregunta de seguimiento: en LogData, Remix arroja un error si cambio testContract.iD() a testContract.iD. ¿Necesito usar el captador predeterminado? Si la variable de estado es pública, ¿no debería poder acceder a ella directamente usando testContract.iD? Remix muestra un error "Error de tipo: tipo de argumento no válido en la llamada de función........)
El captador "público" "gratuito" para es iDuna función, por lo que necesita ()acceder.