„Error: unknown account at Object.InvalidResponse“ wird angezeigt, wenn die Anwendung mit einer Metamaske mit einem privaten Netzwerk verbunden ist

Mein Vertrag lautet:

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

}

Ich habe meinen Vertrag auf einem lokalen privaten Knoten bereitgestellt.

Ich führe meinen Geth-Knoten mit dem folgenden Befehl aus:

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

In Javasacript habe ich mein Anwendungs-Front-End mit web3 mit dem lokalen Knoten verbunden:

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

Ich habe mein Front-End erfolgreich verbunden. Ich konnte sogar auf die öffentlichen Zustandsvariablen name1, name2 und name3 zugreifen. Aber als ich setAward1(), setAward2()oder eine andere Funktion aufrief, bekam ich diesen Fehler:

Fehler: Unbekanntes Konto bei Object.InvalidResponse.

Ich habe die Funktion like aufgerufen

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);
});

Bitte hilf mir!!! Vielen Dank im Voraus.

displayAward-Funktion ist nicht im Vertrag. Können Sie die genaue Art und Weise mitteilen, wie Sie versuchen, die Funktion setAward1 () zu treffen?
Hast du dazu eine Lösung gefunden? Ich habe Mühe, dieses Problem selbst zu beheben.

Antworten (1)

Die displayAward()Methode muss im Smart Contract erscheinen. Wenn Sie dann web3 1.0.0 verwenden, sollte es folgendermaßen verwendet werden:

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