Roadblocks We've Hit Building VPgeek.app - The Ultimate IC Voting Power Dashboard

Hello IC Community,

I am here to talk about making it easier to see how decisions are made on the Internet Computer. We’ve built a tool called VPgeek.app to address this matter. VPgeek is a clear window into the IC voting power and process! With VPgeek you can track every vote, know each voter and their voting history as well as delegate your votes without doubts. However, we have hit a few roadblocks along the way.

Here’s what’s standing in our way:

  1. Missing List of Neurons: Right now, we don’t have a complete list of all the Neurons, making it tough to see the full picture of how decisions are being made. We know the folks at DFINITY are working on this (more details in the Forum thread and Proposal 48491). However, we are able to show which % of the total Voting Power those “untrackable” Neurons have and how it changes over time.

  2. Short Voting Histories: Each Neuron only remembers its last 100 votes, meaning we lose a lot of valuable info over time. We can’t see long-term trends or how Neurons have acted in the past. To address this we are now storing voting history in VPgeek database starting from Summer '23.

  3. Old Proposals are Locked Away: We can’t access past proposals, so it’s hard to learn from our history. If we don’t know what decisions were made before, it’s harder to make better ones in the future. To address this we are now storing all proposals info in VPgeek database starting from Autumn '23.

  4. No Voting Timestamps: We can’t see when votes were cast. This makes it difficult to understand how voting patterns unfold. However, we came up with a solution, when we check all trackable Neurons from time to time and save their approximate voting time (with up to few minutes discrepancy).

  5. Unknown Follower Details: We don’t know which Neurons are following others or the influence they have. It’s like trying to understand a story without knowing the characters. Since we are storing approximate voting timestamps on VPgeek, there is now a way to indirectly see the which Neuron caused a spike in Voting Power on a Voting History chart (while this data may sometimes reveal coincidences, long-term research may unveil meaningful patterns).

Some of these issues are already being looked at, but others might be new to you. This is where your voice and expertise come in!

We need your thoughts and feedback. Have you noticed other issues? Do you have ideas on how we can fix these problems? By sharing our experiences and solutions, we can work towards making the Internet Computer’s governance stronger and more transparent.

Let’s work together to build something we all believe in. Looking forward to our discussion!

Best,
GeekFactory Team

21 Likes

This is some amazing work, especially on the “untrackable” neuron ICP & voting power pieces. This is undoubtedly early team and investor ICP & neurons, correct?

4 Likes

Fantastic work. Congrats.

3 Likes

We completed an analysis of voting participation back in Nov 2011 that was published on Medium and discussed on the forum. That article contains a link in Reference 3 to the google sheet that we used to analyze the data that we extracted using PowerBI from the api that was available at the time from a website created by Norton Wang (@wang) called ic.rocks. That website no longer exists, but github has an ic-rocks public archive. Norton made a lot of attempts to discover all the unknown neurons from genesis including brute force guess and query, but he also kept track of every neuron ID query that was manually searched on the website by the community. At the time we pulled the data for our analysis, there were almost 17,000 neuron ID’s known to ic.rocks. This list enabled us to calculate total voting power than was within 5% of the total voting power reported by the NNS at the time. All of those neuron IDs are listed in the spreadsheet that is linked in reference 3. That spreadsheet still exists. You are welcome to pull the data and merge the neuron IDs with your list.

From proposal 42010 to proposal 86639, I kept track of every vote for every voting member of the synapse.vote known neuron for the Governance topic. Since you are publishing voting history of public neurons and the synapse team (past and present) are the neurons that are populating your public neuron list, I would be happy to share this voting history. Unfortunately, you would have to trust my documentation because this voting history is not tracked by the governance canister past 100 proposals as you indicated. This data was collected manually in a spreadsheet and I cannot guarantee that I didn’t make a few mistakes, but in all cases my records do match the voting history of the synapse known neuron, which is stored indefinitely. It’s fine if you don’t want to use it, but I offer it because I’m proud of how consistently the synapse team has always showed up to vote with their own convictions to support decentralization of ICP. You’d be surprised at how frequently we had split decisions in our voting patterns even though the outcome is all or nothing.

I can’t speak for other known neurons, but I can speak for Synapse and CodeGov.

The neuron configuration for Synapse for every proposal topic is displayed on this web page: Synapse.vote - Neuron Configuration. We are committed to voting manually on all Governance and SNS proposals, but we currently delegate our vote to Followees we trust for all other proposal topics.

The neuron configuration for CodeGov for every proposal topic is displayed on this web page: codegov.org - Neuron. We are committed to voting manually on all Replica Version Management proposals, but I currently delegate the vote to Followees that I trust on all other proposal topics.

This might be a selfish request, but I would love to see you develop a page for Synapse and CodeGov that shows the tally and voting history of our current voting members for the proposal topics where we specialize. I am still tracking our votes manually to make sure we don’t miss a proposal, so having a dashboard with this information would be greatly appreciated. We have always wanted to offer transparency in how we vote to the community, so there is no issue in making this public if you think it is in scope for what you want to achieve with your website. This is why we publish our neuron IDs, but there hasn’t been an app that easily exposes our voting history. It would be awesome if you want to provide this visibility.

Another request would be to allow verifiable owners of public and registered known neurons to add more descriptive information to their respective page. Of course, you can always get information from the registered known neuron proposal, but I’m sure many known and public neurons would love to be able to provide updates. Links to websites might also be nice.

A feature you could build that you may be able to turn into a revenue stream would be proof of ownership of neurons. For the NNS, the “Join Neuron Fund” check box is public information. Hence, you could automate the verification by asking the owner to follow a procedure of joining/unjoining the neuron fund and you could query the status as they complete each step. Only the controller of the neuron is able to change the status of this check box, which is undeniable proof that they control the neuron. Of course, you would know the stake, the dissolve delay, the age, etc for the neuron, which might be valuable for any project that wants to reward the 8YG. Also, you might find that people are willing to pay a small fee for you to verify that their neuron is maximizing voting rewards. This would be easily done by comparing their last 100 votes with the proposal IDs that have recently settled. This reconciliation should easily lead to identification of proposal types where they are not voting. That could be caused by following neurons that didn’t vote or it could be caused by not configuring Followees correctly. Either way, you could easily identify the discrepancy and alert the neuron owner. It seems like people would be willing to pay for this type of service.

Anyway, keep up the good work and thank you for developing this vpgeek.app.

4 Likes

Hey there, big thanks for the awesome feedback! We’ve already started chatting with the team about it. Just a quick check on the 17k Neurons list – we noticed the last 5 digits are hidden. Any chance we could get the full list?

2 Likes

Oh no. I forgot that large numbers are rounded in google sheets. Let me see if i can find the original Power BI files.

Power BI files have been sent to your support email address as requested.

1 Like

@alexeychirkov @alexander

There are a few inconsistencies in the vpgeek.app data that I would like to point out so you can troubleshoot further. I hope this information helps improve the accuracy of the data.

This analysis started by looking at my own (Wenzel Bartlett) voting history as reported on your website. It indicates that I have 92.45% voting participation rate (49 out of possible 53) for the Governance and SNS proposal topic over the All-Time period, which I know is not correct. My participation rate is 100%.

When I drilled down to see which proposals were missing votes, it was the last 4 in the list. The last three in the list were proposals that I submitted to the NNS myself. Hence, those proposals were important to me personally.

When I looked at the individual proposals such as proposal 122629, I noticed a few additional discrepancies that cannot be true.
Synapse (original) is configured to follow synapse (NEW) for Governance, SNS, and All Topics, which means they always vote at the same time. The time stamp for the Synapse (NEW) vote is probably correct, but the time stamp for synapse (original) cannot be dated 1970. Also, it’s not possible for synapse (NEW) to vote unless a majority of our voting members have voted Yes or No, but all voting members are listed as Not Voted. I know you cannot query the governance canister for the votes of the Public neurons at this time, but something was amiss when the data was originally collected or how it is presented in the UI today. I bring this up because the data is presented as though these neurons did not vote, which cannot be true since synapse (NEW) and synapse (original) did vote at the same time.

Also, you have probably noticed by now that some of our voting members use different neurons for voting on different topics. Specifically, Zane, John Weigley, and Wenzel Bartlett all have more than one neuron in this list. It may be best to differentiate the Public neuron names by both proposal topic and known neuron in some way.


2 Likes

Here are a few other discrepancies, all of which I think can be solved…

The synapse (original) neuron existed back when the Exchange Rate proposals were used to set the ICP/XDR conversion every 10 minutes. That proposal topic was the reason why all neurons received voting rewards every day. When it went away, that’s when daily voting rewards had to sometimes carry over to the next day when there are no proposals that settle…for example, when no proposals are submitted on the weekend. The synapse (original) neuron definitely voted on all exchange rate proposals, yet the website indicates we did not vote on any of them. As a result, the voting participation rate is shown as 8.86% (6156 out of possible 69451) for proposal topic All without Neuron Management over the All-Time period. The majority of this incorrect data is from the Exchange Rate proposal topic. Since there were approximately 144 Exchange Rate proposals per day, the governance canister does not record voting history for known neurons on this proposal topic…at least not for long. I suspect @Dylan could tell us when the Exchange Rate proposals stopped and how much history of that proposal type is/was retained. Anyway, it’s a proposal topic that is no longer used, so it’s not relevant for more recent voting history. In your data set, it is not hurting voting participation statistics for newer neurons, but it is showing lower participation for the older known neurons.

Also, the vpgeek.app website is indicating that the synapse (original) neuron missed votes on 45505, 45504, 45496, 45495, 45487, and 45486. Yet these proposals are not listed on the dashboard. I think this is getting back to the earliest proposals that are still stored in the governance canister or the Public Dashboard API (whichever you are using) and there are inconsistencies between the proposal history list and the voting history for known neurons. If you don’t already know a good explanation for this discrepancy, then I suspect @Dylan could help offer explanations or brainstorm. The vpgeek.app website makes it look as though we didn’t vote, but we did and the data simply cannot be queried. In the images below, both apps are looking at the voting history for synapse (original) for all proposals except Exchange Rate and Neuron Management. It is not accurate to say that we did not vote on the proposals in green because the information simply doesn’t exist from the governance canister.

1 Like

I learned a few new things about the voting history for synapse (original) using your vpgeek.app tools. One feature that you have that is not available on the dashboard is the option to filter based on Not Voted. On the Dashboard, you can only filter based on Yes and No. This means it is not easy to find specific proposals where a neuron did not vote on the dashboard, but it is very easy on vpgeek.app.

I knew that Synapse missed one Governance proposal in the past. Proposal 87633 was a split decision among our voting members and I got distracted by all the NNS treasury discussions and missed out on making sure all our voting member cast their vote. However, I did not know that we also missed 7 other proposals from the Participant Management, System Canister Management, Subnet Management, and Node Admin proposal topics over the last 2 years. We follow DFINITY on each of those topics. They submitted these 7 proposals to the NNS and did not vote on them for some reason. Most were rejected since the Simple Majority (> 3% vote to Adopt) threshold was not achieved. Nonetheless, since DFINITY did not vote on them neither did Synapse. Fortunately, this has only happened 7 times out of 6170 total proposals, which means I now know an accurate voting participation rate for synapse is 99.87% for all topics instead of 99.98% based on missing 1 Governance proposal. LOL.

I had no idea that these votes were missed until seeing it in your data with the tools you made available to the community. This is the kind of information I would definitely like to know. In fact, I suspect it could be another revenue stream for you to offer a service to alert neuron owners when a proposal is about to expire and their neuron has not voted. There are so many useful things you could with this vpgeek app. I’m amazed at this initial release and how many features you have already integrated.

1 Like

You can use the ICP Dashboard to see when Exchange Rate proposals were discontinued. You’ll notice that while they were discontinued around 6 months ago, they’ve been used as a fallback mechanism once since then.

That’s irrelevant though, since Exchange Rate proposals have never been part of the recent_ballots array returned by NNS Governance get_neuron_info. The reason for this is that get_neuron_info retains a maximum of 100 proposals and there used to be 144 Exchange Rate proposals a day, so they would have flooded the array, making it useless.

TL;DR: Don’t use Exchange Rate proposals when calculating the voting participation of a neuron, since it is impossible to know whether a neuron voted on Exchange Rate proposals.

2 Likes

I’m happy to help if there’s a specific question, either here on the forum or in the Slack channel I’m in with the GeekFactory team.

2 Likes

Thanks Dylan. I didn’t ask a very clear question. I’d like to see if you can help explain why proposals 45505, 45504, 45496, 45495, 45487, and 45486 show up as No Vote on vpgeek and don’t exist on the dashboard. I don’t think these are no votes for the synapse (original) neuron. I just thought you could explain the discrepancy.

Okay, I did take a look at this. It seems to just be a boundary case of how VPgeek is interpreting the voting history data it retrieved from the ICP Dashboard API. The first vote of Synapse.vote (original) that the dashboard saved was for proposal 45425, which was a Motion proposal, so Synapse.vote (original) most likely waited to vote on it until near the end of the voting period. While proposals 45505, 45504, 45496, 45495, 45487, and 45486 all have IDs greater than 45425, these were not Motion proposals, so Synapse.vote (original) likely voted on them right away (via following DFINITY/ICA). recent_ballots is in the order that the votes were cast, and at the time the dashboard began saving all votes of known neurons, proposals 45505, 45504, 45496, 45495, 45487, and 45486 had probably already fallen off of the end of the recent_ballots array, which keeps a maximum of 100 proposals.

Therefore, there is no way to tell if Synapse.vote (original) voted on 45505, 45504, 45496, 45495, 45487, and 45486.

2 Likes

I should add that Synapse.vote (original) almost certainly voted on those proposals, I just mean that there’s no way to programmatically verify that with the data that’s available.

1 Like

Thanks for the explanation Dylan. This helps a lot. I hope the vpgeek.app team is able to take into account this kind of edge case. I’m sure it is relevant for all known neurons, not just synapse (original).

2 Likes

I just wanted to reiterate that I appreciate this new app and the collaboration by the community. (also editing away a message that is no longer relevant).

1 Like

Thank you for super valuable feedback! Also thanks @Dylan for your input! Super helpful. We already working on fixing those issues and discussing the feature requests with the team. We’ll keep you updated on the progress!

3 Likes

Fixed! Removed 1970 year timestamp for those who definitely voted, but with unknown approx. timestamp, now it simply shows the correct column (yes/no) but voting time is set to unknown.

Fixed! Exchange rate proposals excluded from participation rate calculation.

Fixed! It was the edge case with the proposals currently marked as Not Voted, but they were actually outside of the last 100 proposals available in the governance canister (When proposals created later are voted on before those created earlier).

2 Likes

:star2: Introducing REALTIME FEED for Neuron activity :star2:

:hourglass_flowing_sand: Notice shifts in dissolve delays
:moneybag: Monitor stake fluctuations
:lock: Track changes in dissolve states

Stay in the loop! :point_right: https://vpgeek.app/feed

2 Likes

@alexander @alexeychirkov @dmitry looks like there are other discrepancies on the vote history of public neurons. Here is proposal 128804. vpgeek.app is showing that @ilbert (Luca Bertelli) didn’t vote and that I voted to reject. Here is the link to the review that Luca completed and posted in the CodeGov community on OpenChat for this proposal where he indicated that he voted to adopt. A Recent-Ballot query for his neuron on the ic-api (Neuron section; GET recent-ballots) also shows a record of voting to adopt. The neuron that Luca uses is not used to vote on all proposals, which means all his vote history on Replica Version Management is less than the 100 proposal history limit.

I use my neuron to vote for everything, so my vote history on ic-api no longer shows my vote for proposal 128804. However, I voted manually on this proposal in OpenChat, which can be seen by the green thumbs up symbol in the NNS Proposals chat group.

Anyway, I just stumbled upon these discrepancies today and have not made any attempt for find others. I’d like to be able to trust your records on vpgeek.app since the dashboard doesn’t have a similar Public Neuron registry with a recorded history. It would be good if you can troubleshoot this further and resolve any discrepancy that you find. Thanks!

2 Likes