EOS Canada has taken the lead in writing the code that drives the referendum system that is being proposed for the EOS mainnet. As such, we wanted to put out a post to highlight how we got here and what has been done.

Block.one had proposed to create an on-chain forum so that messages could be posted to the chain, allowing for verification of a user’s opinion on a matter. We recognized that if we used this messaging system to post approval or disapproval of a referendum question, we would have the underlying structure of a referendum system.

EOS Canada took Block.one’s sample contract and started refactoring it to meet the community’s needs as discovered through long back-and-forth discussions with other teams who were involved. Alexandre Bourget began iterating on the contract, before handing over the bulk of the work to one of our C++ developers, Matthieu Vachon. Matt coded up all of the logic that drives the contract, and has run many test cases to catch any edge cases.

EOS Canada’s security lead, Francois Proulx, then ran through an extensive audit of the code to ensure a successful launch.

EOS Canada first deployed the contract to the account `eosforumdapp`, to run it through some further testing, and to gather some community feedback. It’s interesting to note that a user in the community was able to use the contract to create an on-chain Reddit substitute, called Novusphere.io.

Currently, the contract has been deployed to another account that we’ve created, `eosforumrcpp`, which stands for EOS Forum Release Candidate Pre-Production. Novusphere has migrated to the new contract, and you can take a look at the interface that they have built atop it.

We will be setting the permission structure for this account to be a shared multisig, set up amongst the other Block Producers who have been working alongside us. We’d like to also highlight the work that these other teams have put in:

EOS Nation has been heading up the project management, as well as leading the work on creating a vote tally mechanism.

Greymass has been very active in the design discussions regarding how to build the contract, and its underlying logic.

GenerEOS has been working on integration into two UIs - eosvotes.io and eostoolkit.io .

EOS Tribe has been designing the UI of eosvotes.io , as well as helping with a lot of the documentation surrounding using the system.

To read an outline of how the contract works, you can read our previous blog post, or visit the GitHub repository to review the code itself.

The remaining step is to finalize the tally mechanism. The desire is to deploy the contract to a multisig-controlled account once it has been accepted by the community. We have been delighted to help drive this project, which we believe is fundamental to the EOS mainnet’s ability to progress.