我试图使这个简单的Dapp工作,我将变量向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)}});
})发布于 2018-10-22 02:52:33
我首先将$("#edad").val()转换为一个数字,而不是最有可能返回的字符串。如果这不起作用,我将使用.val()手动将两个BigNumbers结果转换为new BigNumber(...)。
让我知道这让我们在评论中,希望我们能尽快解决这个问题!
发布于 2018-11-27 13:02:52
我也遇到了这个问题,为了解决这个问题,我不得不将MetaMask浏览器扩展使用的网络更改为javascript代码中指定的网络。确保合同地址位于MetaMask扩展所使用的网络上。此外,您可能应该将您的虚空相关问题发布在Ethereum堆栈交换站点上,以获得更快的响应:https://ethereum.stackexchange.com。
发布于 2019-09-25 14:43:07
在我的例子中,问题与正在使用的EVM版本有关。
我必须从默认的一个(bizantium)移到显式地指示宅基地版本,并且它起了作用。
但关注家园是最古老的,所以我不确定我的选择意味着什么。我没有尝试与其他版本,因为这是一个合同,仅为测试目的。
编译契约并指示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
https://stackoverflow.com/questions/52912213
复制相似问题