Error al usar web3.eth.filter() y filter.get()

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.

Respuestas (1)

Cuando comencé a trabajar en Ethereum, incluso yo tenía problemas similares a este y aprendí de la manera más difícil. Compartiré lo que aprendí de mis errores y espero que no termines haciendo lo mismo.

Respuesta a tu pregunta:

¿Se está haciendo algo mal arriba? Esperaba obtener algunos valores en la matriz de resultados y no sé por qué está vacío.

Creo que entendiste mal el FILTRO. Está utilizando la API de filtro de temas, que filtra los eventos emitidos por los contratos; por lo tanto, solo los contratos aparecerán en eso.

Como, cuando probé su código (en mi TESTNET) para una dirección aleatoria:

var options = {
 fromBlock: 1535000,
 toBlock: 1535104,
 address: "0x76e0bb92b6f8d431af2fe1bafd304eb832241619" 
};

var filter = web3.eth.filter(options);

filter.get(function(error, result){
   if (!error)
      console.log(JSON.stringify(result, null, 2));
});

El resultado de esto fue:

[]

Pero cuando reemplazo el valor de la clave de "dirección", con una dirección de contrato y agrego una dirección de origen (es decir, desde la cual se invocaron las funciones de contrato)

CÓDIGO:

var options = {
    fromBlock: 1535000,
    toBlock: 1535104,
    address: "0x5c99dadde01ce61ab5b5536d566bf41ecd17e3a9", //CONTRACT ADDR
    from: "0x76e0bb92b6f8d431af2fe1bafd304eb832241619" //WALLET ADDR
};

var filter = web3.eth.filter(options);

filter.get(function(error, result){
  if (!error)
    console.log(JSON.stringify(result, null, 2));
});

RESULTADO:

{
  "address": "0x5c99dadde01ce61ab5b5536d566bf41ecd17e3a9",
  "topics": [
    "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
    "0x00000000000000000000000076e0bb92b6f8d431af2fe1bafd304eb832241619",
    "0x0000000000000000000000002b3425ce986f9f0f599758f4fb33158ca671e83e"
  ],
  "data": "0x0000000000000000000000000000000000000000000000000000000000000001",
  "blockNumber": 1535088,
  "transactionHash": "0xf523285b652163f50f1d19ca08951f38b4bfe099d721a6e6d80ff7fd03a171eb",
  "transactionIndex": 4,
  "blockHash": "0x27a29bf153b302a5e8f24415ed1f2fac1829e845746bed9f3098f0b40cd232a5",
  "logIndex": 1,
  "removed": false
}
{
  "address": "0x5c99dadde01ce61ab5b5536d566bf41ecd17e3a9",
  "topics": [
    "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
    "0x00000000000000000000000076e0bb92b6f8d431af2fe1bafd304eb832241619",
    "0x0000000000000000000000002b3425ce986f9f0f599758f4fb33158ca671e83e"
  ],
  "data": "0x0000000000000000000000000000000000000000000000000000000000000001",
  "blockNumber": 1535104,
  "transactionHash": "0x14632d129a6aac7365483a3000470ece443a19a73f242cba1f1944f78889a677",
  "transactionIndex": 7,
  "blockHash": "0x34ee516310a59407712455ec87bd76046a1e68f5c631dc8e6b4bb903b8c92834",
  "logIndex": 6,
  "removed": false
}

Son todas las transacciones realizadas desde esa dirección (0x76e0bb92b6f8d431af2fe1bafd304eb832241619) en el contrato (0x5c99dadde01ce61ab5b5536d566bf41ecd17e3a9) entre los bloques 1535000-1535104.

NOTA:

Si desea obtener transacciones no contractuales de la cadena de bloques, debe examinar cada bloque en busca de transacciones que ocurrieron en ese blog y luego obtener los detalles de la transacción utilizando la API web3. Este enlace (fragmentos de JavaScript útiles comunes para geth) tiene esta sección Script para encontrar transacciones hacia/desde una cuenta

El enlace anterior no lo ayudará a conocer las transacciones internas que ocurren dentro de un contrato, aquí está el enlace al mismo. Espero que esto te ayude.

Estoy tratando de averiguar las transacciones entrantes en una cuenta en particular. No está relacionado con ningún contrato. Así que modifiqué el Filtro de la siguiente manera var filter = web3.eth.filter({fromBlock: 1, toBlock: 'latest', a: '0x5f677ba7b786411f406a314ca339783ad8d21acc'}); filter.get(function(error, resultado){ console.log(error, resultado); });
El filtro anterior muestra el mismo resultado que otros filtros. ¿Cómo puedo modificar el filtro para mi requerimiento?
Recomendaría, si el filtro no funciona para usted, intente acceder a todas las transacciones en el bloque y luego verifique si la transacción le pertenece o no.