    :upstream #{}
    :downstream #{}
    :messages-seen {}})
+
+(s/defn node->removed :- NetworkedNodeSchema
+  [node :- NetworkedNodeSchema]
+  (-> (get-in node [:self :id])
+      node-contact-address->node
+      (assoc :removed? true)))
 
 (s/defn init-new-subscriber :- NetworkedNodeSchema
   "Take a 'subscriber-address for a new subscriber, and the

  If this envelope has been seen too many times by 'destination-node
  (as configured by :message-dup-drop-after in 'config), then ignore
  the message."
  [{:keys [logging message-dup-drop-after] :as config}
   destination-node :- NetworkedNodeSchema
   [message-type message-body envelope-id]]
  {:post [(vector? %) (-> % first map?) (-> % second vector?)]}

  {:self NodeCoreSchema
   :upstream NodeNeighborsSchema
   :downstream NodeNeighborsSchema
   :messages-seen {MessageEnvelopeIdSchema s/Int}
   (s/optional-key :removed?) s/Bool})

(def MessageTypesSchema
  (s/enum :forwarded-subscription
