Author Topic: Delegated Proof of Stake (DPOS) White Paper  (Read 62583 times)

0 Members and 1 Guest are viewing this topic.

Offline toast

  • Hero Member
  • *****
  • Posts: 4001
    • View Profile
  • BitShares: nikolai
Regarding multiple-winner approval voting:

Quote
Approval voting can be extended to multiple winner elections. The naive way to do so is as block approval voting, a simple variant on block voting where each voter can select an unlimited number of candidates and the candidates with the most approval votes win. This does not provide proportional representation and is subject to the Burr dilemma, among other problems.

Other ways of extending Approval voting to multiple winner elections have been devised. Among these are proportional approval voting[48] for determining a proportional assembly, and Minimax Approval[49] for determining a consensus assembly where the least satisfied voter is satisfied the most.
Do not use this post as information for making any important decisions. The only agreements I ever make are informal and non-binding. Take the same precautions as when dealing with a compromised account, scammer, sockpuppet, etc.

Offline liondani

  • Hero Member
  • *****
  • Posts: 3737
  • Inch by inch, play by play
    • View Profile
    • My detailed info
  • BitShares: liondani
  • GitHub: liondani
I suppose we should read from here down and consider what the various tradeoffs would imply in a DPOS system

http://en.wikipedia.org/wiki/Approval_voting#Effect_on_elections

hope they will not suprise all of you...

Offline toast

  • Hero Member
  • *****
  • Posts: 4001
    • View Profile
  • BitShares: nikolai
I suppose we should read from here down and consider what the various tradeoffs would imply in a DPOS system

http://en.wikipedia.org/wiki/Approval_voting#Effect_on_elections
Do not use this post as information for making any important decisions. The only agreements I ever make are informal and non-binding. Take the same precautions as when dealing with a compromised account, scammer, sockpuppet, etc.

Offline toast

  • Hero Member
  • *****
  • Posts: 4001
    • View Profile
  • BitShares: nikolai
This seems to be a long thread and this topic could be buried in here somewhere, but did anyone consider the approval voting system or rank voting when putting the ideas in place for this system?   I am sure that if DPOS is a success, copy cats will use alternate voting processes. 

http://en.wikipedia.org/wiki/Approval_voting

http://en.wikipedia.org/wiki/Ranked_voting_system

Agent86 is proposing approval voting, I think it could be ok but I have to think about it more carefully. Ranked voting is probably too expensive to recompute each block as you have to do full instant runoff each time - not sure though
Do not use this post as information for making any important decisions. The only agreements I ever make are informal and non-binding. Take the same precautions as when dealing with a compromised account, scammer, sockpuppet, etc.

Offline carpet ride

  • Hero Member
  • *****
  • Posts: 544
    • View Profile
This seems to be a long thread and this topic could be buried in here somewhere, but did anyone consider the approval voting system or rank voting when putting the ideas in place for this system?   I am sure that if DPOS is a success, copy cats will use alternate voting processes. 

http://en.wikipedia.org/wiki/Approval_voting

http://en.wikipedia.org/wiki/Ranked_voting_system
All opinions are my own. Anything said on this forum does not constitute an intent to create a legal obligation between myself and anyone else.
Check out my blog: http://CertainAssets.com
Buy the ticket, take the ride.

Offline Agent86

  • Sr. Member
  • ****
  • Posts: 471
  • BTSX: agent86
    • View Profile
The issue is in tracking total stake that supports them.  That means every 'balance' in the blockchain would have to have N delegates attached to it instead of just 1.   When you spend that balance you subtract from N delegates and reallocate your votes for those shares to M delegates. 
I don't think you need to "subtract from N delegates" each time you spend. 

Stake supports delegates: 1,2, & 3.
transaction says "add delegate 4"
Stake supports delegates 1,2,3, & 4.
transaction "remove delegate 2, add delegate 5"
Stake supports delegates 1,3,4, & 5
transaction "remove all prior delegates, add delegates 6 and 7"
stake supports only delegates 6 & 7.
transaction with no change
Stake continues to support delegates 6 & 7

What you are asking for is that each delegate sink or swim based upon an independent election.  This is no longer 'delegation' but rather popularism.
I guess if you make that distinction, then delegation encourages delegates to support the interests of the faction that delegates to them, popularism encourages delegates to appeal to all shareholders and support the interests of the whole DAC.

If you require all delegates to get at least 51% net support then you are asking all of the users to evaluate all of the candidates and that is much to high a burden.    If you lower the threshold then it opens the network up to attack by individuals with large minority shares that can move faster than people can 'vote out' their candidates. 

So I see such a system resulting in either no delegates getting to the threshold or an attacker creating 10000 delegates giving them all a bunch of support faster than anyone can vote them all out.  It would become very costly to vote against 10000 delegates produced by the attacker. 
There is no bottom "threshold",  It's basically the 100 accounts that have the most support are active delegates.  So no chance that no one reaches the threshold.  (I said that 50% could be used as a threshold to add additional delegates only in the situation that all active delegates already have over 50% support)

Let's say a big holder, I'll even give him 10%, wants to attack the network by creating 10000 delegates.  Everyone sees this and no one has any incentive at all to vote for those 10000 delegates except for the attacker.  (there are no downvotes, so people don't have to bother voting him down).  The only way his 10,000 delegates get active is if the rest of the 90% of the commmunity can't get it together enough to give 100 delegates more than 10% support each.  People would probably be voting for just about anyone able to run delegates that wasn't one of this ridiculous group of 10,000.   

There is nothing for this attacker to gain by doing this and everything to lose.  He runs the risk of having his giant and otherwise hugely valuable 10% stake be forked out completely by the rest of the community or otherwise become worthless, not to mention wasting a bunch of money registering 10,000 delegates for no reason and looking like a jerk for doing so.

Assuming that running a delegate is a profitable position, rational economic actors operating within the current voting system will end up voting for themselves or for delegates that kickback to them.  The down voting can't stop this behavior.  Anyone trying to be a hero by downvoting will miss his own opportunity to vote for himself or for someone giving him a kickback, he also misses the opportunity to vote for a candidate that is trying to benefit the whole DAC, he also will never be able to stamp out the activity of everyone voting for themselves or giving kickbacks so stopping one of these actors only leaves more spoils for others doing the same thing.  An entity willing to run delegates at a loss and give big kickbacks could quite likely surreptitiously gain over 50% of the delegates over time by appealing to people's profit motive (see GHash.IO as example). This entity need not be heavily invested in the chain.

Offline Agent86

  • Sr. Member
  • ****
  • Posts: 471
  • BTSX: agent86
    • View Profile
To clarify what may be a misunderstanding, I'm am proposing to eliminate the ability to "downvote".  You either support someone to be a delegate or you don't: it's binary. (right now it's positive, neutral, down)
As soon as you see one of your delegates behaving badly you automatically pull support.

If you don't have downvotes you incentivize centralization because a delegate can offer to pay dividends to only his supporters.
Lack of support in a system where there's no cost to supporting someone isn't a punishment

Again, I think you are wrong.  If a delegate is offering to buy votes (pay dividends to supporters) I think they are very unlikely to get the kind of broad support needed to compete as a delegate under my proposal.   As long as they don't reach the level of being an active delegate (perhaps as much as 50% support) than there is no reward to the supporters.  If for some reason more than half the stake still wants this person to be a delegate, after they have offered to buy votes (and probably called out for it on the forums) than so be it.  --But everyone else can jump in and support them too without withdrawing their support for other delegates.  Now this person who is paying dividends only to their "supporters" is paying dividends equally to all shareholders, which is fine and kind of what we wanted to see anyway.

Under the current proposal, someone buying votes could very likely succeed.  They only need support of a very small percentage of the stake to become a delegate (by definition 1% makes them an active delegate but probably a lot less).  Then their supporters (maybe they only need to vote for themselves if they are a big holder) get the kickback that offers no benefit to the rest of the network.  Now you are hoping that others discover this behavior (how?) and use their votes to downvote.  But really their is a huge cost to being the hero that finds out this behavior and downvotes because now you can't vote for the delegate that you want.  So most likely you don't bother and the vote buyer gets away with it.  Not to mention, as I already pointed out, If the vote buyers are colluding they can play cat and mouse and switch their vote to a new delegate that you haven't voted down and then you'll have to track them down again to try to vote them down.  long story short you'll give up.

Offline toast

  • Hero Member
  • *****
  • Posts: 4001
    • View Profile
  • BitShares: nikolai
To clarify what may be a misunderstanding, I'm am proposing to eliminate the ability to "downvote".  You either support someone to be a delegate or you don't: it's binary. (right now it's positive, neutral, down)
As soon as you see one of your delegates behaving badly you automatically pull support.

If you don't have downvotes you incentivize centralization because a delegate can offer to pay dividends to only his supporters.
Lack of support in a system where there's no cost to supporting someone isn't a punishment
Do not use this post as information for making any important decisions. The only agreements I ever make are informal and non-binding. Take the same precautions as when dealing with a compromised account, scammer, sockpuppet, etc.

Offline Agent86

  • Sr. Member
  • ****
  • Posts: 471
  • BTSX: agent86
    • View Profile
To clarify what may be a misunderstanding, I'm am proposing to eliminate the ability to "downvote".  You either support someone to be a delegate or you don't: it's binary. (right now it's positive, neutral, down)
As soon as you see one of your delegates behaving badly you automatically pull support.

Offline bytemaster

By your proposal, the more people you vote for, the more your vote matters. Someone voting for 100 delegates will have 100x more voting power than someone voting for 1.
That's not true. How so?  You can't vote for the same delegate 100x times.

If you want to throw as much weight as you can behind one candidate you support them exclusively (just denying support to potential competitors).

You could make 1000 delegates and vote for each of them but that gets you nowhere because they still each only have as much support as your personal stake can provide.  No one else has any reason to vote for them.  Other candidates on the up and up will get much more broad support and your delegates will never become delegates.

How exactly would you tally votes in this scheme?

You tally votes by simply ranking delegates by total amount of stake that supports them.  Top 97 delegates are active or anyone with over 50% even if that means more than 97 active delegates.

The issue is in tracking total stake that supports them.  That means every 'balance' in the blockchain would have to have N delegates attached to it instead of just 1.   When you spend that balance you subtract from N delegates and reallocate your votes for those shares to M delegates. 

What you are asking for is that each delegate sink or swim based upon an independent election.  This is no longer 'delegation' but rather popularism.

If you require all delegates to get at least 51% net support then you are asking all of the users to evaluate all of the candidates and that is much to high a burden.    If you lower the threshold then it opens the network up to attack by individuals with large minority shares that can move faster than people can 'vote out' their candidates. 

So I see such a system resulting in either no delegates getting to the threshold or an attacker creating 10000 delegates giving them all a bunch of support faster than anyone can vote them all out.  It would become very costly to vote against 10000 delegates produced by the attacker. 



 
For the latest updates checkout my blog: http://bytemaster.bitshares.org
Anything said on these forums does not constitute an intent to create a legal obligation or contract between myself and anyone else.   These are merely my opinions and I reserve the right to change them at any time.

Offline Agent86

  • Sr. Member
  • ****
  • Posts: 471
  • BTSX: agent86
    • View Profile
By your proposal, the more people you vote for, the more your vote matters. Someone voting for 100 delegates will have 100x more voting power than someone voting for 1.
That's not true. How so?  You can't vote for the same delegate 100x times.

If you want to throw as much weight as you can behind one candidate you support them exclusively (just denying support to potential competitors).

You could make 1000 delegates and vote for each of them but that gets you nowhere because they still each only have as much support as your personal stake can provide.  No one else has any reason to vote for them.  Other candidates on the up and up will get much more broad support and your delegates will never become delegates.

How exactly would you tally votes in this scheme?

You tally votes by simply ranking delegates by total amount of stake that supports them.  Top 97 delegates are active or anyone with over 50% even if that means more than 97 active delegates.

Offline liondani

  • Hero Member
  • *****
  • Posts: 3737
  • Inch by inch, play by play
    • View Profile
    • My detailed info
  • BitShares: liondani
  • GitHub: liondani
I think that it is perfectly fine for someone to vote for themselves without broad community appeal.  They have appealed to a 'broad' percent of the shareholders (themselves) and thus have equal rights as any other similar group of shareholders. 

They cannot do much harm and if they did attempt to harm then they will generate broad community disapproval pulling a relatively little amount from many candidates to concentrate it as a negative vote on one candidate.

Maybe you find this interesting...
"How Bad is Selfish Voting?"
http://www.cs.cmu.edu/~arielpro/papers/votePoA.aaai13.pdf

Offline toast

  • Hero Member
  • *****
  • Posts: 4001
    • View Profile
  • BitShares: nikolai
By your proposal, the more people you vote for, the more your vote matters. Someone voting for 100 delegates will have 100x more voting power than someone voting for 1. If you suggest normalizing it then that's the same as splitting stake-vote.

How exactly would you tally votes in this scheme?
Do not use this post as information for making any important decisions. The only agreements I ever make are informal and non-binding. Take the same precautions as when dealing with a compromised account, scammer, sockpuppet, etc.

Offline Agent86

  • Sr. Member
  • ****
  • Posts: 471
  • BTSX: agent86
    • View Profile
Your proposal would require every transaction to update N delegates where N is unbounded. 

Why?  You don't need to update all delegates in each transaction.  The transaction could just specify changes, or no change at all.  You wouldn't necessarily bother to change the delegate elections unless you have a reasonable stake that you intend to keep for a while, then you could send a transaction to yourself specifying new delegate elections and stating all prior delegate elections are void.

Yes, voting for a ton of delegates could make the size of your transaction large and therefore the transaction fee more expensive so you wouldn't be ridiculous with it because you would have to pay for it. (probably no more expensive or large than splitting up your stake/transactions to specify that you are voting for different delegates in current proposal anyway)

Offline bytemaster

I think that it is perfectly fine for someone to vote for themselves without broad community appeal.  They have appealed to a 'broad' percent of the shareholders (themselves) and thus have equal rights as any other similar group of shareholders. 

They cannot do much harm and if they did attempt to harm then they will generate broad community disapproval pulling a relatively little amount from many candidates to concentrate it as a negative vote on one candidate. 
For the latest updates checkout my blog: http://bytemaster.bitshares.org
Anything said on these forums does not constitute an intent to create a legal obligation or contract between myself and anyone else.   These are merely my opinions and I reserve the right to change them at any time.