Входной параметр для функции обратного вызова Web3 - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу отправить параметр в функцию в смарт-контракте, я пробовал разные способы, но он продолжает выдавать ошибку.

Мой файл солидности

 pragma solidity ^0.4.18;

 import "./ConvertLib.sol";

 contract Check {
 function multiply(uint a) public pure returns(uint){
    return a*a;
 }
}

Я успешно подключился к Web3 и создал экземпляр контракта как inst. Когда я пытаюсь выполнить функцию

 console.log(inst.multiply.call()(function(err,result){console.log("r-->"+result);}));

это дает мне ошибку

Invalid number of arguments to Solidity function

и если я добавлю аргумент, как это

console.log(inst.multiply(2).call()(function(err,result){console.log("r-->"+result);}));

или как это

console.log(inst.multiply.call(2)(function(err,result){console.log("r-->"+result);}));

это дает мне эту ошибку

Error: The MetaMask Web3 object does not support synchronous methods like eth_call without a callback parameter.

Я использую Web3 версии 0.20.3

Ответы [ 2 ]

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

Попробуйте что-то вроде этого:

inst.methods [multiply] (2) .call (). Then (data => ...). Catch (err => {...})

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

У меня возникла та же проблема с контрактом Hello World, и, потянув за волосы некоторое время, я попробовал что-то вроде:

console.log(inst.multiply(2, function(err,result){console.log("r-->"+result);}));

То есть передача функции обратного вызова в качестве последнего параметра. Как сказано в документации, «все его функции [Solidity's] по умолчанию используют синхронные HTTP-запросы. Если вы хотите сделать асинхронный запрос, вы можете передать необязательный обратный вызов в качестве последнего параметра большинству функций. Все обратные вызовы используют ошибку первый стиль обратного вызова: "

web3.eth.getBlock(48, function(error, result){
   if(!error)
       console.log(JSON.stringify(result));
   else
       console.error(error);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...