Agora-Blockchain
Agora-Blockchain
Agora-Blockchain: voting algorithms on a chain
Some voting algorithms already run in a centralized form, built in Scala by AOSSIE. This project is the plan to move the same kind of voting onto a decentralized platform where a ballot cannot be changed.
Where the idea comes from
The repo starts from a concrete point. Voting methods like Moore's, Oklahoma, Borda, and IRV already exist, and AOSSIE has implemented some of them in a centralized way with Scala on the backend. The stated vision is to move those algorithms onto a decentralized platform so that votes cannot be rewritten by admins, hackers, or anyone with access to the database. Blockchain technology makes the ballots immutable, which is the whole argument for the project.
The stack
Solidity handles the smart contracts on Ethereum. Hardhat is the development environment for testing, deploying, and managing those contracts, and ChainLink is there for cross-chain interoperability. EIPs keep the code aligned with the latest Ethereum Improvement Proposals, while OpenZeppelin supplies well-audited contracts that are easy to drop in. On the frontend side it is Next.js, a React framework, with Node.js for server-side work and MetaMask as the browser extension for managing Ethereum accounts.
How elections are created
The ElectionFactory contract sits at the center of election creation and management. It generates new election instances, handles cross-chain voting, and keeps a record of active elections. To create contracts efficiently it uses a clonable election template, and ballots come from a separate BallotGenerator contract. That split between factory, template, and ballot generation is what keeps the flow consistent.
Design choices
A few properties are called out explicitly. Clonable contracts cut deployment costs by cloning a pre-deployed template instead of starting fresh. Owner management means only the election creator can delete or modify an election. And cross-chain voting is whitelisted, running through Chainlink's Cross-Chain Interoperability Protocol. These three features are the design surface of the project, and the architecture is built around them.
Getting involved
Contributions begin with an issue, whether it is a feature request, a bug report, or a security concern, and wait for an assignment. Work always happens on a new branch of a forked repository. Changes should be tested thoroughly with code quality in mind. Small frontend changes under twenty lines, and documentation updates, can go straight in as a pull request without the longer review path.
Editorial conclusion
The pieces line up as a whole: a library of voting algorithms, an ElectionFactory that creates and tracks elections, and smart contracts that make ballots hard to tamper with once they are cast.
Community notes