对于比特币原理的分析,无论是 wiki,论文,知乎,博客上,有非常多的文章写得非常好。这篇文章只是我看了很多相关文章之后的个人总结,对于需要理解比特币的同学可能可以提供一些帮助。
本文只是解释比特币的原理,关于比特币的其他方面:成因,应用,现状,安全等等话题都不深入解释。
先从几个核心特性去了解比特币
最基本的公钥私钥体系
每个人都可以利用现有的签名算法来生成属于自己公钥私钥,不同的签名算法有不同的特性。私钥自己保管,公钥可以广播到网络。信息可以通过私钥进行加密,然后通过公钥解密,也可以通过公钥加密,私钥解密。比特币中生成秘钥使用的是 ECDSA 签名算法。
由于公钥私钥的特性,在比特币体系中,用公钥私钥作为记录交易信息的工具。当 A 向 B 支付一笔钱的时候,A 将 B 的公钥和这一笔钱的信息用私钥加密,并传给 B。B 得到这个信息后,用 A 的公钥解密,得到“A 向 B 支付一笔钱”的信息。这时候 A 和 B 的帐目上都有了“A 向 B 支付一笔钱”的信息。
这个利用公钥私钥加密解密过程,是比特币交易过程的最基础的一个环节。
比特币 p2p 网络去中心化系统
当多个人想要参与到交易当中的时候,交易过程的记录就没那么简单了。
每个人都有自己的交易,而且每个人都需要对每个人的交易的进行记录。这个时候需要一个广播系统把新的交易记录广播到其他人的帐目中。
当 A 向 B 发送交易信息的时候,会向周围的 p2p 节点也广播交易信息,各节点会用 A 的公钥验证 A 发送的这条信息是否为真,然后检查当前帐目当中 A 是否有这么多钱。最终当足够多节点都确定这条信息为真时,整个比特币系统就确认这条交易信息为真,并记录在各个节点的帐目当中,并广播到其他未收到该交易记录的节点。最后,在整个 p2p 节点系统中,B 用可以用“A 向 B 支付一笔钱”这条交易信息,使用 A 发送过来的钱在比特币系统中使用了。
其实,在整个比特币系统(或者说 p2p 网络)当中,并没有记录任何一笔钱属于谁,有的只是一笔笔交易记录,然后推算出 A 当前有多少钱,B 当前有多少钱。这只是一个广播和管理帐目的的系统,任何人安装了标准客户端,都可以下载历史上每一笔交易记录。没有任何一个中心节点或者服务器,所以说整个比特币系统是去中心化的 p2p 系统。
区块链(chain of block)和挖矿(mining)
在整个 p2p 系统中,如何管理这么多交易记录是一个问题。
区块链(chain of block)就是解决管理交易记录的。历史上每一条交易都存在一个 block 中,后建的 block 基于前一个 block 建立。新 block 包括了新增的大量交易记录信息和前一个 block 的 id(每个 block 的 id 为前一个 block 的 hash 码的 hash 码)。所以称为 chain of block。
当有新的交易记录产生时(可能同时间非常多),本地节点会向周围的节点发送这条交易信息。由于这些交易信息在整个系统中没有认证过,所以需要有节点对这些新的交易记录进行认证,并负责向其他节点广播。
但是得到认证资格是一件很麻烦的过程。首先需要用公钥验证是否为真,然后遍历所有的历史帐目,计算出交易者的帐面余额。假如余额足够,交易信息有效,则取出上一个 block 的 id,然后将刚刚本节点所有认证过的新的交易记录整合在一起,作一次 hash 运算,假如 hash 出来的值符合系统规定的格式,才算得到了认证资格,这才有资格将制造出的新 block 广播出去。假如计算出的 hash 没有符合,对不起,请重新计算,把最新的交易信息再整合一次,按照算法再算一遍,如此循环。
因为想要计算出符合系统规定格式的 hash 非常困难,所以这个制造新的 block 的过程叫做挖矿(mining)。假如挖矿成功,将新的 block 连到整个区块链上并广播出去的同时,都有机会制造出一条系统给自己 50 比特币的交易记录(最初是50,现在2016年是25)。但是每制造出 210000 个 block,挖矿奖励就会减少一半,最终所有比特币的总量是2100万个比特币。
比特币就是这么一个,以公钥私钥,区块链,挖矿为基础,组成的 p2p 广播系统。但是有更多有趣的问题可以深入探讨,本文就不多探讨了。想要探讨更多请点击下面的链接。
问题
xxxxx