Harmony核心技术FAQ

Helen Li
Harmony
7 min readMay 8, 2019

--

这篇文章团队对于Harmony项目最核心的几个技术问题的详细解答,包括投票权分配、新标链、片间交易等等技术问题,这也是项目成立一年以来我们在技术和研究上所取得的进展,来看下面的解答吧!

如果你想对Harmony团队非技术问题有更多了解,可以阅读我们的年报,在那篇文章中对我们创立的历史以及团队文化有更多介绍。

在每隔一段时间投票权重新计算分配时,提到验证者需要重新快速同步分片的数据才能验证新的交易。针对该过程:

1. 针对单一验证者,在某一分片内,重新计算投票权分配具体需要多长时间?同步所在分片头和上一周期的区块数具体大概多长时间?(可以按照已有测试数据和未来增长规模趋势阐述时间变化的趋势)

投票权分配是通过信标链的随机数来计算的,随机数产生协议所用到的VDF我们打算设计在10分钟左右的完成时间,一旦随机数产生后,投票权可很快计算出来。

按一个周期一天和10秒的出块时间算,一天有8640个块,如果每个区块1MB的话,普通家庭网络下,区块同步时间大概在17分钟,具体状态的同步要看状态大小,由于我们是状态分片,每个分片的状态不会过大,保守估计几年内都不会超过100G,其同步时间也不会超过2–3小时。

而对于大validator来说,我们预计他们会同时validate多个分片,所以他们会保持多个分片的状态,对于他们来说,resharding的同步成本几乎为零。

2. 如果一个验证者A重新计算后某一部分投票权仍然维持在原有分片的情况下,是否由于该分片其他验证者投票权因重新计算导致的变化,需要该验证者A需要重新同步操作?

需要同步的是区块链状态,分片内的节点变化不影响状态变化,所以不需要重新同步。

3. 投票权重新计算分配过程是一个全网同时进行的过程?还是分批节点和网络逐步重新分配的过程? 会不会有当某个分片的大部分验证者,或者某个验证者在各个分片内的投票权由于重新计算过程中,导致某一个验证者在所有分片内都不能进行验证交易?或者某一分片内的所有验证者都发生重新计算过程无法验证交易?

重新计算的过程主要由信标链完成,但是计算结果会同步到全网,以便节点得知新的分片结构。我们的重新分片算法是基于Cuckoo Rule的随机Resharding算法,每次Resharding每个分片只有一部分投票权会被重新分配,其余保持不变,这样可以保证每个Shard的投票权的平衡,以及每个分片顺利达成共识,不受影响。

4. 单个节点的投票分布所在的所有分片,占全网范围的多少比例?大概多长时间所在的所有分片经过重新分配后会cover到全网范围?

这个比例完全取决于Staker所抵押代币的数量,如果数量很大,概率上很可能他的投票权会覆盖所有分片。如果一个小节点,只抵押获得了一个投票权,那么他只会负责一个分片。

针对信标链:

1.该路由协议识别节点或分片间的距离时,如何通过分片ID准确路由到距离最近的目的节点?

分片内每个节点都会维护一个到其他分片节点的路由表,节点在路由表的距离依据分片ID的距离计算。分片ID间的距离可以利用任何距离函数确定,例如XOR等。

2. 信标链和路由表会不会成为被攻击的单一脆弱点?如果路由表被污染,是否有分片间通信有攻击风险?

信标链和分片链是同构的,我们系统的设计会保证每个分片的安全性得到保证。对于信标链的特殊性,我们也在考虑增加信标链投票权的数量,使得其攻击成本更高,例如给信标链分配两倍于普通分片的投票权。路由协议是网络层的优化选择,其并不影响网络安全性,如果由于路由表问题,消息没能到达目的地,系统可以通过retry的方式利用传统Gossiping的方式传递消息。

3. 节点维护信标链和路由表大概需要多少资源?未来占用资源的趋势如何?是否会导致由于全网路由的增加导致存储资源的消耗?

分片节点只需要维护信标链的区块头,所以数据量很小,维护成本很低,并且我们利用Epoch block的哈希指针可以让节点只需维护epoch block的区块头即可,数据量预计在几十到几百MB。网络路由表的大小,相对区块链状态来说,微乎其微,不是内存资源的主要消耗源头。并且路由表不需要极快速查询,可以放在磁盘存储。

4. 在第一部分提到的分片和节点投票分配重新计算时,路由表需要多长时间收敛?如何保证节点/分片投票实际分配状态和路由表的同步性?

新的分片投票分配自信标链产生之后会立刻广播到全网,预计全网广播时间在几分钟范围内。由于我们的重新分片算法只改变每个分片其中的一部分投票权的分配,并且消息会被分片内所有节点转发的,所以即时分配状态和路由表在几分钟内不同步,也不会影响消息传递,最多是产生了一些多余的消息传递。

5. 片内新区块被确认后,再发给信标链再广播到全网,与普通的全网确认过程相比,效率是否真的具有有效提升?

这个主要取决于Kademlia路由协议所带来的网络开销节省。这里节省的是网络带宽,并不是减少同步时间,在同步时间上比较,直接广播其实会更快一点。但对于分片系统来说,主要的瓶颈是网络带宽,所以我们还是选择通过集中在扩散的方法处理这个问题。

针对片间交易:

1.片间交易导致的片对片发送证明,一个片内所有的验证者都会向其他片发送还是根据路由表选择某片到达其他相邻片最近的验证者发送?

片内所有节点都会依据路由表发送片间交易,这样可以保证消息的传递。

2. 是否可以理解为当片间交易发生时,每个片就可以抽象成单一验证者,片间通过信标链共识来验证片间交易?

完全正确。片间交易时,每个分片可以抽象成一个可信节点,其行为完全符合协议要求。

3. 不同分片内的智能合约是否能够完全融合?还是需要每个片单独开设?如果应用需要长时间调用同一个智能合约,但是跨越了多个分片重新计算过程,会不会引起某些不连续或者间断状态的问题?

不同分片的合约状态是分开的。每个分片需要单独开设合约。我们前期会支持跨分片的一致性数据读取,对于跨分片的数据变更,由于需要复杂的锁定机制,我们认为并不是最好的解决办法。对于需要原子性的操作,我们推荐由应用层来协调处理,或者通过部署合约到同一个分片来完成。

其他问题:

1.对于新增加的信标链,路由表和片间交易同步多环节方面,共识层面是否真的比全网共识效率更高?

如果全网共识代表全网每个节点都要处理同样的交易,即不分片,那么效率一定是很低的。如果全网共识代表不做片间数据同步的优化,那么每一笔跨片交易都需要经过全网所有节点,对所有节点产生带宽负担,由于单宽是分片区块链的瓶颈资源,这样会是整个系统效率下降。我们所做的优化会是这些负担只发生在必要的节点上,不会浪费所有节点的资源,从而降低网络阻塞风险。

2.虽然有惩罚机制,但是token数量足够多,还是会遇到常规PoS的本质问题,也就是说实现对Harmony 1% attack的难度,和普通PoS链的攻击成本类似?

是的,我们的随机分片技术保证攻击单一分片的成本和攻击,非分片PoS链全网的成本类似。

3. 相同节点数量的情况下,对比其他分片技术的链,性能提升是否显著?

我们的单一分片在400个节点情况下,可以达到1000左右的TPS。对比Zilliqa的5–600TPS和Quarkchain的60TPS有很大提高。并且如果我们允许分片内Staker投票权的融合,即多个投票权可由一个节点代理,那么单一分片并不需要400个节点的网络,那时TPS会更高。

--

--