How to prevent DPOS being abused (如何防止DPOS 机制被滥用)

in #eos3 years ago

DPOS, with full name of "Delegated Proof-of-Stake", is a consensus mechanism proving its success in Bitshares and Steemit. Put it in a simple way, block producers are generated by votes from token holders.

DPOS,它的全称是“Delegated Proof-of-Stake”,简单地说,就是矿工由代币持有人选举出来的一种机制。它的好处已经被比特股和Steemit系统成功验证。

In Bitcoin, miners compete for POW to calculate hash, to pack up block to the chain and get rewarded, more and more miners consolidate together to some big pools to mine, as we know, 4 of the largest mining pools are located in China due to cheap electric bills, thus POW consensus systems not only consume large amount of electric energy, but also become more and more centralized.

在比特币系统里,大家一起挖矿,因为工作量证明机制,互相竞争算hash值,给区块打包到链上得到回报。越来越多的矿工团结到各种大矿池挖矿。众所周知,因为电价缘故,矿池中最大的四个就在中国。工作量证明机制被证明不但大量浪费电,并且正变得越来越中心化,违反了它的初衷。

A system based on DPOS is different, e.g. Bitshares or Steemit, it has only 21 block producers or witnesses to mine. These block producers are selected by voting from token holders.

而基于DPOS机制的系统则完全不同,例如,在比特股或者Steemit系统,每个周期只有21个区块需要挖,每个周期就21个矿工在干活。 这些矿工由代币持有者选举产生。

E.g. in steemit, block producers or witnesses are generated by voting from steem holders. Some steem holders want to vote according to their own will, others like to delegate their voting powers to agents. The voting system will rank witness candidates according to the token weighed votes they get. e.g. If Tom has 1000 SP ( Steem Power ), and Jerry has 300 SP, Tom will have more weigh over Jerry in their votes. The top 20 ranked witness candidates will have the right to generate a block each in a round, another witness candidate will be chosen from the remained candidates ranked out of the top 20 according to their weighed votes, they are picked up by turn. Thus in each round, there will be 21 witnesses to produce 21 blocks and it takes 3 second for each block to be produced.

以Steemit为例,矿工由steem持有者选举产生。有些steem 持有者喜欢按照自己的意愿选,而有些把自己的选举权给了代理人。投票系统按照投票人持有steem的权重来对候选人排名。例如,汤姆有1000个SP,杰瑞有300个SP,这样,汤姆的投票权重就比杰瑞大了。排名前20名的矿工候选人在每一轮中各自对一个区块进行打包,还有一个矿工候选人从排名20以后的候选人中按照获得的投票权重轮流选出来。这样每一轮有21个矿工对21个块打包和广播,每个块产生时间是3秒。

This system looks perfect in terms of decentralization. However, there is still way to manipulate the votes on how witnesses can be generated. In steemit , each steem holder can vote for maximum of 30 witnesses. In my opinion , this is too much. If a person or institute holds a large amount of steems, it can exert huge influence on those top 20 witnesses, thus the blocks can be produced according to the wills of the people with too many steems.

就去中心化来说,这个系统看似完美。但是,还是有漏洞的。在Steemit中,每个steem持有人可以最多投票30个人。在我看来,这有点多了,如果个人或机构持有太多的steem,那么他们就会对 前20名矿工的产生有重大影响力。如此,区块的产生就很可能如他们所愿。

In this way, an initially designed decentralized system would probably become centralized and manipulated by minority just as present POW does.

如此,初衷是去中心化系统将逐步变得被少数人操纵的中心化系统,如目前的POW。

It would be a tragic to let a decentralized system being totally controlled by money. I would raise up some solutions for this. We can remain the maximum numbers of votes ( 30 in Steemit ) each voter has.

眼睁睁看着一个去中心化系统被金钱完全控制住,将是一个悲剧在上演。我在此提出一些建议来解决这个问题。我们可以保留目前的每个投票人的投票数目不变(在steemit里是30个)。

One solution is to use reputation weigh to evaluate the votes on witnesses, as you know, steem can be obtained over seconds, but reputation has to be accumulated year after year. Therefore, the steemit ( or the bitshares, eos which use DPOS for consensus ) cannot be manipulated by money, but maintained by people who contribute to the community and amass their reputations.

一个解决方案就是对投票者的权重由个人信誉来衡量。众所周知,steem可以一夜获得,而信誉则需要长年积累。这样,Steemit (或者比特股,EOS等使用DPOS来共识的系统)就不能被金钱控制,而是由那些真正对社区做出贡献的人累积出来的信誉来决定。

Another solution is somehow like current voting system in many western countries. Each EOS holders has equivalent right to vote and has the same weigh so that the system becomes purely decentralized and cannot be manipulated by single person or institute.

另一个解决方案就类似现在西方的选举投票系统。 每个EOS持有人由同样的投票权重,这样,系统就变得彻底的去中心化,不能被个人或机构控制了。

With the above two solutions, EOS token's function may be reduced too much and not beneficial to the market price of EOS token. I have the final solution which eos.io system can use a combination of both EOS tokens and reputation to consider while voting on block producers or other proposals. Yes, we can use EOS tokens as one of elements in consideration of voting power, however we should apply a cap to that. e.g. we can restrict voting power of EOS tokens to 10000 tokens and this number can be obtained by voting using reputation weigh as well. By utilizing both reputation and a capped EOS tokens in the voting system, DPOS consensus system can be more fair and efficient, in addition, EOS tokens will still be very popular but its price won't get crazy.

如果使用以上两种解决方案,那么EOS代币的功能就被大大削弱,不利于市场价格。我还有最后一个解决方案。 我们可以用EOS代币和个人信誉结合起来作为投票权重,但是我们要对EOS 代币数量的权重加一个最大值的限制。比如,可以把EOS 代币的投票权限定在10000个代币以内,而这个数字,也可以由以信誉权重投票来决定。如此,DPOS共识系统就变得公平公正,有效率,而EOS代币还是会很受欢迎,只不过它的价格可能不会疯狂了。

I hope @dan can notice this post by chance and reconsider the implementation of DPOS to the coming EOS.io software.

希望@dan能碰巧看见这个帖子,能在即将到来的eos.io软件里重新考虑实现DPOS。

Sort:  

There is some good thinking here. The problem with using reputation is that it is a function of how much has been earned through upvotes, so it is easy to self vote with large sums or even "circle jerk" or buy votes to build reputation so it is not always a good indicator.

Having 1 vote per account is certainly an ideal situation, but on a platform that allows anonymous account creation it would leave it vulnerable to a sybil attack type vector. Only once proper identity management is implemented can this work.

I personally think in the short term the number of witness votes should be reduced so that someone with a large stake can't control the top 30 witnesses with votes.

There is some real innovation with DPOS and it's better than PoW but it's not quite there yet. Hopefully EOS will be another step better.

Yes, you are right, reputation can be obtained via upvotes, so it is possible to boom in a short period with large sums of upvotes by other accounts holding large amount of steem which may be created by the voted account owners. However, this can be detected and if being abused, the account should be banned. Account can be created by automation scripts so one vote per account is not ideal way. So reducing number of witness votes per account may work. But still, different accounts may be owned by the same people. Anyway, human nature is filled with greedy and there is hardly a perfect way to achieve pure fair and decentralization.

dan看见了~

嗯,希望他能考虑下这建议。