Tengo dos contratos, contractA
& contractB
. Quiero que Truffle primero implemente contractA
y luego lo pase como argumento al contractB
constructor de .
Esto es lo que estoy intentando actualmente, pero contractB
en 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, contractB
no 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?
Prueba esto:
deployer.then(async function() {
let contractA = await artifacts.require("A").new();
let contractB = await artifacts.require("B").new(contractA._address);
});
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);
};
Tarek
contractA
daundefined
.buena vibración
"A.sol"
? Escribí esto como ejemplo, no puedo adivinar los nombres de sus archivos, así que usé las mismas abreviaturas que en su pregunta.Tarek
A.sol
buena vibración
"A.sol"
. Así es como suelo hacerlo (solo pensé que estaba permitido sin él, como se recomienda en los documentos oficiales de Truffle).Tarek
buena vibración
truffle compile
, ¿obtiene un archivo con el nombreA.json
en la carpeta de artefactos?Tarek