Как исправить неверный адрес Ошибка? Web3 JS с метамаской - PullRequest
0 голосов
/ 03 ноября 2019

Я развернул свой контракт в тестовой сети 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.

<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>

И когда язапустив его, он вернул:

Uncaught Error: неверный адрес

в c (inpage.js: 1)

в inputCallFormatter (inpage.js: 1)

в inpage.js: 1

в Array.map ()

в o.formatInput (inpage.js: 1)

в o. toPayload (inpage.js: 1)

в we [как вызов] (inpage.js: 1)

at u.call (inpage.js: 1)

в u.execute (inpage.js: 1)

в (index): 46

Что мне нужно сделать?

1 Ответ

0 голосов
/ 04 ноября 2019

Ваша переменная address должна быть шестнадцатеричной строкой, а не литеральным шестнадцатеричным числом - даже если она в конечном итоге преобразуется в число узлом ethereum.

Попробуйте вместо этого:

        var address = '0x4316d047388e61EBC3Ed34DFf4cEE215840decDa';
...