Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Agoric governance: Open Electorate Created by Public Vote #6485

Closed
cboydstun opened this issue Oct 21, 2022 · 10 comments
Closed

Agoric governance: Open Electorate Created by Public Vote #6485

cboydstun opened this issue Oct 21, 2022 · 10 comments
Assignees
Labels
bounty enhancement New feature or request vaults_triage DO NOT USE

Comments

@cboydstun
Copy link

Description

Create an Agoric governance component using a new ElectionType that instantiates a public vote to give voting facets to the election winners. There should be a public registration of the identities of the candidates to make them visible.

This bounty focuses on creating the committee that will be elected and includes a charter to control the manner of their election and operation. Our existing committee is elected only once, and the membership can't be updated. The biggest open issues are refreshing the membership, and controlling the ability to create new votes.

Possible approaches to membership include replacing members who have become unresponsive, scheduling periodic elections, or supporting recalls. There are several plausible ways to limit the ability to open new questions: a chair or subcommittee, require approval from some subset of the members, or requiring a payment or deposit.

This bounty shouldn't include any work on those who vote to elect this committee. Internally, those processes are currently under review.

Context

Currently, voters only get a voting facet via an invitation. The electors vote to choose a committee, and the committee members then get the ability to vote. The voters can reliably identify the Electorate by subscribing to get a list of new questions. Voters can use the questionHandle from each update from the subscription to get the questionDetails. They cast their vote by sending their selected position(s) to their electorate, which they know and trust.

We want everyone to be able to identify the candidates and winners. Anyone who knows the electorate can get a list of questions, so this includes both the original electorate and the elected committee members for the original election, and then the committee itself will be well-known, and so both the public and the committee members can find out what questions the committee is voting on.

This structure of Electorates and VoteCounters allows voters and observers to verify how votes will be counted, and who can vote on them, but doesn't constrain the process of creating questions. We now have a PSMCharter and EconCommittee Charter, that control aspects of creating questions that those committees can vote on. A charter or electionManager can control the voting threshold, the vote closing time, or the range of parameter values that can be specified.

Acceptance Criteria

A successful bounty will:

  • Complete the requirements from the description including reasonable edge cases not explicitly defined
  • Pass code review from Agoric team
  • Include documented open source code and walkthrough presentation

Time Estimation

About One Week

Reward

$3200

Payment will be made in USD (fiat currency) via wire transfer. The developer is responsible for providing their completed tax documents (W9 for US based developers and/or W8 or W8-BEN-E for non-US based developers) and providing their banking details in order to receive payment.

Applicant Assessment Criteria

Important: Please provide a clear work plan for how you will approach this bounty. Use the work plan as an initial demonstration that you would be a good candidate. Bounties will require coordination with the Agoric team, so unfortunately only plans submitted in English will be considered.

Applicants will be assessed based on the following criteria:

  • Issue-specific domain experience
  • Issue-specific technical capability
  • Familiarity with Agoric's platform
  • JavaScript experience
  • Availability and communication

Experience Write-up (1000-1500 words)

As part of completing the bounty, we ask that you write up a short summary of your experience building on Agoric. Write-up should include:

  • Begin with a compelling, relevant introductory hook statement (<50 words).
  • Clearly explain the specific bounty project (~100 words).
  • Describe how the developer approached the problem (~300 words).
  • Give a step-by-step description of the solution (>500 words && <1000 words).
  • At least three code snippets per write-up. They do not count toward overall word count.
  • Conclude with clear calls to action on developing with Agoric - specifically how any ambition developer reading this piece could do more themselves (>150 words).

This is important feedback for us as we evolve the platform.

Review Process

  • Agoric team reviews your submitted work plan on Gitcoin.
  • It is best to join our Discord and post your Gitcoin name in the bounties channel, so that we can follow up with you. Otherwise, we will write on your Gitcoin profile wall and say hello!
  • Agoric contacts you to provide reference projects / sample code for engineering review.
  • Introductory call to discuss your plans and expected timeline.
  • Join the Agoric Discord bounties channel (if you haven’t done so already).
  • Agoric accepts you on Gitcoin and you get started!

References

@cboydstun cboydstun added enhancement New feature or request bounty labels Oct 21, 2022
@ManyRios
Copy link

ManyRios commented Oct 24, 2022

Hi! I have a question. The wire transfer payments are made from a company account? I have payoneer and in case I am selected and win the reward I wanted to know if I can receive the amount that way

@cboydstun
Copy link
Author

cboydstun commented Oct 24, 2022

Hi @ManyRios - thanks for reaching out! The gitcoin platform makes us choose "PayPal" so we can pin the bounty reward to USD, but we actually use Wise (formally TransferWire).

@gitcoinbot
Copy link

gitcoinbot commented Oct 25, 2022

Issue Status: 1. Open 2. Started 3. Submitted 4. Done


Workers have applied to start work.

These users each claimed they can complete the work by 264 years from now.
Please review their action plans below:

1) gbolahananon has applied to start work (Funders only: approve worker | reject worker).

If it’s going to be a DAO, I believe it should best be written in Solidity.

Note: asterisk (*) on a keyword, number or logic means that value is subject to change depending on Agoric’s request

I’ll create a struct Candidate and a public function to add candidate.
I am trying to understand some of the things said. Perhaps, when I explain more, you can clarify.

I am going to create an allowList array of addresses. Addresses in the allow list will contain addresses of members in the committee. I’ll create a function to push to the allowlist (Update). I have written a library to remove any address from the allowList array (Edit). And I will create a function to delete array, to erase allowList completely (Refresh).

//Logic for replacing membership
This is subject to what Agoric wants.
If it’s an automatic removal due to unresponsiveness, I will use an external api (Chainlink’s ). At *10 (20, 30 etc. depends on Agoric) membership events. Members with less that *50% participation will be removed the allowList array.

If it’s scheduling periodic election, I will create a contract for Agoric admins. These addresses could be immutable. The main admin submits a name in a function applicant, there will be a counter in the function to help assign an id to each candidate. This id must be set to true by *all admins before a candidate can be a committee member. (This check will be passed in the function to update allowList).

This project is mainly more about access. I recently worked on Upgradable Soulbound tokens (SBT) that had to do with a lot of access. It’s a private organisation repo, but you’re free to ask questions.
2) gbolahananon has applied to start work (Funders only: approve worker | reject worker).

If it’s going to be a DAO, I believe it should best be written in Solidity.

Note: asterisk (*) on a keyword, number or logic means that value is subject to change depending on Agoric’s request

I’ll create a struct Candidate and a public function to add candidate.
I am trying to understand some of the things said. Perhaps, when I explain more, you can clarify.

I am going to create an allowList array of addresses. Addresses in the allow list will contain addresses of members in the committee. I’ll create a function to push to the allowlist (Update). I have written a library to remove any address from the allowList array (Edit). And I will create a function to delete array, to erase allowList completely (Refresh).

//Logic for replacing membership
This is subject to what Agoric wants.
If it’s an automatic removal due to unresponsiveness, I will use an external api (Chainlink’s ). At *10 (20, 30 etc. depends on Agoric) membership events. Members with less that *50% participation will be removed the allowList array.

If it’s scheduling periodic election, I will create a contract for Agoric admins. These addresses could be immutable. The main admin submits a name in a function applicant, there will be a counter in the function to help assign an id to each candidate. This id must be set to true by *all admins before a candidate can be a committee member. (This check will be passed in the function to update allowList).

This project is mainly more about access. I recently worked on Upgradable Soulbound tokens (SBT) that had to do with a lot of access. It’s a private organisation repo, but you’re free to ask questions.
3) gbolahananon has applied to start work (Funders only: approve worker | reject worker).

If it’s going to be a DAO, I believe it should best be written in Solidity.

Note: asterisk (*) on a keyword, number or logic means that value is subject to change depending on Agoric’s request

I’ll create a struct Candidate and a public function to add candidate.
I am trying to understand some of the things said. Perhaps, when I explain more, you can clarify.

I am going to create an allowList array of addresses. Addresses in the allow list will contain addresses of members in the committee. I’ll create a function to push to the allowlist (Update). I have written a library to remove any address from the allowList array (Edit). And I will create a function to delete array, to erase allowList completely (Refresh).

//Logic for replacing membership
This is subject to what Agoric wants.
If it’s an automatic removal due to unresponsiveness, I will use an external api (Chainlink’s ). At *10 (20, 30 etc. depends on Agoric) membership events. Members with less that *50% participation will be removed the allowList array.

If it’s scheduling periodic election, I will create a contract for Agoric admins. These addresses could be immutable. The main admin submits a name in a function applicant, there will be a counter in the function to help assign an id to each candidate. This id must be set to true by *all admins before a candidate can be a committee member. (This check will be passed in the function to update allowList).

This project is mainly more about access. I recently worked on Upgradable Soulbound tokens (SBT) that had to do with a lot of access. It’s a private organisation repo, but you’re free to ask questions.

Learn more on the Gitcoin Issue Details page.

@dckc
Copy link
Member

dckc commented Oct 31, 2022

@gbolahananon writes:

If it’s going to be a DAO, I believe it should best be written in Solidity.

Agoric smart contracts are written in JavaScript.

@galadd
Copy link

galadd commented Nov 1, 2022 via email

@cboydstun
Copy link
Author

@gbolahananon Thanks for applying on Gitcoin! We leave the bounties up for 14 days before advancing the engagement. If you're still interested, then please take an opportunity to review our docs, create a work plan, and introduce yourself in our Discord server's Bounty channel. We'll be in touch soon!

@galadd
Copy link

galadd commented Nov 5, 2022

The bounty channel link does not redirect to the agoric discord

@cboydstun
Copy link
Author

The bounty channel link does not redirect to the agoric discord

Did you try joining the server before going directly to the bounty channel?

@galadd
Copy link

galadd commented Nov 7, 2022 via email

@dckc
Copy link
Member

dckc commented Dec 7, 2022

a story... from office hours discussion

there is to be a best bakery committee - elected by MBB committee, which exists by mechanisms which are out of scope.

Alice, Bob, and Charlie stand for election. we have their "contact", (perhaps by way of contact = E(home.namesByAddress).lookup('agoric1242...')).

We put a question to the MBB to elect the BBC. options:

  • here's the slate: vote yes/no on the whole slate
  • vote for your 3 favorites
  • etc.

When the vote concludes, we get a notification from the vote counter that includes . The contract that put the question would then distribute invitations to the BBC.

@otoole-brendan otoole-brendan added the vaults_triage DO NOT USE label Dec 20, 2022
@dckc dckc closed this as completed Jan 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bounty enhancement New feature or request vaults_triage DO NOT USE
Projects
None yet
Development

Successfully merging a pull request may close this issue.

8 participants