Hello and greetings!
This post is a proposal for a feature for the SNS governance canister.
If a SNS wants to pay it’s stakeholders with profits generated in the SNS, currently it is possible to do that by making the maturity rewards low enough that the user cannot disburse the maturity, while keeping the maturity a small enough amount so that it’s possible to view the voting participation. This option has a couple of drawbacks. First, it is not possible to give neuron holders regular (inflation based) voting rewards while using this method, and second, the maturity might eventually grow big enough for a user to disburse it even with the small amounts and then it will be impossible to calculate voting participation.
The CYCLES-TRANSFER-STATION gives standard (inflation based) voting rewards in addition to payouts of the profits generated within the CTS market, so a new method of reading the voting participation of SNS neurons is needed.
This proposal makes it possible to give standard (inflation based) voting rewards where users can disburse maturity at any time, and at the same time the SNS can view the voting participation of each neuron and share profits in proportion to the voting participation.
The implementation of this feature stores the neuron’s reward (neuron_reward_e8s) of the latest 5 reward events on each neuron. Each neuron will have a new field reward_events_to_neuron_reward_e8s which is a protobuf: map<uint64, uint64>, rust: BTreeMap<u64, u64> where the map keys are the reward_event_end_timestamp_seconds of that reward-event, and the map values are the neuron_reward_e8s for that neuron for that reward-event.
Here is the draft PR implementation of this feature:
Here is the plan:
- Gather feedback and crystalize the implementation specifics.
- Write tests.
- Reviewers final review.
- Publish the feature in the SNS governance canister.
Tagging DFINITY team members @lara, @msumme, @DanielThurau, @bjoernek, @bjoern.
Looking forward for your feedback, grinding this out, and working as a community!
:Levi.