圈则为比特币的去虚拟化奠定了坚实的基础,是所有参与者共同的贡献。
其中意义最深远的是,比特币通过构建自己的生态圈展现了社会契约重构的一个鲜活案例。自由本位的货币(包括目前所有的法币)本质上是一纸契约,政府低成本印出的每张钞票代表着它与持有者签订的一份价值合同,这个合同名义上以政府的信用为担保,实质上以政府的强制力执行,因而是一种强制契约。个体既无选择的余地,亦无对抗的能力。19世纪欧文的乌托邦理念试图把民众从政府的强制契约中解放出来,其思路是让所有人都变成好人,从而消除监管的基石。结果是他失败了。
而在比特币的世界里,几乎一切都依赖于算力投票:比特币的增加靠算力投票获得,比特币的安全传输靠计算机投票保障,比特币交易的不可欺骗、不可撤销也靠算力投票达成,甚至比特币规则的更改、客户端的完善都靠算力投票选择。仅仅依靠算力投票,去中心化的比特币网络竟然神奇地存续了下来,而且持续发展壮大。其中的关键在于,算力背后是一个个矿工和用户,他们用计算设备直接为对自己最有利的行为投票,一个GPU一票,公平合理,童叟无欺。这里面没有代议制,没有法官和警察。因而,比特币网络实际上完成了一场大范围直接民主的激进实践,打造了一个货币自治的乌托邦:每个人依靠自己的直接投票权建立起一种新型的P2P契约。这种契约在零信任的前提下达成,好人没有额外回报,坏人的伎俩也无从施展。依托这种理论上极其不稳定、实践上却极其有效的P2P契约,比特币网络的发展出乎每个人的意料。
这或许是许多高智商极客热爱比特币的真正原因,也可能是比特币给我们上的最深刻的一课。把这种思路扩展至金融、经济领域,我们或许可以确定的说:真正的互联网金融和互联网经济还远远没有到来。
笔者曾在一个比特币的QQ群里担任管理员,群里大部分是刚入门的比特币者,对于比特币的原理一知半解,连中本聪的论文译本都没完整读过。这些人却往往一出手就买上几十上百个比特币,即使按照当时的价格,也相当于人民币几万到几十万元。他们无一例外的对于比特币的未来充满了信心。
在比特币的官方论坛上有各种不同的观点、意见,其中对比特币持长期悲观态度的人不在少数。一般来说,知道这个论坛且在上面发言的网友对比特币的认识已比较深入,他们非常清楚比特币存在的问题,并且认为这些问题最终会毁掉比特币。
那么,比特币是否会因为这些问题而最终消亡呢?比特币的确存在很多缺点,但相较于传统货币和其他虚拟货币,这些缺点实在是微不足道,远不足以毁掉比特币。
在本书出版之时,比特币可能又经历了一次过山车行情,价格到达一个新低点,市场上会再次弥漫着“比特币已死”的论调,而比特币的各种问题也被夸张地呈现在公众面前。那时候,请你记得我以上的判断以及200多年前雨果说过的一句话:
世界上最强大的力量莫过于应运而生的思想。
 ̄文〃√
 ̄人〃√
 ̄书〃√
 ̄屋〃√
 ̄小〃√
 ̄说〃√
 ̄下〃√
 ̄载〃√
 ̄网〃√
05 挑战与破解之道
比特币的常见问题
比特币交易全过程
首先,讲一个关于比特币交易的故事。从这个故事里,我们可以了解比特币交易的流程,以及流程中各个步骤存在的问题。
有一天,长人在网上闲逛的时候发现了一家网店,里面的商品新潮有趣,而最重要的是,它支持比特币支付。作为比特币的坚定信仰者,他与店主聊得非常投机,决定以10个比特币的价格购买一件商品。出于对店主的信任,长人与店主约定,由前者将10个比特币打到后者的地址上,而后者在收到比特币后再将商品发出。
店主打开自己的比特币钱包,创建了一个新的比特币地址,并告知长人。店主创建新地址的本质是生成了一个密钥对,这个密钥对由一个公钥和一个私钥组成,其中私钥只有店主自己知道,而公钥则是公开的,可以用来验证支付的真伪。
长人收到店主的地址信息后,打开了自己的比特币钱包客户端,并指示客户端将10个比特币发送到店主的收款地址。钱包客户端里储存着长人所有地址的私钥,为了简化问题,我们假设长人在其中一个地址里放了11个比特币,而本次支付只从该地址进行扣款。在发送比特币时,钱包客户端以该地址的私钥对本次交易进行签名,并向全网公布这次交易信息。
这个时候,网上所有的节点或者说每一个矿工都会验证这个交易是否有效。验证方法也很简单,拿出这个地址的公钥对照即可。在这个环节,名叫宋欢平和睡空空的两位矿工也接到了这个交易信息。在经过验证确认交易有效后,他们把这个交易放进内存里,等待进入数据块。过了一段时间,宋欢平的电脑算出了一个符合条件的随机值,系统宣布一个新的合格数据块诞生,并向整个网络公布了这一消息,其他节点(包括睡空空)收到后就开始在这个数据块之后开始新的挖矿工作。而长人和店主的交易信息就被打包放进了宋欢平挖出的数据块里,并且得到了初步确认。当下一个区块链接到这个区块时,交易就会得到进一步的确认。在连续得到6个区块的确认之后,长人和店主的这笔交易基本上就不可逆转地得到了确认。
店主发现10个比特币已经到达他的地址,经过一段时间的等待确认后,他把商品发给了长人,本次交易宣告完成。
确认时间的问题
在这个故事里,最引人注目的问题在于比特币的确认时间。宋欢平和其他矿工不断地测试以得到符合条件的随机值,而求得随机值所需的时间已被系统预先限定,平均耗时10分钟。也就是说,无论矿工们多么努力,挖出一个数据块所需要的时间总是在10分钟左右。如果要保证交易的不可逆转,则要等待6个数据块完全确认,这至少需要1个小时的确认时间。
为什么比特币交易需要确认呢?这涉及双重支付的问题。如果长人给店主支付10个比特币的同时,未等系统确认,又用同一个地址(内有11个比特币)向其他地址支付了10个比特币,并且采取了一些技术手段(比如将10个比特币分散成极小份发送到若干地址里,使得系统优先确认该项交易),使得后一笔交易优先于前一笔得到确认,那么店主最终将得不到那10个比特币。简单来说,一笔比特币交易的等待时间越久,得到的确认越多,它就越安全。
如果这种交易发生在网络上,且销售对象不是时效性非常强的商品,那么等待1个小时的确认时间也无所谓。但如果是在日常生活中,比如在商店里,那确认时间就成问题了。我们很难想象,上班前在7–11里用比特币付款买了糯米鸡当早餐的白领,要在店里等上60分钟才能离开——在迟到5分钟就要扣奖金的今天,这有点儿不切实际。
这个问题的本质其实是信任。你是否信任与你交易的人,这是解决问题的关键。为了便于分析,我们拆分成以下几种情况进行讨论。
/熟人交易/
这里的熟人不一定是朋友,可能是楼下商店的老板。他每天都能看到你上下班,见面了还会打招呼,你也经常去他店里买东西。在这种情况下,他不会太在意确认时间,因为你已经是熟客了,不太可能为了贪小便宜而把自己的信誉丢掉。
/陌生人的大宗商品交易/
在陌生人进行初次交易时,彼此的信任难以马上建立。在这种情况下,确认时间是必要的,但不一定是不可接受的。想象你去4S(以“四位一体”为核心的汽车特许经营模式)店买汽车,当你用比特币支付完毕后,店员同时为你的新车办理各种手续。这种大宗商品交易所需的手续时间通常比比特币的确认时间长得多。那么,交易双方通常都不会太介意交易的时间确认问题。
/陌生人的小额交易/
这是比特币目前遇到的最大的技术难题。在一个大城市里,很多小额交易是发生在陌生人之间的。比如你走进街边的星巴克,点一杯咖啡带走。在这种情况下,服务员不认识你,而你也不可能为了一杯咖啡等上10分钟甚至30分钟。如果比特币的确认时间一直停留在目前阶段,那么这确实是一个问题。
2013年,在美国圣何塞召开的比特币大会上,与会者提出了很多解决理念。其中最重要的一个叫作链外交易,即不在区块链内进行交易确认。假如有一家公司能以其一贯良好的信誉赢得用户的信任,从而推出自己的在线钱包软件,那么只要星巴克及其顾客都注册了该公司的账户,顾客们便可以把自己的部分比特币存入该公司账户,并通过在线钱包购买星巴克等企业的商品,将比特币从自己的账户汇入星巴克的账户。由于这种交易实际上只是在该公司的系统内部进行账内金额转移,不涉及区块链的确认,所以交易几乎是在瞬间完成的。这种方法能够解决陌生人之间小额交易的确认问题。
钱包的安全问题
在长人和店主的交易中,两人都使用了比特币钱包客户端。大部分用户都会选择Bitcoin…QT等客户端作为自己的比特币钱包,储存私钥。钱包在比特币使用过程中的作用至关重要。但事实上,比特币的使用风险大多集中在钱包上:
误把钱包文件删除以至于丢失价值数万美元的比特币;
没有正确备份钱包文件,导致一段时间内交易的比特币全部丢失;
电脑中了木马病毒,钱包文件被盗,所有比特币荡然无存。
以上种种问题都是钱包客户端的特性造成的。
/官方钱包客户端的风险/
首先要说明的是,所有的钱包客户端里面都没有比特币。从比特币的特性可知,它其实是流动在网上的一本大账本里面的数字。而比特币钱包里面存放的是用户的私钥,主要用来证明该用户对账本里的某个数字拥有所有权。每当用户要动用自己的比特币财产时,便动用钱包里某个地址的私钥进行签名,以向全网广播,证明地址里的比特币归他所有。
以官方钱包客户端Bitcoin…QT为例。该客户端存放比特币私钥的文件是Wallet。dat,一般Win8系统下的存放路径是C:Users电脑的用户名AppdataRoamingBitCoin(需要注意的是,一般Appdata是隐藏文件夹,需要修改系统设置使隐藏文件可见才能找到)。Wallet。dat的本质是一个私钥池,存放的是这个钱包的所有地址的私钥。有了这个文件,用户才能证明自己对钱包地址里的比特币的所有权。钱包风险其实可以分为以下几种情况。
一是,Wallet。dat文件被偷。这是最常见的钱包风险。如果用户的电脑被黑客入侵,Wallet。dat文件被黑客获取,那么黑客也同样对钱包里的地址拥有支配权。在用户尚未察觉之前,黑客就会把该地址所能支配的比特币统统转移。
二是,Wallet。dat文件丢失。这种情况并不少见。在未做好备份的情况下,误删了Wallet。dat文件,则用户所有的比特币都会丢失。与Wallet。dat被盗不同的是,在这种情况下,这些比特币从此只会在网络上如孤魂野鬼般游荡,不归任何人所有,因为唯一证明所有权的私钥已经永远消失。这些丢失的比特币会使现有的比特币总量变少。
三是,Walllet。dat备份出错。比特币钱包客户端的设置使得Wallet。dat文件的备份成为一个技术活,稍有不慎就会造成严重损失。
在初始状态下,Wallet。dat的私钥池里存有100个私钥。当“生成”一个新地址时,客户端其实并没有真的产生一个新地址和对应的私钥,而只是从私钥池里取出一个使用,同时再生成一个(真正意义上的)新的私钥和地址并放进私钥池里,使未使用的私钥数量保持在100个。
而使问题变得更复杂的是客户端本身的找零机制设置。依照比特币本身的规则,一个地址上的比特币在支付的时候必须全部支出,除向另一个地址支付比特币外,剩余金额再重新支付给原地址(见图3)。
图3 交易示意图
17C的地址里之前有0。189 006 7个比特币,当17C的拥有者发出向18y的地址支付0。1个比特币的指令后,系统会将17C地址里的0。189 006 7个比特币全部取出,并将其中的0。1个比特币转入18y的地址里,剩余的0。089 006 7个比特币重新打回17C。
而客户端出于保护用户匿名性的考虑,并不会将余额打回原地址,而是从私钥池里取出一个新地址并将余额打进去。在缺省设置下,这个地址并不会显示在客户端