Haz que Truffle implemente un contrato y pásalo como argumento al constructor de otro contrato

Tengo dos contratos, contractA& contractB. Quiero que Truffle primero implemente contractAy luego lo pase como argumento al contractBconstructor de .

Esto es lo que estoy intentando actualmente, pero contractBen realidad nunca se implementa:

let contractA = artifacts.require("./contractA.sol");
let contractB = artifacts.require("./contractB.sol");

module.exports = async function(deployer, network) {
  await deployer.deploy(contractA);  // this gets deployed fine
  deployer.deploy(contractB, contractA.address); // this *never* gets deployed
};

De hecho, contractBno se implementa incluso si cambio el código a esto:

await deployer.deploy(contractA);    
deployer.deploy(contractB, "0x123");  // does not deploy even if I enter the address manually

¿Que me estoy perdiendo aqui?

Respuestas (2)

Prueba esto:

deployer.then(async function() {
    let contractA = await artifacts.require("A").new();
    let contractB = await artifacts.require("B").new(contractA._address);
});
No parece funcionar para mí. El registro de la consola contractAda undefined.
Bueno, ¿su contrato está realmente guardado en un archivo llamado "A.sol"? Escribí esto como ejemplo, no puedo adivinar los nombres de sus archivos, así que usé las mismas abreviaturas que en su pregunta.
Sí, esA.sol
Bueno, tal vez cambiarlo a "A.sol". Así es como suelo hacerlo (solo pensé que estaba permitido sin él, como se recomienda en los documentos oficiales de Truffle).
Sí, ya lo intenté también.
Cuando ejecuta truffle compile, ¿obtiene un archivo con el nombre A.jsonen la carpeta de artefactos?
Sí, se genera el archivo json. Acabo de actualizar mi pregunta con mi estado actual.

Finalmente pude resolver esto creando múltiples archivos de implementación de Truffle.

2_deploy_contratoA.js:

// 2_deploy_contractA.js

let contractA = artifacts.require("./contractA.sol");

module.exports = function(deployer, network) {
    deployer.deploy(contractA);
};

3_deploy_contratoB.js:

// 3_deploy_contractB.js

let contractA = artifacts.require("./contractA.sol");
let contractB = artifacts.require("./contractB.sol");

module.exports = function(deployer, network) {
    deployer.deploy(contractB, contractA.address);
};