难度调整算法DAA
如何调整难度目标以确保区块的平均产出时间为10分钟。
什么是难度调整算法
难度调整算法是根据过去的区块产出速度来调整下一个区块的难度目标,以确保新区块的平均产出时间为10分钟。难度调整算法是区块链网络中的一个重要组成部分,它可以控制区块的产出速度,控制新币的发行速度,同时也确保了区块链的安全性和稳定性。
下文介绍比特币的难度调整算法。以及MVC网络中使用的ASERT-DAA算法。
比特币的难度调整算法
比特币采用每2016个区块(约两周)进行一次难度调整。以下是比特币难度调整算法的详细步骤:
- 计算实际生成时间
实际生成时间是过去2016个区块生成所花费的总时间:
- 计算理想生成时间
理想生成时间是期望的生成2016个区块的时间:
- 计算新的难度目标
新的难度目标根据实际生成时间与理想生成时间的比值调整:
- 调整幅度限制
为了避免难度目标的剧烈波动,比特币协议规定每次难度调整的幅度不能超过四倍或小于四分之一:
这种计算方法的缺陷是调整的速度较慢,对于比特币这样的成熟稳定的区块链网络来说,这种调整速度是可以接受的。但是对于新兴的区块链网络来说,价格的波动可能会导致算力的剧烈波动,从而严重影响区块的产出速度。
BCH刚从比特币分叉出来时就出现了由算力潮汐导致的出块困难。之后BCH采用了EDA(Emergency Difficulty Adjustment)算法,以便在短时间内调整难度,确保区块的产出速度。但是EDA算法存在一些问题,容易被攻击,因此BCH后来采用了ASERT-DAA算法,经过实际的考验,ASERT-DAA算法在BCH网络中表现良好。因此MVC网络也采用了ASERT-DAA算法。
ASERT-DAA 算法
ASERT-DAA算法是BCH网络中的难度调整算法,它是一种基于算力的动态难度调整算法,可以在短时间内调整难度,确保区块的平均产出时间为10分钟。
比特币现金(Bitcoin Cash, BCH)的Asert难度调整算法(Aserti3-2d)是一种改进的难度调整机制,用于解决传统难度调整算法的一些缺陷,确保网络在算力波动时保持稳定的出块时间。Asert(Automatic Difficulty Adjustment by Smoothly Updating and Real-Time Targeting)算法在2020年11月15日的升级中被引入。以下是Asert难度调整算法的介绍:
Asert难度调整算法的特点
-
连续调整: Asert算法采用连续的难度调整机制,而不是每2016个区块进行一次调整。这样可以更及时地反映出当前算力的变化,从而保持更稳定的出块时间。
-
时间参数化: Asert通过时间参数化的方式进行调整,直接根据实际出块时间与目标出块时间的差异调整难度。这使得调整更加灵活和精确。
-
指数平滑: Asert算法使用指数平滑方法,避免了难度目标的剧烈波动,确保了平稳过渡和稳定性。