Cómo ver la confirmación número 12 con filtros web3

No parece posible actualizar dinámicamente las opciones en web3.eth.filter(), así que, ¿cómo se puede observar una transacción que involucre una cuenta en particular que aparece en el último bloque número 12?

La forma más sencilla es suscribirse a cada bloque y, en la devolución de llamada, usar un filtro y la función de obtención sincrónica para obtener solo los eventos del último bloque 12. ¿Coincide esto con su necesidad?
¿Qué quieres decir con suscribirse ?
Utilice eth.filter('latest', callback) para recibir una notificación cada vez que se agregue un nuevo bloque a la cadena. Pase algún tiempo en la API. Buena suerte.
Terminó con este código . Se siente torpe pero funciona.
Puede simplificar ya que eth.getBlock funciona de forma síncrona si no se proporciona una devolución de llamada. pero por lo demás está bien

Respuestas (1)

Respondiendo a la propia pregunta.

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.
        }
      })
    }
  }
})
Se podría simplificar un poco. Primero, intente recuperar el recibo de transacción ( web3.eth.getTransactionReceipt(txId)). Es posible solo cuando fue extraído. En respuesta, debe encontrar el número de bloque. Haga la diferencia blockNumber-txBlocksi es mayor que 12 definitivamente confirmado :) Por cierto, he leído en alguna parte que esperar 8 bloques debería ser suficiente.
Hubo una bifurcación de red entre gethlos clientes de Parity y el 24 de noviembre de 2016 donde "se extrajeron ~ 165 bloques en la cadena ahora abandonada". Ver blog.ethereum.org/2016/11/25/… .
@radmen, la intención inicial era observar una transacción en una cuenta en particular en un bloque específico, por lo que no tendría forma de saber de antemano cuál sería la identificación de la transacción. He actualizado la pregunta original para que quede más claro.
@grift00 ah, ahora está más claro :) ¡Gracias por actualizar!
Parece que web3.eth.filterha sido reemplazado por web3.eth.subscribe.