Giter Site home page Giter Site logo

curve-aragon-voting's Introduction

Curve Voting(Aragon Voting fork)

Voting.sol SPECS

Audit

Description

Curve Voting app is a fork of Aragon Voting App with the following additions:

  • Added minimum balance minBalance a user must have in order to create a vote

  • Added minimum time between one user creating a new vote

  • Removed possibility to change votes

  • Vote's time must end before a vote can be enacted

  • There's a switch to enable/disable creating votes controlled by roles ENABLE_VOTE_CREATION and DISABLE_VOTE_CREATION.

    Once testing votes is done, the DISABLE_VOTE_CREATION role should be set to 0x0000000000000000000000000000000000000000 - noone

Voting app will have CREATE_VOTES_ROLE permissions set to anyone(0xffffffffffffffffffffffffffffffffffffffff) because the balance check will be done inside the Voting app and not through a forwarder

To incentivize people to vote early and not wait and see what's the outcome of the vote and vote near the end of vote, the voting power they had for the snapshot of for that vote is getting smaller proportional to the time left for that vote(with a cutoff period of voteTime / 2 between creation of vote and when decrease starts to happen)

To prevent DAO to set unrealistic limits for minBalance and minTime, minBalance is required to be the equivalent of at least 10000 tokens locked for one year (1e18 precision) (which equals to 2500000000000000000000) and minTime is required to be between half a day and 2 weeks

Those limits are set when initializing the app

How to deploy and initialize the app

Edit arapp.json specifying the app name appName, which you'll then use to install the app

Deploying the app to aragonPM

Install Aragon CLI Preferably, for easier usage, install frame.sh

Run aragon apm publish major --environment mainnet --use-frame

Installing the app in a DAO

dao install $DAO_ADDRESS $APP_ADDRESS --app-init-args $VOTING_ESCROW $ACCEPTANCE_PCT $QUORUM_PCT $VOTE_TIME $MIN_BALANCE $MIN_TIME $MIN_BALANCE_LOWER_LIMIT $MIN_BALANCE_UPPER_LIMIT $MIN_TIME_LOWER_LIMIT $MIN_TIME_UPPER_LIMIT --use-frame --env aragon:mainnet

where

$DAO_ADDRESS = Address of DAO to install the app to

$APP_ADDRESS = the appName you specified in arapp.json

$VOTING_ESCROW - The VotingEscrow address deployed from Curve DAO contracts deployment guide

$ACCEPTANCE_PCT = Percentage of yeas in casted votes for a vote to succeed (expressed as a percentage of 10^18; eg. 10^16 = 1%, 10^18 = 100%)

i.e 510000000000000000 = 51%

$QUORUM_PCT = Percentage of yeas in total possible votes for a vote to succeed (expressed as a percentage of 10^18; eg. 10^16 = 1%, 10^18 = 100%)

$VOTE_TIME = Seconds that a vote will be open for token holders to vote (unless enough yeas or nays have been cast to make an early decision)

MIN_TIME = The minumum time that has to pass between a user's last creating of vote and him creating new vote

$MIN_BALANCE = The minimum balance a user can have to create a new vote - 2500 means 2500e18

$MIN_BALANCE_LOWER_LIMIT = The lowest MIN_BALANCE can be set to

$MIN_BALANCE_UPPER_LIMIT = The highest MIN_BALANCE can be set to

$MIN_TIME_LOWER_LIMIT = The lowest MIN_TIME can be set to

$MIN_TIME_UPPER_LIMIT = The highest MIN_TIME can be set to

Roles added in addition to standard Voting App roles

SET_MIN_BALANCE_ROLE = Role to set MIN_BALANCE, should be set to and managed by Voting app itself SET_MIN_TIME_ROLE = Role to set MIN_TIME, should be set to ENABLE_VOTE_CREATION = Role to enable vote creation DISABLE_VOTE_CREATION = Role to disable vote creation, should be set to and managed by 0x0000000000000000000000000000000000000000 to give up control to DAO

curve-aragon-voting's People

Contributors

pengiundev avatar pjcolombo avatar sembrestels avatar 0xgabi avatar iamdefinitelyahuman avatar michwill avatar rigidus avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.