.. meta:: :description: Practical guide to using the Dash DAO governance system and treasury :keywords: dash, dao, governance, funding, voting, proposals, masternodes .. _using-governance: ===================== Using Dash Governance ===================== Dash's Decentralized Autonomous Organization (DAO) is a novel voting and funding platform. This documentation introduces and details the theory and practice to use the system. Understanding the process ========================= Introduction ------------ - DAO consists of three components: Proposals, Votes, and Budgets - Anyone can submit a proposal for a small fee - Each valid masternode can vote for, against or abstain on proposals - Approved proposals become budgets - Budgets are paid directly from the blockchain to the proposal owner Proposals --------- - Proposals are a request to receive funds - Proposals can be submitted by anyone for a fee of 1 Dash. The proposal fee is irreversibly destroyed on submission. - Proposals cannot be altered once submitted Votes ----- - Votes are cast using the registered voting address - The voting address can be delegated to a third party - Votes can be changed at any time - Votes are counted every 16616 blocks (approx. 30.29 days) Budgets ------- - Budgets are proposals which receive a net total of yes votes equal to or greater than 10% of the total possible votes (for example over 448 out of 4480) - Budgets can be nullified at any time if vote totals (cast or re-cast) fall below the approval threshold - Budgets are processed (paid) in order of yes minus no votes. More popular budgets get payment priority. - Approximately 7919 dash (in 2024) are available for each budget cycle, decreasing by 7.14% every 210240 blocks (approx. 383.25 days). Object structure ---------------- The following information is required to create a proposal: - proposal-name: a unique label, 40 characters or less - url: a proposer-created webpage or forum post containing detailed proposal information - payment-count: how many cycles the proposal is requesting payment - block-start: the requested start of proposal payments - dash-address: the address to receive proposal payments - monthly-payment-dash: the requested payment amount Persistence ----------- - Proposals become active one day after submission - Proposals will remain visible on the network until they are either disapproved or the proposal's last payment-cycle is reached - Approval occurs when yes votes minus no votes equals 10% or more of the total available votes. - Disapproval occurs when no votes minus yes votes equals 10% or more of the total available votes. - The total available votes is the count of online and responding masternodes and can be seen by running the command ``masternode count`` in the Dash Core wallet debug window. A graph of the total masternode count can be found `here `__ Templates --------- The following two Microsoft Word templates are available from Dash Core Group to help facilitate standardized proposal submission and updates. Usage is recommended, but not required. - `Project Proposal Template `_ - `Project Status Update Template `_ .. _budget-cycles: Budget cycles ============= When preparing a proposal, be aware of when the next cycle will occur and plan accordingly. It is recommended to choose your proposal payment start block at least one cycle in the future to allow time for discussion and gathering support and votes. Note that votes will no longer be tallied 1662 blocks (approximately 3 days) prior to the superblock. +--------------+------------------------------+ | Block height | Approximate date | +==============+==============================+ | 1212968 | Thu Jan 30 02:38:52 UTC 2020 | +--------------+------------------------------+ | 1229584 | Sat Feb 29 09:43:54 UTC 2020 | +--------------+------------------------------+ | 1246200 | Mon Mar 30 16:48:56 UTC 2020 | +--------------+------------------------------+ | 1262816 | Wed Apr 29 23:53:58 UTC 2020 | +--------------+------------------------------+ | 1279432 | Sat May 30 06:59:00 UTC 2020 | +--------------+------------------------------+ | 1296048 | Mon Jun 29 14:04:02 UTC 2020 | +--------------+------------------------------+ | 1312664 | Wed Jul 29 21:09:04 UTC 2020 | +--------------+------------------------------+ | 1329280 | Sat Aug 29 04:14:06 UTC 2020 | +--------------+------------------------------+ | 1345896 | Mon Sep 28 11:19:08 UTC 2020 | +--------------+------------------------------+ | 1362512 | Wed Oct 28 18:24:10 UTC 2020 | +--------------+------------------------------+ | 1379128 | Sat Nov 28 01:29:12 UTC 2020 | +--------------+------------------------------+ | 1395744 | Mon Dec 28 08:34:14 UTC 2020 | +--------------+------------------------------+ You can view the source code for this calculation at this `GitHub gist `_ .. _creating-proposals: Creating proposals ================== Once you have prepared the text of your proposal and set up a website or forum post, it is time to submit your proposal to the blockchain for voting. While all tasks involved with creating a budget proposal can be executed from the Dash Core wallet (:ref:`GUI ` or :ref:`console `) or the :ref:`Dash Budget Proposal Generator `. .. _proposal-create-core-qt: Dash Core Wallet ---------------- Dash Core Wallet includes a built-in graphical interface for creating governance proposals directly from the Governance tab. This provides a user-friendly alternative to using external web tools or manual console commands. To use this feature, your wallet must be unlocked and contain sufficient balance to cover the 1 DASH proposal fee plus a small transaction fee. Accessing the Governance tab ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Open your Dash Core Wallet and click on the **Governance** tab. This displays a list of existing proposals and provides a **Create Proposal** button in the upper right corner. .. figure:: img/core-qt/governance-tab.png :width: 500px The Governance tab showing existing proposals and the Create Proposal button Creating a new proposal ^^^^^^^^^^^^^^^^^^^^^^^ Click the **Create Proposal** button to open the proposal creation dialog. Enter your proposal details: - **Proposal name**: A unique identifier - **URL**: Link to detailed proposal information (use a URL shortener if needed) - **Payment address**: The Dash address that will receive payments - **Payment amount**: Amount requested per payment cycle - **First payment date**: Select the superblock date for the first payment - **# of payments**: Number of payment cycles requested The dialog displays the total amount requested and notes the 1 DASH proposal fee that will be burned. Click **Next** when all fields are complete. .. figure:: img/core-qt/proposal-create.png :width: 350px Entering proposal details in the creation dialog Validating the proposal ^^^^^^^^^^^^^^^^^^^^^^^ The wallet will generate and display your proposal data in JSON format along with the proposal hash. Review the information carefully to ensure accuracy. Click **Validate** to check the format of the proposal data. If the data is valid, click **Next** to proceed to the next step. Otherwise, click **Back** to adjust your proposal data. .. figure:: img/core-qt/proposal-validate.png :width: 400px Validating the proposal JSON and hash Preparing the collateral ^^^^^^^^^^^^^^^^^^^^^^^^ .. warning:: The following step will create a transaction burning 1 DASH as the proposal submission fee. This transaction is irreversible once broadcast. Verify all proposal details are correct before proceeding. After validation, you will see a screen prompting you to prepare and burn the 1 DASH collateral fee. This fee is required to prevent spam and is permanently removed from circulation. Click **Prepare proposal** to create the fee transaction. .. figure:: img/core-qt/proposal-prepare-burn.png :width: 350px Proposal collateral burn preparation screen Click **Yes** on the confirmation dialog to broadcast the collateral transaction. .. figure:: img/core-qt/proposal-burn-fee-notice.png :width: 300px Confirmation dialog for burning the proposal fee The transaction ID will be generated and displayed in the TxID field. .. figure:: img/core-qt/proposal-prepare-burned.png :width: 350px Transaction ID generated for the proposal collateral Waiting for confirmations ^^^^^^^^^^^^^^^^^^^^^^^^^ The wallet will display the confirmation progress for your collateral transaction. One confirmation is required before you can submit the proposal to the network. After the first confirmation, click the **Next** button to move to the proposal submission screen. .. figure:: img/core-qt/proposal-prepare-burned-conf-wait.png :width: 350px Waiting for confirmations (1 of 6) Submitting the proposal ^^^^^^^^^^^^^^^^^^^^^^^ Click **Submit Proposal** to broadcast your governance object to the network. .. figure:: img/core-qt/proposal-submit-awaiting.png :width: 350px Submitting proposal with 5 of 6 confirmations If successful, a message will be displayed with your proposal ID. Click **OK** to close the message. .. figure:: img/core-qt/proposal-submitted-conf.png :width: 300px Proposal successfully submitted to the network The proposal ID will also be shown on the submission screen. The proposal ID can be used to track voting on the proposal. .. figure:: img/core-qt/proposal-submitted.png :width: 350px Proposal submitted with proposal ID shown .. note:: You can submit your proposal ID to DashCentral to claim ownership and enable simplified voting for masternodes using DashCentral voting services. .. _dash-budget-proposal-generator: Dash Budget Proposal Generator ------------------------------ - https://proposal.dash.org The `Dash Budget Proposal Generator `__ supports creating budget proposals on both mainnet and testnet. In the first step, you must enter a short, clear and unique name for the proposal as it will appear on the blockchain. Proposal names are limited to 40 characters. You can then provide a link to the forum or DashCentral where your proposal is described in more detail (use a `URL shortening service `_ if necessary), as well as select the amount of payment you are requesting, how often the payment should occur, and the superblock date on which you are requesting payment. This allows you to control in which budget period your proposal will appear, and gives you enough time to build support for your proposal by familiarising voters with your project. Note that the payment amount is fixed and cannot be modified after it has been submitted to the blockchain. .. figure:: img/proposal-create.png :width: 300px .. figure:: img/proposal-burn-prepare.png :width: 300px Steps 1 & 2: Creating your proposal and preparing the command Next, the proposal generator will provide you with a command to run from the console of your Dash Core wallet to prepare your budget proposal governance object. Running this command will cost you 1 DASH, which will be "burnt" or permanently removed from circulation. This one-time fee protects the governance system from becoming overwhelmed by spam, poorly thought out proposals or users not acting in good faith. A small transaction fee is charged as well, so make sure slightly more than 5 DASH is available in your wallet. Many budget proposals request reimbursement of the 1 DASH fee. First unlock your wallet by clicking **Settings > Unlock wallet**, then open the console by clicking **Window > Console** and paste the generated command. The transaction ID will appear. Copy and paste this into the proposal generator response window. As soon as you do this, the system will show a progress bar as it waits for 6 confirmations as follows: .. figure:: img/proposal-burn-console.png :width: 300px .. figure:: img/proposal-burn-confirming.png :width: 250px Step 3: Creating the proposal transaction and waiting for 6 confirmations of the transaction ID Once 6 block confirmations exist, another command will appear to submit the prepared governance object to the network for voting. Copy and paste this command, and your governance object ID will appear as follows: .. figure:: img/proposal-submit.png :width: 300px .. figure:: img/proposal-submit-console.png :width: 250px Step 4: Submitting the governance object to the network You can use this ID to track voting on the proposal until the budget closes and you receive your payout. You can also submit the ID to DashCentral to claim your proposal and enable simplified voting for masternodes using DashCentral voting services. .. _proposal-create-core-console: Dash Core Wallet Console ------------------------ Creating a proposal using the wallet console follows the same process as using the Dash budget proposal generator, but it requires several additional steps to manually construct the proposal governance object. Assemble the proposal data ^^^^^^^^^^^^^^^^^^^^^^^^^^ To prepare a proposal, put the proposal details such as name and payout address into a JSON object similar to the example shown below. .. code-block:: json { "name": "Test-proposal_1", "payment_address": "yd5KMREs3GLMe6mTJYr3YrH1juwNwrFCfB", "payment_amount": 10, "url": "https://www.mydashtestproposal.com", "start_epoch": 1635750000, "end_epoch": 1636750000, "type": 1 } Set the ``type`` field to ``1`` for all proposals. The ``start_epoch`` and ``end_epoch`` fields are Unix epoch timestamps indicating the time range in which the proposal can receive payments. Typically you will set the ``start_epoch`` to approximately halfway between the superblock where payment is first desired and the preceding one. Set ``end_epoch`` to approximately 2 weeks after the superblock where the final payment is desired. You can use a site like https://www.epochconverter.com/ to convert the start and end dates to the epoch values for these fields. Serialize the proposal data ^^^^^^^^^^^^^^^^^^^^^^^^^^^ The proposal information must be serialized to hex before it can be submitted to the network. Remove all spaces from the JSON object:: {"name":"Test-proposal_1","payment_address":"yd5KMREs3GLMe6mTJYr3YrH1juwNwrFCfB","payment_amount":10,"type":1,"url":"http://test.com","start_epoch":1635750000,"end_epoch":1636750000} Convert the resulting JSON to its hex equivalent. Sites like https://codebeautify.org/string-hex-converter provide an easy way to do this:: 7b226e616d65223a22546573742d70726f706f73616c5f31222c227061796d656e745f61646472657373223a227964354b4d52457333474c4d65366d544a597233597248316a75774e777246436642222c227061796d656e745f616d6f756e74223a31302c2274797065223a312c2275726c223a22687474703a2f2f746573742e636f6d222c2273746172745f65706f6368223a313633353735303030302c22656e645f65706f6368223a313633363735303030307d Prepare the collateral transaction ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Finally, open your Dash Core wallet console and use the ``gobject prepare`` command to complete the proposal preparation and submit the collateral transaction. See the :ref:`Core developer documentation ` for additional details. .. warning:: Running this command will create a transaction spending 1 DASH from the wallet as collateral for the proposal being created. Only run this command once you have verified all the proposal information. The transaction is not reversible once sent. :: gobject prepare