Ravencoin — Voting for HODLer Representative (w/RVN) - Tron Black
Note: The website for this is not built yet.
The HODLer representative will be voted on by the RVN HODLers. Every RVN you hold at the designated blockheight can be voted.
If you own lots of RVN, you get lots of votes. If you own one RVN, you get a vote. Pretty simple.
Before you get concerned that someone could just buy a bunch of RVN (driving up the price) and dominate the whole project, remember that the HOLDer representative, while influential, is only one seventh of the board making critical decisions.
How to vote
Eventually we may have a more elegant system of voting, but for now, go into Ravencoin Core, and choose File->’Sign Message’, then take the name of a nominee (in all caps), and paste it into the text field, select an address that has RVN, and hit the [Sign Message] button. Enter all three (address, nominee, signature) into the voting website (see spec below), where it will check the Ravencoin address for double-voting, and check the signature matches the address, and will record all your votes based on how much RVN was in the address at the blockheight determined by the foundation. (Repeat for each address which holds RVN).
If you don’t want to use the graphical interface in QT, then use the command-line raven-cli or RPC call:
signmessage “address” “message”
Where message is the ALL CAPS name of the person you’re voting for.
Why at a certain blockheight? Because we don’t want someone voting 1,000,000 RVN votes, and then sending those RVN to another address and voting again with the same RVN. This isn’t a US election, we have strict standards.
Technical Specs for off-chain HOLDer voting
The website that tracks voting for HOLDers, should have these features…
An admin feature to allow the addition of candidates. Anyone, who wishes, can be a candidate. They need to be willing to publish their real information. This is necessary for accountability, and because of the transparency of the Ravencoin Foundation governance board. They will publish their real name, bio, the reason they wish to be a candidate, a photo, and contact information. In most cases, they will have been a supportive community member for some time. The admin will add any candidate that qualifies. Their name for voting will be ALL CAPS and placed prominently with their record, like ROBERT SMITH.
A view of all eligible candidates should be available. All references to candidate names should be linked to a page about the candidate.
Once a voting block height has been selected, by the temporary board, or the ongoing board, then that will be used to pre-load a database with all RVN ownership for every known address that holds Ravencoin at that block. This can be done by stopping the sync at a given block, and querying for balances, or by running the transfers from Ravencoin genesis to the specified blockheight. The reason for using a specific block height is to prevent double-voting caused by voting, sending to new address, and voting again. At any given blockheight, the qty per address is fixed.
Because the goal of the voting is to determine the best HOLDer representative, and not to delegate the choice to custodians, the addresses that hold RVN on behalf of many people like Binance, Bittrex, etc. should be excluded from voting. http://rvn.CryptoScope.io groups Ravencoin addresses and has identified these large custodians, so they can be excluded. If you wish your vote to be counted, withdraw your RVN prior to the voting blockheight, vote, and then you can send it back to the exchange.
Qty of RVN
NAME (NULL until vote)
Signature (NULL until vote)
The website that accepts the votes, will take three inputs
NAME of candidate (in all caps — as displayed in candidate list) — It can be a drop-down.
Signature — Signed by private key matching the Ravencoin address (output of signmessage)
The website should validate the signature. There is an RPC call which does this. verifymessage “address” “signature” “message” It will return true or false. It takes the same three inputs as the voting website. If the signature validation returns true, the name and signature should be updated in the database in the same row as the guaranteed unique Ravencoin address, which can be used as a primary key into the table.
Display Vote Totals
Real-time vote totals can be shown simply by summing up the RVN qty totals for non-NULL name field, and grouping by name.
The database should be downloadable as a CSV file. Address, Qty, NAME, Signature
Anyone can validate the signatures using a script, or spot check them using the QT wallet, or the RPC call already built into Ravencoin. The RPC call is:
verifymessage “address” “signature” “message”
Anyone can sum up the votes for a given candidate by putting the CSV into Excel, or Google Sheets.
Anyone can verify the Ravencoin address held that QTY of RVN at the blockheight of the vote by using an explorer API and accounting for transfers after the specified blockheight.
Any discrepancies can easily and automatically be detected with this audit.
To vote anonymously, it is suggested to use a VPN to obscure your real location, and IP address. This is simply good operational security (OPSEC).
There is no danger in signing a string of letters with your private key. The string of letters in this case is the name of the candidate you’d prefer. The signed string will not reveal your private key, and if you use a VPN when submitting to the voting website, the vote submission will not reveal your location or IP address. As always, make sure you’re using the correct Ravencoin software as occasionally there have been unscrupulous individuals trying to get folks to download a fake Ravencoin core which could be a wallet stealer.
The voting site can be written in any language. As long as the qty can be summed, uniqueness enforced on the Ravencoin address field, and data can be exported to CSV, any database technology can be used. It is expected that the voting website code would be open sourced for auditing purposes, even though validation does not rely on the voting website code because counting can be done independently, each vote can be validated as matching the qty independently, and each signature can be validated independently.
I’m putting this specification out there so that if someone wants to build this site, they have the information to do so. The only part of this project that is associated with crypto is verifying the signatures, and that is only a call to Ravencoin Core’s RPC call. To avoid duplication of effort, please let me know if you or someone you know is taking on this task.