Obteniendo "Error: cuenta desconocida en Object.InvalidResponse" cuando la aplicación está conectada a una red privada usando metamask

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.

La función displayAward no está en contrato. ¿Puedes compartir la forma exacta en que intentas presionar la función setAward1()?
¿Ha encontrado una solución para esto? Estoy luchando para solucionar este problema yo mismo.

Respuestas (1)

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