空手一方客

收获了一种恬静的生活, 像一条波澜不惊的小河, 流过春夏 流过秋冬
个人资料
  • 博客访问:
正文

电子货币(10):传统的散列,一切都刚开始....

(2013-12-26 08:40:19) 下一个


货币本来就只是个商品交换的符号/媒介。只要大家认可、并且能够流通的话,什么都可以当货币:绳子打个结,牵头牛和羊,敲块铜和铁,打个金银首饰,再就是一片花哩胡俏的纸,或一片小塑料卡里的一个条码。现在发展到把那条码放到你的手机里,早和那些纸片没了丝毫关系。认也好,不认也罢,不仅早成了既成的事实,并且会随着你的年龄的老去而更加普及 ---这是人类的不归路,是发展的必然。
 

货币的发行

过去说货币都是由有信誉的银行发行的,说“信誉”是:可兑换,保值,不滥发。全是人们臆造的。因为到了现在,大家都明白了,货币唯一具有的有价值的“信誉”,就只是那个最原始的“可兑换”而已。其他两个什么臆造的“保值”、“不滥发”,早被风吹到全世界臭大街。既然货币就是一个流通的可兑换功能,就是说只要有人“交易”就好。以B
itcoin为首的电子货币早有了这功能,并且功能太好,流通太强,让各国政府怕了。由于最近几个月B的流通激发,价格爆长,越来越多的政府为了保护自己的印币权,开始“专制性”围堵,老用风险、洗钱等等本来每种货币都有的共性问题吓唬人。然而,对办理比特币交易业务的公司,美国则要求在开业前,需要得到货币服务局MSBs的官方许可,也就是说,MSBs默认了B是一种币,至少有币的地位。至于你个人用不用,那是你的事。你还不用卢布呢,人家俄国不照样发展?!

Bitcoin币存在于一个庞大的p2p网络中,使用Bitcoin的群体公认了一种算法,这种算法在当今的条件下,每小时最多只能新印6组新B ,过去一组是50个B,现在可以调到25个。就是说,在这个世界上每小时只会最多产生300个B 。这个产量还会由网络自动调整难度来限制产量。你没办法通过修改所有人的Client算法及参数(client 是开源的)来加快货币产量。伪造的B币会被网络自动丢弃,除非你可以控制绝大部分网络的节点。---- 现实中的美国人就是垄断了全球的大部分经济节点,所以美国人就可以乱印币,并且印得光天化日,印得理直气壮,印得让你连羡慕的份都没有。B群体的算法,一开始就想到了要避免这种最无赖最强盗的情形的再发生。

B的价值

货币的价值就是可交易可流通,B的价值就是流通渠道本身。一组新造出来的B提供了你随时可以把这个B从一个帐户转到另一个帐户的算法通路保证。这是一个伟大的创造。不论从思想,到算法,到程序。绝对超越哥达巴赫。

建筑这个安全通路保证的背后代价,就是需要大量的计算能力。就是说,计算能力要很给力。给力的代价就要消耗大量的能源。所以,整个B群体的开了个奖励办法,就是你一旦挖到的话,就不只是一个B,而是一组B,里面是50个B/25个B ---- 随着开出的矿越来越多,奖励可以减少,甚至于可以取消,全局链越来越长,以为越来越多,挖到的难度就越来越大。
 
目前世界上所有挖出来的B,大约14万。怎么算他的市场价值,其实至少该按他的能源消耗和人力消耗乘上一个大于1的系数,再加上一尾数权,就比较合理。目前他们的总价值应该是少于消耗掉的能源的总市场价值。所以有潜力。不过,用于生产B的能源,本来也是不用也被大部分浪费掉的。

没有中心节点的“银行

B币没有中央银行这个“中心”节点,大家如何信任他,并运作起来?
答案是这个p2p网络上每个节点都记录了每个B诞生以来的每笔交易的详单,并从中可以算出每个B唯一地属于谁。这样你每接受一笔交易,你都能知道别人给你的B是不是合法的。

这要从最基本的说起:每个帐户其实就是一对公钥和私匙,有私匙的人就是帐户的主人。如果a要给b转一笔钱,a就把钱的数量加上b的公钥,并用自己的公钥签名。b看到这个签名后,就知道的确是a给自已转了如数的B。

这笔交易还需要一个见证人来担保这个交易发生过。这样,以后b用这笔钱的时候才显得合法。谁是担保人呢?算法把它设计成整个被使用的Bitcoin网络 ------ 每笔交易都告示天下。很透明,很民主化吧?就是说,a在发这笔交易的时候,必须把签过名的交易单,尽量地告示到整个p2p网上,最终会让每个节点都知道发生了这件事。b呢就从p2p网上不断地收到别人的确认信息。当它收到足够多的确认信息后,就认为a的确发出了这单交易。从此以后,b就可以自由地使用这笔钱了。

当b使用a转给他的钱给c时,也一样得广告给足够多的网点(最终所有人都会收到)让他们担保。每个担保人只有确信b有足够多的钱可以支付给c的时候才被确认。

为什么越来越难

本质上,B网并没有记录每一块钱到底属于谁。它记录的是从诞生起到当前的每笔交易的轨迹,并算出每个帐户里有多少钱。任何人试图确认一个交易单时,它需要确认的是转出帐号上有没有那么多钱。因为
B网必须避免一笔钱被两次花。所以整个帐单序列是一环套一环的。这个序列会越来越长:每个人在完整的全局帐单上签上新的一笔的时候,都需要利用前面信息生成后面的。这个帐单序列被称为chain of blocks 。每个block里都包含有若干条经过确认并hash过的签名的难以伪造的交易记录。每个block都和全局表上的上一个block有关联。每条帐单都会通过p2p网络最终被转发给制造新block的节点上--- 就成为目前的本币持有者。

这个制造新block的过程被叫做mining,制造新block就是把最近收到的帐单打包在刚制造的block里。这个打包的过程即挖币的过程,只有极其稀少的几率被制造成功。你也可以理解成把新收到的帐单合在一起,一次成型不可修改,如果制造失败就要再来一次。一旦制造/打包成功,你就把新的block(被认为是对老的block链的延续)广播出去 --- 你就拥有了这个B。

因为是p2p网络,可能有许多人都在同时制造新的block,但有一个排序机制保证只有最优最难、花费了最大计算时间的那个新block被网络群体接受,挂在全局的block链上。整个B网只有一个全局帐单表,每个节点都完整的保存有一份。

这个全局帐单表会越来越大,block链越来越长,在最新的部分,必然有许多分茬。这是因为p2p网络的mining过程是大伙并行进行的,每条新帐单也不能立刻广播给所有的节点。每个mining的节点都有责任把他新收到的,在他认可的老的全局帐单上不存在的帐单,合在他准备制造的新block中。一旦新 block 被制造出来,就立刻广播出去,争取得到更多人的认可。主要是得到那些想mining的人的认可,这些人会在这个block的基础上制造新的block。

如果p2p网络过大,交易帐单不能尽量迅速地广播到全网络。就会出来p2p的网络的局部保持有个小群体共同认可的一份全局帐单。多个全局帐单的分支同时发生也是有可能的。因为每个小群体都可能认为他们看见的那部分更长更有效。但是,只有有人发现另一条分支更长,它就会转换阵营。所以,有这种可能性,你的帐单被一个小群体接受,但在一段时间后,被更大的阵营抛弃。

不过,B算法的参数决定了,新的block产生速度很慢,如果你的帐单被多达6个别的局部的人确认,基本上就保证了它能合并到的那份全局帐单,就是p2p网络全体可认可的。随着链的增长,可能延续这个认可的过程。

那么难,为何还有那么多人去挖

既然生成新block费时费力,制造出新block的几率好象买彩票中大奖,为何还有那么多人去运行程序去计算新的block?答案是,每个制造出新block的人,都有权构造一条帐单向天下声明,我拥有50B 。

被所有B用户共同承认的B规则,还有一条让他们不能停步,必须乐此不彼。那就是,你每做个新block,必须包含全局表上的上一个block的hash值。B网络自我调节难度,大约每10分钟产生一个新block。如果你不幸,你不是这10分钟内制造出新block的那个幸运者,就是说,你这10分钟内干过的活就全白干了。你必须从这个最新版的block开始,再继续演算才有望在下10分钟内成就一个Block。如同卖彩票,B网络就是每10分钟开一次彩票。现在买的都是对本10分钟的,开奖你不中,所买的彩票全作废;你要想中下10分钟的,你就得从新买新的彩票。

如何在算法上保证挖掘过程费时,而且让你成功的几率极小?

这是电脑保安程序里的基本思想:就是要让你的电脑中毒SPAM的几率为零。这就是有名的Hashcash算法系统。

最早,电脑专家为了抵御email spam问题发明了Hashcash算法。其思想被保安系统和电子货币系统广泛使用。原理
就是给一段特定信息(比如,一封email)加一个特定的hash头。这个hash头需要一段时间才能计算出来。发spam的人一般没有这计算时间为群发的每一封email去计算出一个符合你个人要求的hash头。所以一般认为,你收到的有这个合法hash头的email,就不太可能是spam --- 你收到的那个email是花了时间在上面的;相反,你收到的没有花时间计算Hash头的email,就被你电脑内的保安程序认为是SPAM,因此被过滤掉。

算法是,为你想保护的信息,找到一串数字,附加上去。一般使用的都是某种公认的hash算法,比如SHA-2。用Hash算出一个散列值。如果散列值由一长串0打头,那么就算成功了,收email的人根据公认的那个Hash算法,认出这个一串0开头的email是可接受的。具体前面冠多少个0,就决定了系统的难度。

能为一段信息(例如,一封email)找到这串几个0开头的数码,目前来说,除了暴力尝试,别无他法。那就是随机更换数字,换一次就hash一次比对。在一个能接受的几次尝试之后,一般来说都可以找到一串你想找的数码。

每个想挖币赚B的人,要不停地从B网上监听/打听信息。如果有人发布了新的合法block,你就得马上合并到你的全局表里。并得马上从这个新Block开始,从新设置你自己的计算过程。如果B网上一有新发布的交易单,你也得马上记录下来。你得不断地把最新的block的散列值、新收到的交易单、以及自己获得的50B的那条奖励单合并在一起,马上计算SHA-256,看看散列的结果是否满足B的条件。一旦满足,就马上把这个新的block广播出去,告知天下。在足够多的人认可它之后(你得到了足够多的回执,但不能有任何一个是否定的回执),然后再以它为基础计算后面的一个block,此时,你就获得了这个B组。

B币的规模

为了匹配B的经济规模,所有的B client都被划分在一个区域内,就是设置成你前面会面对着210000个block。每个生产了新block的人都被认为还有望获得新B数量会比之前少一半。如果这个时候,你还在自己的包内写上自己获得了50B,别的人就不会确认你的这个block。这就会让B的总量增速变缓。新的block产生的速度是由难度来调节的。这个难度会由p2p网络根据最近生产block的速度自动调节。所以即使日后域内的所有计算能力增加,也只能保证仍然只是大约10分钟一个B。

而且,随着挖出新block的收益减少,愿意贡献自己的计算来挖的节点也会变少。此时大家没了热情,怎么办?系统就会算出流量减少得太多,就会自动减低挖到的难度。

最终,p2p网络不再能凭空制造出任何新的B,这个时候制造新block的动力是什么?那就是:交易税。

B币世界的交易税设置

到了没人再愿意挖掘新的block,发起交易就会变得很困难 -- 没有block可以容纳新的交易单。此时,希望交易并且被确认的人a可以声明,如果有人b制造出了新的block,并愿意接纳a的交易单,a就得支付一小笔交易税给b。

当B网上许多人都这么做的时候,制造block又变得有利可图。只不过,原则上不再有新的B诞生,只是在这些B用户之间流通。

在B世界,总有一些B无故消失,主要是那些帐号的私匙丢失了,没有任何人可以转出那个帐上的钱。不能流通的货币就再不是货币。B网不能多印,也不能补印。这就是B币的最高价值。

最终B总会达到一个比较大的规模,准确说就是两千一百万个。你可能认为这个规模不够大。从理论上讲, 两千一百万的上限只是个设定。设定就是可以改变的。如果广告B网天下,例如,改成2x 两千一百万,4x 两千一百万,类似于一股分为两股,或分为四股,...... 当然不是那种随意印钱的什么GP量化宽松

而且,B本身可以切割,比如你可以支付给别人 0.01个B 。所以,B本身不仅会升值,总数也一直够用。
 
散列是传统的,B网是人类实践的一个大模型(把它当作一个群体参与的试验看,大家更易接受)。规模可以更大,难度也可以更大,如果将来的世界需要它变得更大。只是一个参数问题。

人类在电子货币的实践上,一切都刚刚开始 ....

[ 打印 ]
阅读 ()评论 (0)
评论
目前还没有任何评论
登录后才可评论.