So verwenden Sie web3.filter, um zu überprüfen, ob die Transaktion verarbeitet wird

Ich versuche, Ether an ein Konto zu senden und dann einen Vertrag mit diesem Konto bereitzustellen. Also muss ich einen Watcher einrichten, der auslöst, wenn die Transaktion abgeschlossen oder abgebaut ist, damit ich den Vertrag bereitstellen kann. Watcher, der „pending“ und „latest“ verwendet, wird nicht ausgelöst, wenn die Transaktion abgebaut wird. Also habe ich versucht, einen Watcher für die Adresse zu setzen, aber es wird nicht ausgelöst.

Code: "Beobachter für dieses Konto einrichten"

web3.eth.filter({address: "0x7480e208a68aae46d96cad5341ae111a2a86dcf6"}, function(error, result){
  if (error){
    return console.log(error)
    }
    console.log("----filter-----")
    console.log(JSON.stringify(web3.eth.getBalance("0x7480e208a68bae46d06cad5341ae111a2a86dcf6")))
    console.log(result);
    console.log("----filter-----")
});

Machen Sie jetzt die Transaktion.

web3.eth.sendTransaction({ from: web3.eth.coinbase, to: "0x7480e208a68bae46d06cad5341ae111a2a86dcf6", value: 10000000000*4 })

Sehr neu in diesem Bereich, lassen Sie mich bitte wissen, was der richtige Weg wäre, dies zu tun.

Sie sollten keine Adresse mit Filter für Blockbenachrichtigungen angeben müssen. Versuchen Sie es ohne.
Ja, ich habe mich geirrt. Muss "neueste" oder "ausstehend" angeben. In meinem Fall "neueste".

Antworten (1)

Die web3.eth.filter-Methode lauscht nur auf Protokolle (dh Ereignisse, die durch einen Vertrag ausgelöst werden), aber nicht auf normale Transaktionen zu/von einem bestimmten Konto (Quelle: https://github.com/ethereum/wiki/wiki/JavaScript -API#web3ethfilter )

Sie könnten einen Filter mit dem "neuesten" Argument einrichten, um neue Blöcke zu erhalten und die Transaktionen dieses Blocks abzufragen. Hier ist ein Ausschnitt, den ich verwendet habe, um dasselbe zu tun:

var filter = web3.eth.filter("latest",function(error, blockHash) {
    if (!error) {
        var block = web3.eth.getBlock(blockHash, true);        
        if (block.transactions.length > 0) {
            console.log("found " + block.transactions.length + " transactions in block " + blockHash);
            console.log(JSON.stringify(block.transactions));
        } else {
            console.log("no transaction in block: " + blockHash);
        }
    }
});
Fertig Meister!!!!!