Antecedentes: Hola, tengo varios contratos de solidez que están separados en un solo archivo cada uno. Tiene 1 contrato base y los demás son contratos derivados como:
// BaseContract.sol contract BaseContract { ... } // DerivedContract.sol ... import "./BaseContract.sol"; contract DerivedContract is BaseContract{ ... } Yo uso la versión ^0.8.0. Compilé los contratos, por lo que tengo un archivo .json múltiple que contiene ABI y funciones para cada contrato. También uso el cuadro de reacción de trufa, tiene un archivo getWeb3.js (que es solo un archivo de inicio web3 simple)
Problema: dado que mis contratos están separados en varios archivos, ¿cómo puedo instanciar la instancia del contrato con web3? ¿Debo solo instanciar el BaseContract? ¿O debería instanciar solo el contrato hoja (ya que es un contrato derivado con la funcionalidad de todos los contratos principales)? ¿O debería instanciar cada contrato? O tal vez... ¿debería volver a empaquetar cada archivo de contrato en un solo archivo con solo 1 contrato?
¿Y cómo puedo lograr eso? A continuación se muestra mi método para instanciar un solo contrato.
... import SimpleStorageContract from "./contracts/Storage.json"; ... componentDidMount = async () => { try { // Get network provider and web3 instance. const web3 = await getWeb3(); // Use web3 to get the user's accounts. const accounts = await web3.eth.getAccounts(); // Get the contract instance. const networkId = await web3.eth.net.getId(); const deployedNetwork = SimpleStorageContract.networks[networkId]; const instance = new web3.eth.Contract(SimpleStorageContract.abi,deployedNetwork && deployedNetwork.address,); // Set web3, accounts, and contract to the state, and then proceed with an // example of interacting with the contract's methods. this.setState({ web3, accounts, contract: instance }); } catch (error) { // Catch any errors for any of the above operations. alert(`Failed to load web3, accounts, or contract. Check console for details.`); console.error(error); } };