Ethereum Blockchain-based voting Drupal
Some months ago Dries Buytaert tweeted „What could the Blockchain mean for a CMS like Drupal?“ here is another use case.
Drupal is a popular content management system (CMS) powering a lot of hight traffic sites around the world. Drupal is considered to be the big brother of Wordpress is commonly used when a open source CMS with permission management and Editorial workflows are required. It has a very active developer community with more than 10,000 developers attending the official Drupal conferences every year. Many NGOs like Amnesty International, Oxfam or the Red Cross using Drupal to build their websites.1
Some of these NGOs – lets call them trusted organisations – are responsible to their members and looking forward to implement trusted workflows where their members can perform tasks like voting for boards, donations or on found spending. Using Ethereum Blockchain in the semi-decentralized age combined with Drupal I see a great potential implementing such workflows. A trusted organisation can provide for example a list of funding proposals on their website allowing a finite amount of engaged members to vote on the proposals.
At first we need to connect Drupal accounts to Ethereum accounts on the Blockchain. This should be done using JS tools like Metamask or Uport, as we don't want any website visitor require installing the Blockchain and being able to use mobile devices.
Voting can be implemented by creating custom smart contracts in the first place. A broader general approach may use libraries providing smart contracts for standard cases. Ideally the voting system should be parameterized and deployed by Drupal Admins using Javascript based UI, so that no one really need to think about the blockchain and Solidity programming.
It might be still early for such approaches because most tools are still in Beta. But there is also a demand arising and it seems the right time to collect more user stories and start building Drupal modules which enable Blockchain integration.
Implementing a voting system in Drupal 8 would require having a connection of Drupal and Ethereum Accounts in the first place. It will be required to provide a curated user list by Drupal in the first place, because you want to be sure to keep control who will be allowed to vote. Currenty there are many identity systems like UPort developed for Ethereum, but none of them are production ready at the time of writing. On a long term perspective identity systems could provide voting for a more open user base.
Drupal implementaion
A simple “user/blockchain identity” registration for a Drupal voting system could be implemented with a simple smart contract. Lets call it user registry: You log in to Drupal and request your Blockchain account to be verified. Drupal will provide you a Hash you have to add to the user registry by sending a transaction with MetaMask or any other in-browser transaction signer. Drupal will “read the blockchain” in order to check if the user had saved a valid hash. If yes, Drupal will save the account ID and asign a role to the Drupal account – indicating that this user has a validated Blockchain account.
Voting as a field
Currently I would propose to implement Blockchain voting as a custom field-type in Drupal. To implement voting you would add a custom field to your content type and define unchangeable fields to provide a time consistent content the users actually vote on. A hash of this “summary” will be saved to the blockchain to verify that this is exactly what the user voted on.
Ethereum smart contracts are written in Solidity, a language similar to typed javascript. Long term we need to develop a set of smart contracts or implement a library which is configurable and deployable by the Drupal Admin using frontend techniques. The system should define the projects, voting conditions and timeframe in which a vote should happen. For the beginning it might be easier to start with voting systems individually implemented on the use case basis.
There are flaws within the proposed process. Like a non-accessible Drupal website or Members which have difficulties installing Browser extensions for voting. I would consider such an approach only for trusted orgaisations which aim to replace existing expensive mail-based systems and are able to provide support to their members or alternatives for less technical members.
Summing up
In the ideal decentralized world some Ethereum enthusiasts are dreaming of of even Drupal being replaced by decentralized systems. But considering current scaling issues this kind of system would go beyond a 10 year horizon.
Drupal is Opensource software. Any open sourced system system implemented beside the voting scenario is repeatable. Connecting to the Ethereum blockchain as a single trusted data source is what I would consider the semi-decentralized way.
Feedback is welcome at groups.drupal.org/ethereum
List of Non Profit / NGO Sites Built Using Drupal
https://www.drupal.org/resource-guides/drupal-for-nonprofits