为了提高效率,大体有以下这么几个思路:
1.依然采用中本聪共识,但调整协议参数。
通过调整出块时间和区块大小来提高效率。如莱特币(2.5 min/1MB block), BCH (10min/32MB block)。但有研究表明,无论这两个参数如何调整,提高吞吐率必然以降低安全性为代价,在第二部分,我将为大家分析这其中的原因。
2.基于中本聪共识的思想,使用 DAG优化POW。
这可以在不牺牲去中心化和安全性的前提下,大幅提高吞吐效率。
3.使用 PoS 或 dPoS 机制。
dPoS算法如 EOS 很大程度上牺牲了去中心化,有不小的争议。而 PoS 算法也存在股权集中、难以应对长程攻击(Long Range Attack)等去中心化或安全性问题。
4.使用分片 (Sharding), 状态通道 (State Channel) 等侧链或链下解决方案。
其中一部分被有些人称为 Layer 2。 这些方案与 Conflux 目前的解决方案是正交的,它们在尝试从另一个角度解决吞吐率问题,对吞吐率的提高是可以效果叠加或优势互补的。例如,提升全节点的吞吐率的技术可以帮助使用分片技术的系统减少跨链交易所造成的性能瓶颈,也可以完成更多的状态通道结算交易。
2.CFX的思路
允许每个区块选择多个区块作为自己的父亲或祖先,哪怕在出块速度很快的时候,也可以避免诚实区块之间无意义的竞争。这样,就绕开了中本聪共识中安全与效率两难的困境。
在提高效率的同时,必须考虑引入的新的攻击情形和安全性威胁,给出解决方案。
3.设计思路与CFX最接近的算法
参考论文1和论文8、10
Spectre
Spectre 无法对所有区块排一个序出来,这导致它上面无法跑智能合约。
Phantom 算法
被conflux发现有漏洞。
PHANTOM为本地块DAG找到一个近似的k集群解决方案,以减少潜在的恶意块。
- 1.对每个叶子节点的past子图涂蓝色,记录涂蓝色的块数为k
- 2.找到让涂蓝色块数最多的那个叶子节点,记为bmax
- 3.past(bmax)
- 让anti(bmax)记录光锥外区块,若是它的块数少于k,也全部涂为蓝色
- 根据各个块的过去视图中的蓝色块数对每个块打分。
CFX3:论文附录中可能有
4.形似但非神似
雪崩共识,Hashgraph
这些算法本质上都是联盟链的算法。与通过“股权质押”的方式,将联盟链算法转换成PoS 公链算法。但联盟链转换成PoS公链算法的过程存在下面的安全性问题。
4.3无利害攻击(Nothing-at-Stake Attack)
当一个 PoS 链因为网络延迟、长程攻击或其他原因出现分叉时,
矿工在 PoS 多个分叉上同时出块所带来的额外成本可以忽略不计,而选择同时出块可以保证无论哪一条分叉链最终胜出都可获得收益。与长程攻击不同,精巧的激励机制设计可以避免这一攻击。
新公链项目应该从POW开始。
4.4长程攻击(Long-Range Attack)
在 PoS 公链中,如果攻击者获得了一些账户的私钥(投资者追求短期收益),这些私钥在历史上某一时刻控制了超过51%的股权,进行的攻击。
最严重的远程攻击会导致新加入的节点必须信任一些中心化的网站给出的信息,而这会导致 PoS 公链成为一个本质上中心化的网络。
配合女巫攻击(Sybil Attack),攻击者可以从区块历史和节点数量上都获得和被攻击主链接近的水平,令新加入的节点无法区分,只能通过人工指定的方式选择。
这样新参与者必须咨询受信任节点来安全地加入系统,这一问题被称为“主观依赖”(Weak Subjectivity)
5.核心算法思路
1.各个节点达成一致的账本结构
- a.父边构成树
- b.依据 Ghost 规则选择一条主链(link-cut tree)
- c.新区块的父边指向主链区块,引用边指向所有剩下的叶子区块
2.决定一个安全的、一致的区块排序
- 2.1确定epoch
- a.主链上的每个区块确定一个Epoch
- b.被最新引用的分叉上的块属于该主链区块所在的epoch
- 2.2区块排序
- 按照Epoch的顺序来给区块排个序(epoch内部先不管)
- 在每一个Epoch内部,我们再按照拓扑排序来确定区块的顺序(这两步顺序可调整)
- 根据区块的哈希值来打破平局
- 2.1确定epoch
- 3.交易排序
- 在前的区块包含的交易在前
- 冲突或者重复时,前者让后者无效
link-cut tree(CFX7)
将处理时间从O(n)降到O(logn)
- 沿着树上的一个路径,对所有节点加减一个值(新加块的权重)
- 沿着树上的一个路径,找到最大或最小值
- 找树上的两个节点的最近共同祖先(LCA)
150W的块的图G中,用link-cut方法,处理块速度平均为5000blocks每s。
将树结构切分为多条路径。
增加一个块,判断是否更新Pivot Chain时,
先计算出LCA(b and p),p是当前pivot chain上的最后一个区块。
计算含p的子树权重是否仍占据优势,若是,不更新pivot chain
否则,从LCA block开始,向后向下计算子树权重变化。
CFX的一个类似于比特币的简洁安全性证明
Scaling Nakamoto Consensus to Thousands of Transactions per Second
n是b子树上全部块数,m是a子树上诚实节点全部块数
ζk
攻击者产生块的速度乘以时间,所以这里是攻击者产生块的数量。
其中,
对比比特币:
z=n-m,但是前面的加1作何解释???。λ 表示单位时间间隔内发生的次数,即为q z / p
Secure High-Rate Transaction Processing in Bitcoin的定理10可以推出上式