Better Known Neurons

Objective

Help neuron owners make informed decisions regarding which known neurons to delegate their voting power to.

More concretely, there are 2 main areas to improve:

  1. The known neuron information can be outdated as it’s difficult to update and impossible to remove.

  2. There is not enough information about the known neurons based on which the neuron owners can decide who to delegate their voting power to.

Background

In the NNS, neurons can vote directly on proposals or delegate their voting power to other neurons, which is also called following other neurons.

In the NNS, “known neurons” can be registered in governance through NNS proposals. While those known neurons don’t hold special power, they are featured in the NNS Dapp page where users can delegate their voting power. Therefore, they are more likely to be followed by other neurons and hence more likely to wield more voting power because of their followers. The known neuron feature is an important way to achieve voting power decentralization without every neuron owner having to be an expert in every proposal topic, as the voting power can be delegated to different experts on certain topics.

More details on known neurons and how they are registered can be found here.

Overview

We will first discuss 4 proposed changes to be implemented in the short-term, and then 2 changes that we consider as follow-up.

Proposed Changes

New Proposal Type: Deregister Known Neuron

To help users best make good vote delegation choices, the list of known neurons should be curated and include neurons that actually vote. If a known neuron decides not to participate in voting anymore, or the community believes a certain known neuron is no longer providing valuable input, there should be a way for the known neuron to be deregistered. One known neuron already declared itself to be inactive through a proposal.

Therefore, we propose to add a new proposal type that removes it from the registered list on governance given a known neuron’s id.

type DeregisterKnownNeuron = record {
  id : opt NeuronId;
}

Note that anyone can submit such a proposal, not just the known neuron itself.

Links in Known Neuron Data

To make it easier for the known neurons to engage with their followers, as well as letting potential followers learn more about them, we propose to add a list of URLs to the known neuron:

type KnownNeuronData = record {
  name : text;
  description : opt text;
  # Can be links to social URLs (OpenChat, X, etc.), or a homepage.
  links : opt vec text;
};

Voting Participation and History

To help a (potential) follower to decide whether to delegate or keep delegating their voting power to a known neuron, we propose to record a known neuron’s voting history and expose a voting participation rate as well as voting history. More specifically:

  • In the KnownNeuronData, we add a `committed_topics` field (which then can be added through proposals) as a list of topics

  • Record voting history of all known neurons

  • When listing known neurons, additional information can be exposed:

    • Voting participation rate of committed topics (up to the last 100 proposals per topic)

    • Votes on the last 200 proposals (limit is subject to change during implementation) of committed topics

Stop Including Known Neuron Data through list_neurons

The list_neurons API can return a large number of neurons. There is pagination (500) to ensure that its results don’t exceed the message limit. However, as we add more information into known neuron data, the current page limit will no longer keep the message size within the limit. Given that we already have the list_known_neurons API, there is not much added value by exposing known neuron data through list_neurons. Therefore we propose to no longer include the known neuron data when listing neurons.

Future Improvements

Update Known Neuron

Currently, the RegisterKnownNeuron proposal type can already update an existing known neuron (the proposal execution adds a known neuron if it does not exist, and updates if it does), so there is not that much value to provide a new UpdateKnownNeuron proposal type, other than having a better name for the proposal type. If we do introduce this proposal type, the existing RegisterKnownNeuron proposal type should no longer be able to update an existing known neuron.

Full Voting History API

Given that we only expose the votes on the last 200 proposals in list_known_neurons (mostly to guarantee the results always stay within the message size limit), it might be helpful to expose the full voting history of a given known neuron by a new API get_known_neuron_voting_history.

Next Steps

Feedbacks are welcome from all community members, and especially people who own or operate known neurons. If there are no major concerns, we plan to start the implementation and include it in the normal governance release process.

3 Likes

Known neurons should have to apply to be known neurons for specific topics (or all of them). And should be listed in choices for followees for that topic in the nns ui.

They should automatically lose known neuron status if they fail to vote on a certain threshold of proposals for those topics. Im thinking 90%, Over a significant sample.

Followers should receive a warning in the nns neuron ui if a neuron they are following abstains from voting on a proposal.

This is a solid step in the right direction for decentralizing the IC. Thank you for devoting time and resources to it.

This part of your proposal makes no sense, it seems like a way to easily censor a known neuron, and could easily be weaponized by bad actors.

The ideal situation is that every known neuron acts like a responsible citizen, we do not just cancel citizens, we let them vote, and others can vote with them in the current NNS system, which still fits well with the spirit of decentralized democratic governance.

That said, it is fine if a known neuron does not want to participate in governance, that is also what happens in many democracies where sometimes citizens do not vote.

The rest I agree fully, these are useful and good features that will strengthen good governance and transparency in the IC and the NNS voting system.

3 Likes

In every democracy senators, representatives, and members of parliament many times do not vote, that is their right.

What you are suggesting is mandatory voting which goes against the freedom which is the foundation of decentralized governance, and yes democracy.

2 Likes

They are free to not vote and they can do what they want privately.

If they are listed on the nns ui for people to choose to follow them, there is an expectation from followers that they vote. If they are not voting their followers should be warned. If they constantly decide not to vote, than why are they listed there?

How about sorting the list by level of activity, so those that vote the most are on top of the list.
Those under a low threshold say, under 20% could be hidden by the UI and you would need to click to see them.

4 Likes

Interesting opinion. I just wanted to clarify a few things so that we are on the same page regarding the “censorship” means here:

  • Known neurons can only be added by passing an NNS proposal. So if a “bad actor” can push through a proposal to deregister a known neuron, then most likely they can prevent a known neuron to be registered in the first place.
  • Note that all neurons can be followed, not just known neurons (there is a plan to restrict it to “public neurons”, but still, any neuron can choose to be public). Nothing prevents a neuron from advertising itself and ask people to follow it.
1 Like

So some logical analysis here:

  • p = a Known neuron that has already passed via an NNS proposal
  • q = Is a bad actor, and also a neuron that votes via NNS proposals

The case I see is the following:

p is true, meaning a known neuron already exists, it has passed via an NNS proposal.

q exists, meaning a bad actor that aims to censor p is a real threat.

Could q the bad actor censor p by removing it from the Known Public neurons the way things are setup today? The answer is no, it can only vote against them, which it can always do.

Your proposal makes p a Known Neuron weaker, since it makes it easy to pass a proposal to remove the Name Neuron from the system. Few will ever bother to look up for the long id of a non named neuron to do a vote, or follow votes in the NNS.

They could raise a known neuron proposal that changes the name of an existing known neuron e.g. to something like ‘DO NOT FOLLOW’, ‘BAD ACTOR’, ‘NOT DECENTRALISED’.

I think I understand your concern. But it’s already the case that anyone can raise proposals to do all sorts of things, good and bad. These proposals only execute if the NNS allows it, and the rejection fee is there to discourage proposals that the NNS is unlikely to adopt.

Thanks @jasonzhu, these changes sound positive, but I have some concerns and suggestions.


Public Neurons & list_neurons

All known neurons are public, but last time I checked the only means of accessing public information about a neuron is via the 'list_neurons` method. An example of doing this is provided in the D-QUORUM announcement post.

If you’re planning to exclude known neurons from the output of list_neurons, how will the full neuron details remain accessible?

I would suggest storing the proposed supplementary known neuron information separately to the neurons themself to avoid exclusing known neurons from that method.

Fixation on Voting Participation at the Expense of More Important Details

Stats regarding voting participation are useful information, but this is really just focused on who to follow to maximise your rewards. It doesn’t tell you who best to follow to best protect the network, and I argue that it’s not a desirable proxy for this either (due to Goodharts Law).

I’ve personally seen very bad decisions made in the name of maximising voting participation (ones that reduce decentralisation and security in an attempt to keep reward seeking followers happy). I can provide examples if that would be useful.

Participation stats are useful information to display, but not in isolation. Other very important information to display is:

  • Principals with priviledged control over the neuron (controller or hotkeys). In the case of a canister a link to the canister details can be provided (which shows its controllers etc.)
  • Other Neuron(s) with priviledged control over this neuron (via the Manage Neurons topic)
  • Neurons that are currently followed by this neuron on each topic

This is a lot of information, but it’s no doubt important. It’s also already public information for all known neurons (it just needs to be conveniently accessible). There really needs to be a ‘Neuron Details’ page allowing users to drill down into this information. There is more useful information that could be automatically established and displayed on this sort of page in the future, but I think the above is enough to begin with (particularly given that it’s readily available information without needing to collect or calculate it). In the future it would also be useful to display the average % of VP triggered on each topic (over a recent sample).

Allowing links to be supplied is useful, but this will be to unverified material that is not unlikely to contain biased/misleading/marketing information. I would limit custom links to one (which can then also link to any others). The most important link should be to the verified neuron details page (described above).


Please let me know your thoughts about these concerns and suggestions when you get a chance.

1 Like

Well Lorimer, what you wrote is obviously mistakes in the overall design of the NNS.

I think a public neuron should be treated similarly to a citizen who can vote.

If the NNS gets to decide who can be a known neuron, doesn’t that also already deviate from your analogy? Should every neuron who wants to be a known neuron?

In any case, you don’t need a known neuron to participate in governance, or to be followed by others.

Are you able to elaborate on your concern, maybe with a concrete example?

Reposting @enzo’s post from a couple weeks ago which is very similar in nature. We can learn from Morpho UI in NNS dApp

2 Likes

It seems to me that the risk of censoring known neurons by malicious actors through arbitrary removal is rather low. As an ICP community, we will likely only remove neurons that have clearly marked themselves as inactive or are not voting in line with the principles they explicitly stated themselves during registration.

However, if you haven’t publicly expressed a wish to disappear, you’re not breaking any commitments you voluntarily included in your neuron’s description, and there’s no evidence of your permanent departure, then no one in their right mind (while keeping in mind censorship resistance and freedom of choice for participants) would consider removing you or anyone else from the list.

2 Likes