中本聪发明比特币,解决了什么问题?看比特币白皮书的第一句话
本文提出了一种完全通过点对点技术实现的电子现金系统,它使得在线支付能够直接由一方发起并支付给另外一方,中间不需要通过任何的金融机构。
比特币其实是一种通过点对点技术实现的电子现金,其发行不依赖任何的金融机构。它是怎么做到的?技术手段。
比特币中可挖掘的技术点很多,这里就介绍几个:
- 默克尔树,是一种哈希二叉树,用于快速归纳和校验大规模数据完整性。
- PoW(工作量证明),实现公平、去中心的网络
- 区块链结构,这是数据不可篡改的基础。
- UTXO 模型,非账户系统,只存交易输入输出记录,用脚本锁定交易输入输出。
前三个都是前人研究的结果,并不是中本聪的首创,但中本聪却能这几个理论结合在一起,最先创造出可靠的电子现金,这就是大师和专家的区别。
默克尔树(Merkel Tree)
在比特币网络中,默克尔树用于生成一个区块中所有交易的数字指纹,且提供了一种校验区块是否存在某交易的高效方法。
“默克尔哈希树”是一棵树状的数据结构(二叉或多叉),该树状结构的所有节点都是Hash值。如下图
默克尔树是自底而上进行构建的,叶子节点成对分组后将两个hash值组合后生成新的hash值,形成上层的树节点,重复整个过程直到只有一个树节点为止,也就是所说的根节点。根节点的 hash 值是整个交易集的唯一标识,保存在 block 头信息中,用于 PoW 过程。
默克尔树在简易支付验证(SPV)SPV节点广泛使用,与全节点相比,SPV节点数据量小很多。SPV节点不保存所有交易也不会下载整个区块,仅仅保持区块头。它们使用默克尔路径来验证交易是否存在于区块中,而不必下载区块中所有交易。
工作量证明(PoW)
工作量证明指通过有效计算得到的一小块数据。这个网站anders.com/blockchain/block.html,可以展示 PoW 算法的过程。
如上图,在Data
框中随意输入一些数据,点击Mine
,网站就开始做 hash 运算,直到结果满足一定的条件,比如这里是前四位为0,这个过程被称为挖矿。挖矿就是重复计算区块头的哈希值,不断修改 nonce 参数,直到与哈希值匹配的一个过程。在比特币的网络中,这个计算的 hash 结果会根据当前网络的算力动态调整,以保证每10分钟出一个区块。
区块链结构
区块链的基本结构:
区块分为区块头和区块数据,区块头包含当前区块的hash,上一个区块的 hash。
在这个网站 anders.com/blockchain,可以很直观地展示区块间相互连接的过程。
如上图,初始块(第一个块)的Prev 是 0,其后每个区块的Prev都是前一个区块的 Hash 值。
这个 Hash 是通过当前区块中交易数据算出来的。一旦改变区块中的任何一笔交易,则该区块的 hash 就会改变,其后的每个区块都要重新计算 hash,才能使得这条区块链的数据有效。
上图,改变第一个区块的内容,随便输入几个字符,比如“today”,该区块的hash就改变了,背景色变为粉色,表示当前链的数据无效。点击 Mine 按钮重新计算 hash。第一个区块背景色变绿,但其后的区块依然是粉色,因为第二个的 prev hash 不指向第一个的,要重新计算。
点击第二个区块的 Mine
,第二个区块 ok了。
然后继续第三个,以此类推,也就是改变区块链中某个区块的任意数据,其后的区块都要重新做工作量证明,而这非常耗 CPU。因比特币的共识算法,是认网络中最长的链,所以只有算力达到全网的 51%,才有100%的把握最终成为网络中最长的链。
需要注意的是,51%攻击能达到修改的数据只能是自己地址的交易,无法修改他人地址的交易,即双重支付。比特币每一笔交易都由输出地址的私钥锁定,只有拥有私钥才能花费这笔交易。这就是下面我们要介绍的 UTXO 模型。
UTXO 模型
比特币交易的基本单位是未经使用的一个交易输出,简称 UTXO。UTXO是不能再分割、被所有者锁住或记录于区块链中的并被整个网络识别成货币单位的一定量的比特币货币。
当一个用户接受比特币时,金额被当做 UTXO 记录到区块链中。这有点类似于复制账本,如下图:
一笔交易会包含一到多个输入和一到多个输出。更详细的介绍看这里,把这本书中的代码敲一下,就理解了 UTXO 模型。
脚本支付,多重签名,每个交易输出都有一个锁,这个锁只有输出者的私钥才能打开。V神由此得到启发:在区块链上运行智能合约,然后有了以太坊。