У меня возникли проблемы с вызовом простой функции из моего договора о солидности. Вот как структурирован код до сих пор:
В моем файле 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?
Рад это прояснить это, если я четко не напишу свою проблему. Благодарю вас!
Ваша проблема в том, что вы просто не определяете адрес, вызывающий функцию. Вам нужно определить, кто вызывает эту функцию, если вы используете web3
таким образом, каким вы являетесь. Правильный код:
export async function practiceInteract() {
const submitTest = await globalVariable.smartContractFunction().call({from: web3.eth.accounts[0]});
console.log(submitTest);
}
call
функции. Это необходимо только при отправке transaction
. Вы можете прочитать больше об этом в документации: web3js.readthedocs.io/en/1.0/web3-eth-contract.html