El siguiente enlace describe cómo funciona la función web3.eth.filter(...):
https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethfilter
Lo que me gustaría hacer es obtener una lista de los objetos de transacción de todas las transacciones que ocurren en una cuenta. Actualmente tengo el siguiente código:
var options = {
fromBlock: "pending",
toBlock: "latest",
address: "0xab1323fe3234234234fa34324324234af3423432",
};
var filter = web3.eth.filter(options);
filter.watch(function(error, result){
if (!error)
console.log(result);
});
Pregunta:
¿El código anterior está haciendo lo que quiero? Esto es lo que quiero que haga:
Cada vez que la aplicación comienza a ejecutarse, también lo hace geth y todos los bloques que se agregan a la cadena de bloques comienzan a filtrarse, y cuando options
se encuentra una coincidencia para la dirección en el objeto, guarda ese registro. aunque no estoy seguro de si es cuando se encuentra que la dirección se envía o si es cuando es el remitente .
No quiero que se salte ningún bloque. Pero el código javascript anterior debe aplicarse a geth, y para que eso suceda, geth debe estar ejecutándose antes de aplicar el filtro, ¿no significa eso que algunos de los bloques se omiten antes de aplicar el filtro?
EDITADO:
Fui al sitio web https://etherscan.io/txs?block=4067373
y con esa información elija la siguiente dirección (la tercera en la fila) para realizar la prueba:
0x25f000254108a104A7127B5a5697cb3C12643e62
Y se probó el siguiente código:
var options = {
fromBlock: 4067373,
toBlock: 4067373,
address: "0x25f000254108a104A7127B5a5697cb3C12643e62",
};
var filter = web3.eth.filter(options);
filter.get(function(error, result){
if (!error)
console.log(JSON.stringify(result, null, 2));
});
También hice otra prueba con el objeto de opciones siendo:
var options = {
fromBlock: 4067372,
toBlock: 4067374,
address: "0x25f000254108a104A7127B5a5697cb3C12643e62",
};
En ambos casos, el resultado fue una matriz vacía:
[]
Pregunta:
¿Se está haciendo algo mal arriba? Esperaba obtener algunos valores en la matriz de resultados y no sé por qué está vacío.
Desde la documentación , el reloj solo buscará cambios de estado, es decir, solo se informarán los nuevos bloques agregados desde la última vez que se ejecutó geth.
Encontramos algo poco confiable, si hubo una reorganización de la cadena, algunos eventos no se dispararon aunque la transacción se incorporó en la cadena de bloques, o se dispararon pero la transacción se eliminó en la reorganización.
Otro problema es que esto no funcionará para "transacciones internas", es decir, si un contrato realiza una transferencia a la dirección que se está monitoreando, no generará ningún resultado.
Siempre puede recuperar los eventos en un rango dado con get
var previousBlock = 1000;
var options = {
fromBlock: previousBlock,
toBlock: previousBlock + 100,
address: "0xab1323fe3234234234fa34324324234af3423432",
};
var filter = web3.eth.filter(options);
filter.get(function(error, result) {
if (!error) {
console.log(result);
}
});
Webeng
ismael
Webeng