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);
En Solidity 0.5, debe almacenar explícitamente el tipo de contrato que se está creando (en lugar de simplemente usar el address
tipo). 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.