Вызов функции из солидности с Web3

1

У меня возникли проблемы с вызовом простой функции из моего договора о солидности. Вот как структурирован код до сих пор:

В моем файле web3Api.js меня есть:

export function getContract(contractDefinition) {
 initWeb3();
 const contract = initContract(contractDefinition);
 contract.setProvider(web3.currentProvider);

 if (typeof contract.currentProvider.sendAsync !== 'function') {
    contract.currentProvider.sendAsync = function () {
      return contract.currentProvider.send.apply(
         contract.currentProvider, arguments
      );
    };
  }
 return contract.deployed();
}

Затем в файле projectApi.js меня есть:

import { getContract } from './web3Api';
import CompiledContract '../../../build/contracts/compiledContract.json';

let globalVariable;

export async function testing123() {
  const contractInstance = await getContract(CompiledContract)
  globalVariable = contractInstance;
}

Примечание. Когда я вызываю глобальную переменную в этом файле, он успешно возвращает все мои контрактные функции

TruffleContract {constructor: ƒ, abi: Array(33), contract: Contract, PracticeEvent: ƒ, Transfer: ƒ, …}

Итак, эта следующая часть - это то, где я столкнулся с трудностями.

Для этого, я просто пытаюсь назвать эту простую функцию из моего контракта:

function smartContractFunction() public {
    emit PracticeEvent("practice event has been called");
}

Теперь вернемся в моем projectApi.js файле я использую GlobalVariable, чтобы попытаться захватить эту функцию из моего контракта. Вот что я написал:

export async function practiceInteract() {
   const submitTest = await globalVariable.smartContractFunction().call();
   console.log(submitTest);
}

Когда я запускаю приложение, я получаю сообщение об ошибке "formatters.js: 274 Uncaught (in prom) Ошибка: неверный адрес"

Любые идеи, почему я не могу назвать эту функцию надежности в файле projectAPI.js?

Рад это прояснить это, если я четко не напишу свою проблему. Благодарю вас!

  • 0
    Можете ли вы проверить, правильно ли указан адрес договора и действительно ли он указывает на ваш договор?
Теги:
ethereum
web3
truffle
solidity

1 ответ

1

Ваша проблема в том, что вы просто не определяете адрес, вызывающий функцию. Вам нужно определить, кто вызывает эту функцию, если вы используете web3 таким образом, каким вы являетесь. Правильный код:

export async function practiceInteract() {
   const submitTest = await globalVariable.smartContractFunction().call({from: web3.eth.accounts[0]});
   console.log(submitTest);
}
  • 0
    В этом нет необходимости при call функции. Это необходимо только при отправке transaction . Вы можете прочитать больше об этом в документации: web3js.readthedocs.io/en/1.0/web3-eth-contract.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню