Мой контракт:
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()
должен появиться в смарт-контракте. Затем, если вы используете 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
Аникет
Высокий Мэтт