玩币族移动版

玩币族首页 > 币圈百科 >

比特币如何保证交易的一致性?

  比特币如何保证交易的一致性

  问:举个例子,假设比特币网络中有三个节点:a、b、c,这三个节点彼此距离的跳数较多,此为背景。假设a有100个比特币,然后a发起一笔交易,向用户b转账100比特币,a将这笔交易签名并广播给b附近的节点,与此同时发起同样的向c转账的交易,并广播到c附近的节点,这样b、c节点都收到了这笔交易,在整个网络中可能会有两条区块链分支,比特币是怎么避免这种情况的呢

  江卓尔答:

  1、比特币的交易刚被广播到全网,未被矿工打包到区块中时,处于“未被确认状态”。

  2、未被确认的交易可能被撤销,因此绝大部分收款人都会忽略这样的交易。b、c虽然收到了这笔未确认交易,但并不会认为已经确定收到了这笔比特币。

  少数对交易速度有较高要求的收款人(例如BitPay等第三方支付处理器),会对未确认交易进行分析,如果未确认交易支付了正常的手续费+全网未出现双花交易(例如一笔钱同时支付给了b和c,就是双花交易),就可能认为这笔交易安全性较高,因此接受或预处理这笔交易(当然有较小的风险)。

  3、对矿工来说,有部分矿工会接受了支付给b的交易,然后因为交易冲突拒掉后面收到的支付给c的交易,另一部分矿工与之相反(接受了c而拒掉b)。

  4、正常情况下,会有某一边的矿工(假设接受b的矿工)首先挖出新块,把b的那笔交易打包到区块中。新区块全网广播后,接受c的矿工会放弃与新区块冲突的c交易。

  5、个别情况下,接受b和接受c的矿工有可能几乎在同时挖出新区块,此时全网就发生一次短暂的分叉,接受b分叉的矿工和接受c分叉的矿工会继续竞争谁先挖出下一个区块。

  当一边(假设接受b的矿工)首先挖出新区块后,另一边按照比特币系统的规则,就会放弃自己的分叉(自己挖出的上一个块),接受对方的区块,放弃与新区块冲突的c交易。

  6、当然,5中的情况可能反复发生,两边在几乎同时挖出序号n区块后,又几乎同时挖出n+1区块,又几乎同时挖出n+2区块。不过随着区块数的增加,连续碰巧的概率就越来越低,到n+6区块的概率已经微乎其微了,这也是一般认为比特币交易需要6个区块确认才非常可靠的原因。

知识: 比特币交易