Network topology
how the dendritic network is actually put together
There is no single machine holding this site up. Readers reach it through volunteer gateways, content is stored in pieces across a distributed hash table, and every byte a gateway hands you carries a signature you can check yourself. This page explains each part — and if you want to run one, it builds the configuration and hands you the program.
The parts, and how they connect
Click a role to select it. You can pick more than one — a single machine happily runs storage and validation together. What each one asks of your computer is spelled out below, including the awkward part: several of them need an open port.
Selected roles are highlighted. Nothing is downloaded until you choose. Install command ↓
Storage node
Store encrypted shards for other people. Reaches the network over I2P, so no router changes are needed.
Gateway
Serve syndichan to readers under your own hostname. Requires inbound TCP 443 — usually a port-forwarding rule on your router, and not possible behind carrier-grade NAT.
⚠ Needs an inbound port (443)Verification probe
Independently check that other gateways are reachable. Requires an inbound port so candidates can be answered.
⚠ Needs an inbound port (443)Validator
Re-fetch published content and confirm it matches what syndichan signed. Outbound only.
Tipping mailbox
Hold tip messages for creators who do not run a node, so they can be tipped while offline and collect later. You hold no keys and no money — the mailbox only forwards. Requires an inbound port so tippers can reach you.
⚠ Needs an inbound port — a payment port, not 443Delegated signer
Creators may authorise you, on chain, to co-sign incoming tips for them while they are offline. You hold a signing key for that one purpose only: the contract refuses to let you withdraw, close a channel, or be paid, and the creator can revoke you at any moment. More responsibility than a mailbox — choose it deliberately.
⚠ Needs an inbound port — a payment port, not 443Status monitor
Check that the site and the network answer from where you are, and publish the result to the public status page at /status. Outbound only — no router changes, and no disk.
Carrying other people’s tips
Readers can tip a creator directly, wallet to wallet, over a payment channel — no transaction fee per tip and nothing passing through this site. The catch is that a channel payment needs the creator to approve it at the moment it happens, which used to mean every creator had to run a node. Almost nobody will.
Two of the roles above fix that by lending creators the one thing they were missing: a machine that is awake. Neither ever holds anyone’s money. Payouts are written into the contract and go to the creator’s own address; a volunteer is not a party to the channel and cannot be made into one.
Tipping mailbox
You hold incoming tip messages for creators who are offline, and hand them over when the creator’s browser comes back. You hold no keys, approve nothing, and cannot change a message you are carrying — the software has nowhere to put a key even if it wanted one.
The tip finishes when the creator returns. This is the safe default and needs no trust from anyone.
Delegated signer
A creator can go further and authorise you on the blockchain to approve their incoming tips, so a tip completes even while they sleep. The contract limits that authority to exactly one thing: agreeing the new balance. You cannot withdraw funds, cannot close a channel, and cannot be paid.
The creator can revoke you at any moment and it takes effect immediately. This asks real trust of you as an operator — a compromised machine could take part in agreements about tips not yet collected — so it is opt-in on both sides and never turned on by accident.
The creator’s key never leaves their machine, so the accepting step can only happen there — not in a web page, and not here.
Where you accept them. Reviewing and accepting tips happens in your own node’s console, not on this site. That is not a stylistic choice: accepting a tip means signing with your channel key, that key lives in your node so tips can arrive while you are asleep, and a web page that could accept on your behalf would be a web page holding your key. This site links you to your own console and otherwise stays out of it.
What a volunteer can see. A tip message names the two people it is between, so a mailbox learns who is tipping whom and roughly how often. That is a real limitation and we are not going to dress it up: running a mailbox is not anonymous relaying, and hiding that relationship needs a further layer that does not exist yet.
About that open port. A gateway and a probe both have to be reachable from the internet, which on a home connection usually means adding a port-forwarding rule on your router. If your provider uses carrier-grade NAT — common on mobile and some fibre plans — inbound connections are not possible at all and neither role will work, however good your connection is. Storage and validation have no such requirement: they reach the network over I2P and make only outbound connections.
What happens when you ask for a page
Five steps, of which only one involves trusting anybody. The gateway is carrying bytes it cannot alter without the reader noticing, which is what makes it safe to let a stranger do it.
The gateway never holds the signing key. That is the whole design.
What happens when the origin is down
Step 3 fails. Gateways already hold a signed, read-only snapshot of the site, so the answer is not an error page — it is the site, clearly labelled as a copy, with everything that writes turned off.
The snapshot carries its own signature and its own version, so an outage cannot be used as cover for serving something older or altered.
How a gateway is judged
A gateway that misbehaves has to be removed, and the power to remove one is the power to remove a competitor. So no single observer has it. A finding counts only when several independent ones agree — and independence is checked, not assumed, because signatures are cheap to manufacture and distinct operators are not.
The counts are the network's live thresholds. They are deliberately hard to meet.
Being honest about where this stands. Those thresholds are real and enforced, which means that today — with few independent operators — almost nothing reaches quorum. That is the correct behaviour and not a finished one: a rule that never fires is doing its job only until there are enough participants for it to matter. Running a probe is how that changes.
Why a stranger's machine can serve you safely
A gateway is transport, not authority. It never holds the network's signing key. Every page it serves carries a signature over the exact bytes, and your browser checks it without asking anyone's permission — so a gateway that alters a single byte is caught by the reader it tried to deceive, not by a moderator afterwards.
Signed content
Ed25519 over path + version + SHA-256 of the body. The version is signed too, so serving you an older page is refused rather than merely noticed.
Content addressing
In the DHT a thing's name is its hash. A storage node that returns the wrong bytes is detected by whoever asked, so it never has to be trusted.
Corroboration, not authority
One report about a gateway is one observer's opinion. Findings count only when independent operators agree — signatures are cheap, independence is not.
Emergency copies
Gateways hold a signed read-only snapshot. If the origin goes down the site stays readable, clearly labelled, with posting disabled rather than silently swallowing what you typed.
Lending your spare CPU — without lending your machine In development
Most volunteers have no usable GPU and four to sixteen idle cores, so compute here is CPU-first rather than GPU-first. That is not a consolation prize: two processors running the same code over the same input produce byte-identical output, so correctness can be checked by comparing hashes. Graphics cards do not offer that — different scheduling changes the order of additions, and the answers are all correct without being equal.
The hard problem is not speed. It is that running a stranger's program on your desktop is exactly the thing you should never do. The design assumes every submitted program is hostile and removes what malice needs, rather than trying to detect it:
Dashed = built and tested, not yet running on volunteer machines.
Nothing to block
A keylogger needs a keyboard stream; screen capture needs a framebuffer. A headless VM has neither, so there is no attack to detect — there is nothing for one to attach to.
No network at all
Not filtered — absent. No interface, no route, no DNS. Inputs are fetched before it boots and results collected after it stops, so there is no botnet to join and no allowlist to leak through.
It stops when told
There is no polite shutdown to ignore. The deadline passes and the machine is destroyed, along with anything it started. A job cannot hold your core by declining to exit.
Wrong answers are caught
The same unit runs on several unrelated machines and the results are compared. Replicas are spread across different operators and networks, so agreement is not just several copies of one bug.
How work turns into payment Design
Paying for each of these things on-chain does not work: a transaction fee dwarfs the value of serving one page. So work produces signed receipts instead, and receipts settle in bulk. The receipt part runs today — every rewarded action already carries provider and witness signatures. What follows is the design for settling them continuously rather than in epoch-sized batches.
Why an off-chain payment is still safe
The worry with paying outside a blockchain is obvious: if the payment is not recorded publicly, what stops the other side denying it? The answer is that a payment channel does not ask you to trust anyone. It gives you something you can take to the chain alone, at any time, whether or not the other side cooperates.
This is the design Bitcoin's Lightning Network proved at scale. Dendritic Network is not Lightning — Lightning is Bitcoin, and this settles on Ethereum — but the safety mechanism is the same one, and it is worth understanding because it is what your money actually rests on.
You can always leave
Every update is signed by both sides. If the other party disappears, you submit the newest one you hold and the contract pays it out after a waiting period. Their cooperation is convenient, never required — which is the whole reason this is not trust.
Cheating is punished, not merely detected
Submitting an old state — one where you had more — opens a window in which anyone can post a newer signed state and take the cheat's stake. Fraud is not just refused; it is the losing move.
You are not required to be online
The catch in that window is needing to notice. A watchtower watches for you and submits the newer state if someone tries it, and it is built so it can only ever pay you — it can never move your funds anywhere else.
Nobody holds your money in between
Funds sit in the contract, not with an operator. Between opening and closing, what changes hands is signatures — not custody. There is no moment where the site is holding your balance and could freeze or lose it.
And the parts that are not magic
Your funds are only as safe as your keys
The signed states are what protect you. Lose them and lose the device with no backup, and you can still recover what the chain last recorded — but not what you were owed off-chain since. Endpoint compromise defeats all of this.
Opening and closing are public
What happens inside a channel is private; that a channel exists is not. Deposits, withdrawals and timing are on a public chain, and no amount of off-chain privacy changes that.
Money in a channel is committed
Funds locked in a channel are not spendable elsewhere until it closes, and closing costs a transaction fee. Channels suit repeated small payments; for one large payment they are usually not worth opening.
None of this is live yet
This section describes a design, not a running system. When it ships it will say so here, and the page will state plainly which protections are in force and which are still on paper.
One channel with the network, not one per creator
The obvious way to do this is the wrong way: if every viewer had to open a payment channel with every streamer, storage node and gateway they ever touched, nobody would get past the first tip. Each channel costs a transaction to open and locks funds that then sit idle.
So a reader opens one channel — with the network — and tops it up like a prepaid card. Payments to everyone else are routed through it.
A router, not a wallet — see below for why that distinction is the whole design.
It forwards; it does not hold
Each hop is locked to a secret that only completes the whole path at once. The network either delivers your payment to the streamer or it never leaves your channel — there is no in-between state where someone else is holding your money. That is what makes this a router rather than a custodian.
You can always leave
Your channel is still yours. If the network stops responding you close it yourself and the chain returns your remaining balance after a waiting period, whether or not anyone cooperates.
The cost is liquidity, not trust
For this to work the network must already hold funded channels with every provider you might pay. That capital is the real price of the convenience, and it is why the hub is run by the treasury rather than by a volunteer.
The honest catch
A router sees what it routes. Paying everyone through one hub tells that hub which reader paid which streamer — on a network built for anonymity that is a real cost, and it is being designed against rather than ignored.
Who watches while you are asleep In development
A payment channel protects you by letting you post a newer signed state than the one a cheat submitted. That protection has a deadline. If someone closes your channel on a stale state at three in the morning and the challenge window expires before you wake up, the stale state becomes final and the difference is theirs.
So a watchtower holds your newest signed states and posts one if it ever sees an older one hit the chain. The important design decision is what it is not allowed to do.
A watchtower can only ever replace a stale state with a newer one you already signed.
It never holds a key that can move your money. Everything it stores is a state you already signed, and the only action it can take is handing one of those to the contract. A compromised watchtower can fail to defend you; it cannot rob you.
The waiting period is a measurement, not a guess
How long should the challenge window be? Too short and an honest person cannot react in time. Too long and everyone's money is slow to withdraw. The number is fixed permanently when the contract is deployed, so it was worked out by measuring every step of getting a newer state onto the chain, rather than by picking a round figure.
Each step has a generous budget, and each budget has to be backed by an actual measurement against real Ethereum before the contract can be deployed. Four are done. One is not, and the reason is worth being precise about: a reorganisation is a rare event, and watching for a long time without seeing one does not prove they are shallow. An absence of events cannot bound the size of one, so that budget stays unproven until a real reorganisation is observed and measured.
If your device dies In development
The signed states are what protect you, so losing them matters. Your latest states are backed up encrypted, split into pieces, and spread across the same distributed storage that holds the site's content — so recovering them does not depend on any one machine still being alive, including ours.
Storage is not trust
The nodes holding your backup hold ciphertext. They cannot read a state, cannot forge one, and cannot use one — a state is only worth anything to the person it pays.
Losing pieces is expected
The backup is split so that any six of nine pieces rebuild it. Nodes going offline is normal operation, not an incident.
What a backup cannot fix
If your signing key is stolen, backups do not help — whoever holds the key is you, as far as the contract is concerned. Backups protect against loss, not against compromise.
How we know the blockchain is telling the truth In development
Almost every application that talks to Ethereum asks a company's server what the chain says and believes the answer. That is a strange thing to do with a system whose entire point is not needing to trust anyone — and here it would be worse than strange, because a watchtower shown a fabricated chain would sit quietly while your channel was stolen.
It is worth being blunt about why the obvious defences do not work. Since Ethereum stopped using proof-of-work, fabricating a convincing chain of block headers costs nothing. An attacker who controls the server you ask can invent blocks that link together perfectly, contain any balances they like, and produce proofs that verify correctly against their own invented state. Checking that the blocks fit together proves nothing at all.
The only thing that makes a block real is signatures from Ethereum's validators — so those are what we check.
So the node checks the validator signatures itself. It starts from a reference point obtained from three unrelated organisations who must agree exactly, then follows Ethereum's own signature chain forward from there. The server we read blocks from is never allowed to supply that starting point, because using a provider to vouch for itself is not a check.
It fails closed
If the signatures cannot be verified, the answer is refused. There is no best-effort mode that quietly falls back to believing the server, because that mode would be the one running on the day it mattered.
Agreement is not the security
Asking several providers and taking the majority raises the cost of an attack; it does not prove anything. It is used to obtain a starting point, and it is never described as verification.
Verified against the real chain
This is not a diagram of an intention. It has been run against live Ethereum mainnet: real validator signatures checked, real balances proven underneath a block the node confirmed for itself.
Giving an award without a transaction fee Design
Awards are the visible face of all of this. Sending one on-chain means paying a transaction fee that can exceed the award itself, which is why small tips do not work on most chains. Over a channel an award is a signed message: instant, free, and settled later in bulk with everything else.
One deliberate constraint shapes the design: clicking the award button does not decide that you paid. The click starts a payment; the payment completes only when both sides have signed a new channel state. If anything fails in between, the award does not silently exist. The awards you see and the money that moved are kept as separate machinery precisely so that a bug in one cannot invent the other.
Three outcomes, not two
A payment completes, is refused, or is unknown — the last when a reply is lost. Unknown is treated as its own case rather than guessed at, because guessing wrong either double-pays or loses a payment.
Retrying cannot double-pay
Each award carries an identifier the channel remembers. Sending the same one twice updates nothing the second time, so a flaky connection costs you a retry, not a second award.
Splitting one payment across several routes Not enabled
A larger payment can be cut into pieces that travel different routes and reassemble at the recipient. It helps when no single route has enough capacity, and it means no single intermediary sees the whole amount.
The planning half of this is built — fragments are sized unevenly on purpose, since three identical thirds arriving together reassemble on sight, and the routes chosen must share no operator, because splitting across two paths run by the same party gives that party two views and a partial sum rather than any privacy at all.
It is switched off, and it should be. What is missing is the half that coordinates the pieces once they are in flight: what happens when two of three arrive, how partial refunds reconcile, how a payment resumes if your machine restarts midway. Until that exists, splitting a payment would place real locks on real channels with no coordinated way to settle or unwind them — worse than not splitting. The security properties it must satisfy have been written down first, and the gaps are recorded as gaps rather than quietly designed around.
Pooled tipping — many people, one recipient Design
Splitting, above, takes one person's payment down several routes. Pooled tipping is the opposite direction: many independent people contributing toward one recipient, aggregated so a streamer draws down a single total rather than settling hundreds of separate tips.
Each contribution stays backed by its contributor's signature. The pool adds them up; it never invents them.
The line this design will not cross is the obvious shortcut: a pool must never become a database that records Alice owes 1, Bob owes 5 and then promises to pay the streamer. That is a custodian with extra steps, and it would put every contributor's money behind one operator's honesty and solvency. Every contribution stays backed by cryptographic authorisation from the person who made it, so the pool is adding up things that are already true rather than asserting new ones.
The recipient chooses
Pooling is a per-recipient setting, off by default. Ordinary one-to-one tipping stays exactly as it is and stays the default — a tip is never forced through a pool just because one exists.
It sits above channels, not instead of them
The underlying channels stay two-party. This is an aggregation layer on top of the same signed states, not a redesign into multi-party channels.
A retry is not a second tip
If your connection drops at the wrong moment you will retry — that is the normal case, not an edge case. The same contribution sent twice must leave the pool at plus twenty-five, never plus fifty.
You cannot hand it a total
A contributor asks to tip a recipient an amount. They never submit a balance, an aggregate or a pool state — those are constructed and checked by the node, because a caller who can choose the state can choose a flattering one.
This is a design, not a running feature. It is scheduled after the economic testing phase, and the questions that decide whether it can be built non-custodially — how a contribution is bound to its contributor, recipient, pool and amount at once — are still open questions rather than settled answers. They are written down as questions on purpose: guessing at them is precisely how a pool turns into the trusted database above.
What happens if the domain or the server is taken
An outage is the easy case — gateways serve their snapshot and the site stays readable. The hard cases are a seized domain and a dead server, because both break the thing everything else is looked up through. Neither is hypothetical, and the network is built so that neither ends it.
DNS is not the authority
Where the network lives is a document signed by the operator's wallet. Nodes keep the last one they verified and prefer it over anything a name resolves to — because a name is exactly what gets taken away.
Your node checks it itself
Against a wallet address written into your config when you downloaded it, never fetched. Asking the origin who is allowed to replace the origin would be asking the thing being replaced.
Old instructions cannot be replayed
Every directive carries a number that only moves forward, and your node remembers the highest it has seen — across restarts. A message captured today is worthless tomorrow.
A move waits, on purpose
An ordinary move takes effect after a delay. That gap is the window in which a directive nobody meant to issue can be frozen. A genuine emergency skips it and is announced loudly instead — speed is paid for with visibility.
Backups nobody can read
The site can be rebuilt elsewhere from an encrypted backup held by gateways. Holding one reveals nothing: it is opaque to its custodian, and opening it needs a passphrase no server has. Copies are spread across distinct operators, since five copies with one person is one copy.
The way in is not one address
A joining node finds the network through several gateways discovered in DNS, so one being offline costs nothing. What it is told is signed, and when it cannot verify a signature it requires independent gateways to agree before believing anything.
Two forgers do not outvote one signature — which is why agreement is the second layer and never the first.
What none of this fixes. One wallet signs those directives, so whoever holds it can move the network. The delay, the freeze and the forward-only numbering narrow that window; they do not close it. The real answer is a second independent signer, and that needs a second operator to exist — which is one more reason to run something here.
Build your configuration
Everything below goes into a config.json packaged beside the program.
Nothing here is permanent — every value can be edited afterwards, and the node has a
management page for exactly that.
Set your disk size so the bar means something. Your browser is not allowed to read it, so these two numbers are yours to fill in — nothing is measured or sent.
The payout address is where ANONCoins are sent. Leave it blank and the node still works — it simply earns nothing, which the node's own dashboard will nag you about.
Download
The program is identical for everyone on a platform. Only the configuration differs, which is why the hash below is of the binary — a hash of your personal archive would match nobody else's and could not be checked against anything.
No binaries are published yet. Everything below works — you can pick roles and build a configuration — but the download itself will not be available until an operator uploads the builds. Nothing here is broken; there is simply nothing to hand you.
Guessed from your browser. Guessed, not known — a browser will not tell a site which processor it has, so check this is right before downloading.
Expected SHA-256 of the binary
Nothing selected yet.
After it is running
It earns ANONCoins
Storage, bandwidth and verification are paid from the same treasury everything else on the site draws from. Rewards are claimed, not pushed — when an epoch settles, your share becomes provable against a Merkle root and you send one transaction to collect it. Claim rewards → · How the economy works →
It has its own dashboard
Served on 127.0.0.1:9090 — local only, so nothing about
your node is exposed by running it. Capacity, peers and earnings live
there, and every setting in config.json can be changed
afterwards.
Stopping is not a betrayal
Shards are erasure-coded across many nodes, so leaving costs the network redundancy it will rebuild, not data. Run it for as long as it suits you.
It needs I2P
Storage and validation reach the network over I2P. The node speaks to
a local router on 127.0.0.1:7656; if you do not have one,
the node's dashboard will say so rather than failing quietly.
Run it — one line
This fetches the installer, picks the right binary for the machine you run it on,
writes a config.json for the roles you selected on the diagram, and
starts the node. It changes as you change your selection. It is an ordinary shell
script and you are welcome to read it first —
open it in a
browser before piping it into a shell.
Paste this into a terminal
curl -fsSL https://dendritic.network/install.sh | sh
Nothing selected yet — this installs the node with the installer's defaults. Pick roles on the diagram at the top and this line updates to match.
Node reputation
How the network rates the machines that keep it running. Scores are derived from evidence anyone can fetch — the receipts nodes signed and the epochs that settled them — so this page can be recomputed by anybody who doubts it.
No nodes registered yet.
A node appears here once it is on-chain, and earns a rating by proving its work and by auditing other nodes. How to run one →
| Proof accepted | +1.0 | proved it holds what it claims |
| Challenge verified | +5.0 | audited another node and confirmed the result |
| Proof failed | -0.3 | could not prove what it advertised |
| Fraud | -20.0 | a fabricated or duplicated receipt |
| Caught cheating | -100.0 | attestations from witnesses nobody drew |
Every node starts at 50 — neither trusted nor suspect. Gains are slow and penalties are not, because a reputation that is cheap to rebuild is not worth protecting. Being unreachable is never counted as dishonesty: an offline node earns nothing, which is punishment enough for downtime.
Dendritic ANONCoins
How the economy works
ANONCoins are the network's fuel. You earn them by running real infrastructure that others independently verify, and you spend them on the platform's services. Everything flows in a closed loop that no single party owns — here's the whole picture, simply.
Wondering why a blockchain is involved at all, and how the verification actually works? Start here →
A closed loop, not a faucet
ANONCoins aren't printed for each action. They circulate: people who provide infrastructure earn ANONCoins; people who use the platform buy and spend them; the Treasury sits in the middle, funding rewards and recycling fees. The same ANONCoins go around and around.
earn → sell → buy → spend → fund rewards → earn …
Three independent layers
The economy is deliberately split into three parts that don't depend on each other's internals — so each can be audited and evolved on its own. Humans set the rules; the protocol runs them.
who sets the rules · where ANONCoins come from · who earns them
Earning: proof, not promises
You never earn by claiming "I'm online." Work is assigned, an unpredictable challenge is issued, you produce the correct result, and independently-chosen witnesses confirm it — only then does it count. Each epoch has a fixed reward budget, split across the services the network needs, so faking work only shrinks the faker's slice.
Hold shards
Prove you still hold assigned, erasure-coded data and serve it back.
Bridge traffic
Accept external requests and route them into the network, reachably.
Route lookups
Answer routing challenges quickly and honestly across the network.
Run workloads
Execute assigned containers; results are replicated + spot-checked.
Supply, managed like a central bank
New ANONCoins aren't minted per reward — they come from the Treasury, which has four tools and must keep a reserve. If reserves run low, emissions taper automatically, even when demand is high, so the currency can't over-inflate.
mint within the cap · burn fees · sell to users · buy back when demand is weak
Rewards follow need
Where the network is short on capacity, that service's reward multiplier rises — like mining difficulty, but for infrastructure. When enough joins, it falls.
Expand only when useful
A Network Health Index (storage, gateways, compute, coverage, success rate, reserves) decides the overall budget, so supply grows only when more infrastructure is genuinely needed.
Spending & who decides
Priced in dollars
Subscriptions and services are priced in USD; the exact ANONCoins are computed at the moment you pay, so you never speculate just to keep a membership. Fees are split: some burned, some to the Treasury, some to providers.
Contribution, not wealth
Voting weight comes mostly from verified contribution and reputation, only a little from holdings — so buying ANONCoins can't buy control. Constitutional limits (max inflation, minimum reserve) are enforced in code, not votes.