::  eth-watcher: ethereum event log collector
::
=,  able:jael
|%
+$  config
  $:  ::  url: ethereum node rpc endpoint
      ::  eager: if true, give logs asap, send disavows in case of reorg
      ::  refresh-rate: rate at which to check for updates
      ::  timeout-time: time an update check is allowed to take
      ::  from: oldest block number to look at
      ::  contracts: contract addresses to look at
      ::  topics: event descriptions to look for
      ::
      url=@ta
      eager=?
      refresh-rate=@dr
      timeout-time=@dr
      from=number:block
      contracts=(list address:ethereum)
      =topics
  ==
::
+$  loglist  (list event-log:rpc:ethereum)
+$  topics   (list ?(@ux (list @ux)))
+$  watchpup
  $:  config
      =number:block
      =pending-logs
      blocks=(list block)
  ==
::
::  disavows: newest block first
+$  disavows      (list id:block)
+$  pending-logs  (map number:block loglist)
::
+$  poke
  $%  ::  %watch: configure a watchdog and fetch initial logs
      ::
      [%watch =path =config]
      ::  %clear: remove a watchdog
      ::
      [%clear =path]
  ==
::
+$  diff
  $%  ::  %history: full event log history, oldest first
      ::
      [%history =loglist]
      ::  %log: newly added log
      ::
      [%log =event-log:rpc:ethereum]
      ::  %disavow: forget logs
      ::
      ::    this is sent when a reorg happens that invalidates
      ::    previously-sent logs
      ::
      [%disavow =id:block]
  ==
--