Вызов функции из солидности с Web3 - PullRequest
0 голосов
/ 23 октября 2018

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

В моем файле 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 обещание) Ошибка: неверный адрес"

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

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

1 Ответ

0 голосов
/ 23 октября 2018

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

export async function practiceInteract() {
   const submitTest = await globalVariable.smartContractFunction().call({from: web3.eth.accounts[0]});
   console.log(submitTest);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...