比特币背后的技术

探究比特币背后所用的一些技术。

比特币网络是由中本聪( Satoshi Nakamoto )提出的一套去中心化的电子货币交易体系,解决了现有金融体系信息不对称导致的一些问题。其交易流程的介绍可参考这两篇文章:

一个故事告诉你比特币的原理及运作机制
How Bitcoin Works

本文主要介绍比特币网络中的关键技术–交易验证和区块链。

交易验证

比特币网络中的货币交换通过交易( transaction )进行,每笔交易可以包含多个输入( inputs )和多个输出( outputs )。每个输入会包含一些信息,告知来源于过去的哪个输出,而以前的输出中会包含那笔交易接收方的公钥信息,因而只有上笔交易的接收方才有可能使用以前输出中的货币进行新的交易。所有输入的货币量必须大于等于所有输出的货币量,多出的货币量将作为交易费用。交易之间的关系可用下面这张图来表示。

比特币交易双方的信息只使用一串唯一的字符表示,称为比特币地址。此外为了保护交易双方的隐私,比特币地址默认在每次交易中都会重新生成,交易是完全匿名的。
由于比特币交易的验证基于非对称加密算法,因而私钥的安全性极其重要。为了更高的安全性,一种叫做多重签名的技术开始逐渐应用到比特币的交易中,它将单一私钥验证改为多重私钥共同验证,一定程度上降低了私钥泄漏造成损失的可能性。

区块链

区块链是指所有交易记录的集合,由于交易记录被成块成块( block )的存储且按时间顺序连在一起所以叫做区块链。区块链技术是比特币最重要的创新,也是其核心所在。它解决了货币产生、记录、验证等一系列问题。

产生货币

比特币网络基于 Hashcash 算法创造货币, Hashcash 是需要耗费较多计算资源且运气刚好的情况下才能算出结果但结果却很容易被验证的一种算法。比特币节点在每生成2016个块后会重新校准 Hashcash 算法的难度,以保证出币速度按照预定的规则进行。
当一个节点通过 Hashcash 算法得到货币后,它会创造一个块,并将获得的货币作为第一条交易记录在块中,而后将计算过程中收到的交易记录也一块儿放入其中,最后将此块连到目前区块链的末尾并向网络中其他所有节点广播,其余节点收到此块后会进行验证,如果没问题则将其连入自己的区块链中。
节点可能会同时收到多份可以连到区块链末尾的合法块,此时区块链会同时连入这些块进而分裂为多个分支,不过随着时间的推移这些分支中的大多数都会停止增长,节点始终会以长度最长的分支作为交易的最终依据。
这种竞争算法将会保证区块链始终按照网络中大多数计算资源期望的方向发展,保证最大的公平性,但缺点是造成交易确认需要一定时延,否则将会造成资金流失(可参考关于 Mt. Gox 大量比特币被盗的讨论)。为了防止损失目前比特币产生后需要等待当前块之后再成功连入100个块才能使用,具体的计算验证可查看中本聪关于比特币的论文

记录货币交易

当节点收到交易后,它首先会验证交易的合法性,对于合法的交易将会广播给网络中的其他节点,并将其按交易费用由高到低排序,等待放入即将生成的区块中。如果在等待过程中收到新的区块造成区块链变化,排队的交易需要重新验证并再次排序,因而交易费用越高交易完成得就可能越快。交易费用最终归生成区块的节点所有。
由于区块链的生成采用上面所说的竞争算法,因而确认交易完成需要等待一定的时间。按照比特币的生成规则,平均需要等待10分钟才能生成一条确认信息(即一个块的生成时间),确认信息越多表明交易可被变更的概率越低。在比特币之后产生的电子货币莱特币将时间缩短为2.5分钟,因而其能更快的完成交易确认。

验证货币

区块链通过竞争算法最终会在网络中保证一致性,验证货币仅需要扫描区块链即可完成。不过随着交易信息的大量产生,对区块链的扫描必然变得低效而缓慢,而对于验证货币而言有效的交易信息仅仅是那些输出还未被消费的交易信息。为了解决这个问题,节点除了存储区块链之外,还会根据区块链生成一个专门存储未消费交易记录的数据库( chainstate ),对于新到的交易和块直接使用这个数据库进行验证。

一些有关的资源

-Bitcoin 官方网站 可以获得客户端、源代码等构建比特币网络所需要的工具
-Bitcoin wiki 比特币网络的帮助文档
-blockchain.info 查看当前比特币网络实时状态的网站