xGov status and voting power
Abstract
Section titled “Abstract”This ARC defines the Expert Governor (xGov) status and voting power in the Algorand Expert Governance.
Specification
Section titled “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.
The notation (x, y) denotes a pair of elements, while (x; y) (with ;) denotes
the interval of real numbers between x and y (including neither x nor y).
xGov Registry
Section titled “xGov Registry”The xGov Registry is the Application that manages the Algorand Expert Governance on the Algorand blockchain.
Let
gbe the Genesis Hash of the Algorand blockchain;Rthe Algorand Registry Application ID;Bcthe block number at which the xGov Registry was created (implicit).
The xGov Registry is created by the Algorand Foundation and is identified by the
tuple (g, R, Bc).
On the Algorand MainNet the xGov Registry is created by the Algorand Foundation address
I7OP7WFSK57IFDHJA6DM5TJC2IFY4M3XSBV4R4PVOV4YWF7K57BZFUVQ5Eand identified by:
g:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=R:3147789458Bc:52307574
Governance Period
Section titled “Governance Period”A governance period is identified by a pair (Bi, Bf) such that
Bi = 0 mod 1,000,000;Bf = 0 mod 1,000,000;Bf > Bi;Bf > Bc.
And is intended as a range of blocks [Bi; Bf) (Bi included, Bf excluded).
xGov Status
Section titled “xGov Status”xGovs (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 (a) subscribing to the Algorand Expert Governance by acknowledging the xGov Registry.
Once the xGov Registry confirms the acknowledgement, the xGov is eligible to acquire voting power.
xGov Voting Power
Section titled “xGov Voting Power”Given a governance period (Bi, Bf), an xGov is eligible to acquire voting power
for that period if and only if:
- It has acknowledged the xGov Registry in some block of
[Bc; Bf); - It has proposed at least one block in the period
[Bi; Bf).
The voting power assigned to each xGov is equal to the number of blocks proposed by its Algorand Address over the governance period.
The eligibility holds for all the governance periods starting from the block
xGov Committee
Section titled “xGov Committee”An xGov Committee is a group of eligible xGovs that have acquired voting power in a governance period.
Given the xGov Registry (g, R, Bc) and a governance period (Bi, Bf) as above,
an xGov Committee for (g, R, Bc, Bi, Bf) is a finite set C of address–weight
pairs (a, v) such that the following three conditions hold:
- Eligibility: For all
(a, v)inC,ais an eligible xGov in[Bc; Bf); - Voting Power: For all
(a, v)inC,vis equal to the voting power ofain[Bi; Bf); - Uniqueness: If
(a1, v1),(a2, v2)inCanda1 = a2, thenv1 = v2.
An xGov Committee is defined by the tuple (g, R, Bc, Bi, Bf, C).
If C is empty, then the xGov Committee for the governance period has no voting
power.
xGov Committee Members
Section titled “xGov Committee Members”The number of xGov Committee members M is the cardinality of C, more formally
M = |C|.
xGov Committee Voting Power
Section titled “xGov Committee Voting Power”The total voting power of an xGov Committee V is the sum of votes (v) over
all its members (a), more formally V = Σ_{(a,v) ∈ C} v.
xGov Committee Selection Procedure
Section titled “xGov Committee Selection Procedure”The xGov Committee selection is repeated periodically to select new xGov Committees over time.
To build the xGov Committee (g, R, Bc, Bi, Bf, C), the selection is executed with the following procedure:
-
Collect all proposed blocks in the governance period
[Bi; Bf)to build thepotential_committee(note that not all the Block Proposers are eligible as xGov). For each Block Proposer address (a) in thepotential_committee, assign a voting power (v) equal to the number of blocks proposed in the governance period[Bi; Bf). -
Collect all the eligible xGovs in the governance period
[Bc; Bf)to build theeligible_xgovslist. -
Filter
potential_committee ∩ eligible_xgovsto obtain the finalcommittee.
Representation
Section titled “Representation”The xGov Committee MUST be represented with the canonical UTF-8 encoded JSON object with the 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": "integer", "minimum": 0 } }, "required": ["address", "votes"] }, "uniqueItems": true }, "periodStart": { "description": "First block of the Committee selection period, must ≡ 0 mod 1,000,000", "type": "integer" }, "periodEnd": { "description": "Last block of the Committee selection period, must ≡ 0 mod 1,000,000 and greater than periodStart", "type": "integer" }, "totalMembers": { "description": "Total number of Committee members", "type": "integer" }, "networkGenesisHash": { "description": "The genesis hash of the network in base64", "type": "string" }, "registryId": { "description": "xGov Registry application ID", "type": "integer" }, "totalVotes": { "description": "Total number of Committee votes", "type": "integer" } }, "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 the unique 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))
The ASCII string "arc0086" MUST be encoded as the UTF-8 byte sequence 0x61 0x72 0x63 0x30 0x30 0x38 0x36.
Trust Model
Section titled “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
Section titled “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
Section titled “Security Considerations”If a published Committee ID does not match any recomputed committee using the agreed
(g, R, Bc, Bi, Bf, C), clients SHOULD treat it as invalid and notify the Algorand
Foundation.
Copyright
Section titled “Copyright”Copyright and related rights waived via CCO.