Взаимодействие с несколькими контрактами с помощью Web3.js

#javascript #solidity #web3 #web3js #truffle

#язык JavaScript #прочность #web3 #web3js #трюфель

Вопрос:

Предыстория: Здравствуйте, итак, у меня есть несколько контрактов на солидность, каждый из которых разделен на один файл. У него есть 1 базовый контракт, а остальные являются производными контрактами, такими как:

 // BaseContract.sol contract BaseContract { ... }  
 // DerivedContract.sol ... import "./BaseContract.sol"; contract DerivedContract is BaseContract{ ... }  

Я использую версию ^0.8.0. Я составил контракты, так что у меня их несколько .файл json, содержащий ABI и функции для каждого контракта. Я также использую truffle react box, в нем есть getWeb3.js файл (который является простым файлом инициализации web3).

Проблема: Поскольку мои контракты разделены на несколько файлов, как я могу создать экземпляр контракта с помощью web3? Должен ли я создавать только экземпляр базового контракта? или мне следует создать экземпляр только конечного контракта (поскольку это производный контракт со всеми функциями родительских контрактов)? Или мне следует создавать экземпляры каждого контракта? Или, может быть… мне следует перепаковать каждый файл контракта в один файл только с 1 контрактом?

И как я могу этого достичь? Ниже приведен мой метод создания экземпляра одного контракта

 ... import SimpleStorageContract from "./contracts/Storage.json"; ... componentDidMount = async () =gt; {  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 amp;amp; 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);  }  };