Wie man mit web3-Filtern auf die 12. Bestätigung achtet

Es scheint nicht möglich, die Optionen in web3.eth.filter() dynamisch zu aktualisieren, also wie würde man auf eine Transaktion achten, die ein bestimmtes Konto betrifft, das im 12. letzten Block erscheint?

Der einfachste Weg ist, jeden Block zu abonnieren und im Callback einen Filter und die synchrone Get-Funktion zu verwenden, um nur die Ereignisse des letzten 12. Blocks zu erhalten. Entspricht dies Ihrem Bedarf?
Wie meinst du abonnieren ?
Verwenden Sie den eth.filter('latest', callback), um über jeden neuen Block benachrichtigt zu werden, der der Kette hinzugefügt wird. Verbringen Sie einige Zeit in der API. Viel Glück.
Schluss mit diesem Code . Fühlt sich klobig an, aber es funktioniert.
Sie könnten vereinfachen, da der eth.getBlock synchron arbeitet, wenn kein Rückruf bereitgestellt wird. Aber sonst ist es ok

Antworten (1)

Eigene Frage beantworten.

const Web3 = require('web3')
let web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"))

let account = '0x05430f5201585c2601bb75d9658007202864c993'
let filter = web3.eth.filter('latest')
filter.watch(function(error, result) {
  if (!error) {
    let confirmedBlock = web3.eth.getBlock(web3.eth.blockNumber - 11)
    if (confirmedBlock.transactions.length > 0) {
      confirmedBlock.transactions.forEach(function(txId) {
        let transaction = web3.eth.getTransaction(txId)
        if (transaction.to == account) {
          // Do something useful.
        }
      })
    }
  }
})
Es könnte etwas vereinfacht werden. web3.eth.getTransactionReceipt(txId)Versuchen Sie zuerst, transactionReceipt ( ) abzurufen . Es ist nur möglich, wenn es abgebaut wurde. Als Antwort sollten Sie die Blocknummer finden. Machen blockNumber-txBlockSie einen Unterschied, ob es größer als 12 ist, es wurde definitiv bestätigt :) Übrigens, ich habe irgendwo gelesen, dass das Warten auf 8 Blöcke ausreichen sollte.
Am 24. November 2016 gab es eine Netzwerkverzweigung zwischen gethund Parity-Clients, bei der „~165 Blöcke in der jetzt aufgegebenen Kette abgebaut wurden“. Siehe blog.ethereum.org/2016/11/25/… .
@radmen Die ursprüngliche Absicht war, nach einer Transaktion für ein bestimmtes Konto in einem bestimmten Block zu suchen, sodass Sie die Transaktions-ID nicht im Voraus wissen könnten. Habe die ursprüngliche Frage aktualisiert, um das klarer zu machen
@grift00 ah, jetzt ist es klarer :) Danke fürs Update!
Es scheint, dass web3.eth.filterdurch ersetzt wurde web3.eth.subscribe.