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.
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
Aniket
Der große Matt