我正在尝试使此简单的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)}});
})
答案 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