区块链: 技术驱动金融 - 第2章 比特币如何做到去中心化 (4)

    前两个元素是很好理解的。第三个元素是一个哈希值,代表一个指针,指向先前一笔交易的输出,表明这个币的来源。这个指针必须指向一个已被共识链上某个之前的区块所确认的交易。换句话说,任何人都可以追溯一个交易中比特币的源头

    记住,有两种比较容易混淆的哈希指针:一种是在区块内用来表示接在之前哪个区块后面的哈希指针;另一种是在交易里的一个或多个,用来指向之前的已被确认的交易的哈希指针,说明比特币的来源。

    下图为双重支付攻击示意图:

区块链: 技术驱动金融 - 第2章 比特币如何做到去中心化

2.3.1 双重支付攻击示意图

    双重支付攻击的成功与否,取决于最后哪个区块会被纳入长期共识链,是包含CA->B的区块,还是包含CA->A\'的区块。诚实节点会遵守“在最长有效分支后面延展”这一规则,但事实上,到底在哪个分支后面延展,并没有明确的答案。

    从道德角度看,两个分支是截然不同的,第二笔交易应该是无效的(即付给自己的地址),但这个区别仅仅建立在我们知道Alice先付给Bob然后再付给自己这个前提下的。从技术角度看,这两笔交易均是有效的,节点没有办法辨别哪一个是道义上合理合法的交易。

    实际上,下一个提议区块的节点有可能选择在那个包含双重支付的区块上延展,特别是,Alice如果还贿赂了一下这个节点(如果她知道这个节点是谁控制的),那这就更有可能了。这样的话,包含双重支付区块的链就要比另一条链长,那么后续的诚实节点就会在这个链上继续延展,随着这个过程的进行,这条包含双重支付的链就更可能会成为长期共识链中的一部分。相反,包含付给Bob地址交易区块的链就会被网络完全遗忘,成为孤块(orphan block)

    现在,让我们从商家Bob的角度来考虑,他如何保护自己不受双重支付攻击,这也是理解比特币安全措施的重要部分。

    当Alice广播第一笔交易——向Bob支付,Bob也在网上听着。如果Bob很草率的话,一旦收到Alice广播的交易并验证了Alice的签名有效,就立刻允许Alice下载软件,这称为零验证交易(zero confirmation transaction)。这样一来,如果Alice控制了下一个被随机选中的节点,那么Alice就可以立刻广播第二笔交易——双重支付,这个节点就可以把这笔交易放进下一个区块,并将这个区块链接到包含第一笔交易的区块的前一个区块,从而产生分支。

    显然,这是因为Bob太“草率”了。如果Bob很谨慎,那么,他不会立刻允许Alice下载软件,而是等待后续区块的出现,并从这些区块中查看Alice是否发起了双重支付攻击。一旦Bob发现了Alice企图发起双重支付攻击(即包含双重支付交易的区块被加入到区块链中),那么他就会放弃这笔交易,拒绝让Alice下载软件。如果在接下来的几个区块都是建立在第一笔交易的基础上(即被后续的几个区块确认),那么Bob就可以相信这个交易会被纳入长期共识链,这时候,就可以允许Alice下载软件了。

    以上过程如下图所示。

区块链: 技术驱动金融 - 第2章 比特币如何做到去中心化

2.3.2Bob角度看双重支付

    总之,一个交易得到的确认越多,它被纳入长期共识链的概率就越大。诚实节点总是选择延展最长的共识链,因为长链增长更多,而包含双重支付的那条链追上长链的概率就会变得越来越小。在只有一小撮恶意节点的情况下,这个结论尤为正确,因为短链想要赶上长链,那恶意节点需要一直被选中

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzpyjx.html