技术白皮书问答汇总

概述

本文针对 YOUChain 技术白皮书中的几个重要部分做了问答,技术白皮书原文地址:

白皮书列表

共识协议

一、共识投票分为三类,其中的 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(Canonical Hash Trie) 的概念,将已共识完成的区块的区块号与区块哈希组织起来,形成一棵树,然后按固定的区块间隔,将CHT树根存储在特定的区块头上,然后通过额外的一轮共识投票对其附加了见证。从而新的节点通过跨越式的方式,通过验证附加见证,就可以验证CHT树根是否可信,进而通过该树根就能形成对一大批历史区块的背书。

其次,对于较近的一些区块,可能还没有CHT对其进行背书,但是基于caravel共识的特性,我们在快速同步区块时也可以跳跃式的对区块的合法性进行验证。上述两种机制加以结合,就是我们快速同步技术的核心,其技术细节以及安全性和性能论证,感兴趣的可以进一步查阅技术白皮书 2.4、2.5、2.6等章节。

然后,在上述快速同步的基础上,就能让轻节点较好地实现轻量级数据存储。

首先,对一个新加入网络的轻节点来说,我们还提供了轻同步的模式,轻同步跟快速同步原理上一样,不同点在于对较旧的大量历史区块,可以不同步其数据以及世界态,而只在同步到最新的若干区块的时候,才会同步相关的数据。这就极大地减轻了轻节点对历史数据的存储负担。

其次,在轻节点参与共识之后,是需要持续存储数据的,但是随着区块的增长,我们也有定期删除一些对轻节点来说不必要继续存储的旧数据,从而轻节点的数据存储量是远小于全节点的。

二、你们的快速同步跟以太坊的快速同步有什么不同?

我们的同步技术跟以太坊的同步技术有类似的地方,我们确实也从以太坊学习借鉴了一些思路。但是在一些关键机制上来说,我们有很多独创之处:

首先,我们从区块数据结构以及共识层面就对数据同步问题做了考虑,增加了机制上的支持,我们的跨越式同步技术,是首创的。像以太坊以及其他一些项目,最多是依赖于可信检查点的机制实现首次的大跨度追赶(可信检查点之前的历史数据就不要了或不检查了)。

其次,我们的快速同步技术,是确定性的,是基于共识机制可验证的。而以太坊的快速同步,也有跳跃式验证的逻辑,但它这个跳跃式验证的安全性是基于概率的,不是确定性的。

最后,以太坊依赖的可信检查点机制,一定程度上说,是中心化的;而我们的数据同步技术,是没有任何中心化控制的,是任何新加入的节点都即时可用的。

综上,我们的数据同步技术具有全新的考虑,能够为节点快速加入网络提供非常好的支持。对于一个无许可的区块链网络来说,任意节点快速加入网络的能力是很重要的,而我们很好地提供了这个能力。

P2P 网络

一、为什么要使用 QUIC 代替 TCP

Caravel 是一种交互式的共识协议,所以在共识过程中会产生大量的数据,占用比较高的网络消耗。在实际的公网中,数据包的丢失是不可避免的,TCP 协议的核心在于"丢包必须处理",在丢包发生时,连接会进行阻塞,从而等待数据包的恢复,这是由于 TCP 协议的拥塞控制机制决定的。TCP使用滑动窗口用来动态调整发送速率,而丢包恢复的过程中,滑动窗口总有停等的时刻,会消耗一个 RTT,相当于 50~100ms 的时间。另外在丢包时会发送速率会减半,所以带宽利用率也不高。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 类型是匹配的,可以进行连接的。所以节点路由中的邻居节点都可以进行连接,这样,大大的提高了连接的成功率。避免了连接资源的浪费。

Staking

一、技术白皮书中看到有个 Rewards level 的概念,可以介绍一下吗?

Rewards level 是我们在奖励结算中引入的一个概念,意在最大限度的避免产生不必要的数据,从而进一步减少对节点存储的压力。

我们在奖励计算中会对每种节点各有一个全局的 Rewards level,对于一个节点,它只需要用本节点历史结算的 level 快照,跟当前最新的 Rewards level 比较,就可以知道这段时间它可得的奖励并进行结算。

二、节点怠工是怎么判断的?有什么代价?如果服务器要重启,会被判定成怠工吗?

我们以节点的活跃程度来判断众议节点是否怠工。在一段特定的区块区间内,如果众议节点没有参与足够的区块投票,则会被认定为怠工,并被惩罚一定额度的抵押。

如果服务器需要维护,可以发送一个节点离线的操作,待生效后即可关闭服务器了。待维护完毕,要记得重新让节点上线,这样才能参与到共识中获取区块奖励。

其他

一、主网何时上线,用户如何参与挖矿?

1.官方主网,将于 2020-05-18 上线;

2.进入节点管理平台进行抵押可以成为节点,或者上线之后,进行链上抵押,就可以进行参与验证者,分得奖励。

二、对于开发者招募有何计划?另外 YOUChain 代码是否友好,社区开发者需要掌握哪些开发语言?需要专门的培训吗?

1.我们将会拿出丰厚的 YOU 作为奖励,与开发者共建公链生态。YOUChain 将会彻底开源;

2.YOUChain 支持主流语言的 SDK;

3.编程模型与 eth/tron 类似。所以入门成本极低,现有的 DApp 迁移成本也极低。

相关文章推荐