首页 > 资讯 > 应用 > CITA:面向企业级应用高性能区块链内核
CITA 区块链是如何防止双花的?
2019-11-01 14:04:10作者:CITA来源:CITA
CITA 关键设计
CITA 是如何防止双花的?首先简单解释下双花问题。双花简单来讲就是一笔钱进行了两次消费。对于传统的区块链,如果交易者使用同一笔余额,发送两个不同的交易到全网,虽然短暂时间内可能会造成分叉,但是因为区块链的共识的一致性,最终最多只有一笔成功,一笔资金不能同时被使用两次。用户交易在被打包入块后,被确认的交易平台在的链存在一定概率被更长的链取代,会导致原来已经被确认的交易被回滚掉。在公网中,使用 POW 的算法时,随着区块被确认的次数增加,交易完全被确认的概率逐渐逼近 100%,但是永远到达不了 100%。以比特币网络为例大约 6 个块,以太坊大约 13 个块,即可在工程上认为交易被完全确认,如果想要更高的确定性,可以等待更多的块确认。
在 CITA 中,共识默认采用了 CITA-BFT 共识,一种经过了区块链适应性改造和调优的BFT算法。CITA-BFT 使用 Rust 实现,是一种确定性的共识算法,一旦当前块共识处理成功,就表示这个块被完全确认,不需要像比特币或者以太坊那样去担心因为更长的链出现而导致交易回滚。所以当能从链上查询到交易被成功处理,即表示交易被确认,无需再等待。所以如果用户广播两个有冲突的交易,交易经过共识后按照一定顺序来处理,最终在前面交易成功处理后,后面的交易因为条件不满足,肯定会处理失败。
在任何系统中,确定性都是基于概率的。对于 POW,存在 51% 攻击。但是实际情况中,假设一个矿工有 25% 的算力,在 6 个块被确认后,这个矿工通过构造一条超过主链长度的链来进行攻击,需要的概率为 (0.25/0.75)^6,约等于 0.00137,所以可以认为足够安全。但是实际上的确定性并没有这么高,因为存在以下几种考虑:1)不能认为其他矿工是诚实的,2)由于网络原因,其余矿工并不是完全在挖主链,存在挖陈腐块,以及算力在分叉链的情况,3)矿工对其他其他矿池进行攻击,结盟,运行零费用矿池等等手段,可以以非常低的成本来构造51%攻击。所以对于基于POW的公链来讲,确定性并不能满足所有的商业场景,并且确定时间也比较长。
而对于 CITA,由于采用 BFT 风格的算法,被确认的区块中至少要包含 2N/3 + 1 个共识节点的签名,伪造 ECDSA 签名的难度要远远高于挖矿算力计算难度 nonce 的。在 2011 年,比特币网络算力最高时,每秒大约可以进行 15 万亿次哈希计算,而对于 256 位的私钥,存在 2^256 种可能,所以使用当时情况所有的算力来暴力破解私钥,需要 pow(2,128) / (15 * pow(2,40)) / 3600 / 24 / 365.25 / 1e9 / 1e9, 大约需要 0.6537992112229596 万兆年的时间。并且破解需要大于等于 2N/3 + 1 的节点的签名才可以。所以可以认为交易一旦共识入块之后,即可认为是确定的,链被回滚的概率可以忽略不计,实际上造成双花的可能性几乎为零。CITA 较公链的 POW 有更好的确定性,更短的确定时间。