```{eval-rst}
.. meta::
:title: Governance Messages
:description: The network messages in this section facilitate the implementation of Dash's built-in Governance features.
```
# Governance Messages
The following [network](../resources/glossary.md#network) messages enable the Governance features built in to Dash. For additional details on the governance system, see this [Budget System page](https://docs.dash.org/en/stable/governance/index.html).
![Overview Of P2P Protocol Governance Request And Reply Messages](../../img/dev/en-p2p-governance-messages.svg)
For additional details, refer to the Developer Guide [Governance section](../guide/dash-features-governance.md).
## govobj
The [`govobj` message](../reference/p2p-network-governance-messages.md#govobj) contains a governance object that is generally a proposal, contract, or setting. [Masternodes](../resources/glossary.md#masternode) ignore this request if they are not fully synced.
| Bytes | Name | Data type | Required | Description |
| ---------- | ----------- | --------- | -------- | -------- |
| 32 | nHashParent | uint256 | Required | Parent object (a hash of all zeros here indicates this is the root object, not a child object).
| 4 | nRevision | int | Required | Object revision in the system
| 8 | nTime | int64_t | Required | Time which this object was created
| 32 | nCollateralHash | uint256 | Required* | Hash of the collateral fee transaction for proposals.
Set to all zeros for Triggers.
| 0-16384 | strData | string | Required | Data field - can be used for anything (leading varint indicates size of data)
| 4 | nObjectType | int | Required | Type of governance object:
• `0` - Unknown
• `1` - Proposal
• `2` - Trigger
| 36 | masternode
OutPoint | outPoint | Required* | The unspent outpoint of the masternode (holding 1000 DASH) which is signing this object.
Set to all zeros for proposals since they can be created by non-masternodes.
| 97 | vchSig | char | Required* | BLS Signature of the masternode (Length (1 byte) + Signature (96 bytes))
**Note**: serialized using the basic BLS scheme after Dash 19.0 activation
Not required for proposals - they will have a length of 0x00 and no Signature.
Governance Object Types (defined by `src/governance-object.h`)
| Type | Name | Description
|------|-------------------------|------------
| 0 | `GOVERNANCE_OBJECT_UNKNOWN` |
| 1 | `GOVERNANCE_OBJECT_PROPOSAL` | Submitted proposal (requires a collateral transaction - 1 Dash)
| 2 | `GOVERNANCE_OBJECT_TRIGGER` | Masternode generated. Removed after activation/execution. Used for superblocks.
The following annotated hexdump shows a [`govobj` message](../reference/p2p-network-governance-messages.md#govobj) for a Proposal object. Notice the presence of a non-zero collateral hash, a masternodeOutPoint that is an empty Outpoint (hash of all zeros), and no vchSig. (The message header has been omitted.)
``` text
00000000000000000000000000000000
00000000000000000000000000000000 ..... Parent Hash (0 = root)
01000000 ............................. Revision: 1
c8dfd65900000000 ..................... Create timestamp: 2017-10-06 01:43:31 UTC
633611d2f3e7481325242f200c7f3485
e3a9b4b6301e7f7d18d87d8231f3880b ..... Collateral Hash
Data
| 3e02 ............................... Data length: 574
| 356235623232373 ... 376435643564 ... Data (truncated)
01000000 ............................. Object Type: GOVERNANCE_OBJECT_PROPOSAL (1)
Masternode Unspent Outpoint
| 00000000000000000000000000000000
| 00000000000000000000000000000000 ... Outpoint TXID
| ffffffff ........................... Outpoint index number: 0
00 ................................... Signature length: 0
| .................................... Masternode Signature (None required)
```
The following annotated hexdump shows a [`govobj` message](../reference/p2p-network-governance-messages.md#govobj) for a Trigger object. Notice the collateral hash of all zeros. (The message header has been omitted.)
``` text
00000000000000000000000000000000
00000000000000000000000000000000 ..... Parent Hash (0 = root)
01000000 ............................. Revision: 1
911ea85900000000 ..................... Create timestamp: 2017-08-31 14:34:57 UTC
00000000000000000000000000000000
00000000000000000000000000000000 ..... Collateral Hash (None required)
Data
| ae11 ............................... Data length: 4526
| fdae11356235623 ... 376435643564 ... Data (truncated)
02000000 ............................. Object Type: GOVERNANCE_OBJECT_TRIGGER (2)
Masternode Unspent Outpoint
| ffefbe4959085907bcd2ba29e357a441
| fa7b6e26e25896d8127332bba2419e97 ... Outpoint TXID
| 00000000 ........................... Outpoint index number: 0
60 ................................... Signature length: 96
06516fa3b38d29fca6194e5d2c929666
d59d2d105bbbc30a1e5d144e708a610a
2e0ab3c759988b13ff098ab3dbd4e01d
129827ef1e1996c211d6d5ecd5199f60
cf028b1cdb2f7240e33981b16d1270e9
d289fca20905fd453620238a505582fa ..... Masternode BLS Signature
```
## govobjvote
The [`govobjvote` message](../reference/p2p-network-governance-messages.md#govobjvote) is used to indicate the voting status of a governance object. Voting status is comprised of the vote outcome (how the [masternode](../resources/glossary.md#masternode) voted) and the vote signal (the network support status). A sufficient number of yes votes results in the proposed funding being payed out in the next [superblock](../resources/glossary.md#superblock) (assuming their are sufficient funds available in the budget).
The initial [`govobjvote` message](../reference/p2p-network-governance-messages.md#govobjvote) is created by a masternode to vote on a governance object (proposal, etc.). When the masternode votes, it broadcasts the [`govobjvote` message](../reference/p2p-network-governance-messages.md#govobjvote) to all its peers.
When a [node](../resources/glossary.md#node) receives a valid, **new** [`govobjvote` message](../reference/p2p-network-governance-messages.md#govobjvote), it relays the message to all its connected [peers](../resources/glossary.md#peer) to propagate the vote.
Additionally, nodes can request [`govobjvote` messages](../reference/p2p-network-governance-messages.md#govobjvote) for specific governance objects via a [`govsync` message](../reference/p2p-network-governance-messages.md#govsync). Masternodes ignore requests for votes if they are not fully synced.
> 📘 Vote rate limiting
>
> Dash Core limits how frequently a masternode can vote on a governance object.
A masternode's vote will not be processed if it has been less than 60 minutes
since its last vote on that object. Additionally, invalid votes can result in
the node being banned.
| Bytes | Name | Data type | Required | Description |
| ---------- | ----------- | --------- | -------- | -------- |
| 36 | masternode
OutPoint | outPoint | Required | The unspent outpoint of the masternode (holding 1000 DASH) which is voting
| 32 | nParentHash | uint256 | Required | Object (`govobj`) being voted on (proposal, contract, setting or final budget)
| 4 | nVoteOutcome | int | Required | None (0), Yes (1), No (2), Abstain (3)
| 4 | nVoteSignal | int | Required | None (0), Funding (1), Valid (2), Delete (3), Endorsed (4)
| 8 | nTime | int64_t | Required | Time the vote was created
| 97 | vchSig | char[] | Required | BLS Signature of the masternode (Length (1 byte) + Signature (96 bytes))
**Note**: serialized using the basic BLS scheme after Dash 19.0 activation
Governance Object Vote Signals (defined by `src/governance-object.h`)
| Value | Name | Description
| :------: | ------- | ------------
| 1 | Funding | Minimum network support has been reached for this object to be funded (doesn't mean it will for sure though)
| 2 | Valid | Minimum network support has been reached flagging this object as a valid and understood governance object (e.g, the serialized data is correct format, etc.)
| 3 | Delete | Minimum network support has been reached saying this object should be deleted from the system entirely
| 4 | Endorsed | Minimum network support has been reached flagging this object as endorsed by an elected representative body
The following annotated hexdump shows a [`govobjvote` message](../reference/p2p-network-governance-messages.md#govobjvote). (The message header has been omitted.)
``` text
Masternode Unspent Outpoint
| 9425afd65ccce1d655d4dd461b8523b8
| 2577a8009c25604c65f3e78ea71d65df ... Outpoint TXID
| 01000000 ........................... Outpoint index number: 1
bc1bb26088161ff07dc09d873faa5573
9a2fd53121d315b2942f3b9db36cb475...... Parent Hash (0 = root)
01000000 ............................. Vote Outcome: VOTE_OUTCOME_NONE (1)
03000000 ............................. Vote Signal: VOTE_SIGNAL_DELETE (3)
ec3d235c00000000 ..................... Vote Create Time: 2018-12-26 08:38:04 UTC
60 ................................... Signature length: 96
06516fa3b38d29fca6194e5d2c929666
d59d2d105bbbc30a1e5d144e708a610a
2e0ab3c759988b13ff098ab3dbd4e01d
129827ef1e1996c211d6d5ecd5199f60
cf028b1cdb2f7240e33981b16d1270e9
d289fca20905fd453620238a505582fa ..... Masternode BLS Signature
```
## govsync
The [`govsync` message](../reference/p2p-network-governance-messages.md#govsync) is used to request syncing of governance objects (`govobj` message and [`govobjvote` message](../reference/p2p-network-governance-messages.md#govobjvote)) with peers. [Masternodes](../resources/glossary.md#masternode) ignore this request if they are not fully synced.
This message responds in one of two ways depending on the request:
1. Object Sync - When a masternode receives a [`govsync` message](../reference/p2p-network-governance-messages.md#govsync) with a hash of all zeros, it responds with a [`ssc` message](../reference/p2p-network-masternode-messages.md#ssc) for `govobj` objects. The masternode also sends an [`inv` message](../reference/p2p-network-data-messages.md#inv) (MSG_GOVERNANCE_OBJECT - 0x17) for all valid `govobj` governance objects. Do note that Dash limits how frequently object sync can be requested. Frequent requests will result in the node being banned.
*Governance object votes are excluded in this type of response.*
2. Vote Sync - When a masternode receives a [`govsync` message](../reference/p2p-network-governance-messages.md#govsync) with a specific hash, it responds with an [`ssc` message](../reference/p2p-network-masternode-messages.md#ssc) for `govobjvote` objects. The masternode also sends a `govobjvote` inventory messages (MSG_GOVERNANCE_OBJECT_VOTE - 0x18) for the object requested.
| Bytes | Name | Data type | Required | Description |
| ---------- | ----------- | --------- | -------- | -------- |
| 32 | nHash | uint256 | Required | Hash of governance object to request
Set to all zeros to request all objects (excludes votes)
| # | filter | CBloomFilter | Required | Can be set to all zeros.
Only supported since [protocol version 70206](../reference/p2p-network-protocol-versions.md)
The following annotated hexdump shows a [`govsync` message](../reference/p2p-network-governance-messages.md#govsync). (The message header has been omitted.)
``` text
2e46ea5418e097a3dbcccbee3cf2a911
6fb94ba635153f276dcb2123efcb73ff ..... Hash
00000000000000000000 ................. Bloom Filter
```