Получение «Ошибка: неизвестная учетная запись в Object.InvalidResponse», когда приложение подключено к частной сети с использованием метамаски

Мой контракт:

pragma solidity ^0.4.8;

contract Awards {
  address public owner;
  string  public name1;
  string  public name2;
  string  public name3;

  function Awards() {  
    owner = msg.sender;
    name1 = "Avinash";
    name2 = "Balaji";
    name3 = "Mohit";
  }

  modifier OnlyOwner() {
    if(owner ==  msg.sender) {
       _;
    }
    else {
       throw;
    }
  }


  function setAward1(string s) OnlyOwner {
    name1 = s;
  }

  function setAward2(string s) OnlyOwner {
    name2 = s;
 }

  function setAward3(string s) OnlyOwner {
    name3 = s;
  }

}

Я развернул свой контракт на локальном частном узле.

Я запускаю свой узел geth с помощью следующей команды:

geth --datadir "filepath" --rpc --rpcaddr "localhost" --rpccorsdomain "*" --networkid 1234 --mine --minerthreads 1 console

В Javasacript я подключил интерфейс своего приложения к локальному узлу, используя web3:

web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));

Я успешно подключил свой интерфейс. Я даже мог получить доступ к общедоступным переменным состояния name1, name2 и name3. Но когда я вызвал setAward1()или setAward2()любую другую функцию, я получил эту ошибку:

Ошибка: неизвестная учетная запись в Object.InvalidResponse.

Я назвал функцию, например

myContract = web3.eth.contract(AbiArray).at(contractAddress);

myContract.displayAward(username, function(err,res) {
  console.log("In display Award");
  if(!err) {
    console.log("winner is" + res);
    TemplateVar.set(template,"winnerName",res);
  }
  else
    console.log(err);
});

Пожалуйста, помогите мне!!! Заранее спасибо.

Функция displayAward не находится в контракте. Можете ли вы поделиться тем, как вы пытаетесь использовать функцию setAward1()?
Вы нашли решение этой проблемы? Сам пытаюсь решить эту проблему.

Ответы (1)

Метод displayAward()должен появиться в смарт-контракте. Затем, если вы используете web3 1.0.0, его следует использовать следующим образом:

myContract.methods.displayAward(username).send({from: account_address})
.on('transactionHash', function(hash){

})
.on('receipt', function(receipt){

})
.on('confirmation', function(confirmationNumber, receipt){

})
.on('error', console.error);

https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#id15