Closed yondonfu closed 4 years ago
To clarify, for the voting % thresholds when referring to "active stake" are we talking about total staked LPT?
My initial thoughts on the parameters:
Quorum 20% - I think 20% makes sense initially, however, if we are going off % total staked LPT some of the top orchestrators have between 10%-15% of staked LPT, so it's a very low bar for Quorum.
Threshold 50% - this number seems reasonable to me given governance decisions will default to the orchestrators if token holders do not place their own votes. I think it would be helpful if there was some way of seeing if your orchestrator is actively voting in the dashboard for those which would prefer to delegate governance decisions.
Polling Period 10 rounds - makes sense, if we were ever to have mission-critical changes being decided through governance I think this would need to be lower, but seems fine for now.
Poll Creation Cost - I think 100 LPT at current prices seems appropriate, however, if prices move significantly from where they are now I think this needs to be changed over time to keep it within some target $ cost range.
I saw in Kyber's new Katalyst protocol upgrade (https://blog.kyber.network/katalyst-kyber-protocol-upgrade-and-2020-plans-20427ef47ac6) with the upgrade and new token model, token holders will need to participate in governance in order to qualify for their staking/participation fees.
Given Livepeer's focus on active participation in the early network design, I think adding a requirement for orchestrators to vote in governance proposals to qualify for transcoding fees could make sense from a design standpoint. I would be curious to hear what the team and the wider community think of making a change like this?
Quorum 20% - I think 20% makes sense initially, however, if we are going off % total staked LPT some of the top orchestrators have between 10%-15% of staked LPT, so it's a very low bar for Quorum.
I think it might be too low.
The top 5 staked orchestrators currently own 50% of the total active stake. We don't know how much of that stake is delegated but I think we can also assume that delegates will be less likely to participate in governance than orchestrators.
We are also talking about active stake so those are users already actively participating in the protocol in varying frequencies. I think a 20% quorum would therefore make sense if we are considering total stake but too low when considering active stake.
With that 20% number in mind and a 50% participation target , I think a 40% quorum for active stake would be more fitting.
Given Livepeer's focus on active participation in the early network design, I think adding a requirement for orchestrators to vote in governance proposals to qualify for transcoding fees could make sense from a design standpoint. I would be curious to hear what the team and the wider community think of making a change like this?
I don't think this needs to be protocol explicit. A way of seeing whether an orchestrator is actively participating in governance on the explorer could serve as an additional statistic for delegates to assess orchestrator quality.
That means that not participating in governance could have implicit effects on fee generation for the orchestrator (being able to win less work due to a low total stake).
Poll Creation Cost - I think 100 LPT at current prices seems appropriate, however, if prices move significantly from where they are now I think this needs to be changed over time to keep it within some target $ cost range.
Good point. In the original draft for this spec I proposed adding a uniswap integration in front of creating a poll so that a user could use ETH to create a poll, the contract would swap it for LPT and burn the LPT. We could do it for DAI instead and put a poll creation cost of 100 DAI, which would then be swapped for LPT to be burned.
This can be a seperate contract so it can be a module added on top of this set of contracts.
Given Livepeer's focus on active participation in the early network design, I think adding a requirement for orchestrators to vote in governance proposals to qualify for transcoding fees could make sense from a design standpoint. I would be curious to hear what the team and the wider community think of making a change like this?
I like the eventual goal of having orchestrators be mandated to participate in governance. I was thinking that they could be slashed some small % of stake if they fail to participate, though perhaps your suggestion of them being temporarily ineligible for fees or rewards makes sense. Probably better if it's forfeiture of inflationary LPT rewards than fees, because fees incentivize them to actually perform the useful work of transcoding, and that's what we all want.
But either way, I'd suggest that this enforcement incentive be something that the community decides through a future upgrade proposal using this polling mechanism, rather than being bundled into the initial creation of this mechanism which aims to keep things simple.
To clarify, for the voting % thresholds when referring to "active stake" are we talking about total staked LPT?
Yes, we are talking about staked LPT. So a 20% quorum would be 20% of the total actively staked LPT. not 20% of the total outstanding LPT.
I think there's two separate discussions here.
I think it's a little out of scope for this LIP but perhaps interesting material for a governance call, since we already have different opinions this could only lead to a very interesting discussion.
In the OP, I intended the term active stake to refer to stake that is delegated to active orchestrators. Recall that:
A few of the implications of only giving voting power to active stake:
I suggest that voting power be given to all stake (both active and inactive stake). I believe the benefits of doing so are:
I like the overall arguments presented above but would like to point out a few concerns with considering the total supply
then delegators that do want to participate in governance do not need to worry about losing their voting power when delegated to a relatively low stake active orchestrator that could be at risk of being deactivated
Rebonding to a different O is not free of cost but happens without a time penalty so a delegate will never be out of the opportunity to participate even when delegated to an inactive O when the poll starts. I don't think active set churn at the bottom of the set will be decided by delegates.
I like the overall arguments presented above but would like to point out a few concerns with considering the total supply
When you say "considering total supply" here, do you mean giving voting power to all LPT and not just staked LPT?
If so, in my suggestion voting power would still only be given to staked LPT, but it would be given to both active staked LPT (i.e. delegated to orchestrators in the active set) and inactive staked LPT (i.e. delegated to orchestrators not in the active set).
If not, could you elaborate on the concerns you listed? At the moment, I don't see how those points are more of a concern when voting power is given to both active and inactive staked LPT vs. just active staked LPT.
Rebonding to a different O is not free of cost but happens without a time penalty so a delegate will never be out of the opportunity to participate even when delegated to an inactive O when the poll starts
This is more of a concern at the end of a poll. The example I am thinking of is that a delegator votes, but its orchestrator becomes deactivated right before the end of a poll - if voting power is only given to active staked LPT then that delegator would need to try to scramble in a tight time window to move its stake to an active O in order for the vote to be counted.
Still need to consider changes in LPT balance over the duration of a poll in the tallying
Even though this is certainly a concern for what people interpret the intermediate status of the poll to be, I think it's solved by the hard-and-fast rule that only the final state at the end block matters. Intermediate status just gives people a view into what's happening with the voting.
My comments rely largely around the definition of QUORUM
, and the proposed initial value.
QUORUM
.The definition used above is perhaps an over-simplification, and perhaps also misses an opportunity to learn from projects focused on governance:
The minimum percentage of active stake that needs to vote in a poll in order for the poll result to be considered valid.
First, it isn't clear what "active" means specifically in this case. I would appreciate some clarification on this.
Second, I present a counter-example: this is how Aragon define quorum in their literature, and how it is built into their contracts:
Minimum acceptance quorum: minimum % of all token supply that needs to approve in order for the voting to be executed. (source)
So, the difference here is quite nuanced.
Livepeer's definition requires only that QUORUM
% of stake actually cast their ballot on a proposal for a result to stand. Whether they vote YES or NO is irrelevant when considering the quorum in this definition.
Aragon's definition is in some ways more strict (and perhaps also more clear). It requires that QUORUM
cast their ballot in favour of the proposal for a result to stand.
I don't know which definition better suits this scenario, or this community, but I thought it worth raising the idea to use language and terminology used by other projects in this space, and perhaps start by building on some of their foundations.
(as an aside, I would recommend that whoever is building the contracts to make this happen could do well to review how Aragon built their Access Control Layer (ACL), which effectively grants permissions to contracts to call functions on other contracts. Aragon have been evolving this for as long as Livepeer has been working on video Transcoding :) so why learn from some of their practices?)
QUORUM
In short: better to "set the bar high" in terms of required participation, and then lower it if absolutely necessary... instead of "setting the bar low" from the outset, and arbitrarily increasing it to make it harder to hurdle.
Pending any further clarification of the above, I believe that setting the quorum artificially low (20%) while we get things going, would be a mistake.
Initial settings have a habit of becoming set in stone, and the act of changing them to tighten things up becomes too onerous, and we remain stuck with a status quo.
So, I believe that the we should start with as strict a set of parameters as we can stomach, and if things work, great... but if they really don't, it's a parameter which can be relaxed, presumably by a vote, but a vote which requires a very high turnout in order to pass.
This creates the incentive for active turnout (and hence collaboration, participation), because deadlock is no good for anybody in this ecosystem.
In short: let the process of agreeing the initial value of the
QUORUM
become the first at of this democratic system.
We've already seen above that things relating to the QUORUM
are quite contentious.
So, my proposal would be to use something closer related to Aragon's definition of QUORUM
, and to start with this at 50%. (also THRESHOLD
at 50%). In order to pass a vote to reduce this QUORUM
, >50% of the voting weight would be able to vote YES.
Note: this would not require 100% of the voting weight to participate, but only enough for us to be sure that a majority agrees.
If we think that it could be too hard for enough people to participate, then I fear we're setting our sights too low as a community.
Definition of quorum...
Good point. This was updated in the merged draft LIP to be more clear: "The minimum percentage of stake that needs to vote in a poll in order for the poll result to be considered valid."
It no longer applies to only "active" stake, but instead to any staked LPT even if it is delegated towards a non-active orchestrator. This means you need to be committed to the network for at least the length of the unbonding period in order to vote, but you don't have to actively monitor whether your O remains in the active set or not.
Side note: perhaps the discussion issue itself needs to be updated to reflect these changes so that people following the discussion have all the latest context.
Initial value of quorum
Yes, definitely heard the feedback for setting the bar higher during community calls and in discussion here. Again, the draft issue actually upped the value to 33% instead of 20%, indicating at least 1/3rd of the staked LPT would have to participate in order for a poll to be valid.
Would love to get to a 50% quorum target eventually, and I hear the points about starting with an initially high bar because it is hard to move things later, but the counter to that is that:
1) the protocol doesn't yet have incentives for voting participation 2) nor does it have 2 years of behavioral expectation amongst network participants that they're supposed to show up to vote as part of their workflow
Would be great to use governance to add incentives for voting (such as requiring it in order to be eligible for the next round's rewards for example), but until those are there the quorum being all the way up to 50 seems like it will create difficult circumstances to even begin to use an open governance process to get the ball rolling.
I also don't think a more conservative quorum value leads to lower voter turnout. If someone cares about a contentious issue in the future of Livepeer, they have an even greater incentive to show up and vote, as they know their vote could count for more of the total turnout with a lower quorum than it would with a very high quorum. Effectively for those that care about governance, their votes could matter more.
Just to make sure that everyone is aware of the updates to the original proposal in the recently created draft LIP:
So, QUORUM
will be 33.33 and THRESHOLD
50%. Right?
So, to begin it can be possible for a motion to be passed with e.g.
But a motion would not pass if:
because Quorum wouldn't be met. Is that right?
For | Against | Turnout | Result |
---|---|---|---|
16.67 | 16.66 | 33.33 | Vote Carried |
16.67 | 16.65 | 33.32 | NOT Carried |
25.00 | 8.33 | 33.33 | Vote Carried |
25.00 | 8.32 | 33.32 | NOT Carried |
33.32 | 0.01 | 33.33 | Vote Carried |
33.32 | 0.00 | 33.32 | NOT Carried |
That interpretation is correct according to the outlined definitions and criteria.
So now I think I understand the counter proposal better. Perhaps I was caught up on the 50% number more-so than the spirit: using 33% as the Quorum
under the adjusted definition, and 50% as the Threshold
would mean that any vote that reached 33% yes votes, without being outweighed by no votes, would pass - whether it was 33% vs 0, or 33% vs 32%.
What do others think about the two definitions?
A) The required % of stake that participates in the vote for it to be considered valid be executed.
B) The required % of stake that must vote in favor of the proposal for it to be passable.
This still leaves open the initial value for quorum, which was proposed as 33% (up from 20%), and counterproposed at 50% under definition B.
I lean towards keeping the current definition of quorum as:
"The minimum percentage of stake that needs to vote in a poll in order for the poll result to be considered valid"
because it matches the standard definition of quorum in a business/governance context [1].
[1] This comment in a thread about Aragon's definition of quorum makes the good point that quorum in a distributed computing context does mean the minimum number of approval votes for an action to be performed. That being said, I think using the standard definition of quorum in a business/governance context makes sense here.
I feel like the current definition is most in line with how it is defined in dictionaries (ie voter turnout).
Generally speaking I think if there's standard definitions for terminologies we should stick to those definitions. Otherwise it will make discussing this topic harder as new entrants first need to understand the definitions used.
Cosmos Hub has a 'no-with-veto' option. This enables 33.4% of participating voting power to fail a proposal, even if more than 50% approve. I think the idea is to prevent a tyranny of the majority and the ability to express a strong preference against a proposal. For reference, see these criteria.
Another thing perhaps worth considering is adaptive quorum biasing, which could require a heavier 'yes' threshold to pass a proposal the lower the vote-weight turnout. Polkadot and Kusama use this. I know simplicity is important, but this sort of scheme could enable a lower vote-weight turnout to be considered valid, provided that the 'yes' vote is substantially more than a simple majority.
@gavinly on "no-with-veto" and "adaptive quorum biasing"...
These both sounds like really useful ideas in theory, but also as you point out, raise the complexity and barriers to understanding how governance works initially. Especially getting the AQB params right and being able to project whether something will pass or not based on current voting patterns.
Maybe taking the no-with-veto independently as it is a little more straightforward...do you think this is a good candidate for one of the initial proposals? This way the community can weigh it independently through the LIP process, debate it, vote on it through the polling app, and enact it if it seems like a good idea for Livepeer? Again, this way it could be community designed, rather than bundled in as another debatable, arbitrary decision baked into the initial simple designs?
I like the idea of using the polling process to include an element of community design. However, I'm skeptical that a seemingly-minor addition like a 'no-with-veto' option would attract more than 33% of the LPT supply for poll participation. Thoughts?
However, I'm skeptical that a seemingly-minor addition like a 'no-with-veto' option would attract more than 33% of the LPT supply for poll participation. Thoughts?
Good question. It's really hard for me to predict whether it will be difficult or easy to get 33% for a small change like this. On the "it would be easy" side, is the recognition that it only takes a few of the active orchestrators who carry a lot of stake weight to participate, and there aren't likely to be THAT MANY active polls to overwhelm anyone. On the "it would be difficult side", if this doesn't feel like a major network economic upgrade, is it possible to even get the word out and encourage participation without a participation incentive (or non-participation penalty)?
Brainstorming here, so feel free to ignore.
TL;DR
What if the inflationary rewards of an orchestrator were a factor of poll participation? Heavy question, I know. More responsibility for orchestrators, and we can only lose with a mechanism like this.
Scenario: of the last 100 polls, I miss one, then my orchestrator earns 99% inflationary rewards for x number of rounds.
There's an incentive for orchestrators to blindly abstain, so what's the value? Orchestrators would be incentivized to monitor for polls and to act. Even if participants simply abstain, I imagine that there would be a net increase in participation. BTW, is 'abstain' even a poll option?
On the flip side, I could see this mechanism being used as a griefing attack. At $0.57 per LPT and 200 LPT per poll, it's only $114 to bother all of the orchestrators. If such a griefing attack takes place, we could make a proposal to increase the deposit amount.
Similar to the 'no-with-veto' suggestion, a vote option like 'spam' could do a few things: 1) Cancel a poll prematurely if 33% of LPT votes 'spam' 2) Increment a parameter that will eventually raise the deposit amount for proposals automatically
The 'spam' vote would count as a 'no' vote. The idea here is to reduce the attention that spam proposals get by ending them prematurely, and also to eventually start to increase the cost of a poll if too many spam proposals are created.
However, I'm skeptical that a seemingly-minor addition like a 'no-with-veto' option would attract more than 33% of the LPT supply for poll participation. Thoughts?
Good question. It's really hard for me to predict whether it will be difficult or easy to get 33% for a small change like this. On the "it would be easy" side, is the recognition that it only takes a few of the active orchestrators who carry a lot of stake weight to participate, and there aren't likely to be THAT MANY active polls to overwhelm anyone. On the "it would be difficult side", if this doesn't feel like a major network economic upgrade, is it possible to even get the word out and encourage participation without a participation incentive (or non-participation penalty)?
Without a built-in (dis)incentive mechanism, I think stakeholders would have to be targeted individually to participate so that there isn't a bystander effect. I think that this sort of relationship lends itself to becoming a power broker.
@gavinly
However, I'm skeptical that a seemingly-minor addition like a 'no-with-veto' option would attract more than 33% of the LPT supply for poll participation.
One way to try to improve the chances of quorum being reached could be to propose a "no-with-veto" option with other governance changes/improvements either in the same LIP or in multiple LIPs that are bundled into a parent LIP. LIP-15 notes that LIPs can be a part of a parent LIP so that a poll for the parent LIP considers all individual LIPs referenced. This could reduce the burden placed on tokenholders since they wouldn't need to vote in multiple polls for smaller LIPs and they would just need to vote in a single poll for a set of LIPs that constitute a "major" governance change.
What if the inflationary rewards of an orchestrator were a factor of poll participation?
Would love to explore the incentive design space for orchestrator poll participation and I think limiting inflationary rewards is an interesting alternative to slashing. But, it is worth noting that the polling system described in this LIP has a minimal on-chain footprint with all of the tallying logic pushed off-chain for the following reasons:
Implementing rewards/penalties for poll participation would increase the on-chain footprint of the polling system and require changes to the core protocol contracts. At this early stage, I'm interested in experimenting with these polls without introducing changes to the core protocol contracts. My thinking has been that these designs could be introduced in the 3rd milestone of the governance roadmap which will introduce a binding on-chain voting system. My suggestion is to continue the design brainstorm for this topic in a separate thread that could lead to its own LIP - what do you think?
BTW, is 'abstain' even a poll option?
It isn't an option right now.
I can see the value of having it as an option though so we can distinguish between accounts that did not participate at all and accounts that participated, but explicitly expressed that they would be fine with any outcome. I'd support adding this as an option.
I'm unsure about adding no-with-veto as a choice immediately due to a concern about communicating to voters why one should vote no vs. no-with-veto and it introduces another parameter (veto threshold) that needs to be arbitrarily set. But, in the interest of reducing the friction of potentially adding the choice (or others) in the future, I propose the following changes to the LIP:
This is the current contract interface:
contract Poll {
// Emitted when an account submits a yes vote
// This event can be indexed to tally all yes votes
event Yes(address indexed voter);
// Emitted when an account submits a no vote
// This event can be indexed to tally all no votes
event No(address indexed voter);
/**
* @dev Vote yes for the poll's proposal.
*/
function yes() external;
/**
* @dev Vote no for the poll's proposal.
*/
function no() external;
}
This would be the updated contract interface:
contract Poll {
event Vote(address indexed voter, uint256 choiceID)
/**
* @dev Vote for a poll's proposal
* @param _choiceID ID of the choice being voted for
*/
function vote(uint256 _choiceID) external;
}
By making this update to the contract, the addition of additional vote choices (i.e. no-with-veto) in the future would be much simpler. No changes on-chain would be required. The only changes required would be updating the UI and the off-chain indexer to be aware of the new vote choices.
So, let's say we stick with the "standard definition of quorum in a business/governance context" per @yondonfu suggestion.
And let's say we start that at the arbitrary number of 33.33%, and see how things go. This means that 16.67% (i.e. a couple of Livepeer whales) can carry a motion, assuming 16.66% also turn up and oppose it.
Now, if we are ever minded to tighten things up, to "raise the bar" in terms of participation, we might say, increase quorum value to 50%. This would mean that a vote could technically pass with only 25.1% of all voting weight saying YES to it, again, as long as 24.9% also turn up and oppose the motion (or abstain, or whatever).
Perhaps we tighten it further, and have quorum as 80%. This is better, as it requires at least 40.1% to say YES in order for a vote to pass... again, as long as 39.9% participate and vote NO / Abstain.
But 80% might be a very tough ask, and even then, the motion can carry with much less than half the total voting weight. It still doesn't sound so "tight".
The idea of 100% is obviously off the table. This means that by using the proposed construct / definition, we can't ever set the votes to require that strictly >50% vote YES in order for vote to pass. This feels wrong to me.
Here's a reminder for the alternative, which isn't an alternative definition for the same thing ("quorum"), it's an alternative "thing" with an different name altogether ("minimum acceptance quorum"):
"Minimum acceptance quorum": minimum % of all token supply that needs to approve in order for the voting to be executed.
I still support using this alternative parameter. It would allow for the desirable option in future of setting the quorum up to 40% or 50%, and being able to pass motions safe in the knowledge that there really is a majority support.
Consider also, that with the alternative definition, the "minimum acceptance quorum" can never be higher than the "threshold". So the highest the bar could be raised to would be 50%, unless you also raised the threshold. And in that case, we would be able to pass votes with 50.1% saying yes, and nobody else caring to say no.
And on a final note, I don't agree that basing onchain governance mainly on models defined in corporate boardrooms which assume some level of physically co-located in-person voting, is necessarily the most appropriate basis for an onchain governance model in a more socially distanced world.
Lots of interesting ideas being discussed here and I'd love to talk through and expand on some of these on the next community topic call.
As for the core Quorum Parameter decision I agree with QUORUM of 33.33% and THRESHOLD of 50% initially. I think then as everyone gets comfortable with the LIP process we can gradually increase to 50% over time
My issue with the current values of the quorum (or definition if you look at it from @chrishobcroft 's perspective) is that a vote with more no votes than yes votes can still be considered passing while there is a clear signal that it shouldn't have.
This is due to the fact that THRESHOLD
only accounts for "yes" votes.
THRESHOLD: The minimum percentage of voting stake that needs to vote yes in a poll in order for the poll result to be considered a signal to accept the proposal.
I think this should be
THRESHOLD: The minimum percentage of voting stake that needs to vote for or against a poll in order for the poll result to be considered an acceptable signal.
Regarding a poll interface that supports multiple options, I would be very okay with this.
I would just make use of an enumerated field just because this officially encapsulates the IDs and their respective values within the smart contract (at a negligible gas cost
contract Poll {
event Vote(address indexed voter, Choice choice);
enum Choice{ Yes, No, Abstain }
function vote(Choice _choice) external pure isActive {
emit Vote(msg.sender, _choice);
}
}
a vote with more no votes than yes votes can still be considered passing
How so? @kyriediculous
Based on the current definitions the amount of votes against is not taken into account. Given the current values one only needs 16.65% of stake to vote yes, but the remaining 83.35% can still vote no.
I don't think that's right, @kyriediculous
ah no you are right
I actually do agree though that just saying 50%+1 vote of active stake needs to vote yes would be a better construct then we don't need to have discussions about sensible QUORUM and THRESHOLD values either.
I don't think a minority should ever be able to pass a vote actually, one should actively try to gather more support instead then.
I don't think a minority <50% threshold value would be likely to be enacted or make much sense, but I could see the threshold value being higher than 50%. For example 66%, indicating that at least 2/3rds of the votes were in favor (and therefore 1/3rd of the votes could veto). Not suggesting this, but just pointing out the example of where alternate threshold values could be considered.
In reality, the Adaptive Quorum Biasing concept seems to be a good theoretical solution to both this, and the alternate quorum definition suggested above. However as it is so complex in implementation and the mental overhead to understand it to participate effectively, I'd recommend leaving it to a separate future discussion and LIP as to whether and how to implement it.
I don't think a minority <50% threshold value would be likely to be enacted or make much sense
Totally agree, but in theory a quorum of 34% and threshhold of 50.1% yes votes would constitute a passing vote despite only 17% of total staked LPT actually voicing support. Should we act on such results or ignore them?
If we decide within social rules to not act upon these close call results then it doesn't make sense to have a mechanism that even allows these votes to pass in the first place in my opinion.
Also I thought about the "abstain" option some more and I don't think it is actually worth implementing this change as of right now for the simple fact that no one will ever vote abstain because there is no incentive to do so (it costs gas and it has the same effect as not voting). We can reconsider this if/when participation incentives (or disincentives for not participating) are on the table and if a "no-with-veto" option becomes a discussion point.
Should we act on such results or ignore them?
We would act on them, because they passed both the quorum of 1/3rd and the threshold of 50% majority.
On Wed, Apr 15, 2020 at 11:18 AM Nico Vergauwen notifications@github.com wrote:
I don't think a minority <50% threshold value would be likely to be enacted or make much sense
Totally agree, but in theory a quorum of 34% and threshhold of 50.1% yes votes would constitute a passing vote despite only 17% of total staked LPT actually voicing support. Should we act on such results or ignore them?
If we decide within social rules to not act upon these close call results then it doesn't make sense to have a mechanism that even allows these votes to pass in the first place in my opinion.
Also I thought about the "abstain" option some more and I don't think it is actually worth implementing this change as of right now for the simple fact that no one will ever vote abstain because there is no incentive to do so. We can reconsider this if/when participation incentives (or disincentives for not participating) are on the table.
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/livepeer/LIPs/issues/16#issuecomment-614102057, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAACRFJP7FYB7HJQWRPMJP3RMXF3FANCNFSM4LS4C6BQ .
If we should act on those then I don't think we should ever put a quorum lower than 50%
The system shouldn't be allowed to be hijacked by 5 orchestrators, although you could make the argument that the remaining Os seem to not care if they do not cast their vote.
But overall there are very little to none real world examples where a less than 20% minority could theoretically pass a vote. Elections is always 50% , voting on legislation sometimes requires a 2/3rd majority , shareholder voting is always 50%+1, etc.
Hmm, do you really think "Hijacked" is the right way to describe the scenario where only the top 5 orchestrators vote on a contentious proposal resulting in a 17%-16% split? If the results of a poll look like they're shaping up like that, then the entire community (including the other 95 active orchestrators) have the ability to weigh in, and it doesn't take much to swing it from a yes to a no. Essentially every vote + override counts.
It's totally valid to have the opinion that quorum should be at least 50%, but I'm not sure it's correct to characterize a 33% quorum. as leading to clear opportunity. to hijack a system.
On Wed, Apr 15, 2020 at 11:23 AM Nico Vergauwen notifications@github.com wrote:
If we should act on those then I don't think we should ever put a quorum lower than 50%
The system should be allowed to be hijacked by 5 orchestrators.
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/livepeer/LIPs/issues/16#issuecomment-614105510, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAACRFJ7KM3Q4NMYCM4EA4DRMXGQZANCNFSM4LS4C6BQ .
I agree with @kyriediculous.
However unlikely it might be, merely the technical possibility that 16.67% of all voting weight could pass a motion is too prone to hi-jack by a minority.
This is especially true, given the known concentration of stake delegated by a few (e.g. 2) individuals, and delegated to a few (e.g. 5) orchestrators.
For me, the nub of this is whether to use pre-existing constructs for
I think we're building a distributed system here, not a corporation.
Specifically, for me, the proposed construct, using the "traditional" concept of a quorum, and using the proposed initial figures, is:
too prone to hi-jack by small groups of individuals... and once they've hijacked it, wrestling it from them is gonna be tough because they will inevitably have changed it in ways which make it easier for them to continue to control.
too restrictive for future amendments to the parameters, effectively painting us into a corner where we either require a) 100% participation, OR b) that votes that can be passed with <50% of total voting weight saying yes.
too "blunt" for decentralised onchain governance (I would argue that it's optimised for centralised offchain governance)
I still advocate using the MINIMUM ACCEPTANCE QUORUM
(instead of QUORUM
), and making it e.g. 25%, and SUPPORT REQUIRED
(instead of the ambiguously titled THRESHOLD
) of e.g. 50%... here are the definitions again:
Support required: what % of the votes need to be positive for the vote to be executed. Making it 50% would be a 'simple democracy'. source
Minimum acceptance quorum: minimum % of all (voting weight) that needs to approve in order for the voting to be executed. source
This would:
Still require more YES than NO for a vote to pass (e.g. 25% YES vs. 26% NO would not pass)
Require at least 25% of total voting weight to accept a motion (i.e. vote YES) in order for it to pass (up from 16.7%)
Allow us to "tighten things up" in "sensible" ways in future, e.g. make it so that votes
BOTH of these would not be possible using current construct.
The mere existence of the definition of a Quorum in a distributed computing context, for me, supports this approach. Isn't this precisely what we are doing here? Building governance for a distributed computing system?
Let's not recreate legacy corporate boardroom governance for something which is not a corporate boardroom.
I think "hijacking" is definitely the right term (It's equivalent to a shareholder proxy fight) and I wouldn't even call it very unlikely. Here's why I think that is:
Let's assume a maximum of 70% of stake will actively participate in voting at any point in time (the other 30% lost their keys , doesn't care, or worse) , well the top 5 orchestrators can now collude against the majority and they will if the economic incentive is there for them to do so. This number gets worse and will only require the top 2 O's to collude if voter turnout is 33%.
After further thought and reading the distributed computing definition of quorum linked by @criticaltv I actually think it is sensible if this is already a standard definition within the distributed computing domain.
Furthermore I still rest my case that a small minority should never be allowed to pass a vote (even if this would be unlikely), even if the voter turnout is low. If the concern is tyranny of the majority then other measures need to be taken such as a no-with-veto option (at a cost) or not only considering stake-weight (concurrent majority). I would try to avoid tyranny of a minority over tyranny of the majority.
I think the approach being taken in this LIP to avoid bad outcomes is not proactive/conservative enough. The numbers have no precedent in any traditional voting system. The assumption is that this can be tweaked later but what is there to tweak if everyone has lost faith in the governance system due to perceived (or real) unfairness. We are setting precedent for a binding voting system, this should not be threaded lightly but rather with caution. Even when not altering the definitions we should considering starting with a higher QUORUM
and lowering it when necessary (I mean it's a social construct which we are discussing over now, it can be re-discussed after deployment as well). Then again in a non-trusted environment the quorum should realistically never be less than simple majority in my opinion but I have already voiced that plenty.
Numbers/schemes that have precedent:
I actually like supermajority in this scenario if we think of other ways to tackle the tyranny of the majority or the status quo in future iterations (I'd prefer a concurrent majority rather than no-with-veto). Which is what adaptive quorum biasing does for polkadot. They depart from a supermajority to begin with, with following additions:
Specifically we have a council which, in the model of a board of directors, is a group of individuals delegated by stakeholders to help determine what happens when there is no commanding majority of stake in favour or against a proposal.
We also introduce a concept "Adaptive Quorum Biasing", which functions as a lever that the council can use to alter the effective supermajority required to make it easier or more difficult for a proposal to pass in the case that there is no clear majority of voting power backing it or against it.
Finally, we introduce a twin-mechanism "lock-vote multiplying" and "delayed vote enactment", which works orthogonally to stake-weighted voting to ensure that the more exposure to a decision that a voter is willing to take, the more their vote is counted.
Let's not recreate legacy corporate boardroom governance for something which is not a corporate boardroom.
This is where I disagree, there's lots to be learnt from traditional voting systems and there are some very good concepts which we shouldn't reinvent the wheel for. I would also say there are similarities between this and a boardroom since we are all casting our vote for what we think will result in optimal cashflow (or at least that's the idea , ignoring self-interest for a bit).
On tyranny of the majority:
It is a paradox. You design a system within certain rules which causes limitations, but these limitations are the very nature of the system. Trying to alter the limitations changes the system and all your previous guarantees built into the system now disappear as well. You can combat the issue (eg. elections, separation of powers, 2nd amendment, ...) but you can not circumvent it entirely. There are only two alternatives: fraction (cfr fork) or tyranny of a minority.
(Will follow up with my thoughts regarding quorum separately).
Just a few comments, none of which I feel super strongly about:
The quorum structures and language is always really confusing and nuanced across systems. It is hard to grasp even for researchers and implementors, so I recommend we make this as simple as possible to communicate. For what it's worth, the totally traditional nomenclature we find in the theory of social choice/voting is that quorum
is the measure of how much stake has to actively look at a proposal in order for the vote to be valid and a quota
is the measure of how that stake which came to vote must actually vote in order to pass the proposal.
I do think that setting the poll creation cost in LPT is suboptimal long-term because of asset pricing volatility and can potentially result in edge cases. There are also usability/feasibility tradeoffs here to consider (e.g. the cost of acquiring stability through DAI or pricing in DAI/paying in LPT). This is not a decision that will make or break a system, however.
Setting conservative parameters for quorums/quotas results in a tradeoff in liveness for voting contracts. Losing liveness can result in loss of funds and adverse economics, as we have learned from previous projects. Liveness is (partially) why "ragequitting" and "quorumlessness" were notable features introduced by MolochDAO. Ragequitting as such doesn't apply to Livepeer governance, but if the system is set up with (or can iterate to) conservative parameters, we should take specific steps to understand edge cases. For example, under which circumstances is burning some large % of supply fatal to liveness of the system?
I think you should consider implementing vote delegation in general, not just vote delegation to orchestrators.
Some parameters have higher impact than others. Other parameters can only be responsibly changed by voters with expertise and skin in the game. For this reason, I think quorum/quotas need to be established per-parameter rather than system-wide.
Random question: if slashing is being considered as part of this extension to the protocol, what's an appropriate way to deal with poll creators spamming the protocol with polls which carry the threat of slashing or some kind of non-participation penalty?
Non-participatory penalties ostensibly incentivizes orchestrators to automate participation.
In absence of an abstain option, is there any concern that polls carrying non-participation penalties could be used as an attack vector by a malicious orchestrator to tamper with stake distribution or introduce proposals that wouldn't otherwise pass human scrutiny.
Note: The following is an editorial comment
Given that there is still some ongoing debate in this discussion thread, the Last Call period for LIP-16 will be extended for 1 week. While there is some disagreement around the issues under debate, there do not appear to be major objections that should revert LIP-16 back to Draft status so the Last Call period is being extended instead.
While there are a couple of suggestions for improvements to the polling system that are worth discussing separately, I believe the current disagreement in this thread centers largely around the following issues:
I'll focus on the first issue in this comment because I think it is important to address this first so that discussion around the second issue can be free of terminology confusion.
Requiring a quorum or requiring a minimum acceptance quorum
I agree with the following point made by @jbrukh
The quorum structures and language is always really confusing and nuanced across systems. It is hard to grasp even for researchers and implementors, so I recommend we make this as simple as possible to communicate.
I think the priority for LIP-16 should be to establish a basic system that is as easy to understand as possible. So, I believe that standard terminology and definitions from existing literature/fields of study should be used to minimize the amount of new terminology and definitions that need to be explained to participants. The more familiar and accessible the basic system is, the better chance it has to be accepted by the community and an aligned community is critical for the evolution of the system since this is just the first iteration.
While minimum acceptance quorum is a term used in Aragon and also is used in a distributed computing context, it is far less commonly used relative to quorum which is not only used in social choice/voting literature, but also in most governance structures (and we're talking about a digital governance structure here!).
To summarize, my stance on this issue is to:
THRESHOLD
to QUOTA
given the usage of quota in social choice/voting literature and because the meaning of threshold has been a source of confusion for some peopleWith regards to the initial parameter value of quorum, the current proposal is 33% but there are clear points above from multiple people who have expressed that they wish to see a minimum quorum value of 50%, to ensure that at least half of the active stake participates in a governance decision in order for it to be valid. Before weighing in further on this, I want to pose a question...
Is it possible that a quorum with a bar that high actually centralizes power and renders the opportunity to participate in governance less accessible than a lower quorum value, due to the political processes likely required to ensure such high participation in the first place in the absence of initial in-protocol incentives/penalties for participation in voting?
How could this be the case? I think the answer may lie in something mentioned by @gavinly
Without a built-in (dis)incentive mechanism, I think stakeholders would have to be targeted individually to participate so that there isn't a bystander effect. I think that this sort of relationship lends itself to becoming a power broker.
If it's a tremendous challenge to even reach quorum, then there will be tremendous social effort required to get engagement on issues big and small. And the focal points of influence in the system will have the most ability to coordinate voting amongst those more apathetic in order to ensure that quorum is reached. If some people are apathetic on an issue in the first place, they may be likely just to get a recommendation on a vote from the person doing the coordinating. This seems like a central source of power. On the other hand if no one puts in this effort for coordination, then its unlikely votes will reach quorum, and the default-state is that polls just sit there without much attention.
Contrast this to a lower quorum value, where every vote can counts a little bit more early on. Polls reach quorum quicker, and it is clear that if others don't weigh in then changes will occur. All the sudden it becomes more accessible and important to pay attention, to vote, to participate. Sure, there may still be lobbying and coordinating on a campaign, but everyone has a lot on the line because the status quo is aways at risk.
I guess the debate here is what is more risky, centralizing in the form of a power broker politician and lobbying effort, or centralizing in the form of a few O's being able to reach quorum on their own if no one else cares about weighing in on the issue?
it is far less commonly used relative to quorum which is not only used in social choice/voting literature, but also in most governance structures (and we're talking about a digital governance structure here!).
I agree, but keep in mind that when designing for simplicity using a minimum acceptance quorum would result in a single parameter (from my understanding) instead of two, QUORUM
and THRESHOLD
, I believe the relation between the two to leads to confusion most often. So having a single parameter could actually simplify the system. I don't believe renaming to QUOTA
fixes that.
Is it possible that a quorum with a bar that high actually centralizes power and renders the opportunity to participate in governance less accessible than a lower quorum value
That depends on how much elasticity there is in the quorum value will increasing the quorum from 33% to 50% result in much more of a bystander effect.
A too low quorum value could also have negative "too small to make a difference" effects.
I also think there are a few assumptions being made when talking about possible side-effects while the ownership of the top 5 O's over the network relatively to the quorum and threshold values is something we can actually measure right now and base our parameters on.
I believe we need to settle on these two discussion points:
I am not strongly opinionated here since this system is non-binding and just an intermediary step, however I feel like my opinion can be best summarised as "minimum acceptance quorum of 50% + 1 LPTU"
By not strongly opinionated I mean that I'm fine with the current proposal as well since a compromise has already been made towards the initial QUORUM
value but I feel like the alternative shouldn't be simply discarded yet.
I also agree that we should make this as simple as possible to communicate.
I propose however, that these 2 concepts are equally simple to communicate, irrespective of how each is labelled:
minimum percentage that needs to vote in a poll in order for a result to be executed
minimum percentage that needs to vote yes in a poll in order for a result to be executed
I also propose it to be presumptuous and counterproductive to be proposing an "initial parameter value" for either option before a decision is made on which to use (except perhaps for illustrative purposes only).
We each believe, fundamentally, that one of these concepts is inherently more simple to understand than another.
I propose that this due to individuals' biases built from prior experiences of participating in democratic governance systems, by which I mean any kind of democratic decision-making system, including:
I would hazard a guess that all contributors to this thread, and most who are reading it, have experience participating in at least one, if not all of these types of democratic governance systems.
I'm not aware of a well-defined, well-communicated concept of a "quorum" in any of the above contexts, but I may be mistaken.
However...
The concepts of "quorum" is very well defined in this context, and fits most closely to option 1.
There are multiple definitions of quorum here, as projects find the best fit for them
Quorum is so well defined in this context that it has it's own Wikipedia page! It is most closely associated with option 2.
I therefore propose that our biases about which option is simpler to communicate are heavily influenced by our individual understanding, based on our individual experiences.
I also propose that this proposal is heavily biased towards US corporate governance, influenced by individuals whose primary experience of participating in such sophisticated governance systems is from the inside of a private boardroom.
I'm not one of them, but this is what I have been learning about them:
44% of the world's population don't live in a democratic nation state. Data Point: In 2015, 3.25 billion people from 7.35 billion were deemed to not be living a Democracy (source: World Population by Political Regime from ourworldindata.org).
So that's 3.25 billion who have never participated in a national democratic system. I wonder whether the concept of a quorum even exists in their minds.
297 million people (approx 33%) living in "the world's largest democracy" did not participate in the 2019 Indian general election. Turnout was reported as 614 million of 912 million (source Wikipedia: 2019 Indian general election.
But nobody needs a pre-conceived idea of what quorum means in government elections... I don't believe a national election needs to make quorum to be considered valid?
Then it's only really the "Corporate Types", "The Board", "DAO Participants", the "voting shareholders", and the "Committee Members" and Bureaucrats who ever need to consider what a quorum is. And many of them likely just vote YES or NO. Maybe some of them know about quorum. Maybe.
So, I propose that it's really probably only a small minority who have a well-formed view about what a "quorum" means, and even fewer who can entertain the idea of there being multiple viable options. Which means there is space to break with convention, and explore something fit for purpose.
They are both equally simple to understand - both for some of the 1%, who can open their minds to new ways, and for the 99% who are learning such concepts for the first time.
The choice, for me, comes down to whether we are building a governance system for:
a) a private company incorporated in the United States of America, run by voting equity holders in a corporate governance, familiar with a concept of quorum, and seeking to engage other people who think in the same way as they do,
or
b) open-source public permissionless distributed systems, run by free-acting individuals under the influence of the crypto-economics, who will inevitably think very different from ourselves.
Personally, I want b), and I have no interest in building a) but I will always keep an open mind to those who are different from myself, as I aim to contribute to a governance mechanism which can be adopted by 7.8 billion, instead of an extension of "Corporate America".
So, I don't have a vote (yet!), but if i did, I would vote to design and build a system around the concept of a quorum being defined as:
_2. minimum percentage that needs to vote yes in a poll in order for a result to be executed_
Because I believe it is better suited to the use case, and also because of the greater flexibility it affords us with setting the parameters, explained by @criticaltv
The only difference between the two definitions, is that one contains the word "yes" and the other one doesn't.
My completely unsubstantiated theory is that the one with "yes" in it, will result in a process which focuses on the positives of change, as an inevitable and natural force in this universe :)
We are also yet to hear anything from @ericxtang @f1l1b0x @adamsoffer @j0sh @darkdarkdragon @angyangie @iameli @ya7ya @ppunktw @chris-remus @r
I would love to know what they're all thinking :)
Good questions from @js0n
Random question: if slashing is being considered as part of this extension to the protocol, what's an appropriate way to deal with poll creators spamming the protocol with polls which carry the threat of slashing or some kind of non-participation penalty?
First of all, I'll note that no slashing is being proposed as part of this initial proposal. The mechanism, and incentives, aligned with requiring participation would be designed and proposed separately, at which point answers to your question would be made clear by the proposal. Some ideas though...
no-with-veto
or spam
option could be put in place to more judiciously burn the deposit.Non-participatory penalties ostensibly incentivizes orchestrators to automate participation.
Good point. Automating "Abstain" would be a perfectly rational course of action here that wouldn't help the network. Would be good to discuss solutions around this in another thread when the designs here are actually being proposed.
@kyriediculous
but keep in mind that when designing for simplicity using a minimum acceptance quorum would result in a single parameter (from my understanding) instead of two
I think using minimum acceptance quorum as the sole parameter would only work if the minimum acceptance quorum is > 50%. Otherwise, you could end up with a scenario where the minimum acceptance quorum is met, but the majority of stake shows up and votes no. For example, suppose the minimum acceptance quorum is 30% and it is the sole parameter. Then, if 30% of stake votes yes and 70% of stake votes no the proposal would be accepted. I'm guessing that most people in this thread would prefer to avoid that outcome.
The minimum acceptance quorum should be set based on the realistic turn out that can be expected/targeted so there should be flexibility in at this early stage for it to be lower than 50% if needed. In order to support this flexibility while also avoiding the outcome described above, we'd also need something like a quota parameter that requires a % of stake that shows up to vote yes. And as a result, we would end up with 2 parameters again.
@chrishobcroft
The choice, for me, comes down to whether we are building a governance system for:
The remainder of that statement notes that using a familiar concept of quorum means that the governance system is being built to match existing traditional systems. There is some truth to this, but I don't think this is quite correct. The motivation behind using familiar concepts it to use familiarity to help early participants to understand the system and researchers to analyze /help build the system. However, leveraging familiarity early on does not mean the system needs to exactly match traditional systems medium/long term. Leveraging familiarity early on is simply a way to kick start the evolution process of the system.
Because I believe it is better suited to the use case, and also because of the greater flexibility it affords us with setting the parameters
I'll restate what I believe is your main point supporting a minimum acceptance quorum in this comment in my own words just to make sure that I understand and address it properly.
Using a minimum acceptance quorum allows us to tighten things up in a sensible way in the future by requiring > 50% of stake to vote yes without requiring 100% of stake to show up.
First, I'll acknowledge that in order to require > 50% of stake to vote yes with a quorum + quota based system we would indeed need to set the quorum to 100%. This is a downside of using a quorum + quota.
However, requiring > 50% of stake to vote yes using a minimum acceptance quorum implies that > 50% of stake shows up to a poll. At this early stage, we have no idea what % of stake to expect to show up to polls - 20%, 30%, 35%? Furthermore, we don't know if it will ever be realistic for > 50% of stake to show up to a poll. So I don't think we should design for a goal that may or may not be realistic.
In this setting, in the absence of baked in participation incentives, the best that we can do is attempt to understand what a realistic % of stake we can expect to show up to a poll. As we go through this process, why reinvent the wheel? There is a large body of quorum based systems both in the crypto and non-crypto worlds that we can learn from. Using a quorum is useful because the rules for accepting/rejecting a proposal are defined relative to the current quorum which reflects the current expectations around poll turn out. As our expectations for poll turn out change given real world data the quorum can change as well (this can be a manual adjustment or a dynamic adjustment via an adaptive quorum adjustment algorithm mentioned earlier in this thread).
So, I don't have a vote (yet!), but if i did, I would vote to design and build a system
And you'll be able to vote and create polls very soon! After putting forth this initial version of the polling system you'll be able to propose and build consensus around any changes to the system that you feel strongly about. At that point if you feel strongly about using a minimum acceptance quorum then you can champion a LIP to put it forward to the community which will then use this polling system to express their preferences about the idea! And this proposal can even be informed by some real world data about how the initial quorum based system fares.
From my POV, it appears that most participants in the discussion thread thus far are ok with a quorum + quota as the starting point and do not see a particularly strong reason not to start with these parameters, but are open to alternate parameters and system designs that can be made if they are pushed forward after this basic system is established in a more community driven manner. So, my position is: let's focus on getting to a point where LIPs can be submitted and voted on by the community so that proposals such as using a minimum acceptance quorum can be considered using tools that give the broader community a voice in the matter even if they are not a part of the debate in this GH issue.
@kyriediculous
when designing for simplicity using a minimum acceptance quorum would result in a single parameter (from my understanding) instead of two
This isn't true. When using QUORUM
defined as "minimum percentage that needs to vote yes in a poll in order for a result to be executed" you still need both parameters: QUORUM
and QUOTA
.
It is still necessary to define a QUOTA
(e.g. of 50%) so that in cases where the QUOTA
is set to less than 50% (e.g. 40%), then it makes it explicit that a vote can still be rejected if 40% vote YES but 41% vote NO.
I think it is fair to say that QUORUM
become more "significant" as a parameter when defined as above, however it does not become so significant as to remove the need for QUOTA
.
Abstract
This proposal outlines a polling system that tokenholders can use to decide whether to accept or reject the adoption of a LIP. The polling system is based on an a set of on-chain contracts used for non-binding voting and an off-chain indexer used for vote tallying.
Motivation
The goal of the polling system is to give tokenholders a way to voice their opinions on LIPs as an initial step towards community participation in protocol governance.
The polling system design in this proposal seeks to fulfill the following criteria:
The design in this proposal does NOT seek to fulfill the following criteria:
Specification
The polling system will consist of following components:
PollCreator
contract that manages the creation ofPoll
contracts.Poll
contract that manages voting operations.PollCreator
contract to keep track of created polls and events emitted byPoll
contracts to tally votes.The frontend used to interact with the polling system is outside of the scope of this proposal.
Definitions
QUORUM
: The minimum percentage of active stake that needs to vote in a poll in order for the poll result to be considered valid.THRESHOLD
: The minimum percentage of voting stake that needs to vote yes in a poll in order for the poll result to be considered a signal to accept the proposal.POLL_PERIOD
: The duration of the poll in blocks.POLL_CREATION_COST
: The amount of LPT that needs to be burned when creating a poll.LPT
: The LivepeerToken contract.Parameters
QUORUM
andTHRESHOLD
are fixed point numbers using 6 decimal places of precision which matches the precision currently used in the protocol contracts.QUORUM
: 200000THRESHOLD
: 500000POLL_PERIOD
: 57600POLL_CREATION_COST
: 100PollCreator Contract Interface
Creating a poll
createPoll()
.PollCreator
to at leastpollCreationCost
by callingLPT.approve()
.createPoll()
will callLPT.transferFrom()
to movePOLL_CREATION_COST
LPT from the sender to the contract. This LPT will then immediately be burned viaLPT.burn()
.POLL_CREATION_COST
LPT is burned, a newPoll
will be deployed by this contract and aPollCreated
event will be emitted containing the address of he newPoll
.While the contract does not support crowdfunding the poll creation cost, anyone can write a crowdfunding contract that submits the
createPoll()
transaction when the contract has accumulated sufficient LPT to pay for the poll creation cost.Poll Contract Interface
Voting in a poll
yes()
will emit aYes
event containing the sender's addressno()
will emit aNo
event containing the sender's addressyes()
orno()
yes()
orno()
Yes
andNo
events emitted by this contract is left for the off-chain indexerOff-Chain Indexer
The off-chain indexer keeps track of the following entities:
The indexer will index the following poll related events:
PollCreated(address poll, bytes proposal, uint256 endBlock, uint256 quorum, uint256 threshold)
poll.id = poll
poll.proposal = proposal
poll.endBlock = endBlock
poll.quorum = quorum
poll.threshold = threshold
Poll
contract. The indexer should stop indexing thePoll
contract atpoll.endBlock
because any votes cast afterpoll.endBlock
will not be counted.Yes(address voter)
voter.id = voter
voter.poll = Poll(<POLL_CONTRACT_ADDRESS>)
voter.choice = PollChoice.Yes
No(address voter)
voter.id = voter
voter.poll = Poll(<POLL_CONTRACT_ADDRESS)
voter.choice = PollChoice.No
The indexer will also run a block handler with the following logic:
poll.endBlock > currentBlock
voter.id
is an active orchestratorvoter.voteStake = Transcoder(voter.id).totalStake
voter.id
is not an active orchestratorvoter.voteStake = pendingStake(voter.id, currentRound)
delegate = Delegator(voter.id).delegate
delegate
is an active orchestratorVoter(delegate).nonVoteStake += voter.voteStake
poll.tally.yes = 0
poll.tally.no = 0
voter.choice == PollChoice.Yes
poll.tally.yes += (voter.voteStake - voter.nonVoteStake)
voter.choice == PollChoice.No
poll.tally.no += (voter.voteStake - voter.nonVoteStake)
@adamsoffer is working on an indexer design that enables real-time pollying. This section can be updated with that design once its fleshed out.