看了两天Bitcoin的相关介绍,我深深地被它吸引了。它是经济学、密码学、概率论和计算机数据结构与算法的集大成,它颠覆了传统货币由政府发行定价的经济规律,被疯狂者视为取代美元成为未来世界性流通的货币。研究Bitcoin的困难之处是国内相关的介绍和文献较少,更多的需要在它的官方维基网上慢慢琢磨。本文是介绍Bitcoin的上篇,希望能够把什么是Bitcoin和Bitcoin的基本原理讲清楚,至于Bitcoin的算法核心,将留到下篇讲述,因为我现在还没搞懂……
Bitcoin和我们公司的移动商城积分、腾讯Q币和各种游戏币等一样,都属于虚拟货币。但Bitcoin跟它们的不同也是跟流通货币的最主要不同之处是它不依赖于一个公司、机构或政府来发行,世界上没有人能够决定它的发行量,没有人能够对它进行调控,这种货币可以影响政府,搅动经济,提供无法控制的全球走私交易,因此被人称为有史以来最危险的项目。
上述从技术上来讲是这样的,其他虚拟货币比如Q币是有一个中心节点(可以认为是腾讯的服务器)来控制着它的流通,马化腾可以轻松调节Q币的价值(目前是1 RMB=1 QB),但Bitcoin就不一样了,即便是这个世界最有权力人,比如美国总统奥巴马,也不能调控Bitcoin,因为Bitcoin存在于一个拥有无数节点的P2P[1]网络当中,没有中心节点的存在,因此无法跟踪。那谁来记录我到底有多少Bitcoin?答案是整个P2P网络上的节点,每个节点都拥有整个网络的交易清单,这是通过一系列数学公式运算出来的,这是Bitcoin的创新之一。
看完上述介绍,你可能会想,Bitcoin真有价值吗?回答这个问题首先让我们看看什么是货币。
货币的经济学解释:
任何一种可以执行交换媒介、价值尺度、延期支付标准和完全流动的财富储藏手段等功能的商品,都可被看作是货币。货币是商品交换发展到一定阶段的产物,货币的本质就是一般等价物。
简单说来,一种货币是否有价值只取决于是否有人承认它和用它来作为交换的媒介。而要得到世人的承认,货币就需要有担保(也就是它的价值)。目前普遍的观点认为,世界上所有货币都是政府或机构用黄金等贵金属来担保的。但是,政府用黄金来做担保并不可靠,因为政府总是可以偷偷加印货币来扰乱经济。(政府是可以担保,但谁来监督政府呢?谁又有能力真的监督呢?)那么,Bitcoin由什么来担保?我觉得有两个方面:
- 一是生产Bitcoin所耗费的计算资源,简单来说就是电能,这可以理解为Bitcoin的价值。按照Bitcoin的生成算法,目前在这个世界上每小时大约只会产生 300 个Bitcoin,而且产生的难度将会越来越大,即生成速度越来越慢。一个节点数可视为无穷的P2P网络,每小时只能产生300个Bitcoin,可想单位Bitcoin所耗费的计算资源之大。据估算,目前Bitcoin的价值比产生其要消耗的能量的价值要低,也就是说Bitcoin被低估了。另一方面,生产这些Bitcoin的资源大多都是闲置资源,比如我在写此文的时候CPU占用率只有20%不到,剩下的都用来挖矿吧!
- 二是它的算法和庞大的P2P网络,这可以视为它的信誉保证。数学算法决定,Bitcoin的数目不会无限地增长,也不会突然增长,大概到了2140年,Bitcoin总数会趋向一个最大值—-2100万。另外,Bitcoin采用基于公共密钥加密系统的加密算法和数字签名算法,让数据通信几乎牢不可破,更可怕的是,所有交易记录存在于整个网络当中,因此你没办法通过修改所有人的 Client 的算法及参数来加快货币产量,也不能伪造Bitcoin,除非你可以控制大部分的网络节点。
目前,国外有相当一部分社区和团体已经承认了Bitcoin并使用它作为物质和服务交换的媒介。也就是说,在这个群体里面,Bitcoin已经流通起来了,对于他们来说Bitcoin就是一种可以取代美元的货币。而另外,也有人把Bitcoin当做投资的对象,这就好比炒外汇。有人开始用实体币兑换(购买)成Bitcoin,来看看它的潜力吧,六个月前一Bitcoin只能兑换0.5美元,而现在呢,已经是7.2美元了!说了这么多,你是否承认Bitcoin呢?若你承认它了,那你一定很想知道Bitcoin是怎样产生的,Bitcoin的交易又是怎样的。这部分目前来说我不一定能说得很清楚,望请多多指正。
Bitcoin是怎样产生的呢?
首先我们要了解Bitcoin是“长什么样”的。我们知道,通过腾讯的网站,我们可以查询到自己所拥有的Q币数目,腾讯把存放Q币的地方叫做QQ钱包。只要马化腾不把Q币收回去,QQ钱包的确是既方便又安全的。可惜的是,Bitcoin没有这样一个钱包,因为前面说了,Bitcoin的网络中没有一个中央节点,也就没有一个地方能够管理我们的Bitcoin。但是,我的财富(Bitcoin数量)是得到所有人认可的,即所有人都知道我有多少Bitcoin,大家心照不宣而已。由于Bitcoin是开源项目,后来就有人开发相关网站或工具来管理自己的Bitcoin了,www.bitcoinplus.com是其中之一(通过这网站来挖矿很耗费资源,看看你的java进程吧,它会让你很吃惊)。接下来,我们来看看Bitcoin是怎样产生的。其实,Bitcoin是一种奖品。要产生Bitcoin,你就要争取成为第一个创造出新的“版块”(Block)的人。一个版块,就是上一个版块出现之后的所有交易(“我给予/销售/交易这些Bitcoin给你”)。因此,要生产Bitcoin,你的机器就要等待并获悉新的交易,把这些交易捆绑成一个版块,然后对这些数据反复运行一个散列算法[2](把任意长度的数据转换成256位),试图找到一个足够小的散列值,以便向整个网络宣布“我赢得了找到下一个有效版块的比赛”。如果成功了,你就得到50个Bitcoin货币作为奖励。
一个没有中心节点控制的交易是怎么保证安全地进行的呢?
(要弄清楚这一过程,请先阅读后面的名词解释【数字签名[3]】。)
官方维基网上举了一个例子,Alice向Bob购买Alpaca socks,下面以这个例子来进行介绍。
在Bitcoin这个P2P网络当中,每个人的ID就是ECDSA密钥对中的公钥。Alice在交易前已经知道Bob的ID(即Bob的公钥),Alice 把Bob的公钥和要发送的Bitcoin进行打包,用自己的私钥进行数字签名。网络中所有人都有Alice的公钥,都可以解开Alice发送的密文,密文中含有Bob的公钥,因此所有人都知道这笔Bitcoin Alice已经转给了Bob,现在是属于Bob的。
由于没有人知道Alice的密钥,只有她自己知道,因此没人能解开Alice的密文把里面Bob的公钥换成自己的,所以没人能在交易过程当中造假。
读到这里,你很可能依然一头雾水,但,一个重要的问题已经浮现在你的脑海之中:如何挖矿?
要知道,Bitcoin的生成规律是增量递减的,越早投入到挖矿队伍越容易挖到矿,下面就立马开始吧!
首先,需要你到Bitcoin的主页下载一个客户端,Bitcoin客户端已经兼容三大操作系统windows、linux和Max OS。
打开Bitcoin客户端,你可以看到你的个人唯一地址(Bitcoin address),它是一个散列值,是交易过程中代表你个人的公钥。软件打开后要花一段时间进行初始化,大概半个小时。
初始化的过程就是接入到P2P网络并下载网络中所有Block的过程(Block可以看做是记录了每笔交易的一种数据结构)。当初始化完以后,点击setting菜单下的Generate,寻找下一个版块的比赛(挖矿)就开始了!
小结
很高兴你能看到这,这代表你是接受Bitcoin的。不过目前要获得Bitcoin实在太难了,在Bitcoin诞生和运行最开始的时候是很容易的。另外,要想挖到矿要有一把好的矿铲,这矿铲就是一个强劲的显卡,没错,是显卡,不是CPU,我的笔记本i5 540M的配置也只有被挖的份,因为是集成显卡。下篇,我会解释一下为什么GPU反倒是决定挖矿的硬件,另外,争取能看懂算法的核心写点自己的分析和感受。这东西虽然潜力无穷,但也不是毫无缺点,下篇要重点论述一下。
名词解析:
[1]P2P网络:P2P是英文Peer-to-Peer(对等)的简称,又被称为“点对点”。P2P网络被称为对等网络,它依赖网络中参与者的计算能力和带宽,而不是把依赖都聚集在较少的几台服务器上。 [2]散列算法:用来产生一些数据片段(例如消息或会话项)的散列值的算法。典型的散列算法包括 MD2、MD4、MD5 和 SHA-1。
[3]数字签名:报文的发送方用一个哈希函数从报文文本中生成报文摘要(散列值)。发送方用自己的私人密钥对这个散列值进行加密。然后,这个加密后的散列值将作为报文的附件和报文一起发送给报文的接收方。报文的接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出报文摘要,接着再用发送方的公用密钥来对报文附加的数字签名进行解密。如果两个散列值相同、那么接收方就能确认该数字签名是发送方的。