Files
dat-thang/docs/network-protocol.md
T
divorce b735900f2e 0.0.002
ddat interop with dat js
cable interop with cabal js
ddat's frontend = dat-thang
cable fe = cable-thang
dillo support based on cel's dillo-dat
bootstrap node
xplatform support

Signed-off-by: divo <418@cryspace.space>
2026-10-19 00:17:02 -04:00

2.3 KiB

Network protocol identity

NETWORK_PROTOCOL in the repository root is the single editable protocol token. cesspool_discovery_key uses it as the Cesspool topic namespace. Hypercore V6 has no fixed protocol-name field: userData is optional application data, and the handshake id is protocol-local.

The default file contains cesspool. Production uses the Cesspool discovery and transport path. hypercore is reserved for compatibility experiments against the historical Dat/Dillo implementation; it is not the production network stack and does not refer to Cabal's newer Hypercore stack. The V6 session opens channel 0 with a clear 24-byte nonce, then encrypts subsequent stream bytes with XSalsa20; channel 1 carries the content feed.

Dat-thang keeps one client network key in ~/.dat/dat-thang.network-key. Loading or switching a local or remote archive must not replace that key: the same peer identity announces every archive the client shares. Cable keeps its Cabal-compatible room identity separately. Archive feed keys still determine the archive topic; they are not the client's network identity. The discovery UDP socket tries 3282 first, then 3000, 3002, 3004, 2001, 2003, and 2005, matching Dillo's hyperdiscovery port list. Callers can request a specific port.

The compatibility builds use the packed channel/type header and protobuf payload schema from extra/schema.proto. The cesspool token selects V7 channel numbering; hypercore selects V6 channel numbering. This message codec is independent of the transport and Cesspool's UDP discovery packets.

The Cesspool V7 handshake includes the selected token in userData. The V6 Hypercore handshake omits userData, because the legacy implementation treats it as application-owned data rather than network identity.

Scheme application view

When S7 is enabled, protocol frames can be viewed as a tagged Scheme record with named fields: (dat:wire-message (channel . N) (type . N) (payload . #u8(...))). dat-wire->sexp and dat-sexp->wire call the existing C frame codec. The record is an application representation only; the frame header, payload bytes, channel numbering, encryption, and protocol identity continue to come from the selected C network implementation. Scheme code is installed under share/datgpt/scheme as part of the default install.