上一篇文章对比特币白皮书的回收磁盘空间进行了只字不差地研读,点此回顾回收磁盘空间。
比特币区块链的全节点数据量越来越庞大,必须使用Merkle Tree(一个层层向上的哈希归并的数据结构,数据的完整性层层锁定,修改任意一个地方都会引起后续的连锁反应)来减少数据量,同时还保证交易数据不能被篡改。普通用户不必同步全部交易数据,使用轻钱包即可。
为了节约磁盘空间,以Merkle树的方式存储,只保留根哈希值,具体交易信息直接裁掉。但是一个节点中的数据按照这种方式存储,必须需要一个相对应的简化支付验证的方案,来保证交易的快速验证和安全可靠。
It is possible to verify payments without running a full network node.
就算不运行一个全节点的网路,验证是否有双重支付也是有办法的实现的。
A user only needs to keep a copy of the block headers of the longest proof-of-work chain, which he can get by querying network nodes until he’s convinced he has the longest chain, and obtain the Merkle branch link the transaction to the block it’s timestamped in.
用户只需要复制下最长链的所有区块头信息,然后获取和某一笔支付相关的默克尔树的分叉哈希值。
He can’t check the transaction for himself, but by linking it to a place in the chain, he can see that a network node has accept it, and blocks added after it further confirm the network has accepted it.
用户无法独自核实一笔交易是否有效,但是可以通过将交易关联到链上来检验,他就可以看其他的网络节点曾经接受过这笔交易,还可以看后续生成的区块也进一步确认全网已经接受了这笔交易。
白皮书插图如白皮书插图所示,如果我们需要检验Tx3这笔交易是否真实有效,我们只用看Tx3这笔交易的哈希值一直往上递归到Merkle Root(根哈希值),看是否和已有最长链对应区块的根哈希值一致。如果一致则证明真实有效,如果不一致则证明无效,没有被其他节点承认。
As such, the verification is reliable as long as honest nodes control the network, but is more vulnerable if the network is overpowered by an attacker.
同样地,只要比特币网络是由诚实节点控制的话,这种核实方法就是可靠的,不过一旦网络的大部分算力被攻击者拥有的话,这也会让系统变得更脆弱,更容易被攻击。
While network nodes can verify transactions for themselves, the simplified method can be fooled by an attacker’s fabricated transactions for as long as the attacker can continue to overpower the network.
虽然网路节点可以自己核查交易是否有效,但是只要攻击者能一直掌握着大部分算力,这种简化验证的模式也会被他们所利用来伪造和篡改交易。
One strategy to protect against this would be to accept alerts from network nodes when they detect an invalid block, prompting the user’s software to download the full block and alerted transactions to confirm the inconsistency.
解决这个问题的办法就是接受来自于网络节点的警告,当有节点发现一个无效的区块时,提示用户的软件下载区块的全部信息,确认这笔被警告的交易是否有效。
Businesses that receive frequent payments will probably still want to run their own nodes for more independent security and quicker verification.
对于那些需要频繁收付款的商家来说,他们为了确保更加独立安全和更快的验证支付有效性,会选择运行自己的完整节点。
简化支付认证和上一章回收磁盘空间的内容是高度相关的,在节约硬盘空间的基础上,还要保证交易的安全和可检验。为了更好的理解是比特币区块链是如何做到这一点的,我们来梳理一下比特币区块链中一个区块的结构。
区块结构如图,一个区块是有区块体和区块头两部分构成的,区块体包含着该区块内全部的交易信息,而区块头只有三个数据:前一个区块的哈希值(利用哈希串联保证区块的先后顺序,让交易无法篡改)、该区块的根哈希值(该区块所有交易信息的总和)、和随机数(在PoW机制下计算出来,符合哈希值要求的数字)。
区块头包含的三个数据可以来确定一个区块的所有信息。需要注意的是,通常所说的区块哈希值,其实指的是区块头的哈希值,也就是将区块头做哈希运算,而并非整个区块做哈希运算,也不是区块的根哈希值。区块哈希值(区块头哈希值),可以唯一、明确地标识一个区块。
一个区块头的大小只有80个字节,而一个区块大小在1M左右,两者相差1万多倍,而我们在做简化验证只需要下载区块头的信息。既节约了磁盘空间,也保证了交易的安全可靠。
相关文章:
只字不差地阅读比特币原版白皮书(一)——摘要
只字不差地阅读比特币原版白皮书(二)——介绍篇
只字不差地阅读比特币原版白皮书(三)——交易篇(Transactions)
只字不差地阅读比特币原版白皮书(四)——时间戳(Timestamp Server)
只字不差地阅读比特币原版白皮书(五)——工作量证明(Proof-of-Work)
只字不差地阅读比特币原版白皮书(六)——网络(Network)
只字不差地阅读比特币原版白皮书(七)——激励篇(Incentive)
只字不差地阅读比特币原版白皮书(八)——回收磁盘空间(Reclaiming Disk Space)
什么是哈希(Hash)?
什么是数字签名(digital signatures)?
石油和比特币能被挖完吗?
网友评论