前边介绍了比特币的基本设计原理,那么比特币具体是怎样运行的呢?
1.发行机制
和法定货币相比,比特币没有一个集中的发行方,而是由比特币网络节点的计算生成,谁都有可能参与制造比特币,而且比特币全世界流通,可以在任意一台接入互联网的个人计算机上买卖,不管身处何方,任何人都可以挖掘、购买、出售和获取比特币。比特币在交易过程中外人无法辨认用户身份信息,且可以不受任何国家的央行和任何金融机构控制而自由流通。
比特币网络通过“挖矿”来生成新的比特币。所谓“挖矿”实质上是通过用计算机解决一项复杂的数学问题,来保证比特币网络分布式记账系统的一致性。比特币网络会自动调整数学问题的难度,让整个网络约每10分钟得到一个合格答案。随后比特币网络会新生成一定量的比特币作为赏金,以奖励获得答案的人。
2009年比特币诞生的时候,每笔赏金是50个比特币。比特币网络诞生10分钟后,第一批50个比特币生成了,而此时的全网货币总量就是50。随后比特币就以约每10分钟50个的速度增长。当全网总量达到1050万个时(2100万的50%),挖矿赏金减半为25个,当总量达到1575万个(新产出525万个,即1050万的50%)时,赏金再减半为12.5个。
比特币货币供应量变化情况如图3-3所示。
图3-3 比特币货币供应量变化情况
首先,按照比特币的设计原理,比特币的发行总数是个定值——2100万个。而比特币的发行,本质就是对“挖矿”的矿工给予的奖金。在这个过程中,比特币的总量会持续增长,直至100多年后达到2100万个都生成(也就是全部被挖出)的那一天,但比特币货币总量后期增长的速度会非常缓慢。事实上,87.5%的比特币都将在头12年内被“挖”了出来。
2.交易机制
所谓比特币交易就是从一个比特币钱包向另一个比特币钱包中转账比特币,每笔交易都有数字签名来保证安全。一个交易一旦发生那么就是对所有人都公开的,每个交易的历史可以最终追溯到相应的比特币最初被挖出来的那个点(这句话不太好理解,不过接下来我们介绍输入输出的概念时,这个就比较清楚了)。
举个例子,如果小红要给小明发送一些比特币,那么这个交易就有三项信息:
输入信息:最初小红拥有的这些币是从哪个地址转给她的;
数目:小红到底给小明转了多少个比特币;
输出信息:小明的比特币地址。
比特币交易中是如何发送币的呢?需要两样东西,比特币地址和对应的私钥。比特币地址是随机生成的,就是一串由字母和数字组成的字符串。私钥也是类似的一个字符串,但是私钥是要严格保密的。比特币地址就好像一个透明的存钱罐,每个人都可以看到里面有什么,但是只有拥有私钥的人才能打开它。
当小红想要给小明发送比特币的时候,就用私钥来签署一段信息,其中包括输入信息、数目和输出信息这三项前面已经提过的内容。小红所在节点向全网发出交易信息,矿工通过算力竞争争夺记账权并将记账结果向全网广播,比特币网络中其他矿工接受区块并验证,最终将这条交易信息添加进账本。这个验证过程如图3-4所示。
图3-4 比特币交易的验证过程
3.防双花机制
(1)双花问题
所谓“双花”问题,是指在区块链加密技术出现之前,加密数字货币和其他数字资产一样,具有无限可复制性,人们没有办法确认一笔数字现金是否已经被花掉。因此,在交易中必须有一个可以信赖的第三方来保留交易总账,从而保证每笔数字现金只会被花掉一次。
(2)双花问题的解决
中心化的管理系统通过实时修改用户余额,可以有效地防止双重支付(用户利用网络延迟把同一笔钱支付给两个人),然而无人监管的去中心化的系统很难防止这一情况的发生。
中本聪通过使用区块链盖时间戳并发布全网的方式,保证每笔货币被支付后,不能再用于其他支付。当且仅当包含在区块中的所有交易都是有效的且之前从未存在过的,其他节点才认同该区块的有效性。这种方式从根本上解决了去中心化的比特币网络中的“双花”问题。
4.加密机制
作为一种加密数字货币,在比特币体系中大量使用了公开的加密算法,如Merkle Tree哈希树算法,椭圆曲线算法、哈希算法、非对称加密算法等。各种算法的概念和在比特币中的作用如下:
(1)哈希算法
关于哈希算法在第二章中已经有过介绍,在此不再赘述。比特币区块链中最常使用的两个哈希算法分别是:SHA-256算法,主要用于完成PoW(工作量证明)计算;RIPEMD-160算法,主要用于生成比特币地址。
(2)哈希指针
哈希指针是一种数据结构,哈希指针指示某些信息存储在何处,我们将这个指针与这些信息的哈希值存储在一起。哈希指针不仅是一种检索信息的方法,同时它也是一种检查信息是否被修改过的方法。
区块链就可以看作一类使用哈希指针的链表。这个链表链接一系列的区块,每个区块包含数据以及指向表中前一个区块的指针。区块链中,前一个区块指针由哈希指针所替换,因此每个区块不仅仅告诉前一个区块的位置,也提供一个哈希值去验证这个区块所包含的数据是否发生改变。
(3)Merkle树
Merkle树是区块链中重要的数据结构,其作用是快速归纳和校验区块数据的存在性和完整性。比特币网络中,通过Merkle树检查是否一个区块包含了某笔交易,而无须下载整个区块数据,即实现SPV“简单支付验证”。
扩展阅读:什么是简单支付验证SPV?
简单支付验证(SPV,Simplified Payment Verification),只判断用于“支付”的那笔交易是否已经被验证过,并得到了多少的算力保护(多少确认数)。中本聪关于比特币的论文中简要地提及了这一概念:不运行完全节点也可验证支付,用户只需要保存所有的Block Header(区块头)就可以了。用户虽然不能自己验证交易,但如果能够从区块链的某处找到相符的交易,他就可以知道网络已经认可了这笔交易,而且得到了网络的多少个确认。
(4)椭圆曲线算法
比特币中使用基于secp256k1椭圆曲线算法进行签名与验证签名,一方面可以保证用户的账户不被冒名顶替,另一方面保证用户不能否认其所签名的交易。用户用私钥对交易信息签名,矿工用用户的公钥验证签名,验证通过,则交易信息记账,完成交易。
(5)非对称加密算法
作为一种加密数字货币,比特币采用的是非对称加密算法。这种算法通常需要两个密钥:公开密钥(Public Key)和私有密钥(Private Key),公开密钥与私有密钥是一对。如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密算法使用一对密钥,一个用来加密,一个用来解密,而且公钥是公开的,密钥是自己保存的,因而安全性更好。但是,非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
事实上,比特币本身就是一串可以破解公钥的密码组,即上文提到的私钥,而这串私钥是可以分割保存的,这也是为什么很多时候我们手中的比特币并不总是以整数形式存在的原因。