He implementado contratos en la red de prueba de ropsten. trufa.js
ropsten: {
provider: function() {
return new HDWalletProvider(mnemonic, "https://ropsten.infura.io/<api-token>")
},
network_id: '*',
gas:"4000000"
}
tienda.sol
pragma solidity ^0.4.17;
contract SimpleStorage {
uint myVariable;
event emitval();
function setValue(uint x) public {
emitval();
myVariable = x;
}
function getValue() public returns (uint) {
emitval();
return myVariable;
}
}
En mi código de nodo js, estoy usando web3 js para llamar/escuchar métodos/eventos de contratos.
mi archivo node js es
web3.setProvider(new Web3.providers.WebsocketProvider('https://ropsten.infura.io/<api-token>'));
y para escuchar eventos escribí
var contracts = new web3.eth.Contract(importedjson.abi, deployedaddressat)
contracts.events.emitval(function(error, result){
if(error) { console.log(error);}
else { console.log('Event setVal:', result);}
})
Cuando llamo a métodos de solidez (setValue() o getValue() que emite el evento emitval()), no puedo escucharlo en el código del nodo js.
¿Podría por favor ayudarme?
Estoy usando la última versión de web3js "1.0.0-beta.33".
No puedo ver tales setVal
eventos en su contrato. De hecho, en el contrato, el nombre es emitval
. Puedes intentar cambiar tu código.
contratos.eventos.emitval(función(error, resultado){ si (error) { consola.log (error);} else { console.log('Evento setVal:', resultado);} });
y la alternativa es escuchar todos los eventos del contrato usando myContract.events.allEvents
. árbitro
¿Puede intentar reemplazar web3.setProvider (nuevo Web3.providers.WebsocketProvider ('https://ropsten.infura.io/'));
Con
web3.setProvider(nuevo Web3.providers.WebsocketProvider('wss://ropsten.infura.io/'));
Puede ser un problema de websocket ya que web3 1.0 no admite eventos para http.
Kapil
trinu