Intento implementar múltiples contratos en Truffle para aprender cómo funciona.
Este es el código:
//SPDX-License-Identifier: MIT pragma solidity 0.8.11; contract first{ string public name; string public symbol; uint public totalSupply; mapping(address=>uint) public balances; function setAll(string memory _name, string memory _symbol, uint _totalSupply)public virtual{ name = _name; symbol = _symbol; totalSupply = _totalSupply; } function mint()public{ balances[tx.origin] += 1; totalSupply -= 1; } } contract second { string public name; string public symbol; uint public totalAmount; address public _first; constructor(address fiirst){ _first = fiirst; } function set(string memory _name, string memory _symbol, uint _totalAmount)public{ first _fir = first(address(_first)); _fir.setAll(_name, _symbol, _totalAmount); _fir.mint(); _totalAmount -= 1; name = _name; symbol = _symbol; totalAmount =_totalAmount; } }Esto es deployment_contratos.js:
const first = artifacts.require("first"); module.exports = function (deployer) { deployer.deploy(first, "BABACOIN", "BAB", 3000); }; const second = artifacts.require("second"); module.exports = function (deployer) { const addContract = first.address; deployer.deploy(second, addContract); };¿Cómo puedo pasar la dirección del primer contrato para implementar el segundo?
Intenté first.address pero obtengo un error.
Una vez que implemento el contrato, ¿cómo puedo establecer una dirección de Ganache diferente para interactuar con el contrato en la consola de Truffle?
Puedes intentar usar:
const first = artifacts.require("first"); const second = artifacts.require("second"); module.exports = async function (deployer) { await deployer.deploy(first, "BABACOIN", "BAB", 3000); await deployer.deploy(second, first.address); };Las declaraciones a continuación se tomaron de MDN Web Docs: Facilitar la programación asíncrona con async y await .
Aquí, la palabra clave async se agrega a las funciones para indicarles que devuelvan una promesa en lugar de devolver directamente el valor.
Puedes leer sobre promesa aquí - Promesa .
await se puede colocar delante de cualquier función asíncrona basada en promesas para pausar el código en esa línea hasta que se cumpla la promesa y luego devolver el valor resultante.
Es por eso que el código funciona ahora.