aboutsummaryrefslogtreecommitdiffstats
path: root/src/swarm/bootstrap.rs
Commit message (Collapse)AuthorAgeFilesLines
* roots: only the seeds' roots end the wait for themtv45 hours1-0/+1
| | | | | | | | | | | | | | Review 4, R2 partly (F8): a joining node waited for "each of its seeds" to name the swarm's root as a count, of every admitted peer that named one. Node identities are self-made and admission is the swarm key: a member answering a joiner under as many identities as it has seeds, naming its own root within the wait, made the joiner pin it before the real seeds answered, and refuse them after as another history. Now the seeds are the nodes proven at the seeds' addresses (`roots::seed_found`, as `bootstrap::resolve_seeds` finds them), and only their roots count toward the wait and start its clock. Another peer naming a root still disputes it (no root while they differ), so such a member can keep a joiner from joining, as any member can, but not hand it another root. access.md says so.
* roots: a joiner takes a root once its seeds named ittv3 days1-1/+19
| | | | | | | | | | | | | | | | Review 3, R2: the root pin was set by the first HELLO_REPLY, and the first sync, a round trip later, took that root; a peer naming another afterwards was refused as another history. So the seed that answered first decided, not "none while they disagree", and a malicious seed makes itself fastest. A node joining with an empty document of the first epoch now takes no root (RootPin::Awaiting, roots left for later) until each of its seeds named one, or ROOT_WAIT (10 s) passed since the first did; then the one they name, none while they differ, as before. With --genesis-root it takes that one alone, at once. access.md, the option's help and example.toml say so; switching roots later, while the joiner holds nothing of its own, is postponed.
* roots: an epoch's root pinned, and named in every handshaketv3 days1-3/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* access: --bootstrap-keystv4 days1-5/+6
| | | | | | | The first users' SSH keys, recorded at genesis with their entries, so a swarm can be strict from its start. Auth plan M7.
* signatures: kept in the document filetv4 days1-4/+13
| | | | | | | A node's signatures are saved with its document (--document-file) and loaded with it. Auth plan M5.
* access: the users endpointstv4 days1-3/+3
| | | | | | | | /admin/users: list, add (one or several), remove, disable, grant and revoke capabilities; each one change, refused if it would lock its writer out. Capabilities as the store's paths name them. Auth plan M1.
* access: first users at genesistv4 days1-1/+23
| | | | | | | | --bootstrap-users gives a new swarm a registry from its first change, each first user with everything; other users may do nothing until added. Without it the swarm has no registry and works as before. Auth plan M1.
* HyParView (slim)tv5 days1-1/+10
|
* swarm neighbourstv5 days1-2/+10
|
* bootstrap: replace pull by progress notifytv10 days1-2/+14
|
* use Automerge as Document instead of AutoCommittv11 days1-3/+2
| | | | This allows a lot of operations to drop mut.
* move all automerge references to documenttv11 days1-4/+2
|
* rename AutoMerge to Documenttv11 days1-6/+6
|
* move keepalive and firewall to pathstv2026-10-281-0/+1
|
* use libp2p mDNStv2026-10-271-0/+11
|
* move protocol paths to dedicated moduletv2026-10-261-2/+3
|
* add simulation testtv2026-10-251-1/+4
|
* allow to persist documenttv2026-10-251-22/+145
|
* add files module to consistently track statstv2026-10-251-6/+6
|
* warn about unresolvable seeds once; log successtv2026-10-251-7/+22
|
* add disk I/O statstv2026-10-251-4/+18
|
* add possibility to start with a documenttv2026-10-251-4/+61
| | | | The --recover-from option allows a node start with a given document.
* add state filetv2026-10-251-2/+18
| | | | | This allows storing the swarm ID and additionally discovered seeds, which prevents a formerly genesis node to start a new document.
* put swarm ID into the documenttv2026-10-251-3/+19
|
* add genesis flag and never give uptv2026-10-251-65/+87
| | | | | | | | | The --genesis flag has been introduced to start with a new document. This prevents restarts to accidentally start with a new document and accept reads/writes, causing a second swarm to appear. Additionally, bootstrapping doesn't timeout anymore as that's of no use for nobody.
* drop pre-membership sync messagestv2026-10-231-4/+2
| | | | | The handshake resets the session anyway, and the sender's reply timeout resends what still matters.
* merge membership and authenticate into standingtv2026-10-231-5/+2
|
* consistently use the words node, peer, and seedtv2026-10-231-3/+3
|
* rename cluster to swarm everywhere!tv2026-10-211-14/+14
|
* rename compaction to remaketv2026-10-211-1/+1
|
* reorganize all the modulestv2026-10-211-0/+104