web3错误:BigNumber错误:“新的BigNumber()不是基数为16的数字:”

时间:2018-10-21 04:52:13

标签: javascript solidity web3

我正在尝试使此简单的Dapp正常工作,在这里我将变量nombre和edad发送到setInstructor()函数,然后由getInstructor()函数返回。问题是我不断收到BigNumber Error: "new BigNumber() not a base 16 number:。有什么想法吗?

固体

pragma solidity ^0.4.25;


contract Contrato {

  string fName;
  uint age;

  function setInstructor (string _fName, uint _age){
      fName = _fName;
      age = _age;

  }

  function getInstructor () public constant returns (string, uint){
      return (fName, age);
  }

}

Web3

var Contrato = web3.eth.contract(ABI);
var Contratito = Contrato.at(Address);

$("#button").click(function(){

    Contratito.setInstructor($("#nombre").val(), $("#edad").val(), function(error,result){if (!error) { console.log("bien") } else { console.error(error)}});

    Contratito.getInstructor(function(error,result){ if (!error) { $("#instructor").html(result[0] + " " + result[1])} else {console.error(error)}});

})

3 个答案:

答案 0 :(得分:0)

我首先将$("#edad").val()转换为数字,而不是最有可能返回的字符串。如果那不起作用,我会使用.val()手动将两个new BigNumber(...)结果转换为BigNumbers。

让我知道评论中的内容,希望我们能尽快解决!

答案 1 :(得分:0)

我也有这个问题,为了解决它,我必须将MetaMask浏览器扩展所使用的网络更改为javascript代码中指定的网络。确保合同地址位于MetaMask扩展正在使用的网络上。另外,您可能应该在以太坊堆栈交换站点上发布与以太坊相关的问题,以获得更快的响应:https://ethereum.stackexchange.com

答案 2 :(得分:0)

在我的情况下,问题与所使用的 EVM 版本有关。

我必须从默认版本( bizantium )转移到明确指示 homestead 版本,并且该版本有效。

但是注意宅基地是最早的一个,所以我不确定我所选择的含义。我没有尝试使用其他版本,因为它是仅用于测试目的的合同。

用于编译合同并指示 EVM 版本的命令(示例):

solc --evm-version <VERSION> contract.sol

参考:https://solidity.readthedocs.io/en/v0.5.3/using-the-compiler.html#setting-the-evm-version-to-target