mirror of
https://github.com/oxen-io/lokinet.git
synced 2024-10-29 11:05:43 +00:00
121 lines
2.5 KiB
Plaintext
121 lines
2.5 KiB
Plaintext
DHT messages
|
|
|
|
these messages can be either wrapped in a LIDM message or sent anonymously over a path
|
|
|
|
The distance function is distance = A ^ B
|
|
|
|
This document is currently out of date (probably)
|
|
|
|
|
|
find introduction message (FIM)
|
|
|
|
variant 1: find an IS by SA
|
|
|
|
{
|
|
A: "F",
|
|
R: 0 or 1 if recurisve request,
|
|
S: "<32 bytes SA>",
|
|
T: transaction_id_uint64,
|
|
V: 0
|
|
}
|
|
|
|
variant 2: recursively find many IS in a tag
|
|
|
|
{
|
|
A: "F",
|
|
E: [list, of, excluded, SA],
|
|
R: 0 or 1 if recurisve request,
|
|
N: "<16 bytes topic tag>",
|
|
T: transaction_id_uint64,
|
|
V: 0
|
|
}
|
|
|
|
exclude adding service addresses in E if present
|
|
|
|
|
|
got introduction message (GIM)
|
|
|
|
sent in reply to FIM and PIM
|
|
|
|
{
|
|
A: "G",
|
|
I: [IS, IS, IS, ...],
|
|
K: "<32 bytes public key of router who is closer, provided ONLY if FIM.R is 0>",
|
|
T: transaction_id_uint64,
|
|
V: 0,
|
|
}
|
|
|
|
The I value MUST NOT contain more than 4 IS.
|
|
The I value contain either 1 or 0 IS for PIM and FIM variant 1.
|
|
|
|
|
|
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",
|
|
E: 0 or 1 if exploritory lookup,
|
|
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",
|
|
K: "<32 bytes public identity key of router closer, provided ONLY if FRCM.I is 1>",
|
|
R: [RC],
|
|
T: transaction_id_uint64,
|
|
V: 0
|
|
}
|
|
|
|
in response to an exploritory FRCM if the target router is not found the form
|
|
|
|
{
|
|
A: "S",
|
|
N: [list, of, router, publickeys, near, target],
|
|
R: [],
|
|
T: transaction_id_uint64,
|
|
V: 0
|
|
}
|