This repository was archived by the owner on Dec 12, 2022. It is now read-only.
File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 261261 identity)]
262262 (transform-fn (remove-log-indexes sorted-logs))))
263263
264+ (defn get-events-with-retry [contract-instance contract event from to ch-logs retry-count]
265+ (web3-eth/get-past-events contract-instance
266+ event
267+ {:from-block from
268+ :to-block to}
269+ (fn [error events]
270+ (if (and error (< retry-count 10 ))
271+ (do
272+ (let [wait-time (int (* 500 (inc retry-count) (inc (rand ))))]
273+ (log/info " Error fetching events. Retrying" {:retry-count retry-count
274+ :contract contract
275+ :event event
276+ :from from
277+ :to to
278+ :error error
279+ :wait-time wait-time})
280+ (js/setTimeout
281+ (fn []
282+ (get-events-with-retry contract-instance contract event from to ch-logs (inc retry-count)))
283+ wait-time)))
284+ (let [logs (->> events
285+ web3-helpers/js->cljkk
286+ (map (partial enrich-event-log contract contract-instance)))]
287+ (async/put! ch-logs (if error [(with-meta {:err error} {:error? true })] logs)))))))
288+
264289(defn chunk->logs [transform-fn from-block skip-log-indexes events ignore-forward? [from to] ch-output]
265290 " >! to ch-output for chunk [from to]: final sorted, skipped and transformed logs as async/ch."
266291 (let [sort-and-skip-logs' (partial sort-and-skip-logs transform-fn from-block skip-log-indexes)
267292 ch-logs (async/chan 1 )
268293 event->logs (fn [[k [contract event]] ch-logs-output]
269294 (let [contract-instance (instance-from-arg contract {:ignore-forward? ignore-forward?})]
270- (web3-eth/get-past-events contract-instance
271- event
272- {:from-block from
273- :to-block to}
274- (fn [error events]
275- (let [logs (map (partial enrich-event-log contract contract-instance)
276- (web3-helpers/js->cljkk events))]
277- (async/put! ch-logs-output (or logs [(with-meta {:err error} {:error? true })])))))))]
295+ (log/debug " Processing chunk of blocks" {:contract contract
296+ :event event
297+ :from from
298+ :to to})
299+ (get-events-with-retry contract-instance contract event from to ch-logs-output 0 )))]
278300 (go-loop [all-logs []
279301 [event & rest-events] events]
280302 (if event
You can’t perform that action at this time.
0 commit comments