Estoy usando la API de Etherscan para varios detalles de Ethereum.
Necesito averiguar la tokens
dirección transferida de un contrato original de token (digamos A) a una dirección particular (digamos B).
Para esto, necesitaría iterar a través de todas las transacciones de B
y todas las Event Logs
de A
y ver si alguna transacción Events
coincide con la de B
si es así, entonces la data
clave me da el valor de la transferencia del token.
Pero no tengo forma de saber que estas transacciones serían parte de qué bloque, por lo que tendría que recorrer todos los bloques, ya que la API admite un máximo de 1000 resultados en una sola llamada. No tengo forma de saber en cuántos bloques este límite sería ser alcanzado, así que itero en los pasos de 1000
, es minuciosamente lento y llevaría horas.
La API acepta un fromBlock
parámetro toBlock
. Actualmente, el último bloque está en ~ 4287262. ¿Cómo puedo paginar los resultados de manera efectiva? Dado que si uso un paso de 1000 para los bloques, tomaría ~ 4000 llamadas, lo que parece muy ineficaz.
Una forma en que optimicé es ver en qué bloque se creó el contrato, esto elimina efectivamente el 95% de los bloques y usó subprocesos múltiples para otros bloques, pero aún es lento.
Cualquier otra forma/método/sugerencia sería genial.
Supongo que lo que quiso decir con ineficaz es el tiempo o los datos.
Dado que su idea es paginar los resultados, no necesitará que todas las llamadas a la API se realicen a la vez. Como puede llamar solo a la sección que debe verse en este momento, por lo tanto, con el tiempo, el diseño de la API solo buscará 1000 resultados no va a ser un problema (intentar obtener todos los resultados puede causar un retraso aún mayor en el procesamiento inicial, y creo que obtener solo 1000 resultados es mejor para una vista paginada).
Y su consideración sobre la eficiencia es en cuanto a los datos (cantidad de datos transferidos), va a guardar solo los encabezados de respuesta y solicitud de llamada API utilizados. En comparación con la cantidad de datos transferidos, los tamaños de los encabezados son insignificantes. Lo verifiqué con la solicitud de Postman a la API de registro de eventos de etherscan y los resultados fueron los siguientes:
Por lo tanto, la cantidad de datos que está tratando de guardar es muy inferior en comparación con los datos transferidos y, si no se ven todos los registros, cargarlos antes será una pérdida de datos. Por lo tanto, el diseño de la API también es efectivo en cuanto a datos.
Y según tengo entendido, dado que este es el diseño de los proveedores de API, si aún desea hacerlo, la opción es encontrar otra API para obtener datos de eventos.
Puede consultar los enlaces aquí y aquí también.
Espero que esto ayude.
Achala Dissanayake
garg10may
adil