为帮助更多优秀项目产品落地,中国第一产品经理社区PMCAFF在春节期间创建了“3点钟无眠区块链产品群”硬分叉群。
目前群友包括:李笑来、陈伟星、薛蛮子、杜均、李林、徐明星等一线大佬。(具体加群方式请见本文底部)
技术大牛的石墨烯分享
“3点钟无眠区块链产品群”是国内第一个专注于区块链项目落地的社群,除了日常众多业内人士的自发讨论之外,还会固定每天邀请一位有着实战经验的群友来分享自己的思考,并随即与群友们进行更有针对性的讨论。
本次分享嘉宾:吴轶群,前虾米网CTO&创始人,阿里巴巴安全部大数据产品负责人&大数据域总架构师。现杭州智块网络科技有限公司CEO,正在研发第三代区块链公链TASchain。
以下是他的精彩分享,欢迎转发留言。
吴轶群:先放一个图,大家看看。共识的三位一体,石墨烯是共识的一种。大家知道比特币和以太坊(现在的模型)是POW,POW从上面的三位一体来看,100%去中心和高安全,但是性能非常差,比特币是每秒7笔,以太坊是每秒25笔,支付宝是多少呢?每秒20万+。
所以这个性能没法支撑大规模商业化。
大家一定都听过石墨烯性能大幅超过比特币以太坊,有多个版本,3000+的,1W+的,我们现在就来看看石墨烯是怎么做的,其实,非常简单,还是上图。
吴轶群:首先,选出N个见证人,这个用DPOS的做法,类似富人有一些名额,穷人也有一些名额,然后富人选出的人和穷人选出的人,站成一个圈。就是上面大圈里的16个小圈,代表16个选出的人。
选出以后,对这些人排一个序,站成一个圈。比如这个图里,深绿色的1号就是第一个。
好,现在开始要铸块了(创世块已有),就从1号开始往后轮,1号铸第一块,2号铸第二块,就这么轮下去,不停出块,即一个时刻只有一个见证人出块,而不是全体矿工竞争出块。整体上,就是这么简单。
陈超:2号铸第二块时CRASH了怎么办?
吴轶群:这个问题好,就是图里的红色7号。假设7号延迟出块或者CRASH,延迟出块概率更高,比如7号在中国,8号在美国,7号因为GFW BLOCK一直没有出去,每个见证人有个闹钟,到了自己的时间,不管前面的人出块还是不出块,我自动出块。在这个图里,8号就直接跟在6号后面出块,在右边的区块链图里也有表示。
陈超:对,孤立区块问题。以太坊引入了叔区块奖励解决孤立区块问题。石墨烯怎么办呢?
肖伟:分叉太厉害了,环状结构,还不如一个人稳定10分钟,但是只轮一遍。这样能减少分叉。
陈超:这样会有重复记账问题吧?
吴轶群:分叉处理很简单,一旦有人发现分叉,直接取最长链,分叉的短链被舍弃。
肖伟:叔块解决的是分叉太频繁,对于无辜的叔叔的补偿,但是本质还是分叉太频繁。
吴轶群:如果闹钟时间间隔设置合理的话,不会。
吴轶群:总结一下。
1. 所有见证人加入见证组,乱序排位组成一个圈。
2. 确定出块间隔时间,比如10秒出1块,按当前块高度对见证组求模确定铸块人。
3. 每个见证人有个闹钟,每次醒来检查现在的时间是否轮到自己铸块,是就铸块不是就不管。
4. 铸块人铸块并广播到全网。
5. 如果发生软分叉,就取最长链作为主链(分叉的原因,是有些铸币人有出块延迟或者掉线)。
吴轶群:大家想一想,这个方法性能是很快,但是最大的问题在哪里?
陈超:实际应用时,这个环一般多大?
吴轶群:EOS设置了21,21个人,5秒出块。
肖伟:我觉得最大的问题,就是刚才我说的问题。还有一个问题就是实现都知道谁记账,直接发起DDOS攻击。
陈超:等同于是一个中心化的解决方案?
吴轶群:这个圈的人,定期轮换,每个EPOCH周期,可以换不同的人,这个不能算中心化。真正的问题是安全!没有防双花攻击的处理,这个是最大的问题。
Echo Wang:如何选择见证人?是随机的吗?
吴轶群:用区块高度对圈里的人求模,确定见证人,比如当前铸第100块,圈里一共18个人,就是100/18的余数。大家想一想,如果铸块人发送双花怎么办?比如我是铸块人,我把我老婆的一笔双花交易藏着,轮到我铸块了,我就放出来。
肖伟:这个确实有可能双花,如果围成一圈,大家一个人记一块,人足够多,还好吧?
吴轶群:是的,但是它不像CASPER,有对见证人作恶的惩罚。如何防双花是石墨烯派共识最大的短板,POS都是不挖矿的,挖矿是POW的概念。有乱序处理。
吴轶群:红色标出的就是它的乱序处理代码,很简单。跟我们学C语言老师让我们写的随机数产生没有大差别。石墨烯的源码地址,有程序功底的同学可以去看下。
源码地址:https://github.com/cryptonomex/graphene
Echo Wang:这个跟拜占庭哪个效率更高呢?
吴轶群:不一样从性能说,肯定是这个高,但是它的安全性太差,那个共识三角,任何2个要好,最后那个角必然差。目前全世界还没有解法。再来说说EOS,EOS是用石墨烯作为底层框架,然后做了些改进,读过他白皮书的同学,应该知道他有个15/21确认,就是他那个圈是21个人,然后一个普通节点如何知道一笔交易被确认呢?
就是不要在21个见证人里那个当前铸块人说OK了就认为可以确认了,而是你再等等,等到那个圈里有15个见证人都认为这块OK的,你才确认这个交易。这样的好处,是可以防这笔交易在短的分叉上,但是对于双花,我从白皮书里还是没有看到解法。
两篇关于EOS比较靠谱的中文讨论:
https://baijiahao.baidu.com/s?id=1584094082649416758
https://www.jianshu.com/p/f65bf7691482
陈超:双花不是大问题吧,检查上一个区块时也能发现双花,btc要6次确认的严格场景,也是保证最坏情况没有双花。
吴轶群:问题是已经被双花了,还怎么回来?如果是恶意铸块人,我藏起的这笔双花,可能是一笔大金额,搞了这票我就发财了。
陈超:一个区块里出现双花,下一个见证人就立刻发现了,等同于按照上一个区块crash处理,1次确认就发现了,都不用等6次。
吴轶群:石墨烯的代码里,当前铸块人发动双花,别的见证人是不验的,直接写入主链。
这就是石墨烯和拜占庭最大的不同。
陈超:那肯定不行啊,既然产生区块速度这么快,验证一下,花的时间很短的。
吴轶群:我也很好奇这点,看了几遍代码,确认就是不验的。
陈超:为什么不验?我觉得没有道理,就21个见证人,不差这点时间。
吴轶群:我也很好奇这点,但是验的话,会引出别的问题,比如21个见证人里,有2个见证人验了发现有双花,然后呢?
陈超:见证人顺序的乱序的,下一个见证人验完后,广播,跟不验广播,差不了多少时间,验完后广播,相当于强制引入 1次确认。
吴轶群:问题是当前铸块人决定这个块有效,不是见证人。
陈超:那就下一个铸块人验证,随机选择。
吴轶群:问题是如何相信下一个铸块人是好人?这里面有些问题很绕,主要是去中心化的思维,下次讲拜占庭讲解的时候,大家一对照,会明白很多东西。一旦需要别的验证人确认,就是拜占庭将军的思维。那样就死活达不到石墨烯现在的TPS了。因为验证失败怎么办,而且怎么认定说验证失败的人就是好人。这里面一堆问题,拜占庭将军协议就是来解这些问题的。
跟小蚁的拜占庭将军协议相比,没有见证人之间的协作,每个铸块人是单独的节点,不需要知道其他见证人的存在。
这是石墨烯和拜占庭最大的不同,即每个见证人是相对独立的,到了我的闹钟,我就出块。
别的我不管。而拜占庭是需要见证人之间协作的。
进群规则&联系方式
进群规则:
1,需要原有项目优秀,且已经准备上链的CEO或产品任负责人。
2,不需要投资人了,群内已经聚集很多大牛投资人。
3,不要拉合伙人进来了,自己转内容吧。
4,长期不活跃请退,留出更多名额,给好项目。
联系方式:
加群主 @阿德 微信,私聊邀请进群。(阿德微信号:adee10000)
注:本文内容来自前虾米网CTO&创始人,现杭州智块网络科技有限公司CEO 吴轶群在3点钟无眠区块链产品群内的主题分享,如转载或引用请注明出处。