Over the past several months, our technology team has worked with a group of experienced cryptographers to create a set of open-source tools which we believe to be of great benefit to the wider industry. Dubbed the 'Bitfinex Ballot, these tools can, amongst other capabilities, mathematically demonstrate solvency and custody for a certain cryptocurrency, as well as provide a way for individuals and groups to delegate votes using their balances (holdings) on Bitfinex.
This voting system allows our users to vote on ballots in an anonymous and verifiable manner, using reports generated by account activity and balances. More specifically, the Bitfinex Ballot tool lets users cast EOS Block Producer votes directly on the Bitfinex platform whilst providing you with the tools necessary to tally votes to ensure integrity in how votes have been cast by Bitfinex.
The tool is entirely open-source and can be made use of by other exchanges wishing to demonstrate transparency. The original idea for the voting tool can be found here. Once optimised we can work to extend the system to other currencies as well.
Vote start: The first snapshot of EOS users net balances was taken at 9PM UTC on June 17, 2018.
Snapshots: Snapshots will be taken every week, once a week, starting from the first snapshot time as outlined above.
Recasting votes: You can use the Bitfinex Ballot tool to recast your Block Producer votes in case of mistakes. Given a weekly snapshot, you will be able to vote once a week. Please note that we will rebalance votes every 3 days.
Also Bitfinex reserve the right to rebalance/recast votes up to 2 days after a new snapshot is taken, depending on the availability of signers, team and normal platform maintenance.
Margin: Margin and settled balances will be able to vote for EOS Block Producers. Bitfinex will keep 20% of all tokens in the cold storage not staked, allowing withdrawals to always process smoothly.
EOS exchange wallet balances, EOS margin wallet balances, EOS funding wallet balances and EOS in a EOSXXX margin trading long position will qualify you to vote. All EOS votes are corrected pro rata for the amount of unstaked reserves, held to be able to process withdrawals. All EOS votes are corrected pro rata for the amount of EOS in EOSXXX margin trading short positions.
As an example, assume the total amount of EOS held in reserves on Bitfinex at the time of taking the balance snapshot is 50,000,000 EOS. As 20% of all EOS reserves are not staked, a correction of 0.8 will be applied to all votes. Assuming that at the time of taking the balance snapshot, the combined amount of active EOSXXX margin trading short positions is 5,000,000, a correction of (50,000,000 - 5,000,000) / 50,000,000 = 0.9 will to be applied to all votes.
If a user holds a settled balance of 1,000 EOS and he votes using his full EOS balance for 'blockproducer123' his effective votes would be 0.8 * 0.9 * 1000 EOS = 720 votes for 'blockproducer123'.
Bitfinex is currently the only exchange where margin longs are able to vote. In addition to this Bitfinex will allow you to take advantage of EOS lending features to earn interest whilst still preserving your right to vote.
How to vote
I. Getting started
Visit bloks.io/vote and select the EOS Block Producers of your choice.
Please note that you have to select 15 Block Producers, of which 5 have to be in the range from 22 to 150.
Additionally, all Block Producer names are lowercase and 12 characters long. In the case of bitfinex, one would write bitfinexeos1.
II. Accessing the Bitfinex Ballot tools
1. Log into your Bitfinex account and access Reports. Under Proofs, you will find the 4 files that can be downloaded. You may also follow this link once logged in: www.bitfinex.com/reports/proofs.
Please note that you will need an EOS balance of at least 1,000 USD equivalent to proceed; a balance snapshot is taken every 7 days, every Sunday 9PM UTC.
- From there, download the following files:
- Balances.json: Contains the Merkle Tree of all your account’s balances.
- Keys.pub: The list of public keys associated with your account.
- Keys.sec: The list of secret keys associated with your account.
- Keep this secure and do not share it with anyone.
- Ballot.json (optional): This file contains a list of all registered votes. It is periodically updated and allows you to stay up-to-date with the polling progress.
Note: You should only download these files on a secure device, to which only you have access. Delete all downloaded files as soon as you have completed the voting process.
2. As soon as you have downloaded the files above, go to ballot.bitfinex.com; drag and drop the files to activate the voting app. Once you have successfully uploaded all the files on ballot.bitfinex.com, press Vote to access the voting section. Please note that you only need to upload balances.json, keys.pub and keys.sec to proceed.
3. Input the Block Producer candidates you wish to vote for as a comma separated list (e.g. bitfinexeos1,blockprod111,...) in the Option field.
Please note: You will need to input the lowercase name of the Block Producer you want to vote for. For example: bitfinexeos1 is a valid vote; Bitfinexeos1 is not.
Also remember that you have to select 15 Block Producers, of which 5 have to be in the range from 22 to 150.
Please see the official list of Block Producer candidates here: bloks.io/vote.
After entering the Block Producer name press Sign to proceed.
4. Copy the generated voting payload. Return to www.bitfinex.com/reports/proofs and paste the copied code in the available text field in Step 3. When ready, press Register Vote.
5. Your vote should now be submitted. Please note that the Ballot may take up to 6 minutes to reflect your vote.
Please refer to the video above for a guide to submitting your EOS Block Producer vote. Contact email@example.com should you have any questions or stop by our Telegram where we will be happy to assist you.
Checking real time results
If you have uploaded the ballot.json file you can Tally the ballot to check the current ranking in real time.
1. Make sure that all 4 files have been upload to ballot.bitfinex.com.
2. Navigate to the Vote page; scroll to the bottom of the page and press Tally.
Doing so will provide you with a verifiable breakdown of the current ballot. Please note that votes are cast with a minimum threshold of 500,000 EOS. This is a temporary measure and something which will be adapted moving forward.
The Proof section allows to verify data with public records to ensure full transparency of voting process.
- Root: Retrieve the root node of the Merkle tree. This will contain the total balance of all accounts, which you can cross-check with public records.
- Bucket: Retrieve balance data for all public keys in keys.pub.
- Ownership: Sign a message with each of your secret keys to prove ownership of your public keys.
- Verify Ownership: Verify a message using public keys.
All the tools that we have built for this function are open-source. Everyone can use them and scrutinise them to better understand the underlying concepts.
From a security perspective, the Bitfinex Ballot acts as the most secure way for EOS holders to vote, aside from setting up a standalone EOS node or running a proxy. The keys we offer do not attempt to access your balances and are simply used as a method of vote delegation. We periodically regenerate voting keys so that, in the case of theft, keys will expire and you will regain control.
All the tools we have built for the purpose of the Bitfinex Ballot System are open-source and we appreciate any feedback or suggestions you may have. We are committed to investing in open-source development to prove our commitment to our users, and to deliver the transparency and openness that this movement is built on.