Skip to content
/ vaot Public

An AO Process that provides a framework for administering vote-threshold-based proposals for Evals targeting other AO processes.

License

Notifications You must be signed in to change notification settings

ar-io/vaot

Repository files navigation

vAOt - A Lightweight Proposal and Voting System in AO

image

Propose and vAOt to:

  • add other wallet addresses, known as Controllers, that will have the right to propose votes and vote on proposals
  • remove existing controllers
  • have the process send an Eval message to another AO process (think: multi-sig-like, remote process control) or to itself (e.g. for controllers-sanctioned upgrades or customization of the process)

Suggested workflow for controlling processes with multi-sig-like protections:

  1. Instantiate a vAOt process. The process creator will be the initial Owner of the vAOt process as well as the first Controller.
  2. Assign ownership of the vAOt process to either: a) the process itself if you want Controllers to manage upgrades or Ownership or state changes of the vAOt process or b) nil if you want the vAOt process to remain unowned
  3. Add other Controllers via proposal and voting workflows.
  4. Assign the Owner of a target process that you'd like to manage via vAOt to the vAOt process. The Controllers can now collectively manage the target process via proposal and voting workflows.

Handlers

Action: Propose

Active Controllers may create proposals at any time and may also cast their vote at the time of the proposal's creation.

Required:

{
  "Action": "Propose",
  "Proposal-Type": "Add-Controller"/"Remove-Controller"/"Eval"
}

Required for Add/Remove-Controller Proposal-Type:

{
  "Controller": "<AO-supported wallet address to use for Add/Remove-Controller"
}

Required for Eval Proposal-Type:

Tags:

{
  "Process-Id": "<AO Process ID to target for Eval>"
}

Data:

<Eval string to send to target Process-Id>

Optional for all Proposal-Types:

{
  "Vote": "yay" or "nay"
}

Action: Vote

Any current Controller can cast a vote on an In-Progress Proposal. Proposals are completed when either:

  • a (round_down(Num Controllers / 2) + 1) majority has voted "yay", e.g. 1/1, 2/2, 2/3, 3/4, 3/5, 4/6, etc.
  • a majority of "yay"s can no longer be established, e.g. "nay"s votes are 1/2, 2/4, 3/6, etc.

If the deciding vote Passes the proposal, the proposal is immediately implemented.

If the outcome of a proposal is to remove a Controller, that Controller's existing votes on In-Progress proposals are revoked. In-Progress proposals are then re-evaluated for quorum immediately and may or may not reach a passable or failed outcome at that time. Proposal re-evaluation is handled in Proposal-Number order, i.e. the order in which proposals were created.

Required:

{
  "Action": "Vote",
  "Proposal-Id": "<Proposal ID string>"
  "Vote": "yay" or "nay"
}

Action: Revoke-Proposal

Allows the Controller that proposed a proposal to revoke it before it is finalized.

Required:

{
  "Action": "Revoke-Proposal",
  "Proposal-Number": "<Proposal-Number string>"
}

Action: Get-Controllers

Retrieve the current controller list

Action: Get-Proposals

Retrieve the current set of active proposals. NOTE: Completed proposals are dropped from state.

About

An AO Process that provides a framework for administering vote-threshold-based proposals for Evals targeting other AO processes.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published