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>
This commit is contained in:
divorce committed 2026-10-19 00:17:02 -04:00
1 parent f0f91540be
commit b735900f2e
323 files changed
+134347 -343

No files matched your search

+41
View File
@@ -0,0 +1,41 @@
# 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.