Вызов функции контракта солидности

avatar
babaum
8 апреля 2018 в 09:10
379
0
1

Я успешно скомпилировал и опубликовал свой контракт в тестовой сети rinkeby с помощью компилятора браузера ремиксов. Теперь я изо всех сил пытаюсь вызвать функцию моего контракта, либо потому, что мой код неверен, либо потому, что он опубликован на rinkeby?

Может кто-нибудь привести пример вызова этой функции с помощью javascript и/или непосредственно из компилятора ремиксов:

function balanceOfTestCoin() returns (uint amount){
    for (uint i = 0; i < funders.length; i++){
        if(funders[i].addr == msg.sender){
            return funders[i].amountTestCoin;
        }
    }
    return 0;
}

Сейчас я пробую это следующим образом:

<script>
 if (typeof web3 !== 'undefined') {
     window.web3 = new Web3(web3.currentProvider);
 } else {
     console.log('No web3? You should consider trying MetaMask!')
 }
 web3.eth.defaultAccount = web3.eth.accounts[0];

 var abi = [{...}];
 var MyContract = web3.eth.contract(abi);
 var myContractInstance = MyContract.at('0x....');
 console.log(myContractInstance);
 myContractInstance.balanceOfTestCoin(function(amount){ alert(amount) });

 //This doesnt work aswell: 
  alert("My TestCoins: " + myContractInstance.balanceOfTestCoin());
</script>

Я получаю сообщение об ошибке неверного адреса в строке, где я пытаюсь вызвать функцию. Я очень благодарен за любую помощь.

Источник
Adam Kipnis
8 апреля 2018 в 16:34
0

Сообщение об ошибке точно такое, как описано. Ваше значение 0x... неверно. Вероятно, вы скопировали его неправильно или вместо этого скопировали хэш транзакции. Это должна быть следующая строка длиной 40. Кроме того, измените свой контракт, чтобы функция была view (она не меняет никакого состояния).

babaum
8 апреля 2018 в 18:01
0

Спасибо за ответ. Адрес правильный, я еще раз проверил. Но адрес действителен только в тестовой сети rinkeby, может быть, это вина? Если да, то как я могу добраться до него. И не могли бы вы объяснить, что вы имеете в виду под изменением функции для просмотра? Спасибо

mirg
9 апреля 2018 в 12:30
0

как вы пытаетесь получить доступ к этому коду? Чтобы подключиться к rinkeby, просто используйте метамаску, и, поскольку вы правильно вводите провайдера, вы можете выполнить код (изменив сеть метамаски сети на rinkeby). чтобы изменить статус для просмотра, просто измените подпись метода таким образом, чтобы функция balanceOfTestCoin() возвращала публичное представление (сумма uint)

babaum
9 апреля 2018 в 19:16
0

Похоже, проблема заключалась в отсутствующем общедоступном и, возможно, идентификаторе просмотра.

Ответы (0)