For a Decentralized Autonomous Organization, the public voting record fills essentially the same central role as the token transaction archive does for a cryptocurrency token. It is the artifact that imbues the whole system with trust, via its verifiability.
The more important and valuable the token, the more important it is that its entire transaction history can be verified. The Bitcoin block wars were fought over this principle, and the “small blockers” won, maintaining that BTC would be constrained in how valuable it could become if the full transaction chain could not be independently verified with reasonable means.
Correspondingly, for a DAO to maintain its credibility and value its entire vote record must be independently verifiable.
Currently, the SNS voting record is destroyed when rewards are distributed. While it can be argued that the votes have been tallied correctly using publicly verifiable code, and thus the overall integrity of the voting chain can be verified, the voting history can no longer be indexed for double-checking the integrity of the votes for a given user.
In all, the voting record of an SNS is today not really independently verifiable with reasonable means, and that is a serious problem in that it constrains how credible and valuable an SNS can become.
It is not a lot of data we’re talking about. The full voting history for a proposal, until it is wiped, is available via a call to get_proposal, which can only return responses smaller than 4MB, so presumably we’re mostly talking about sizes under 4MB required per proposal to save the full voting history.
Note that by saving all the votes for each proposal, also saving the votes for each neuron becomes redundant, since this information can relatively easily be indexed from the voting history in the proposals.
I believe this issue is of general concern, but for the Sneed DAO it is of central importance, because to enable non-inflationary voting rewards (we don’t mint rewards) we need to see the voting history to be able to distribute rewards from the DAO’s earned revenue.
Not having full voting history retained is turning into a blocking issue for the DAO, preventing us from implementing a rewards distribution system with the robustness expected from blockchain applications.
It can be noted that when planning and implementing our solution, work that was ongoing for over a year and had reached the beta stage, the Sneed DAO votes were in fact kept in the proposals. Calling get_proposal on Sneed proposals up to prop #126 will return full ballot histories. We were not even aware that this was a peculiarity, and that other SNSes did not see their full voting history. We thought our assumption that a public DAO on the blockchain would retain its full voting history would be rock solid.
We have since puzzled together that the following must have happened. The votes are cleared when rewards are minted and distributed for a proposal. Sneed, unlike most SNSes, has no (minted) rewards, so up until proposal #126, this code was not invoked for Sneed DAO, and we got to keep our vote history in the proposals.
But after proposal #126, someone must have noticed this “glitch” and fixed it - breaking the premise for Sneed’s rewards distribution system in doing so.
We propose that one of the following options to solve this be considered:
- Restoring the pre-proposal #126 behaviour, where votes are not cleared for SNSes with no rewards. This would solve the situation for Sneed, but not benefit other SNSes, so better would be:
- Allow SNSes to opt in for saving the ballots in the proposals. Yes this may cost a bit more cycles, but the SNS could opt in to bear that cost if they deem a full voting history worth it for the positive impact on their credibility.
- Just go ahead and store all the ballots for all the proposals. It is, frankly, what could be expected from a blockchain DAO, and at a few MB per proposal, it seems at odds with the ICP value proposition if these data sizes could not be comfortably handled.
But just in case my math is bad and size requirements for storing all the ballots for the proposals are problematic, the same approach as for the SNS token ledger could be used: ballots could be exported (as rewards are distributed, when they are currently wiped) to an archive canister (with the capacity to grow to a set of archive canisters) and then another indexer canister could tally up votes per neuron.
This would scale and allow for the kind of rigor that should be associated with a blockchain DAO, but it would presumably take a while to implement (even with Caffeine helping), and Sneed DAO needs to address this issue quickly. We thus hope that even if a more robust solution with archive and index canisters is deemed the appropriate long term solution, that one of the solutions 1,2 or 3 could be considered in the interim.
Sneed DAO remains dedicated to building the best fully community operated DAO we possibly can, and any help with rectifying this situation would mean the world to our members, who have been patiently awaiting their non-inflationary rewards for over a year.
In support of option #1 it could be noted that for SNSes with rewards, the voting record can in principle be derived from the rewards themselves, so wiping the votes there is more ok. However, when wiping the votes for an SNS with no rewards, doing so in fact destroys information irrevocably, and it could be argued that “fixing this” after proposal #126 actually introduced an information destroying bug.
Thank you for your kind and patient consideration.