Alex Xie
· 1w
Maybe nostr:nprofile1qqszhwkw25l0a06cm42ezgtflykpzgltvysa0wsf9ak9qyz2lsc6emcpz3mhxue69uhhyetvv9ujuerpd46hxtnfduq3vamnwvaz7tmjv4kxz7fwwpexjmtpdshxuet5v4rnwd or nostr:nprofile1qqsthdwa5rs42euhnuz5xsrmms...
The second two of those points are 'easy' to think about, in the sense that it's just about detecting which peers are spammy/unreliable. If their Bloom advertizes they can reach nodes, but they rarely/never get the relevant signed CoordinateLookupResponses, then they are unreliable. It might take a long time to get the right balance of heuristics to make it work, but in principle it's solvable.
> Bloom filter validation — reject suspiciously dense filters
> Per-source LookupRequest rate limiting — cap flood generation
I'm less sure about the first two points though; solutions are not so obvious. I had a lot of fun with faking fake roots and fake ancestries and varying 'depths'.
> Root election with cost — proof-of-work, minimum age, or stake
Maybe the root should be the oldest node; although I'm not sure how to get consensus on that in a simple way.
> Per-entry ancestry signatures — already on their roadmap
Signatures won't stop me from firing up a million nsecs and signing many different ancestries and spamming the network. If I have many entry points into the network, then I can spam with new (fully-signed) ancestry paths very regularly
I don't say I have a solution, but I think we need to either make it difficult/slow to change the root in chaotic ways, *or* have a system which is robust to such chaos.
Ideally, a change of root will change only the direction of arrows on the spanning tree, without changing anything 'fundamental' about the tree. This should allow us to preserve the property that a spanning-tree-edge divides the network into two sets of nodes. Swapping the direction of edges doesn't change those divisions, and therefore I think the bloom filters don't need to be rebuilt immediately on every change of root
We might need to keep tracking of mutiple roots, and therefore multiple coordinates, during the transitions. Don't discard a given root until all your peers are happy with a different new root.
But I'll stop rambling now. I might not be making much sense. In any case, a written document which we could review would be useful to discuss how we might have a reasonably scalable and robust protocol