⚠️ This ARC is not recommended for general use or implementation as it is likely to change.

ARC-86: xGov status and voting power Source

xGov status and voting power for the Algorand Governance

AuthorStéphane Barroso, Adriana Belotti, Michele Treccani, Cosimo Bassi
Discussions-Tohttps://github.com/algorandfoundation/ARCs/issues/345
StatusDraft
TypeMeta
Created2025-06-25

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 be 0 mod 1,000,000;
  • Committee period end Bf (uint64), it MUST be 0 mod 1,000,000, and Bf > Bc, and Bf > 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:

  1. Collect all proposed blocks in the range [Bi; Bf] to build the potential_committee (note that not all the Block Proposers are eligible as xGov). For each Block Proposer address in the potential_committee, assign a voting power equal to the number of blocks proposed in the range [Bi; Bf].

  2. Collect all the eligible xGovs in the range [Bc; Bf] to build the eligible_xgovs list by:

  3. Filter potential_committeeeligible_xgovs to obtain the final committee.

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 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.