Neuron analysis of SNS-1

TL;DR

With this post, I provide some insights on the composition of the neuron stake and voting power of SNS-1 over time. I also share the underlying commands so that members of the community can retrieve the underlying data to facilitate further analysis.

The analysis shows that a significant reduction in neuron’s stake and voting power occurred over the last few days. In particular, since genesis the voting power has been reduced by 50% because many neurons started dissolving and their dissolve delay dropped below the minimum of 1 month for voting.

Based on this data, we see the following initial lessons learned

  • For future SNS launches, it might be advisable to set the dissolve delay of neurons, which are meant to participate in voting, well above the minimum dissolve delay for voting. We plan to include this advice in SNS documentation and training material.
  • To allow neuron holders to regain voting power if they wish, the functionality to increase the dissolve delay of their neurons was added to the NNS UI today (December 7).
  • Anyone can pull via dfx the underlying neuron data using the commands in section 4. However, we are looking to provide some more visual tools to help monitor SNS activity and status.

Categories of principals in SNS-1

The principals of SNS-1 can be assigned to four disjunct categories

  • Only sale: Principals who only participated in the decentralization sale
  • Only airdrop: Principals who only participated in the airdrop
  • Airdrop and sale: Principals who participated in the airdrop and the sale.
  • Developer neurons and Ludo.

Adding up the number of principals in the category “only airdrop” and “airdrop and sale” reconciles with the total number of airdrop principles of 3860. Within the category “dev & ludo” we have only 13 principals and thus we will omit them in the following charts.

Development of neuron stake over time

At genesis, in total 7001 SNS-1 tokens were allocated to participants: 3860 tokens to airdrop participants and 3141 tokens to sale participants. As of Monday December 5, 5.8k tokens were still staked in neurons. The reduction of 1.2k was caused by a disbursal of neurons with zero dissolve delay within the category “only sale”.

More than two thirds of all neurons within SNS-1 are currently dissolving. Assuming that all currently dissolving neurons would disburse their stake (and no further staking or dissolving occurs), the total neuron stake would drop to 1.95k after 2 months.

Development of voting power over time

At genesis, the total voting power of airdrop and sale participants was 5.7k. This is lower than the total stake of 7k at genesis, given that half of the neurons within the category “only sale” had zero dissolve delay and thus did not have any voting power.

Until Monday December 5, the voting power dropped significantly to 2.8k. This is because at genesis, neurons had a dissolve delay equal or slightly above one month, which is the minimum dissolve delay for voting for SNS-1. Thus, starting the dissolve process makes neurons ineligible for voting very quickly.

Assuming that all currently dissolving neurons would disburse their stake (and no further staking or dissolving occurs), the total voting power would drop to 1.95k after 2 months.

Commands to extract SNS neuron data

Data like the neuron id, principal, status, dissolving status and dissolve delay of SNS-1 neurons can be extracted via the function list_neurons of the SNS-1 governance canister
Zqfso-syaaa-aaaaq-aaafq-cai.

The list_neuron method can be called on the dashboard or via dfx. The according dfx command is

dfx canister --network ic call zqfso-syaaa-aaaaq-aaafq-cai --candid interface.did list_neurons '(record { of_principal=null; limit=10: nat32; start_page_at= opt record { id =neuronID } } )'

where

  • The candid interface file interface.did can be retrieved from the SNS dashboard or from the IC github.
  • “limit” and “neuronID” can be used to consecutively iterate through all neuron records. I used a python script to iterate through all neuron ids and aggregate all neuron data in a result file.

The state of the swap canister which contains information on which neurons and principals participated in the decentralization sale can be retrieved via the following command

dfx canister --network ic call zcdfx-6iaaa-aaaaq-aaagq-cai --candid swap.did get_state '(record {})'

The tool idl2json can be used to convert the output to a .json-file.

13 Likes