BitShares Forum
Main => 中文 (Chinese) => Topic started by: ebit on April 17, 2014, 03:25:01 am
-
DPOS授权股权证明是这样的一个过程:股东可以影响block的产生。股东如何去影响呢?就是去给代表投票。代表是这样的一个角色:在预定的时间,尽可能将所有合法的交易打包成block。
接下来的问题,就是怎么设计一个算法保证能有效可靠的产生block。这个网络要围绕一个目的来建立规则和程序,这个目的就是:保持权力分散和迅速纠正权力滥用。
假设和恒定
1. 算法设计前提是假设:客户端是在秒级的世界时下同步的。
2. 股东对某个代表要么投票赞成要么反对,不能又赞成又反对,这是始终不变的。第一笔交易投给了一个代表,下一笔交易可以投给另外的代表。
3. 代表接受投票的上限是股份额的2%,即8万票。系统拒接代表接受多余的票。
4. 大户可以在预定的时间投票给自己。如果大户滥用这个权利,股东可以投反对票。所以,即使是大户,也要关心小股东的声音。
5. 这种算法的目的是少出力多干活。用户使用这个系统时不需要额外交易(译者理解:相对于mastercoin),额外的内容(代表接受的投票)附加在了交易块里。
(bts::blockchain::transaction) http://bitshares.org/documentation/structbts_1_1blockchain_1_1transaction.html
(bts::blockchain::transaction::vote) http://bitshares.org/documentation/structbts_1_1blockchain_1_1transaction.html#a3cd65e9deb9efbb5fc899aa7b62226f3
代表注册
1. 代表要注册一个特殊标志符,作为股东们的投票对象。
(1) 标识符是int32格式,要简单易于引用。
http://bitshares.org/documentation/structfc_1_1signed__int.html#details
(2) 标识符的状态可以显示出被支持和被反对的情况。
(3) 注册用这个程序代码:bts::blockchain::claim_name_output
http://bitshares.org/documentation/structbts_1_1blockchain_1_1claim__name__output.html
<1>当,bts::blockchain::claim_name_output::delegate_id等于0时,表示没有获得投票。大于0,虽然有投票但投票额不在有效排行内,则代表为辞职状态。
<2> bts::blockchain::claim_name_output::name名字要是各民族人群都能识别的。
<3> bts::blockchain::claim_name_output::data这里面放附加信息,如一个网站域名。
2. 注册费是一个块税收额的100倍。
(1) 确保代表严肃重视这项工作。
(2) 某代表获取1000个block的投票的时间间隔是两周还是两个月,取决于网络。
3. 代表们每年要更新一次注册。
(1) 排名前100的代表,0付费。
(2) 其他代表重新支付一次注册费。
4. 注册时名程不能重复,要有信息沟通渠道,如一个网页。
投票算法
每个钱包都有以下信息:
1. trusted_delegates—本客户端保存的代表IDs数组,他们是可信的,他们在本客户端上没有污点记录。
2. distrusted_delegates—本客户端保存的代表IDs数组,他们是不可信的,本客户端掌握了他们的污点记录,即使是蛛丝马迹。
3. observed_delegates—这个数组保存本钱包观测到的代表IDs和统计数据。
Blockchain追踪这个:
1. ranked_delegates—这个数组保存所有当前block接收的网络投票。
一旦形成个交易,你的钱包就有按下面的规则精确的选择一个代表接收投票:
1. 如果你钱包里有一个distrusted_delegates,并且他在本轮投票中拍前200名,那就优先投这个反对票。
2. 如果没有反对票要投,就投一个排名落后的trusted_delegates。
3. 如果你的钱包没有怎么用过,没有trusted_delegates,那就从observed_delegates中找一个积分高,但本轮中别人使用少的代表。
一旦形成一个交易,你的钱包就要根据代表选择参与交易的币 (你的某个币也是经由投票得来的,传给你某币时经手的代表给你的币涂上了“颜色”),程序如下:
1. 如果是要投反对票,那就优先使用distrusted_delegates经手的币。(不信任了就断交吧,留着闹心)
2. 优先使用币龄大的。避免静止风险。
3. 如果币龄超过11个月了,那就自动参与交易进行更新。(可能类似找零机制)
代表评分
一个客户端,根据自己观察到的某代表工作性能为依据对其进行评分,统计工作性能的方法:
1. 所有block--这个代表产生的所有block。
2. 所有丢失的block—这个代表理应产生但未产生的block,以chain记录为准。
3. 平均向后延迟—从接收到产生block的要求到实际产生出来的延迟时间。延迟的因素很多,可能外因居多。
4. 平均向前延迟—产生block时抢跑,可能是客户端时钟问题,也可能是向后延迟的太厉害。一个代表出现这种行为,也可以怀疑是为了同其他代表竞争而作弊。跑的慢不好,但也要避免抢跑,大家的指标要尽量稳定。
5. 计划产量和实际产量的比值—这里的产量,即,block中包含的交易数量。漏掉的交易越少越好。比值为1最好。
6. Unkonwn交易在block中的比例。代表可能会添加奇怪交易,希望避免发生这种现象。
7. 无效block数目。代表们都是很严肃的,不要发生这种添乱的行为。
8. 上限收费行为所占的比例。收费上限:最近100个block平均手续费的10%。收费便宜的代表更有群众基础。
评分系统不是完美的,数据不是绝对的,只是鼓励代表们多多竞争,并且以排名进行分类。
Block确认
产生了一个新block时,钱包要产生下列行为:
查找observed_delegates,并进行记录:
a. 时钟周期。
b. Block中包含的合理的交易数据比例。
c. Block中包含的不合理的交易数据比例。
将证实了的block推送到blockchain。最后的一条交易通常是给代表的服务费。
Block制造者
任何一个有代表ID的钱包,如果这个ID在前100名里,就可以去制造block。制造的这个block一经推到blockchain里,就有一个钱包去确认Block,即,坚持这个ID的代表是否合格。合格,则运行下面的程序:
CURRENT_TIME = UTC_SEC / BLOCK_INTERVAL
ROUND_TIME = (CURRENT_TIME / 100) * 100
PRODUCE_TIME = (ROUND_TIME + RANK) * BLOCK_INTERVAL
If PRODUCE_TIME < CURRENT_TIME then PRODUCE_TIME += 100 * BLOCK_INTERVAL
备注:一个钱包,可以有多个代表ID。
原文出处: http://bitshares.org/documentation/group__dpos.html
中文wiki: http://p2p3p.com/index.php?title=Dpos%E6%8E%88%E6%9D%83%E8%82%A1%E6%9D%83%E8%AF%81%E6%98%8E
爱比特btc-address:12iZUK5VCFKHxJTgkKo7NHtxNGbZSTDabb
pts-address:PuhKqyVgzsptuCQjsV7ZPf96qQWoA2X9st
-
终于了解到一点细节了 :P :P :P
-
感谢楼主。也看了下原文后半段,后半段也很关键。楼主打算翻译吗?
感觉整个算法设计还是很巧妙的。对DPOS多了很多信心。 :D
-
赞科普
(1) 排名100的代表,0付费。
是排名前100,不是第100
-
下午被maidsafe吸引过去了。好东西太多了。
-
下午被maidsafe吸引过去了。好东西太多了。
同支持maidsafe, 有了存储DAC才能更容易开花。但是白皮书说maidsafe foundation是要运行3年,同样的问题,不知道多久能拿出产品来。David Irvine已经在这项目上七八年了。。。
-
2. 注册费是一个块税收额的100倍。
(1) 确保代表严肃重视这项工作。
(2) 某代表获取1000个block的投票的时间间隔是两周还是两个月,取决于网络。
3. 代表们每年要更新一次注册。
(1) 排名前100的代表,0付费。
(2) 其他代表重新支付一次注册费。
我有疑问:快税收额是不固定吧?另外随着发展,块税收额肯定会越来越高,基于2,新的代表产生的门槛会越来越高,就是说发展到后来竞选代表必须要是巨头才有能力,很可能的情况是掌握在少数大公司、组织手里,这基本上和现在的pow矿池一样,股东相当于矿工,只能选择矿池,其实是没办法自己成为矿池的,但是基于代表的制度,推翻代表的过程比推翻矿池慢的多。而基于第3点老代表的优势会很明显,这个规则会使代表更换很难进行。
我的建议:降低竞选代表门槛,突出社区重要性,在社区开设竞选代表板块,竞选人描述个人/公司情况以及作为节点的硬件情况。
-
我觉得,BM是想要一个稳定的前100名代表;更换代表制度只是一个约束机制,新人想加入门槛越高老代表越忠诚。就成本收益比来说,新人想当代表还不如研究制造BTA.
有难度对系统的估值是好事。例如,美联储和IMF都是会员(股份制),前者含金量大,想加入不是一般难。
-
代表应该是普通电脑,家用网络,有前100的票就能加入,又随时可以撤出的任何人。XTS需要换手,代表们不可能一直都挖矿吧。我觉得代表要求高应该从技术上想办法降低,让任何人都有机会参与,就像PPC的POS挖矿一样。。。大众化
-
代表应该是普通电脑,家用网络,有前100的票就能加入,又随时可以撤出的任何人。XTS需要换手,代表们不可能一直都挖矿吧。我觉得代表要求高应该从技术上想办法降低,让任何人都有机会参与,就像PPC的POS挖矿一样。。。大众化
作为代表,还是需要有保证的,比如24小时不断网,有足够的运算能力,但是代表的更换我觉得必须要容易,应该按代表的受益,代表才是BTS-X最牛逼受益最好的股东,这会加速XTS流向代表,如果代表竞争不充分,最后代表就没意义了,直接是指定100个代表,或者150个候选代表,到最后就会发展成我们的人大一样,你TM还真以为是你平民选了国家主席。
-
可以参考白皮书。
ppc的pos解决了谁来产生下一个block.但不检查前一个block.
Tapos解决了检查前一个block。但没有解决谁产生下一个block.
Dpos都解决了。搞这么复杂就是为了保证系统安全有效的运行,产生比特资产。
基本上连有破坏动机和有破坏可能的代表都会被逐步淘汰。
-
可以参考白皮书。
ppc的pos解决了谁来产生下一个block.但不检查前一个block.
Tapos解决了检查前一个block。但没有解决谁产生下一个block.
Dpos都解决了。搞这么复杂就是为了保证系统安全有效的运行,产生比特资产。
基本上连有破坏动机和有破坏可能的代表都会被逐步淘汰。
可是这和中心化的BTS开99个备份有啥区别?
-
开99个,谁来开,总得有个机制。
-
dpos终究是个里程碑。如果需要在应用层面体现出更深刻的去中心化而且还要满足复杂的交易模式,只能期待maidsafe ,从更底层的去中心化来实现了。
-
我不太了解maidsafe,但我感觉像做这种p2p的dropbox的东西,非要有coin才行吗,你提供算力,存储空间,共享网络资源不就行了吗,要coin有什么用?可能我还不是是很了解
-
coin就是个衡量指标。这个指标可以是不可转让的贡献值。但,将贡献值和coin两者相比较,如果给共享了硬盘,你喜欢要哪一个当奖励?coin是历史趋势。贡献值可以理解为常量,等多的是衡量过去。coin是个比例数值,既可以方便的衡量过去也可以方便的衡量未来。贡献值,如果设计不合理,更趋向于贬值。因为你今天买的电脑是1t的硬盘,明年可能是100t的。即,你今天的贡献总比未来的要小。但,如果是比例数值,你今天拿到了亿分之一的coin,那你就可以终生享用亿分之一的权力。
贡献值就不能是比例值么?当然可以。如果还可以交易,那不就是coin了么?
-
有点跑题了。但也有点收获。比特币,作为一个点对点的电子现金系统。其价格是市场决定的。比特股呢?他将市场引入了点对点系统,并在运营过程中让代表即出力还展开博弈竞争,并在更广范围内让所有持有人有多种行为选择权。所以,比特股是一个,点对点的电子市场系统。
比特币阵营是通过blockchain创新;MaidSafe是通过虚拟化进行创新。技术上应该可以互相借鉴。
-
所以我感觉maidsafe的coin收藏价值大于流通价值
-
所以我感觉maidsafe的coin收藏价值大于流通价值
这项目开始的时候根本不可能有coin,和3i勾搭了才加入coin部分,好募资
-
所以我感觉maidsafe的coin收藏价值大于流通价值
对,收藏价值大。看比特币价格增长曲线战胜不了算力曲线就知道,coin本身的使用价值是有保证的。价格就不好说了,毕竟比特币流通性最好。