Hier ist ein Szenario:
const web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/janNFDJkMgDfan"));
Hier ist das Problem :
Wie sich herausstellt, web3
kann das Backend, wenn ein Objekt von einem externen Knoten bereitgestellt wird, keine Ereignisse verwenden. Beispielsweise kann das Backend nicht nach neuen Blöcken suchen. Folgendes funktioniert nicht:
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 ist keine Funktion
Das Problem ist also, dass das Backend nicht weiß, wann ein neuer Block abgebaut wird.
Eine Möglichkeit, damit umzugehen:
Das Backend kann die Blockchain alle ~20 Sekunden abfragen, um zu prüfen, ob ein neuer Block abgebaut wurde.
check(){
web3.eth.getBlock("pending", (error, result) => {
console.log('error:', error);
console.log('results', result);
});
}
setTimeout(check, 20000);
und stellen Sie dann sicher, dass die Transaktion des Benutzers enthalten war.
Eine andere Möglichkeit, damit umzugehen, ist:
?????
Ich habe immer noch nicht genug Ruf, um einen Kommentar abzugeben, also schreibe ich nur eine Zeile als Antwort, um zu sagen, dass Sie Ihren Zugangscode aus dem von Ihnen bereitgestellten Beispiel entfernen sollten! ;)
const web3 = new Web3(new Web3.providers.HttpProvider(" https://ropsten.infura.io/ ***********"));
So habe ich es geschafft, Ereignisse im Backend abzuhören. Das Problem ist, dass die Ereignisse nicht konsistent ausgelöst werden.
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