如何解决无效地址错误?使用MetaMask的Web3 JS

时间:2019-11-03 17:42:55

标签: javascript ethereum solidity web3

我将合同部署到Goerli测试网。部署成功。我在Remix中对其进行了测试。

合同代码:

pragma solidity ^0.5.0;

contract Test{

    string private str;

    constructor() public {
        str = " ";
    }

    function getStr() public view returns(string memory  _str){
        _str = str;
    }

    function setStr(string memory  _str) public{
        str = _str;
    }
}

然后,我尝试使用web3和MetaMask建立Web界面。

<script>
        ethereum.enable()
        var abi = [
    {
        "constant": false,
        "inputs": [
            {
                "internalType": "string",
                "name": "_str",
                "type": "string"
            }
        ],
        "name": "setStr",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "inputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "constructor"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "getStr",
        "outputs": [
            {
                "internalType": "string",
                "name": "_str",
                "type": "string"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    }
    ];
        var address = 0x4316d047388e61EBC3Ed34DFf4cEE215840decDa;
        var myContract = web3.eth.contract(abi);
        var TestC = myContract.at(address);
        console.log(TestC);
    var x = TestC.getStr();
</script>

当我运行它时,它返回:

  

未捕获的错误:地址无效

     

在c(inpage.js:1)

     

在inputCallFormatter(inpage.js:1)

     

在inpage.js:1

     

在Array.map()

     

在o.formatInput(inpage.js:1)

     

在o.toPayload(inpage.js:1)

     

在[呼叫时](inpage.js:1)

     

在u.call(inpage.js:1)

     

在u.execute(inpage.js:1)

     

at(index):46

我需要做什么?

1 个答案:

答案 0 :(得分:0)

您的变量storm rebalance应该是一个十六进制字符串,而不是原义的十六进制数字-即使最终会被以太坊节点转换为数字。

尝试以下方法:

address