Closed djrtwo closed 4 years ago
Doubt I'll be able to make it to the call, but a few notes on attestation subnets:
My concern here is that ultimately there will be a class of "preferred" beacon nodes that subscribe to all attestation subnets, which would lead towards some sort of supernode/hub and spoke configuration for the network.
Wondering if it makes more sense for beacon nodes to pick a number of subnets to subscribe to on startup, and to have a "not my subnet" channel (to which every node subscribes) they can use to send along attestations for subnets to which they don't subscribe. Having static subnets would give a bit more stability, users could define the number of subnets to which they want subscribe (even down to 0 for constrained systems), and it wouldn't take a large network or subscriptions/node to have a pretty high chance that attestations would hit a node with the relevant subscription within two hops.
This could, of course, have just as many edge cases as the dynamic subscription system currently slated for 0.11, but I think it's worth considering. Also note that it would be possible to retain the current dynamic subscription model and just add the "not my subnet" channel for all nodes to give a similar effect (outside of the much lower turnover of subscriptions and the ability for beacon nodes to define the subnets to which they wish to subscribe).
My current thoughts on the "preferred" beacon nodes, is that a BN that has attached validators, will prioritise peers based on the number of long-lived subscribed subnets. BNs that don't have validators attached, are indifferent to peers with long-lived subnets or not. I was considering adding a CLI param that allows users to randomly subscribe to subnets without validators if they choose.
I don't have metrics yet. But I think the feasibility of having the current v0.11 system work, is the timing to discover peers for a required subnet and ability to subscribe to the topics in time for the validators attestation duty. We have been working on our discovery to speed up and streamline discovery searches for peers on a specific subnet. We also need to be smart about our peer management and timing (prioritise peers with large number of long-lived subnets) and prevent lots of discovery lookups.
To help clarify some discussions I've had with various people, I've made a draft/example PR for adding a PING and ENR method to our RPC: https://github.com/ethereum/eth2.0-specs/pull/1673
If we have the time, I think it might be useful to discuss this.
a BN that has attached validators
Coupling validators to beacon nodes makes advanced architectures more difficult. Round-robin load balancing is the simplest example, but any sort of cluster would be affected here unless they are all connected to each other and online, which somewhat defeats the purpose.
prioritise peers with large number of long-lived subnets
That'll be the supernode thing I was worrying about. If everyone does this, we'll either end up with hub-and-spoke or everyone running all the subnets to obtain more peers. What about the user running the RPi at home that only has enough resources to run a single subnet?
Can we add to the agenda a review of the network requirements? A few of us drafted something during ethcc: https://github.com/ethereum/eth2.0-pm/issues/131#issuecomment-594632185
If we have time, I'd like to discuss the assumptions developers that are working on light clients, tooling, and other non beacon node implementations need to take into account when joining the eth2 network. A few questions i have are:
Note: I realize that most of these questions are related to each other. I just wanted to list them for the sake of clarity and to provide more context to the discussion.
Also note that it would be possible to retain the current dynamic subscription model and just add the "not my subnet" channel for all nodes to give a similar effect
Do I understand correctly that "not my subnet" topic's mesh will include all the nodes that lacks subscription to at least one subnet topic? There is a set of peers in the gossipsub protocol called fanout that should be used for this kind of purpose. Otherwise, if such a topic exists it could open a DoS vector as peers are able to send any attestation directly to this topic that will likely include most peers in the network.
Do I understand correctly that "not my subnet" topic's mesh will include all the nodes that lacks subscription to at least one subnet topic?
The "not my subnet" would be a general channel to which all nodes would subscribe. Fanout only works for a single hop, so if the neither I nor the peers to which I am connected are connected to the subnet the message will be lost.
When a node receives an attestation on the "not my subnet" channel it would:
If we don't have this then minimally-connected nodes aren't going to be able to get attestations out to the network without there being supernodes (i.e. nodes connected to all subnets, so guaranteed to pick up attestations on fanout).
As for the DoS vector: yes, this does open up a potential issue. Would need to consider what additional load this could put on a node, more in the freeloading case than the DoS case.
The "not my subnet" would be a general channel to which all nodes would subscribe. Fanout only works for a single hop, so if the neither I nor the peers to which I am connected are connected to the subnet the message will be lost.
I see your point. And looks like I messed up the fanout purpose. Apparently, fanout is used by message publisher to send a message to the topic it isn't subscribed to. It's not meant to be used as a relay mechanism.
My notes here: https://hackmd.io/@benjaminion/rkEn7C_88
Please lmk or edit directly if any typos/inaccuracies!
Call 3
Meeting Date/Time:
Meeting Date/Time: Wednesday 2020/3/25 at 13:00 GMT
Meeting Duration:
1.25 hours
Notes
Notes taken by @benjaminion
Agenda