比特币知识(1)——初识比特币
比特币(Bitcoin,缩写BTC)是什么?用百度百科的定义:一种P2P形式的数字货币。这是个很概念化的一个解析,读完和没有读差不多。
要解析比特币是什么,就要看从什么角度来解析了。如果是只需要了解表面的,那么可以这样理解:比特币是一种类似Q币这样的一种东西,都是网上虚拟货币一种。
若只是对其表面化的了解,读到这样即可。
然而,比特币和Q币(或者微信钱包或者支付宝钱包等)之间的差别不亚于蚊子和大象。
比特币于2008年,由神龙见首不见尾的人物——中本聪(Satoshi Nakamoto)在其论文《Bitcoin: A Peer-to-Peer Electronic Cash System》提出。详细点的定义:比特币是一种总量恒定在2100万的数字货币,其特点是“去中心化”、“全球流通”、“匿名化”等。严格的说,比特币不是一种货币,而是一个帐本,或者更准确说是一个基于互联网分布式存储的一种帐本系统。
这样的定义/描述,依然是很概念化。其实比特币真不是一个概念就能表述清楚的,而需要从原理上理解了才能彻底的弄清楚它是什么。原理上,后续章节再做详细介绍。
比特币知识(2)——比特币诞生故事
地球的某个角落有一个部落,该部落居民还过着物物交换的原始方式生活。
部落内的居民亚名想吃鸡肉,可是他手上只有鱼;亚龙想吃鱼,而他手上只有鸡。如果他们想达成各自的目的,那么亚名就需要拿手上的鱼去市场上和亚龙交换就行了。可惜事情不会总是那么顺利,可能出现是这样:亚名手上有鱼,他想吃鸡;亚龙手上有鸡,他需要的是一匹布;亚花手上有一匹布,而她想吃鱼。如果交易要顺利进行,那么就只能这样了,亚龙拿手里的鱼去换亚花的布,之后再拿手里的布去换亚龙手上的鸡。虽然存在着波折,但交易总算完成了。
实际上部落内的居民各自拥有的物品和需求的远比这个复杂,物物相换难度也远比这样复杂了。比如亚其拿一只牛去交换亚龙的一只鸡,自己感觉就吃亏,而亚龙手上又没有10只鸡(假如部落内认为1只牛价值等于10只鸡);亚里做好了一只船想拿去换一直牛,船那么大,如何把它抗到市场上去?物物交易存在各种不便利……
某天夜晚,一条光亮从星空划下,居民顺着光亮处跑去,亚名跑的最快,他找到了一种黑色的结实的坚硬石头。他把石头传递给部落的其他居民欣赏,大家觉得石头很漂亮,都很喜欢这种石头,于是大家都达成公约,以后这种石头,可以拿来交换自己的所需物。
往后的生活,偶然有光亮从星空划下,偶然也有人捡到这种石头。随着部落内居民拥有这种石头多起来,大家就不再是拿物换物了,而是需要什么东西时候就拿自己手里的这种石头去交换。
随着这种石头慢慢流通起来,部落内很快又遇到新问题了。首先,虽然拿石头比以前拿物品去交互方便点了,但兜里装着一兜石头当啷当啷的,也不是那么舒服;其次,这种石头大小不一,很难从其表面看出它价值是多少,也不那么方便找余;再次,多次交互后石头也会出现磨损破裂(破裂了不那么美观了部落内大家可不买账的)……
于是,部落内居民就围起来讨论如何解决这个问题,很快就有了结果。部落内三叔到过外面见识过世界,懂得知识很多,能写一手好字,最重要的是三叔在部落内口碑也很好,常常帮助部落内的人解决问题,而且从来不求回报。大家一致同意把自己的石头放在三叔家,三叔在一个帐本给大家记账:
亚名200石;
亚龙500石;
……
同时三叔也签写一种标有数字的存条。在三叔帐本上有记账的人,可以找三叔取存条,而后三叔会在帐本减去存条上相应的数量的记账。之后都日子,大伙买东西不再用原来的石头了,而是用三叔签好名的存条。三叔也承诺,大家随时可以拿手上的存条到三叔家兑换回等价的石头。
自从拿着三叔的存条去市场做交易之后,人们不再携带笨重的石头了,也不用愁辨别石头大小重量等问题了。偶然有的人存在几张存条破损,他可以把它交还给三叔,三叔再写过一张等额的给他就是。如果碰上大额的交易,交易人可以告知下三叔,将自己帐上的部分记账划到对方名下即可。部落内的生活就风风火火起来了。
许多年过去,随着三叔年纪增大,开始容易忘记事情了,偶然也因为病床而写不了存条。三叔也意识到自己年老不能再胜任管理记账和签名存条的工作了,于是再次聚集大家一起讨论这个问题。最后大伙讨论达成,由三叔的二儿子山娃来代替三叔的工作。因为山娃也是个有文化的人,能胜任管理记账和签写存条工作。部落的居民可以拿石头去找山娃换存条,也可以拿存条到山娃那兑换原来等价的石头。
部落生活依旧风火进行着。
某日,山娃在外面世界闯荡的表哥肥猫回来找山娃,和山娃讨论一个秘密……很快,人们发现肥猫每天有大把大把的存条去交换物品,而他又几乎从事什么劳动,而且每天都是大吃大喝,人们也没有弄清楚肥猫哪来的这么多存条来交易。大家也发现了另外一个现象,每次拿着存条去和山娃兑现石头的时候,山娃吱吱嗯嗯的常常拿不出那么多石头来兑现。在大家多次的逼迫下,山娃说出了实情:山娃凭空在帐本上给肥猫记了很多账,也凭空给肥猫写了很多存条。由于存条多出太多了,流入到市场后,居民再拿来兑换石头时候,已经发现石头不够了……
于是人们又聚集在一起讨论,人们很快就发现了问题所在,山娃的诚信度和三叔差太远了,如果管理帐本的山娃凭空写多出来存条,就可以无偿得去其他人手上换物品了。如果山娃无限的凭空多写存条,就可以把其他所有人的物品买掉,到头来其他人拿到的只是一张张存条,而生活物品大部分都转移到了山娃等管理记账的一拨人手里。其他人拿着存条也兑换不了石头,原因存条和石头严重不平衡了,没有足够多的石头兑现。部落开始炸锅了……
这时候,一个叫亚聪的年轻人站了出来,提了他的想法:大家都把石头从山娃家取出来集中到一个地方,由所有人看管。再找一干人分别进行记账。帐本记录本来每人拥有的石头数量:
亚名220石;
亚龙350石;
……
这干人需要记账到自己的独立帐本,帐本要公开,而且要求这些帐本是同步的(也就是内容是一模一样的)。如果亚名想买亚龙的鸡的时候,他就大喊“亚名买亚龙的鸡,付款100石”,负责记账的那批人就会查看亚名的帐,看看他是否有足够100石,如果足够,大家就记上“亚名付款100石给亚龙”。有些站的比较远的记账者如果没有听到亚名喊,旁边较近的记账者会告诉他同步帐本。
问题又来了,谁来参与记账?大家都要生活啊,大家都要赚奶粉钱养娃啊,总不能自己正事不做去给你记账啊。
亚聪继续说,每笔交易要扣取一定的手续费。十分钟作为一个单位,这段时间交易的手续费作为给记账者奖励。但奖励不是平分给每个记账者,而是所有参与记账的人在记账之前要算一道数学难题,奖励只给第一个完成数学题的人。如果有人完成数学题了,其他没有完成的人要停止数学题作业,去抄录第一个完成数学题的人的帐本,之后大家再去抢答下一轮时间的数学题获取记账权。部落内的任何人都可以加入记账队列,参与记账的人也随时可以退出。
在亚聪构想的这个模式下,人们的交易又恢复了。陆陆续续有人加入了记账队里中,也有人退出了记账。第一个完成数学题的记账者获得了一定的报酬。这个部落又开始恢复了繁荣。亚聪宣布:这个记账模式叫比特币。
故事中,最初的物物交换就是原始人最初的交易方式,使用石头交易是物物交易的进阶。再到部落居民使用三叔和山娃的存条进行交易,就是典型的中心化系统模式了,类似今天的银行。再到记账模式,参与记账的居民,就是现实中比特币的矿机(参与记账的电脑节点),每个矿机会保存着一份完整的帐本。矿机之间通过商定的协议使得所有矿机的帐本是一模一样的。一个去中性化的货币模式就这样形成了。
故事到这,比特币就这样诞生了。现实中比特币的细节上和故事中略有不同,但大体是一样的。
比特币知识(3)——比特币上限为什么是2100万
比特币总量为2100万,它是固定数量的。所有比特币被挖取(奖励发行)出来之后,它就不产生新的比特币了。
从创世区块(也就是第一个区块)开始,每个区块产生50个新的比特币,每210000个区块产生后(大概每四年),生成的新比特币会减半,也就是 第210000个区块及其之后的区块产生时候,会生成50/2 = 25个新比特币,第420000 个区块及其之后的区块产生时候,会产生25/2 = 12.5个新比特币,之后类推。
这就是一个数学问题了,
210000 * 50 + 210000 *50 / 2 + 210000 *50 / 4 + 210000 *50 / 8 ……
= 210000 * 50 * (1 + 1/2 + 1/4 + 1/8 ……)
≈ 210000 * 50 * 2
= 21000000(也就是2100万)
所以这个问题,归根是“为什么开始每个区块产生50个新比特币,为什么每210000个区块产生后,生成的新比特币会减半?”这里可能没有为什么,游戏规则如此而已!比特币的算法决定了发行总数极限为2100万BTC。
比特币的最小单位是“聪”(satoshis),一个比特币等于1亿个“聪”。为什么不继续细分成其他的更小单位,比如10亿、100亿?据说是和计算机语言支持的整形数据范围有关,不过这不是比特币学习的重点,就不做什么的探讨了。
上面用约等,数学上上面的极限是会接近该值的,但是准确的说是20999999.97690000BTC,比2100万少一点。这个20999999.97690000BTC 是如何来的?因为1BTC = 10^8“聪”,可以使用脚本计算下具体总量是多少个“聪”:
#-*- coding: UTF-8 -*-# 初始的块奖励为50BTCstart_block_reward = 50reward_interval = 210000def max_money(): # 50 BTC = 50 0000 0000 Satoshis current_reward = start_block_reward * 10**8 total = 0 while current_reward > 0: total += reward_interval * current_reward current_reward /= 2 return totalif __name__ == "__main__": print "Total BTC to ever be created:", max_money(), "Satoshis"
运行结果:Total BTC to ever be created: 2099999997690000 Satoshis
结果 2099999997690000 Satoshis 也就是 20999999.97690000BTC了。
每四年新区块生成的比特币减半,其实这个说法是大概的估算,实际上系统控制生成块难度,使得是大约每10分钟产生一个区块(注意!这个10分钟也不是一定的,也是个大概值),而210000个10分钟接近4年。
210000 * 10 / 60 / 24 / 365 ≈ 3.9954337899。
比特币知识(4)——比特币的特点
简单总结几个比特币特点,如下:
★ 去中心化
“比特币诞生故事”里面提到的,三叔和山娃和山娃管理存条和记账模式,就是典型的中心化系统。这个模式有如以前的钱庄,现在的中央银行。这个模式,货币由该中心发行和管理,中心可以干涉货币流通总量,这样就使得中心管理者可以操纵着人们的财富了。比如“故事”中的山娃,通过凭空多写存条给表哥肥猫。很多国家的央行也做增发货币来解决自身或者非自身的问题,这样无异于变相掠夺了劳动人民的财富。中心化下的弊端很明显,如果碰到了一个不负责任的中心化管理者,那么劳动人民的财富是得不到保障的。
1980年独立的津巴布韦,津元与美元汇率为1:1.47,在土改以后,由于经济崩溃,政府财政入不敷出,于是开始印钞。2007-2008年,津巴布韦政府大量发行货币,使得通货膨胀高达200 000%,2009年一月,单张纸币面额达到一百万亿,通货膨胀速度惊人。
去中心化很大一个好处就是使得劳动人民的财富得到保障。比特币的发行由比特币系统(矿机挖矿——也就是那些矿机记账的奖励)生成,总量是有限的(注:这个不一定就是优点,后续有文章继续讨论这个),为2100万。系统生成量达到这个数字后不再生成新币。也就是说,老百姓如果拥有100个比特币之后,那么他拥有的是2100万之100的分量,这个不会变,不用担心系统会多发行了多少个亿比特币使得自己拥有量缩水而只能买到更少的东西。
★ 匿名性,专属拥有
比特币系统记账是匿名的,比特币帐号本质是一个地址——非对称密钥中公钥的一个变相写法,它仅仅是一个地址(有点类似电子邮箱全球唯一),但没有记录拥有者的任何信息,不像银行帐号那样需要绑定姓名、手机号码、家庭地址等一大堆东西,比特币帐号不需要绑定个人的任何信息。也就是说从比特币帐号是跟踪不到个人的任何信息的。当然,如果你进行了交易,肯定需要公开自己的这个帐号(地址),如果交易的对方认识你,那么对方还是能够通过这个帐号关联上你的。只有在该帐号的所有交易中,都不泄漏自己的个人信息(肯定不能和熟人公开的交易了),才是真正的匿名,有一次泄漏过信息了,该帐号严格来说就不算是真正匿名的了。所以,比特币匿名性是相对的。
拥有一个比特币帐号,需要知道该帐号的地址(密码学上说的公钥),而且需要私密的拥有密码(密码学上的私钥),才能真正的拥有该帐号(去花帐号内的钱),这也就是专属拥有性。你拥有该帐号,里面的钱你想怎么花就怎么花,你想什么时候花就什么时候花。这个和银行帐号的拥有差别很大的。
可能有人认为自己银行帐号里面的钱是自己专属拥有,其实不是这样。如果银行倒闭了,或者把你的卡封号了,由或者国庆繁忙时期不允许跨行交易和大额取款,那么你使用你的钱时候就受到这样那样的约束了。
你拥有该比特币帐号是你真真正正的拥有该比特币的帐号,前提是你没有忘记和泄漏该帐号地址和密码。如果你忘记了密码,那么帐号内的比特币就永远的躺在系统里面了,任何人都无法动用它了,也没有部门好申诉找回密码。
有些人认为在某些比特币交易网站注册了帐号,之后购买了比特币,就是拥有比特币了。这个不算是拥有比特币的,因为通过第三方注册帐号购买比特币时候,平台不一定就生成一个比特币帐号给你,很可能就是平台帐号(注意:这个不是比特币的帐号)显示上给你写上几个数字而已,并没有对应到比特币系统内的一个帐号。就算有一个比特币帐号生成,那么如果你没有私密性拥有密钥,那么比特币也不算是你的,很可能平台知道密钥而你不知道(这里说的密钥是指比特币帐号的密码不是说你登录第三方平台的帐号密码)。
★ 世界范围内流通
使用银行系统使用法币交易时候,如果都是同类型的法币进行交易,比如转账,跨行或跨地会产生手续费,碰上节假日可能还不支持转账。如果是不同类型法币直接进行交易,那么还得考虑汇率差甚至国际不承认某国法币等因素。这是目前银行系统存在的种种问题。
比特币系统交易不存在这些问题上面的问题。这里说的世界范围内流通,前提是对方接受比特币即可,只要自己有足够的比特币,打开比特币客服端,填写好转账给对方的金额后转账,有足够数量的矿机记录了交易,那么该交易就算完成了,交易过程中没有手续费、汇率差产生,也没有因为特殊时期不能交易等交易约束。