aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm/mod.rs
Commit message (Collapse)AuthorAgeFilesLines
* swarm: no SIGNATUREStv3 days1-1/+0
| | | | | | | | | | | | | | Signatures sent on their own (SIGNATURES, every second, to each peer not sent them yet) flooded every link: a signature made after its change left, or one that came with changes, went to every neighbour, whether or not it got the change along with its signature elsewhere. With every change of a node signed as it leaves (1217) and signatures going where their changes go (1218), none is left for them to carry: the message, its task and its traffic counter go (wire version 46). Signatures waiting for their changes are offered as before when sync messages bring them, and the changes waiting for signatures judged again with the next batch.
* roots: an epoch's root pinned, and named in every handshaketv3 days1-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Review 2, N7, the care it raised: a joining node's empty document took as the first epoch's root whatever dependency-less change came first, from whichever peer it joined through; the first epoch's ID is all zeros, so nothing pinned it. A remake's epoch has its ID, the snapshot change's hash, which the rules hold its root to. * Every node names its epoch's root in HELLO and HELLO_REPLY (the epoch's ID for a remake's, its genesis change for the first; wire version 45). A node whose document starts from another root of the same epoch refuses the handshake, logging it: another history under the swarm's ID, a forged root or a genesis started again. * A joining node with an empty document takes as its root only the one it was given (--genesis-root, new), else the one its peers name, and none while they name different ones (access::screen::RootPin, kept in Screening across documents): one peer hands it another root only if it is all the joiner hears, or never, with --genesis-root. A root refused is listed with the refused, what builds on it with it. * The genesis node logs the root (`The swarm's root`); GET /admin/epochs shows it (`root`). A genesis started again under a remembered swarm ID used to merge with the nodes of it still running; they now refuse it (another root), and the docs say to join them with seeds instead. The epoch's identity stays as it is (generation 0 all zeros): records and epoch metadata name it so, and every comparison of epochs with them.
* swarm: changes taken unjudged, dropped (REFUSALS)tv4 days1-0/+1
| | | | | | | | | A node refusing changes a peer brought tells it which broke a rule; the peer judges them itself, and if its rules refuse them too, drops them with all built on them (its document forked without them, a fresh actor), quarantining its own writes among them. Wire version 42. Auth plan M6 (rejoin on taint).
* signatures: on their own (SIGNATURES)tv4 days1-0/+1
| | | | | | | Signatures no sync message took go on their own within a second, to each peer not sent them yet (wire version bumped). Auth plan M5.
* dashboard: without LINKS; LINKS removedtv4 days1-1/+0
| | | | | | | | | The dashboard reads every member's links from the members themselves; LINKS and LINKS_REPLY, swarm::links and their wire tags go (wire version bumped). Nodes the browser can't reach are drawn from what the reachable ones measure. Auth plan M3.
* flood disseminationtv5 days1-0/+1
|
* HyParView (slim)tv5 days1-0/+1
|
* plumtreetv5 days1-0/+1
|
* dissemination traittv5 days1-0/+1
|
* working links recordedtv6 days1-0/+1
|
* suspend detectedtv6 days1-0/+1
|
* hop delaystv7 days1-0/+1
|
* add writer treestv9 days1-0/+1
|
* measure 2-hop neighbourhoodtv9 days1-0/+1
|
* add peer clock skew warningtv12 days1-0/+1
|
* document: move knowledge about node to swarmtv12 days1-0/+1
|
* move change publisher to own moduletv12 days1-0/+1
|
* add links messagestv12 days1-0/+1
| | | | | | | | | Introduce two new wire messages, LINKS and LINKS_REPLY (swarm::links). A member answers with its links: for each peer, the transport, whether it’s relayed, the RTT, and whether it’s dormant. It answers members only, at most every 5 s. This bumps wire::VERSION to 7. Every build answers, with or without the feature, so every node needs this patch before the map shows anything beyond its own node.
* add state filetv2026-10-251-0/+1
| | | | | This allows storing the swarm ID and additionally discovered seeds, which prevents a formerly genesis node to start a new document.
* add chunked download and use it during rejointv2026-10-241-0/+1
|
* add throughput statstv2026-10-241-0/+1
|
* add swarm statstv2026-10-241-0/+1
|
* assess swarm stabilitytv2026-10-241-0/+1
|
* record RTT from keepalive messagestv2026-10-241-0/+1
|
* pull missing changestv2026-10-241-0/+1
| | | | | | Nodes push changes to their neighbours but don't relay them directly. In a partial mesh, nodes can learn about missing changes via keepalive messages and can pull them from their neighbours.
* add neighbour graphtv2026-10-241-0/+1
|
* add member registrytv2026-10-241-0/+1
|
* probe sync source during catch-uptv2026-10-231-0/+1
| | | | This allows changing sources without the fixed 30 s stall duration.
* pick pair leader by hash instead of key ordertv2026-10-231-0/+1
|
* introduce pre-shared swarm keytv2026-10-221-0/+1
|
* reorganize all the modulestv2026-10-211-0/+6