Aquí hay un escenario:
const web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/janNFDJkMgDfan"));
Aquí está el problema :
Resulta que cuando web3
el backend de un nodo externo proporciona un objeto, no puede usar eventos. Por ejemplo, el backend no puede buscar nuevos bloques. Lo siguiente no funciona:
var filter = web3.eth.filter('latest');
filter.watch(function(error, result){
var block = web3.eth.getBlock(result, true);
console.log('current block #' + block.number);
});
TypeError: filterCreationErrorCallback no es una función
Entonces, el problema es que el backend no sabe cuándo se extrae un nuevo bloque.
Una forma de manejar esto:
El backend puede consultar la cadena de bloques cada ~20 segundos para verificar si se ha extraído un nuevo bloque.
check(){
web3.eth.getBlock("pending", (error, result) => {
console.log('error:', error);
console.log('results', result);
});
}
setTimeout(check, 20000);
y luego asegúrese de que se haya incluido la transacción del usuario.
Otra forma de manejar esto es:
?????
Todavía no tengo suficiente reputación para comentar, así que solo estoy escribiendo una línea como respuesta para decir que debe eliminar su código de acceso del ejemplo que proporcionó. ;)
const web3 = new Web3(new Web3.providers.HttpProvider(" https://ropsten.infura.io/ ***********"));
Así es como he logrado escuchar eventos en el backend. El problema es que los eventos no se disparan consistentemente.
const Web3 = require('web3');
const ProviderEngine = require('web3-provider-engine/index.js');
const ZeroClientProvider = require('web3-provider-engine/zero.js');
const engine = ZeroClientProvider({
getAccounts: function(){},
rpcUrl: 'https://ropsten.infura.io/WEQuhowqe78qdqweqw', //RANDOM ID, TO GET A REAL ONE, REGISTER AT INFURA.IO
})
const web3 = new Web3(engine);
const contractAddress = '0xc740ab099da657612143c34c5f7593a3af5ee6e8';
const contractAbi = [{"constant":false,"inputs":[{"name":"x","type":"uint256"}],"name":"emit","outputs":[],"payable":false,"type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"x","type":"uint256"}],"name":"myEvent","type":"event"}];
const contract = web3.eth.contract(contractAbi).at(contractAddress);
const event = contract.myEvent({x: null})
event.watch(function(error, result){
console.log(error, result.args.x.toNumber());
});
tjaden hess