ARC-86: xGov status and voting power
xGov status and voting power for the Algorand Governance
Author | Stéphane Barroso, Adriana Belotti, Michele Treccani, Cosimo Bassi |
---|---|
Discussions-To | https://github.com/algorandfoundation/ARCs/issues/345 |
Status | Draft |
Type | Meta |
Created | 2025-06-25 |
Table of Contents
Abstract
This ARC defines the Expert Governor (xGov) status and voting power in the Algorand Expert Governance.
Specification
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC-2119.
xGov Status
xGovs, or Expert Governors, are decision makers in the Algorand Expert Governance, who acquire voting power by securing the network and producing blocks.
These individuals can participate in the designation and approval of proposals submitted to the Algorand Expert Governance process.
An xGov is associated with an Algorand Address subscribing to the Algorand Expert Governance by acknowledging the xGov Registry (Application ID: TBD).
Once the xGov Registry confirms the acknowledgement, the xGov is eligible to acquire voting power.
xGov Voting Power
The voting power assigned to each xGov is equal to the number of blocks proposed by its Algorand Address over a past period of blocks.
xGov Committee
An xGov Committee is a group of eligible xGovs that have acquired voting power in a block period.
An xGov Committee is defined by the following parameters:
- xGov Registry creation block
Bc
(uint64
); - Committee period start
Bi
(uint64
), it MUST be0 mod 1,000,000
; - Committee period end
Bf
(uint64
), it MUST be0 mod 1,000,000
, andBf > Bc
, andBf > Bi
; - Selected list of xGovs, each element is a pair of address and vote (
(bytes[32], uint64)
); - Total committee members (
uint64
), is the size of the selected list; - Total committee votes (
uint64
), is the sum of votes in the selected list.
The xGov Committee selection is repeated periodically to select new xGov Committees over time.
xGov Committee Selection Procedure
Given the xGov Committee parameters (Bc, Bi, Bf)
, the selection is executed with the following procedure:
-
Collect all proposed blocks in the range
[Bi; Bf]
to build thepotential_committee
(note that not all the Block Proposers are eligible as xGov). For each Block Proposer address in thepotential_committee
, assign a voting power equal to the number of blocks proposed in the range[Bi; Bf]
. -
Collect all the eligible xGovs in the range
[Bc; Bf]
to build theeligible_xgovs
list by: -
Filter
potential_committee
∩eligible_xgovs
to obtain the finalcommittee
.
Representation
The xGov Committee selection MUST result in a JSON with following schema:
{
"title": "xGov Committee",
"description": "Selected xGov Committee with voting power and validity",
"type": "object",
"properties": {
"xGovs": {
"description": "xGovs with voting power, sorted lexicographically with respect to addresses",
"type": "array",
"items": {
"type": "object",
"properties": {
"address": {
"description": "xGov address used on xGov Registry in base32",
"type": "string"
},
"votes": {
"description": "xGov voting power",
"type": "number"
}
},
"required": ["address", "votes"]
},
"uniqueItems": true
},
"periodStart": {
"description": "First block of the Committee selection period, must ≡ 0 mod 1,000,000 and greater than registryCreation + inceptionPeriod",
"type": "number"
},
"periodEnd": {
"description": "Last block of the Committee selection period, must ≡ 0 mod 1,000,000 and greater than periodStart",
"type": "number"
},
"totalMembers": {
"description": "Total number of Committee members",
"type": "number"
},
"networkGenesisHash": {
"description": "The genesis hash of the network in base64",
"type": "string"
},
"registryId": {
"description": "xGov Registry application ID",
"type": "number"
},
"totalVotes": {
"description": "Total number of Committee votes",
"type": "number"
}
},
"required": ["networkGenesisHash", "periodEnd", "periodStart", "registryId", "totalMembers", "totalVotes", "xGovs"],
"additionalProperties": false
}
The following rules aim to create a deterministic outcome of the committee file and its resulting hash.
The object keys MUST be sorted in lexicographical order.
The xGovs arrays MUST be sorted in lexicographical order with respect to address keys.
The canonical representation of the committee object MUST NOT include decorative white-space (pretty printing) or a trailing newline.
An xGov Committee is identified by the following identifier:
SHA-512/256(arc0086||SHA-512/256(xGov Committee JSON))
Trust Model
The Algorand Foundation is responsible for executing the Committee selection algorithm described above. The correctness of the process is auditable post-facto via:
- The block proposers’ history (on-chain)
- The xGov Registry history and state (on-chain)
- The published Committee JSON (hash verifiable)
Any actor can recompute and verify the selected committee independently from on-chain data.
Rationale
The previous xGov process see ARC-33 & ARC-34 has shown some risk of gamification of the voting system, lack of flexibility. A flexible community funding mechanism should be available. Given the shift of the Algorand protocol towards consensus incentivization, the xGov process could be an additional way to push consensus participation.
Security Considerations
No funds need to leave the user’s wallet in order to become an xGov.
Copyright
Copyright and related rights waived via CCO.
Citation
Please cite this document as:
Stéphane Barroso, Adriana Belotti, Michele Treccani, Cosimo Bassi, "ARC-86: xGov status and voting power [DRAFT]," Algorand Requests for Comments, no. 86, June 2025. [Online serial]. Available: https://github.com/algorandfoundation/ARCs/blob/main/ARCs/arc-0086.md.