 (def NetworkedNodeSchema
   {:self NodeCoreSchema
    :upstream NodeNeighborsSchema
-   :downstream NodeNeighborsSchema})
+   :downstream NodeNeighborsSchema
+   :messages-seen {MessageEnvelopeIdSchema s/Int}})
 
 (def MessageTypeSchema
   (s/enum :forwarded-subscription))

  Return a vector matching the CommUpdateSchema."
  [logging-config
   {:keys [downstream] :as node} :- NetworkedNodeSchema
   subscriber-contact-address :- NodeContactAddressSchema]
  (timbre/log* logging-config :trace
               :handle-forwarded-subscription
               :node node

   :post [(string? %)]}
  (:id node))

(s/defn networked-node->node-contact-address :- NodeContactAddressSchema
  [node :- NetworkedNodeSchema]
  (-> node
      :self
      node->node-contact-address))

(s/defn node-contact-address->node :- NetworkedNodeSchema
  "Take a node-contact-address, return a networked-node structure."
  [node-contact-address :- NodeContactAddressSchema]
  {:self {:id node-contact-address}
   :upstream #{}
   :downstream #{}
   :messages-seen {}})

(s/defn init-new-subscriber :- NetworkedNodeSchema
  "Take a 'subscriber-address for a new subscriber, and the
