DHT messages these messages can be either wrapped in a LIDM message or sent anonymously over a path This document is currently out of date (probably) find introduction message (FIM) variant 1: recursively find an IS by SA { A: "F", I: 0 or 1 if iterative request, S: "<32 bytes SA>", T: transaction_id_uint64, V: 0 } variant 2: recursively find many IS in a tag { A: "F", I: 0 or 1 if iterative request, N: "<16 bytes topic tag>", T: transaction_id_uint64, V: 0 } got introduction message (GIM) { A: "G", I: [IS], T: transaction_id_uint64, V: 0, } publish introduction message (PIM) publish one IS to the DHT. version 0 uses the SA of the IS as the keyspace location. in the future the location will be determined by the dht kdf which uses a shared random source to obfuscate keyspace location. R is currently set to 0 by the sender. { A: "I", I: IS, R: r_counter, S: optional member 0 for immediate store otherwise non zero, T: transaction_id_uint64, V: 0 } if R is greater than 0, do a random walk, otherwise if we are closer to the SA of the IS than anyone else we know in the DHT store the IS for later lookup. As of protocol version 0, R is always 0. If S is provided store the IS for later lookup unconditionally, decrement S by 1 and forward to dht peer who is next closest to the SA of the IS. If S is greater than 3, don't store and discard this message. find router contact message (FRCM) find a router by long term RC.k public key { A: "R", I: 0 or 1 if iterative lookup K: "<32 byte public key of router>", T: transaction_id_uint64, V: 0 } TODO: document me got router contact message (GRCM) R is a list containing a single RC if found or is an empty list if not found sent in reply to FRCM only { A: "S", R: [RC], T: transaction_id_uint64, V: 0 } * send a GRCM with R to requesters in all linked transactions * terminate transaction with id T