https://github.com/ar-io/vaot
An AO Process that provides a framework for administering vote-threshold-based proposals for Evals targeting other AO processes.
https://github.com/ar-io/vaot
aos arweave controllers multisig-wallet process remote-control threshold-cryptography voting-system
Last synced: 11 months ago
JSON representation
An AO Process that provides a framework for administering vote-threshold-based proposals for Evals targeting other AO processes.
- Host: GitHub
- URL: https://github.com/ar-io/vaot
- Owner: ar-io
- License: mit
- Created: 2025-01-14T22:08:06.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-03-09T06:05:32.000Z (about 1 year ago)
- Last Synced: 2025-03-24T23:52:06.334Z (12 months ago)
- Topics: aos, arweave, controllers, multisig-wallet, process, remote-control, threshold-cryptography, voting-system
- Language: JavaScript
- Homepage:
- Size: 680 KB
- Stars: 3
- Watchers: 6
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: CODEOWNERS
Awesome Lists containing this project
README
# vAOt - A Lightweight Proposal and Voting System in AO

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:
```json
{
"Action": "Propose",
"Proposal-Type": "Add-Controller"/"Remove-Controller"/"Eval"
}
```
Required for Add/Remove-Controller `Proposal-Type`:
```json
{
"Controller": ""
}
```
Data:
```text
```
Optional for all `Proposal-Type`s:
```json
{
"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:
```json
{
"Action": "Vote",
"Proposal-Id": ""
"Vote": "yay" or "nay"
}
```
### Action: Revoke-Proposal
Allows the Controller that proposed a proposal to revoke it before it is finalized.
Required:
```json
{
"Action": "Revoke-Proposal",
"Proposal-Number": ""
}
```
### 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.