domschiener / publicvotes Goto Github PK
View Code? Open in Web Editor NEWPublicly verifiable and Ethereum-based voting system
License: MIT License
Publicly verifiable and Ethereum-based voting system
License: MIT License
Make it possible for Slack users to easily start a new poll in a similar fashion to https://www.getsubcurrent.com
In the current system design, the client has to initiate the poll. The way it works is basically that the server is there to watch if a specific Ethereum address associated with a poll has a minimum balance, if the account matches that criteria (because the creator of the poll sent some Ether to the address), a new button will appear on the poll page requesting the user to make the poll live. This button basically initiates the poll contract on the Ethereum network.
My question is: Should we change it so that the server automatically initiates the transaction for the poll contract once a minimum balance criteria has been met, or should we keep the system as is, where the client initiates the contract? The only reason to go for the system where the server initiates the poll is to reduce the steps required for setting up the poll and automating the system. This way the poll creator will not have to worry about anything once he/she sent the Ether to the specified address.
What do you think?
Add a button on the poll page that makes it possible for the user to track the Ethereum addresses balance client-side. What this means is that the user does not have to wait for a full 3-minute cycle of the server to check the Ethereum addresses balance, but instead can do it herself after having made the transaction. This makes it faster to get a pull go live.
Create an API, so that website owners can easily post polls on their website and users can participate in the voting process by simply clicking on their desired choice without being required to go to the OpenVotes website.
In order to create a more decentralized system, I think it would be good to integrate OpenVotes with IPFS to store, or at least backup, poll information. It should be noted that only public polls should be stored unencrypted on IPFS, for private polls we can encrypt them.
In order to reduce costs of setting up polls, we need to setup a faucet. Every time a poll is ended, the leftovers from the Ethereum Account should be sent to a faucet account which is then used to reduce costs globally on all polls. i.e. a balanced accounting system. Additionally, if for example an account ran out of funds (because the poll was for example really popular with lots of votes), the faucet account can jump in and ensure that the poll can continue to run.
Detailed description about the system coming soon.
When voting on a poll, the vote is validated immediately when the transaction is sent, but at this time the vote transaction is not executed.
The vote should only count when the transaction is executed
In the current system, the server is checking every 3 minutes if Ethereum addresses associated with specific polls have a certain amount of Ether or not. This is a setInterval function in Meteor.
Is there a more efficient way to set this up?
Currently the system renders a template (e.g. vote
), even though the user should be automatically redirected to voted
, since the user has already cast a vote. Need to improve the system so it reflects this logic. Right now it feels a bit clunky.
Currently the system handles votes through an IP-based system, meaning 1 IP == 1 Vote. If you have already voted on a poll you will be automatically redirected to /voted and won't be able to vote again.
The issue I have with this current implementation is that it doesn't solve the sybil attack problem, since the barrier to cheat the system is still too low for an attacker. Proxies, VPN's, etc. make it super easy to change ones IP, and thus being able to vote again and influence the out come of a poll.
I think that the only true solution to this is a decentralized identity system that solves the sybil attack problem by design, but currently there is no such system in existence (or even in development). So what do you guys think, what is a better solution to the current IP-based restriction system?
When creating a poll, the scenario that the transaction to activate the poll is revoked due to chain reorganization is not considered.
When the transaction is executed but then revoked, the record in MongoDB will mark it as active
while it is actually not activated on the blockchain.
If the transactions revoked by chain reorganization, the created poll should also be removed.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.