If only voting was as simple as this dApp...
Truffle, Drizzle & React dApp for conducting basic elections on the Ethereum blockchain.
You can interact with the smart contract using a local network (see instructions below) or on the Rinkeby testnet (see deploying section).
You will need the following properly installed on your computer:
Install yarn (or use NPM if you prefer):
brew install yarn
Install Truffle:
yarn global add truffle
Ensure you have truffle 5. Running truffle version
should output look something like:
Truffle v5.0.1 (core: 5.0.1)
Solidity v0.5.0 (solc-js)
Node v10.13.0
Install Ganache-CLI:
yarn global add ganache-cli
Clone & navigate into the repository:
git clone [email protected]:sbrichards/simple-democracy.git && cd simple-democracy
Download dependencies:
yarn
Fire up your local development blockchain:
ganache-cli
In addition to spinning up a test network (listening on 127.0.0.1:8545 by default), Ganache also creates 10 addresses, each with a balance of 100 ETH.
Leave this terminal window open and copy the Mnemonic output. You'll need to paste this seed phrase into MetaMask in order to import and control these accounts.
Compile & deploy the application contracts to the test network:
truffle migrate
Download dependencies:
yarn
Fire up the React application:
yarn start
The application shoud now be accessible at http://localhost:3000/.
Leave this terminal window open.
Paste the Mnemonic from Ganache into MetaMask using the "import with seed phrase" option. From the MetaMask network dropdown, select the private network (Localhost 8545). You should now have control of the generated addresses to sign transactions.
This dApp has three user types:
A "user" in the dApp is an Ethereum account address. Users can interact with this dApp through MetaMask.
Only admins can:
All voters can:
Unregistered users can:
Note: the account that deploys the contract (the first account in your local test network) will be automatically registered as an admin.
Elections structs are state machines stored in contract storage - they maintain a status (either "Pending", "Active" or "Closed") representing their lifecycle stage.
truffle test
If you'd like to interact with the contract on a testnet, see deployed_addresses.txt.
If you'd like to deploy the contract to a testnet, the truffle-config.js is set up to deploy to Rinkeby. You'll have place your mnemonic seed phrase into a file named .secret
in this project root:
echo 'your seed phrase in a string like this' >> .secret
Ensure your account address has adequate funds to deploy the contract, e.g. by using the Rinkeby Faucet.
Then run:
truffle migrate --network rinkeby
In general, if you encounter an issue (e.g. when submitting an input), refreshing the browser should solve the problem.
If you're able to describe the steps that produced your issue and copy any errors from the console, please email me at sbrichards(at)gmail(dot)com and I'll look into it!