Crear Contrato Solidez 0.5

Mi código funciona con el compilador 0.4.25 pero no con la última versión. Quiero realizar un seguimiento de cada "Contrato 2" que crea el "Contrato 1".

contrato 1

uint public countContract;
address[] public deployedContracts;

function createContract(string memory _name) 
public{       
    address newContract = new Contract2(countContract++, _name);
    deployedContracts.push(newContract);
 }

contrato 2

uint public id;
string public name; 

constructor(uint _id, string memory _name) 
public{
    id = _id;
    name = _name;
}

El error que estoy recibiendo en Remix es:

browser/temp.sol:9:5: TypeError: Type contract Contract2 no se puede convertir implícitamente a la dirección de tipo esperada. dirección nuevoContrato = nuevo Contrato2(countContract++, _name);

Respuestas (1)

En Solidity 0.5, debe almacenar explícitamente el tipo de contrato que se está creando (en lugar de simplemente usar el addresstipo). Utilice el siguiente código para lograr sus objetivos:

Contrato 1:

uint public countContract;
Contract2[] public deployedContracts;

function createContract(string memory _name) 
    public
 {       
    Contract2 newContract = new Contract2(countContract++, _name);
    deployedContracts.push(newContract);
 }

Contrato 2:

uint public id;
string public name; 

constructor(uint _id, string memory _name) 
    public
{
    id = _id;
    name = _name;
}

Nota: aún agregará la dirección del contrato a la matriz, tal como lo estaba haciendo en 0.4.