Professional Documents
Culture Documents
Governance
Governance
Governance Overview
In a nutshell, governance works like this: every block a portion of
block reward (10%) is being "reserved" for the project's own future
use. These coins then fund projects, proposed by community
members (for example, a salary for the development team). Once a
project is proposed, it is voted on by the network (more precisely, by
the owners of masternodes) to determine if it should be funded.
commands are handled in src/rpcmasternode-budget.cpp, the
calls are also redirected to budget object.
User perspective
How to submit proposal?
Every node can submit a proposal. Proposal submission is a two-
step process:
3. Output:
464a0eb70ea91c94295214df48c47baa72b3876cfb658
744aaf863c7b5bf1ff0 - it's the collateral transaction hash,
needs to be copied for the next step
◦ Budget size (right now it's 10% of block subsidy for 43200
blocks)
Sporks
I don't know how much you know about sporks, so I'll be brief.
Sporks are effectively a set of variables that all nodes on the
network share. These variables control how nodes behave and can
be used to dynamically change the protocol of the network. (There's
a video where Dash creator explains sporks for general public:
https://youtu.be/rp-ebgbgK-M).
Sporks are controlled with a spork key. It's an assymetric key pair -
private key is known to the dev team, public key is hardcoded into
all nodes.
SPORK_13_ENABLE_SUPERBLOCKS - checked in
masternode-payments.cpp. If active
SPORK_9_MASTERNODE_BUDGET_ENFORCEMENT -
checked in masternode-payments.cpp
Proposal Preparation
All "mnbudget" commands are handled by function mnbudget()
in src/rpcmasternode-budget.cpp
Proposal Submission
Proposal submission is redirected to submitbudget(). After
validating the parameters it:
1. Every time it receives a new block, will check if its current view
of the budget was submitted as finalized budget. If no, the
node will create a transaction burning 50 HLM and containing
the hash of the finalized budget to be created
When the mining node starts creating the superblock it will get the
finalized budget with the highest amount of votes that it knows of
and will put the payment for the corresponding proposal into the
block. This logic is in CBudgetManager::FillBlockPayee().
The proposals are paid out one per block: if the superblock height is
N than the first proposal is paid in block N, the next one is paid in
block N+1, and so on. The miner will only pay out a finalized budget
that has more votes than 0.05 * M, where M is the number of
masternodes currently online.