Mi contrato es:
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;
}
}
Implementé mi contrato en el nodo privado local.
Ejecuto mi nodo geth usando el siguiente comando:
geth --datadir "filepath" --rpc --rpcaddr "localhost" --rpccorsdomain "*" --networkid 1234 --mine --minerthreads 1 console
En Javasascript, conecté el front-end de mi aplicación con el nodo local usando web3:
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
Conecté con éxito mi front-end. Incluso podría acceder a las variables de estado públicas nombre1, nombre2 y nombre3. Pero cuando llamé a setAward1()
, setAward2()
o a cualquier otra función, recibí este error:
Error: cuenta desconocida en Object.InvalidResponse.
Llamé a la función como
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);
});
¡¡¡Por favor, ayúdame!!! Gracias de antemano.
El displayAward()
método tiene que aparecer en el contrato inteligente. Entonces, si está utilizando web3 1.0.0, debe usarse de esta manera:
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
El mate alto