今天“链客Talk”邀请YOUChain首席架构师何畅彬来到链客直播间,和你们一块儿探讨YOUChain技术白皮书首次亮相,首席架构师深度解读这一话题。node
何畅彬 :YOUChain 首席构架师。毕业于北京大学,在分布式计算和高并发系统构架上有扎实的理论功底和丰富的实践经验。擅长十亿级 PV 的分布式系统设计实现与调优,是微服务和容器化的深度实践者。在加盟YOUChain 前,做为联合创始人&CTO 创立业内知名的开发者服务平台 Bugtags,服务数万企业客户。在此以前曾于多家国内一线互联网公司担任技术专家。算法
如下是AMA问答内容:编程
主持人:首先,请何总简要的介绍一下YOUChain是怎样的一个项目?安全
何畅彬:YOUChain(有链)核心团队来自蚂蚁金服、腾讯、微软、比特大陆等公司,致力于研发可承载大规模商业应用的公链系统及其繁荣生态。服务器
YOUChain 具备四大技术突破。YPoS(Caravel) 支撑海量节点进行快速共识;超级路由实现了复杂网络的穿透和高效通信;存储压缩让移动设备成为节点,实现彻底去中心化。网络
主持人:共识投票分为三类,其中的NextIndex投票是共识失败时才会被用到,共识成功时会不会产生额外的通讯消耗,影响整个链的运行?数据结构
何畅彬:验证者进行NextIndex投票的主要做用在于告诉其它验证者,若这一轮共识失败,下一轮共识它将会继续对某个区块进行投票。若超过2/3的验证者对同一个区块进行了NextIndex投票,就意味着下一轮的区块提议者不会造成新的区块并广播到全网,进而节省了通讯消耗。架构
若这一轮共识成功,NextIndex投票机制也是有益的。因为全部的验证者并不能保证处于同一轮共识的同一阶段,有些验证者颇有多是处于超前状态,而另外一部分的验证者处于滞后状态。超前状态的验证者颇有可能将来得及收集到滞后状态验证者的Precommit投票,从而超时并断定共识失败,开始下一轮的共识。但验证者只要收集到了足够多的Prevote投票,到了固定时间就会进行NextIndex投票。因此超前状态的验证者颇有可能收集到某个区块超过2/3的NextIndex投票的。由此一来,超前状态的验证者进入下一轮共识后,不会再一次打包交易造成新的区块并广播出去,进而减小对带宽的损耗。并发
在咱们技术白皮书的复杂度分析章节,经过对比提议一个新区块须要的通讯消耗,与进行一轮NextIndex投票所须要的通讯消耗,咱们能够得知,当区块size超过382kB,使用NextIndex机制就能够下降通讯消耗。因此,即时共识成功,只要能减小哪怕一个新区块在全网的广播,全部验证者进行一轮的NextIndex投票也是值得的。分布式
主持人:共识成功后,并不像其余共识算法同样在commit阶段会将commit信息广播到全网,这样会不会影响到节点的同步?
何畅彬:首先,验证者在commit阶段将commit信息广播到全网的目的是为了通知其余验证者,它承认了某个区块。而咱们的共识中没有这个环节主要是由于验证者只有同时收集到某个区块超过2/3的Prevote投票及Precommit投票,才会承认该区块。因此再进行一轮commit投票显得多余,由于若其它验证者也收集到了该区块超过2/3的Prevote投票及Precommit投票,天然也会承认这个区块。
在咱们技术白皮书的安全性证实章节,能够得知在同一轮共识中,不可能出现两个区块会同时拥有超过2/3的Prevote及Precommit投票。因此,若其它验证者没有收集到足够多的投票,而收集到了足够多投票的验证者将commit信息广播出去,有两种可能。1、commit信息中包含了它所收集到的全部投票信息,其它验证者天然能够凭借这些投票信息,对该区块达成共识。可是,那会极大的增长整个网络的通讯消耗。2、commit信息中不包含所收集到的Prevote及Precommit投票信息,则其它收到commit信息的验证者也没法根据该信息来作出承认这个区块的决定。所以,在commit阶段广播commit信息显得多余。
咱们实际测试过程当中发现,单个投票消息包大小不超过300B,大部分节点是能收集到足够多票数的,只有少数网络环境很差或严重落后的节点才会出现没法收集到足够多票数的状况。对于这些节点,咱们在共识模块外有额外的区块同步机制,来保证节点能快速同步。
主持人:可否进一步解释一下,数据同步与存储技术是如何支持“手机即节点”这个目标的?
何畅彬:“手机即节点”是咱们努力的方向,手机这种设备,能够对应于技术白皮书中的“轻节点”的概念。关于轻节点,咱们基于一些基本的约束条件以及功能要求来考虑数据同步与存储技术对轻节点的支持,即:1. 轻节点的存储资源比较受限,没法提供大容量存储;2. 轻节点加入和离开网络可能比较频繁,在其加入网络的时候,应该要能快速跟上当前的区块高度;3. 轻节点能够参与共识投票。
基于上述考虑,咱们从一开始就考虑了快速同步的问题。
首先,在区块数据结构以及共识机制上,就为快速同步的实现打下了基础,即经过CHT的概念,将已共识完成的区块的区块号与区块哈希组织起来,造成一棵树,而后按固定的区块间隔,将CHT树根存储在特定的区块头上,而后经过额外的一轮共识投票对其附加了见证。从而新的节点经过跨越式的方式,经过验证附加见证,就能够验证CHT树根是否可信,进而经过该树根就能造成对一大批历史区块的背书。
其次,对于较近的一些区块,可能尚未CHT对其进行背书,可是基于caravel共识的特性,咱们在快速同步区块时也能够跳跃式的对区块的合法性进行验证。上述两种机制加以结合,就是咱们快速同步技术的核心,其技术细节以及安全性和性能论证,感兴趣的能够进一步查阅技术白皮书 2.四、2.五、2.6等章节。
而后,在上述快速同步的基础上,就能让轻节点较好地实现轻量级数据存储。
首先,对一个新加入网络的轻节点来讲,咱们还提供了轻同步的模式,轻同步跟快速同步原理上同样,不一样点在于对较旧的大量历史区块,能够不一样步其数据以及世界态,而只在同步到最新的若干区块的时候,才会同步相关的数据。这就极大地减轻了轻节点对历史数据的存储负担。
其次,在轻节点参与共识以后,是须要持续存储数据的,可是随着区块的增加,咱们也有按期删除一些对轻节点来讲没必要要继续存储的旧数据,从而轻节点的数据存储量是远小于全节点的。
主持人:大家的快速同步跟以太坊的快速同步有什么不一样?
何畅彬:咱们的同步技术跟以太坊的同步技术有相似的地方,咱们确实也从以太坊学习借鉴了一些思路。可是在一些关键机制上来讲,咱们有不少首创之处:
首先,咱们从区块数据结构以及共识层面就对数据同步问题作了考虑,增长了机制上的支持,咱们的跨越式同步技术,是独创的。像以太坊以及其余一些项目,最可能是依赖于可信检查点的机制实现首次的大跨度追赶(可信检查点以前的历史数据就不要了或不检查了)。
其次,咱们的快速同步技术,是肯定性的,是基于共识机制可验证的。而以太坊的快速同步,也有跳跃式验证的逻辑,但它这个跳跃式验证的安全性是基于几率的,不是肯定性的。
最后,以太坊依赖的可信检查点机制,必定程度上说,是中心化的;而咱们的数据同步技术,是没有任何中心化控制的,是任何新加入的节点都即时可用的。
综上,咱们的数据同步技术具备全新的考虑,可以为节点快速加入网络提供很是好的支持。对于一个无许可的区块链网络来讲,任意节点快速加入网络的能力是很重要的,而咱们很好地提供了这个能力。
主持人:为何要使用QUIC代替TCP?
何畅彬:Caravel是一种交互式的共识协议,因此在共识过程当中会产生大量的数据,占用比较高的网络消耗。在实际的公网中,数据包的丢失是不可避免的,TCP协议的核心在于"丢包必须处理",在丢包发生时,链接会进行阻塞,从而等待数据包的恢复,这是因为TCP协议的拥塞控制机制决定的。TCP使用滑动窗口用来动态调整发送速率,而丢包恢复的过程当中,滑动窗口总有停等的时刻,会消耗一个RTT,至关于50~100msg的时间。另外在丢包时会发送速率会减半,因此带宽利用率也不高。QUIC协议在链接上进行了IO多路复用,针对每一个数据传输流提供了独立的丢包恢复机制和滑动窗口机制,若单个传输流发生丢包,不会影响其余的数据传输,更好的提升了数据的传输效率和带宽的利用。
QUIC默认支持TLS加密技术,而且链接创建消耗一个RTT优于TCP的TLS加密链接创建。
移动网络设备一直是咱们的重点,移动网络中的设置IP和端口会跟随链接的基站进行变化的,TCP协议使用了四元组(源IP,源端口,目的IP,目的端口)来惟一标识链接,如四元组中的任何一个元素发生改变,链接都须要从新创建。QUIC在链接创建后会生成一个ID来表示链接,当节点的IP或端口发生改变后,能够无需从新创建链接,经过ID继续进行数据通讯,对移动设备的用户体验正好。
主持人:为何NAT优化会提升链接成功率?
何畅彬:咱们每一个人都有一个身份证号码以识别我的身份,而互联网上的每台设备也有一个”身份”—IP来识别,IP是internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网络层协议。咱们熟知的IPv4,诞生在1970年,意思是网际协议的第4版(internet Protocol version 4),是TCP/IP协议使用的数据报传输机制。虽然IPv4设计的很好,但随着互联网的发现,它的缺点也逐渐暴露了出来,其中最致命的是—数量有限。IPv4地址由点号分隔的四组数字表示,每一个数字都是8位二进制数,所以IPv4总共有32位,表示的IP地址大约为43亿个。在2019年11月26日,全球全部43亿IPv4地址都已分配完毕,这意味着没有更多的IPv4地址可使用了。为了解决IPv4地址耗尽问题,人们提出并设计了一种新的技术NAT技术来解决此问题,NAT全名网络地址转换(Net Address Translate),他的主要做用就是对IP地址进行转换。NAT一般部署在一个组织的网络出口位置,经过将内部网络的IP地址替换为出口的公网IP地址提供公网可达性和上层协议的链接能力。当前NAT的应用很是普遍,遍及网络的每一个角落,他能够更好的利用有限的IPv4地址。有研究报告指出70%的P2P用户位于NAT之内,这个数字意味着大多数的PC设备须要经过NAT链接到互联网中。可是不一样的NAT设备对IP地址转换的策略不同,造成了6种不一样的NAT类型,这就形成了不一样的设备在经过NAT链接到互联网中后,因其NAT类型不一样而没法进行链接的问题。所以咱们在节点的发现过程,作了针对NAT类型的优化,在发现过程当中保证节点收到的邻居节点的NAT类型与其节点自己的NAT类型是匹配的,能够进行链接的。因此节点路由中的邻居节点均可以进行链接,这样,大大的提升了链接的成功率。避免了链接资源的浪费。
主持人:白皮书里看到有个rewards level的概念,能够介绍一下吗?
何畅彬:rewards level是咱们在奖励结算中引入的一个概念,意在最大限度的避免产生没必要要的数据,从而进一步减小对节点存储的压力。
咱们在奖励计算中会对每种节点各有一个全局的rewards level,对于一个节点,它只须要用本节点历史结算的level快照,跟当前最新的rewards level比较,就能够知道这段时间它可得的奖励并进行结算。
主持人:节点怠工是怎么判断的?有什么代价?若是服务器要重启,会被断定成怠工吗?
何畅彬:咱们以节点的活跃程度来判断众议节点是否怠工。在一段特定的区块区间内,若是众议节点没有参与足够的区块投票,则会被认定为怠工,并被惩罚必定额度的抵押。
若是服务器须要维护,能够发送一个节点离线的操做,待生效后便可关闭服务器了。待维护完毕,要记得从新让节点上线,这样才能参与到共识中获取区块奖励。
主持人:主网什么时候上线,用户如何参与挖矿?
何畅彬:官方主网,将于 2020-05-18 上线;
进入https://node.iyouchain.com/ 节点管理平台进行抵押能够成为节点,或者上线以后,进行链上抵押,就能够进行参与验证者,分得奖励。
主持人:对于开发者招募有何计划?另外YouChain代码是否友好,社区开发者须要掌握哪些开发语言?须要专门的培训吗?
何畅彬:咱们将会拿出丰厚的 YOU 做为奖励,与开发者共建公链生态。
YOUChain 将会完全开源;支持主流语言的 SDK;编程模型与 eth/tron 相似。因此入门成本极低,现有的 DApp 迁移成本也极低。