Comprensión y uso de eth.newFilter

Situación:

Estoy usando web3.jswith gethpara que mi aplicación sepa qué clientes están depositando dinero en 1 cuenta específica (en lugar de crear una nueva billetera para cada nuevo cliente). La forma en que intento hacer esto es a través del valor de los datos en el objeto de transacción:

transcationObject = {
  from: sender,
  to: receiver,
  value: amount,
  data: 2134235141 //uniquely generated value for this user
}

Problema:

El problema es que necesito una forma para que mi aplicación almacene todos los objetos de transacción de las cuentas que envían Ether a mi cuenta. A partir de ahí, es bastante fácil saber quién envió cuánto al mirar el valor de los datos .

Solucion potencial:

Después de buscar en línea, encontré la función eth.setFilter. A mi entender, esto lo que hace es filtrar todas las transacciones que se van agregando a la blockchain del nodo local, y solo guarda las que pasan por el filtro.

fuente de aprendizaje sobre eth.setFilter: cómo rastrear el estado de las transacciones en ethereum

Pregunta:

¿La explicación anterior es cómo eth.setFilterfunciona realmente? ¿Está integrado con el proceso de guardar nueva información de transacciones en la cadena de bloques?

¿ Y alguien podría dar un ejemplo de cómo se usa? Vi algunos ejemplos en curllínea (el enlace de arriba), pero no tenía idea de lo que realmente hace ese código. ¿Modifica el funcionamiento de la cadena de bloques de forma indefinida? ¿O es necesario volver a ejecutarlo? Hay una mejor manera de hacerlo?

Nota: Si algunas de las preguntas anteriores son irrelevantes para la respuesta que está proporcionando, está completamente bien. Principalmente estoy tratando de encontrar una solución sobre cómo usar eth.newFiltery entender qué está haciendo con ese código.

debe usar el filtro de floración en lugar de revisar cada transacción en cada bloque.

Respuestas (1)

He usado este código javascript para filtrar la transacción a una dirección, usa web3.eth.filter

var filter = eth.filter({fromBlock:0, toBlock:'latest', address: "0xAddress"});
filter.get(function (err, transactions) {
  transactions.forEach(function (tx) {
    console.log(tx);
  });
});

Si en lugar de getrecuperar la transacción existente, puede usarla watchpara nuevas transacciones.

Un par de advertencias:

  • Esto no funciona para 'transacciones internas', transacciones generadas por un contrato, por ejemplo, una billetera multisig o algunos intercambios. Puede usar un servicio de terceros como etherscan para listar 'transacciones internas', o usar una API de seguimiento de geth o parity.

  • Una reorganización de la cadena puede hacer que se activen eventos incluso cuando las transacciones se eliminen de la cadena de bloques. Y por el contrario, un evento no se activa incluso cuando la transacción está incluida en la cadena de bloques. Debe esperar algunos bloques para la confirmación, o volver a escanear periódicamente para reorganizaciones de la cadena.