::  watcher: ethereum event log collector
::
|%
++  name  @tas
::
++  config
  $:  node=purl:eyre
      from-block=@ud
      to-block=(unit @ud)
      contracts=(list address:ethereum)
      topics=(list $@(@ux (list @ux)))
  ==
::
++  action
  $%  [%watch =name =config]
      ::TODO  support modifying existing config for future polling
      [%clear =name]
  ==
::
++  update
  $%  ::  %snap: all known-good logs, sent on-subscribe and on-reorg
      ::TODO  there's probably a way to be more nuanced about what we forgot
      ::      to cope with a reorg
      ::
      [%snap =snapshot]
      ::  %vent: newly added logs
      ::
      [%logs =loglist]
  ==
::
++  snapshot
  $:  last-heard-block=@ud
      heard=(set event-id:ethereum)
      logs=loglist
  ==
::
++  loglist
  (list event-log:rpc:ethereum)  ::  newest first
--