什么是客户端其取值范围是多少,如何看待区块链?
你好,这里是BIMBOX。
今天的内容来自于我们知识店铺里的专栏《精读10本好书中的20项新科技》。
最近两年区块链的热度越来越高,也有越来越多的宣传,各种行业都要「+区块链」,连咱们的BIM也有很高的呼声。
很多人可能听到区块链这个名词觉得很炫酷,又或者与骗子挂钩,但其实并不了解它到底是个什么东西,只知道好像和比特币有关系,大概是个去中心化的东西,但再往深处聊,比特币和区块链有啥区别?为什么能做到去中心化?就说不出所以然了。
很多文章讲区块链,喜欢略过技术细节,用一些浅显的例子打比方,来说明去中心化和分布式记账是怎么回事,这么讲的好处是谁都能听懂,但也有个坏处,那就是听了的人只能大概了解区块链的优点,然后就「比方套着比方」,直接把区块链技术给套用到其他技术上去了。这也是为什么很多场合区块链被过度宣扬,似乎成了无所不能的神器。
如果连基础原理都搞不清楚就去谈未来,就好像在谈论怎么能用电冰箱解决移民火星的问题一样。
所以,我们打算跳过所有的比喻,用硬核的方法给你讲清楚区块链的工作原理、底层逻辑到底是什么,帮你去掉心里的区块链崇拜或者抵触,知道它能做什么、不能做什么,有哪些缺陷。同时也会思考区块链的未来,它到底会对各个行业的发展产生什么样的影响。
1 比特币:从支付说起说区块链之前,咱们得先聊比特币。
可能你觉得,我不想炒比特币,那玩意我不感兴趣,就想听听区块链在其他行业是怎样应用的。但是,如果你想把区块链搞清楚,那比特币是绕不过去的,一切区块链设计想法都来自比特币。
比特币是一种电子支付的方式,我们用的手机支付也是电子支付,但比特币和手机支付不一样。手机支付背后肯定有一家机构,或者是腾讯、阿里,或者是某家银行。
而比特币的设计初衷是希望在支付中摆脱中央银行的管制。比如说支付和收款双方匿名,交易不能伪造,所有这些功能都由程序自动保障。既然没有某个机构维护,就必须通过算法的设计了。
任何一项技术都不可能脱离其他技术单独存在,比特币也是一样,它就是建立在一套完整的现代加密算法上的。
比特币中的密码学理解起来并不难,可是一层层套起来解决问题的思路却闪耀着理性的光辉,咱们一个个来说。
2 SHA256:我的信息怎样不被篡改?作为一种虚拟货币,比特币首先要解决的就是怎样把一条信息加密,让别人无法修改。这里用到的就是第一个技术:SHA256加密。
SHA256的全称是「安全哈希算法」,它是Hash(哈希)函数的一种。
哈希函数的特点是,不论原始数据有多少位,经过运算后,得到的结果长度都是固定的。比特币中用到的是SHA256,就代表运算结果是一个256位的2进制数字。
最终这个256位的字符串能用在加密上,需要满足两个条件:
➤ 不论原始信息多长多短,都能且只能计算出唯一结果;
➤ 算法必须是单向的,不能通过结果,反算出原始信息来。
这两个目标要达成,就要用到数学里的一种特殊运算方法,就是模运算。
模运算不难理解,就是先规定一个模数,凡是超过这个模数的结果,就回到起点重新计算。
比如钟表上面的表盘只有12个数字,它的模数就是12。假如我要把某个数字在表盘上加密,比如加密方式是「把原始数字加上5」,那假设我的原始数字是9,那么9+5等于多少呢?在这个模数为12的运算里,结果不是14,因为已经超过模数了,结果应该是9+5-12=2。
如果反过来运算,单凭结果2,你是无法反推出初始的数字9的,因为你不知道在这个模运算里,数字绕着表盘转了几圈。原始的数字既可能是9,也可能是21,或者任意一个9加12整数倍的数字。
而SHA256函数的运算结果,是一个模为2的256次方的值,所以这个值一定是可以写成256位的。
把一个信息转换为一个特定数字,最早是为了验证两个文件是否一致。比如你在一些论坛下载软件的时候,经常会随着软件附带一个校验码,有时候是SHA256,有时候是MD5,它就是把整个软件的全部数据,经过算法生成这么一串字符,你下载好软件,在本地也可以使用校验工具把它算出一个结果,和论坛上的字符串做对比,如果一致,就代表这个软件没有被篡改过。
一行文字哪怕只是标点上有些微小变化,对应的SH256值也会产生很大变化。
你可以百度搜索一下SHA256,第一个结果就是在线SHA加密,输入一个句子,然后稍微改动一点点,看结果是不是有天壤之别。
这个函数非常重要,会贯穿我们讲述整个区块链的过程中。
首先,它就是用来解决支付信息加密的问题。
比如我要付给开开200块钱,就在网络上写下一条信息:「老孙需要支付200元给开开」,这就是支付信息。但这条信息是有风险的,万一有人把200改成800,那我可就要哭了。
而刚刚的SHA256算法,就避免了信息被篡改的问题。这条支付信息的哈希值是确定的,(哈希值就是SHA256算出来的数值)。在发出信息的同时给出计算出来的哈希值,和刚才说在论坛上下载软件的例子一样,之后任何的改动都会被发现,只要被改动就视为无效。
但只保证了支付信息没有被改动过还不够。因为如果有人就是心理阴暗,发出很多条「老孙需要支付200元给开开」,然后录入支付系统,那我也要亏死了。
所以,光是加密信息还不行,还需要数字签名。它的作用是用来保证「老孙需要支付200元给开开」是老孙本人亲手发出的,而不是其他人发出的。
3 非对称钥匙:怎样确保信息源?我们现实生活里使用手写签名,是因为笔迹很难造假。但电子信息中,谁都可以敲出「老孙同意」这几个字,怎么用电子签名来确认一条支付信息是我本人确认的呢?
这就得靠「非对称钥匙」了。
任何信息都可以通过计算变成一段数字,比如我要给熊仔发一串数字「666」,我要加密这段数字之后发给熊仔,我俩可以事先约定一种加密方式,比如给每个数字都+3,熊仔那里收到的结果是999,按我们之前约定过的,每个数字都减去3,就得到了结果666。在这个过程中,数字「3」就叫做钥匙,又因为加密和解密都用的是它,所以叫「对称钥匙」。
在开放的互联网上,对称钥匙有着致命的缺点,因为钥匙至少需要单独传递一次,无论是打电话、还是发邮件,我得事先和熊仔约定钥匙是「3」。而传递钥匙这条信息本身是没有加密的。如果这个钥匙被人知道了,那谁都可以给熊仔发任何信息,熊仔也不知道哪条是我本人发的。
这时候「非对称钥匙」就要登场了。你可以这样理解它:加密和解密用的不是同一把钥匙,我选则其中一把加密的话,另一把钥匙就可以解密。
两把钥匙,我把其中的一把保留在自己手里谁也不告诉,叫做「私钥」,另一把钥匙则是公开给大家,谁都可以看见,叫做「公钥」。公钥和私钥是通过一种不可逆的数学计算关联成对的。是的,不可逆的运算还是基于刚才说的模运算。
数字签名的问题就是这么解决的。当我发出一条交易信息时,我先用自己的私钥给信息加密,再把加密后的内容连同公钥一起发布出去。别人如果用公钥解开了,就说明当初这条信息是用这把公钥对应的私钥加的密,那就是我本人了。
这两个知识点你理解了,我们就可以还原一次比特币交易的过程了。
比如我要给开开发200比特币,我的比特币客户端软件会做这么几件事:
➤ 把「老孙给开开200比特币」当作原始信息,对它做一次SHA-256运算,得到一个原始哈希值;
➤ 用私钥给原始哈希值加密,得到加密的哈希值
➤ 把原始信息、公钥、加密的哈希值,这三个内容同时发布到全网去,给别人验证。哈希值用来保证信息没有被篡改,加密和解密保证信息出自我本人。
到此为止,我们解决了信息源可靠且不可更改的难题,其实这两个问题现在任何一家银行都能解决,并不是区块链的特权。可是别忘了,区块链可是要「去中心化」呢!那如果没有了银行这个中心机构,会面临什么麻烦呢?
4 去中心:谁来帮我记录余额?没有中心机构,首先的问题就是每个人的账户余额由谁来记录。比如,老孙支付开开200元钱,可是老孙账户里的余额够吗?
这个疑问在传统银行系统里不是问题,因为银行可以查看任何人的账户余额。在银行的系统里,你是相信银行不会篡改你的账本的。
但在比特币系统中,余额有多少,不能自己说了算,自己说了也没人信。而且,任何一个参与者和其他参与者有同样高的权限,当然也没有一个「说了算」的人来统一监管每个人的余额,所以还是只能通过程序和算法的设计。
这一步的程序解决方法是——每笔交易都必须以上一次交易作为基础。
比如「老孙支付200元给开开」,这笔交易可以进行的前提是,之前有人付给老孙过钱。
假设之前熊仔已经给过老孙200块钱了。那么老孙给开开付钱时,发送的标准信息是这样的:「熊仔支付200元给老孙,老孙支付200元给开开」,再加上老孙的数字签名和公钥,一块发出去。
你看,到这儿是不是有点「链条」的意思了?不过,我们的旅程还没有结束,光是把信息发出去还不够,我们还得把它记录下来。这就要涉及到区块链的本质了。
5 分布式记录:区块链登场当我把一笔交易的信息发布到全网之后,就会有其他比特币参与者帮我验证。这些人就是挖矿的「矿工」。
为啥叫挖矿?我们一会再说,先说说旷工们的验证工作。
➤ 首先把我发的原始信息(老孙给开开200比特币)做SHA256的运算,得到一个原始信息的哈希值。
➤ 用我提供的公钥,把加密的哈希值解密,得到一个新的哈希值。
➤ 把两个哈希值做对比,如果一致,就代表这条信息确实来自我本人,且没有被篡改过。
这个过程和前面讲的发送这条信息过程正好是反过来的。
如果以上验证通过,就进行下一步的记录操作。当然,这些工作都是比特币软件自动完成的。
那么矿工是不是把这条记录存在自己的电脑里,就万事大吉了?还不行。
我们说比特币的特点是分布式记账,那就得保证所有交易记录在每一台电脑上都必须存着一模一样的副本。但要实现这一点还真的很难。
没有任何一个中央机构来24小时不间断的记账,所有记账的人都是分布在全球各地的,他们有的在交易发生的下一秒参与了验证,有的当时不在线,隔一天才收到需要验证的记录,有的可能几个月都没开电脑。那么交易记录的同步就成了问题。
这时候,区块链终于登场了。
咱们先说「区块」,再说「链」。
在区块链中,每一个区块里都包含着上千条交易记录。矿工收到一个区块,检查通过之后,他的保存方式是把新的区块添加到自己电脑里的链条最末尾,同时也会把这个新区块发给其他矿工,他们也会做同样的工作。
前面讲了,每一条交易都必须是基于以前的交易,所以矿工的保存不单单是一个储存的动作,还有一个「加链」的动作,这个动作还是通过计算来解决。
通过一定的算法,新区块的生成要得到一个字符串,它由以下三部分组成:
➤ 新区块的基本信息,比如版本号、区块产生的时间(也叫时间戳)
➤ 这个新区块本身包含的上千条交易记录,累积用SHA256算出一个哈希值,叫做Merkle根
➤ 前一个区块用SHA256计算的哈希值
区块链之所以被叫做链,最关键的就是第三部分:前一个区块的SHA256函数值,它就是区块与区块间首尾衔接的「链」。
以上的每个部分,都使用SHA256计算得到唯一的字符串,最终合到一起,再计算出一个总的哈希值,也就是当前区块的哈希值,作为下一个区块引用的字符串。
这样,全网所有的电脑并不是分散着记录一笔一笔的交易,而是把所有的历史交易全部串成一个链条,所有人储存的都是历史上的全部交易的总和,只不过它们是用SHA256函数计算出来的。我们前面讲这个函数时候说过,它不能通过结果反算出原始信息来。所以也不必担心具体的交易信息被泄露。
问题结束了吗?还没有。别忘了,任何一个网络中,都有贪婪的坏人。
6 挖矿:对付坏人的大数计算因为没有中央机构,就没法保证全网在同一时刻只存在一条链,区块链在记录的过程中有可能会「分叉」,有时是因为操作失误,但更多时候是来自恶意。
举个例子:老孙从别人那收到了200个比特币,把它支付给了开开,紧跟着又操作一遍,把这200个比特币支付给了熊仔。这样200就能当400花了。
注意,这两条信息都是真实的,也都按照规则,基于前边一个交易,也就是「老孙收入了200比特币」作为上一个区块。
结果,全球各地安装了比特币软件的人,因为网速的原因,有人会先收到第一笔支付信息,有人会先收到第二笔支付信息,哪个才是有效的?如果这两条交易都被记录下来,那可就乱套了。
你可能会想:不对吧,老孙把钱支付给了开开,那他的余额应该是0了,不能再支付给熊仔了呀?如果你这么想,就还是没离开传统的记账方式,别忘了,在比特币世界里,没有中央机构负责记录每个人的账户余额。
区块链网络的解决办法是:限制单位时间里产生新区块的数量,比如十几分钟之内只允许产生一个新区块。可是既然没有中央机构来监督,这个限制动作本身又是怎样完成呢?
答案是:让全网的计算机同时算一道难题,所有计算机的算力加起来,平均十几分钟才能算完这道题。
这么难的题怎么出呢?
刚才我们说,生成一个区块要算出一个字符串来,这个字符还不能作为最终结果加到整个链条上,而是要再加一步操作:由软件生成一个随机数,和刚刚的字符串一起组成一个新的字符串,接下来,要把这个组合成的字符串再用SHA256算一次,会得到一个新的256位数。
运算的结果必须是前72位全部都是0,才算正确答案,也只有前72位全都是0的结果,才能作为这个区块的哈希值,被下一个区块引用。
如果算一次结果不正确,那就再给个随机数,再计算,直到算出来为止。
所以,我们要在前面的图上加点东西,下面这张图才是一个区块的完整版:
那么,既然软件给的是一个随机数,哪能那么巧,算出来前72位全都是0呢?没错,这就是关键。
区块链网络设置这道题,就是要让算出来这个结果的概率很低,低到什么程度呢?每一位结果可能是0或者1。第一位是0的概率是1/2,第二位还是0的概率是1/4,第三位还是0的概率是1/8……这样延续下去,整个网络里大概平均要进行2的72次方次运算,才会有一台机器,幸运地算出了正确答案。
按照目前全网的算力估算,得到一个正确答案的时间,差不多就是10分钟。区块链就是通过这种方法来控制新区块出现的频率。
如果以后的计算机算力越来越强,算出答案的平均时间越来越小怎么办?很简单,只要修改一下规则,把72位全是0改成73位、74位,每增加一位,难度就翻一翻。
这个运算量很大,而且它的目的只是为了「拖延时间」,其实是一个没有意义的运算。那大家凭什么愿意拿出电脑来算这个数,帮别人记账呢?
比特币的规则规定,最先算出来的人,奖励一定数量的比特币,这也就是为什么参与比特币的人叫矿工了,他们挖的矿,就是系统奖励的比特币。
当然,这个奖励不是一成不变的,否则钱越来越多,就会通货膨胀。一开始是奖励50比特币,往后每推进21万个块,奖励就会减半,这样一直减下去,总数加起来大概就是2100万个比特币封顶,这也就是为什么比特币越来越值钱的原因。
其他矿工看到有人挖到了矿,只能干着急,因为软件是一个个生成随机数,算出正确答案,就更新到自己链的末尾,同时发布给全网。谁先给出来符合要求的结果,谁就说了算,谁就能得到奖励。
而刚才的问题也就有了答案:老孙在1秒钟内给开开和熊仔先后转账,最终哪一笔算数,不在于老孙操作的顺序,而在于这两笔交易中哪一笔被幸运的人先算出正确的答案来,另外一笔由于失效会被作废。
7 长链优先:拒绝造假看完上面的讲述,你会不会觉得比特币网络完全安全了?并不是。
坏人不止一种,还有人可以在不犯规的前提下,伪造比特币,其实也就是伪造记录。
比如熊仔比老孙还要利欲熏心,在当前区块链的基础上,自己给自己付一大笔钱,然后提交到全网,怎么办呢?
注意,这里面他并没有违背前面说的原则,他伪造的基础是基于上一个正确的区块,发布的信息也是经过正确加密的,只要他的电脑算力够好,算出了前72位都是0的正确数值,这条交易就会被记录并且发布出去。
这样的问题怎么解决呢?这就得说到区块链的另一条规则:全网只认最长的那一条链。
熊仔可以凭运气做出一个区块,相当于做了一条分叉,但是在这条分叉上的下一个区块还得他一个人做,下下个区块还得他自己做。而在另一条没有造假的链条上,是全网所有人在做区块,一台电脑的算力无论如何是比不上全网的,很快他的链条长度就被甩在后面,无人问津了。
实际上,因为全网的客户端都是自动选择最长的链条去做区块,更大的可能是熊仔的电脑还没来得及算出来72个0的结果,全网中正确的链条就已经往前推进十几个区块了,熊仔做出来的假区块根本就不会被人家搭理。
看了这些你可能会想,动用了这么多的技术,把计算搞这么麻烦,到底是为什么呢?其实这背后全都是为了去中心化所付出的代价。那为啥一定要去中心化?这就不是技术问题,而是理念问题了。
比特币和区块链是由一群极客发明的,他们的原始愿望,就是打造一个人人平等的、没有任何机构管控的互联网世界。至于区块链后来被其他人、甚至其他机构用起来,那就是另外一个故事了,我们放到下一期再给你细说。
8总结、福利和预告
今天我们从比特币出发,给你在微观的层面上讲解了区块链的技术原理,其实它的本质,就是利用一系列的加密算法,代替中央机构的作用,而这些算法本身并不是很难理解。
你可以看到它为什么能在根本上实现去中心化、不可篡改,同时也能看到它为了实现去中心化的目的,也带来了处理效率低、浪费算力等弊端。
但是,我们的话题还远远没有讲完,区块链发展到今天已经很多年了,它后来又经历了哪些变革?它可能被黑客攻击吗?所有区块链都是一样的吗?什么是公链、私链和联盟链?除了做电子支付,区块链在其他行业里还能做什么?又有哪些宣传言过其实了?
这些内容,我们放在下一期宏观内容里给你讲。
有态度,有深度,BIMBOX,咱们下次见!
高中统计中位数怎么算?
1、将数字按照从小到大的顺序排序。确保将一组数字中的所有数字进行排序,包括0和异常值。
2、如果其中包含负数,你要记住负数比0小,顺序肯定是在正数之前。
3、如果有重复的数字,你需要对每一个数字都排序,不要落下任意一个。
4、中位数就是这组数字中,位于中间位置的数字,也就是说这个数字之前和之后的数字个数是一样的。如果数据的个数是奇数,则中间那个数据就是这群数据的中位数;如果数据的个数是偶数,则中间那2个数据的算术平均值就是这群数据的中位数。中位数是集中趋势的测量量之一,它是一组数字中位于中间位置的数字。任意一组数字都有中位数,但是只有当一组数字中含有异常值时,使用中位数才最有意义。异常值是位于数据分布正常范围之外的数值。比如,你需要了解顾客对服务员服务水平的评分。评分结果分别是-1、2、3、1、0、3和10。其中,10明显是异常值(这个10分有可能是服务员母亲给出的评分),因为它和其他数字差距明显。此时,使用中位数比使用平均数可以更好地描述这组数字。扩展资料特点:2、有些离散型变量的单项式数列,当次数分布偏态时,中位数的代表性会受到影响。3、趋于一组有序数据的中间位置,
怎么解释才能让老百姓都能明白?
先说结论:“中本聪”利用区块链技术,巧妙地解决了账本同步和信息不重复的问题,这就使得去中心化账本的理想最终得以实现。
去中心化的理想(理解区块链的前提)
区块链原本是一种基于互联网的信息编码、传输、加密、解密、验证技术,但在我看来,现在已经上升到了一种“去中心化”的理念,本质上是一种理念上的革新。而比特币就是这种理念的一个具体应用。打个比方来说,区块链就相当于电子商务,你想想二十年前,有几个人搞得懂什么是电子商务,它本质上也是一种理念,只不过这种理念必须要借助一定的技术手段来实现。而比特币就相当于淘宝网,是电子商务的一个具体应用。
所以,我们要理解什么是区块链,必须要先理解什么是“去中心化”。
我举两个例子来帮助你理解:
第一个例子是从网上下载电影。最早的时候,我们下载电影都是到一些知名的电影下载网站上去下载。这些网站会把电影文件存放在一台或者一组服务器上,大家都访问某台服务器下载影片。这就叫中心化。
在这个游戏规则中,电影网站的服务器就是中心,每一个下载电影的人只不过是这个中心拉出来的线而已。中心化的游戏中,玩家的地位是不平等的,网站主占据绝对强势地位,他想让你下载就下载,想给你限速就限速。后来,一种去中心化的下载模式出现了,这就是 BT 下载,也叫 P2P(peer to peer)下载,现在我们一般讲到 P2P 指的都是那种个人借贷的网站,但是最初的概念是从 BT 下载来的,P2P 就是个人到个人,点到点。
BT 下载的原理与电影网站完全不同,影片并不是存在某个服务器上的,而是大家互相从网络上的每一个人那里去下载这个影片的一小部分,最后拼成一个完整的文件。在这个游戏中,所有玩家的地位是完全平等的,任何一个玩家可以随时离场、随时加入,只要这个游戏还有人在玩,整个游戏就能够正常运行,没有人拥有特别的权力。这就叫去中心化。
第二个例子就是我们每天都在使用的银行卡或者支付宝这些人民币支付手段,现金我们先抛开不谈。我们用无现金的方式支付人民币买东西,就是一个中心化的游戏,它的中心有好多级,比如说,支付宝的服务器是第一级中心,支付宝资金的托管银行工商银行、中信银行的服务器就是第二级中心,这些银行的再上一级中心就是央行人民银行的服务器。
在这个游戏中,不同级别玩家的权力、地位是不平等的,最大的 Boss 当然是央行,它甚至能发行货币,它的权力可以大到分分钟就把我们的钱全部抢光,很简单,它只要突然增发货币就可以了,物价突然上涨 100 倍,我们的钱就等于被抢光了。
那货币游戏能不能像下载一样也去中心化呢?也是可以的,比特币系统就是这样一个去中心化的货币游戏系统,你可以把它看成是一个大型的货币实验。
比特币的游戏规则是这么玩儿的,就两条核心规则。
第一,它的货币发行不是由某个机构说了算,而是公开一套算法,每算出一个符合要求的数字,就相当于挖到了若干个比特币。谁都可以去算,绝对公平,谁也做不了弊,因为算法本质上就是一个个数字去凑,凑出一个算一个。
第二,比特币的交易信息不是记在某一台服务器上的,而是所有参与这个游戏的玩家电脑中一人一份,同步记录,这种交易记录在理论上几乎是无法篡改的。这就是去中心化账本。这样一来,所有游戏玩家的地位和权力就完全平等了,几乎没有任何一个玩家是特殊的。为什么要加上“几乎”两个字呢,因为,毕竟能够有能力挖比特币的那些矿主还是有点特殊的,但这种特殊性并不是太大,而且矿主也没有任何壁垒,只要你买得起好电脑,谁都可以当矿主。
不得不说,比特币的这个设计非常之妙,妙不可言,他的发明人,神秘的“中本聪”确实是颗大葱。
理解了去中心化,你就等于理解了区块链,一个真正的区块链项目就是通过合理的游戏规则设计辅以信息技术,来践行去中心化理念的项目。比特币系统就是去中心化理念和区块链技术的一个优秀示范项目。不夸张地说,我觉得这是一场互联网的理念革命,是人类的又一次平等化革命,上一次是打破了人与人之间在身份地位上的不平等,这一次是打破了游戏规则本身的不平等。正因为这样,所以区块链才能激发人们如此大的热情,这是一个听上去可以颠覆一切旧规则的新生事物。
然而,我这里话锋一转,在我看来,比特币系统并不是一个成功的区块链应用,它是一个天生的残废。我为什么这么说呢?因为,从我前面介绍的比特币两条核心游戏规则就知道,它有以下这些天生的缺陷:
第一, 比特币客户端软件需要巨大无比的存储空间,因为每一个节点都必须要记录下从比特币系统诞生的第一天起所有的交易记录,截止 2018 年 2 月,这个交易记录文件已经有 147 GB 那么大了,而且只会增加不会减少。
第二, 为了防止有人作弊,比特币系统有一套很复杂的游戏规则来确保交易记录是真实的,这样就导致每一笔交易的确认时间一般需要一个小时,甚至几天。你想想吧,如果用比特币去街边买杯奶茶,会是什么情况。
第三, 最多只有 2100 万枚比特币,而且,无论有多少人在挖矿,系统规则决定了平均每 10 分钟才能产出若干枚比特币(2018年是 12.5 枚)。我想起了那句话:人民群众日益增长的比特币需求与比特币总量不充分之间的矛盾。
但是,比特币不能代表区块链,区块链也不是比特币。区块链在未来可以有哪些应用呢?
实际上,区块链解决的核心问题是信任问题,大家想一下,所有的金融机构,例如银行、保险、劵商等等,让他们赖以生存的根本是信用。我们之所以会放心地买股票、买期货、买纸黄金,那都是因为我们信任充当交易中介的机构,而这些交易中介就是金融活动的中心,我们宁愿为此付出一定的手续费、交易费,金融机构也因此挣得盆满钵满。
但是,当区块链在人们的观念上和技术上都成熟后,这种中心化的金融机构是有可能被颠覆掉的,因为我们可以利用区块链的理念和技术来改写游戏规则,让所有的金融产品交易都不再需要一个中心,而全部都以点对点的方式完成,并且从理论上能够保证信用问题。到了那时,银行还需不需要我不知道,因为银行可能还会涉及到更复杂的国家利益问题。但是,一定会有很多商业金融机构受到区块链的冲击。再比如,公证也是一个典型的中心化的贩卖信用的机构,区块链完全可以实现对公证行业的改写。
更新:
首先,请记住:比特币不是区块链,它只是区块链技术的一个具体应用。好,我们接下来往下说。
到此为止,我们去中心化账本的理想只实现了一半,并没完全实现,为什么呢?因为还有两个重大的问题没有解决:
第一个问题:账本同步问题。比特币网络中有那么多台电脑,一条交易信息发送出来的时候,当然不可能所有的电脑都开机,必然有一些处于离线状态,开了电脑也未必开着比特币客户端,所以总有一些电脑无法立刻收到这条信息。这样就会导致不同电脑上的记录不同步,到底以谁的电脑记录为准呢?
第二个问题:如何防止同一个比特币被重复使用呢?假如有一个黑客,他只有 1 个比特币,但是他却同时把这个比特币付给 A 和 B(虽然理论上无法真正的同时,但可以做到间隔时间极短),于是他就会在网络上广播两条信息,一条是支付给 A 的信息,一条是支付给 B 的信息,因为网速的关系,必然有的电脑先收到了信息 1,有的电脑先收到了信息 2,这就产生了矛盾,如何确定哪一条信息是有效的呢?
为了解决上面这两个难题,“区块链”技术横空出世——真正让中本聪一战成名的技术。
再次强调:比特币不是区块链,它只是区块链技术的一个具体应用。
接下来,让我一步步为你揭开区块链技术的面纱。
为什么要叫“区块链”?
因为中本聪把这个账本设计成了由一个个“信息包”首尾相连而成的长链,每一个“信息包”被称为一个“区块”,这些区块每一个都有唯一的编号(在比特币系统中,编号被称为高度(height)),这些编号就是自然数 1、2、3、4……一直往下排,不允许跳跃,也不允许中断和重复。
下面讲解区块的具体规则:
第一个区块当然是由区块链的发明人“中本聪”亲自创建的,那是北京时间 2009 年 1 月 4 日,在芬兰赫尔辛基的一台小型服务器上,第一个区块诞生了,这也被称作“创世区块”。在这个区块上,包含的主要信息是:
创世区块
中间那段话是“中本聪”刻在第一个区块上的纪念,从第 2 个区块开始,以后每一个区块都必须严格按照比特币系统的规则来创建。区块的规则是:
区块规则
区块链所有的奥妙就在尾巴上加的这个随机数上,因为它实在太奥妙,让我等凡夫俗子只能大呼过瘾,所以后面我就把它称为“奥数”,以方便讲解。
“中本聪”规定:这个新区块的数字指纹(一个 256 位的二进制数)的前 72 位必须全部为 0 。
回忆一下我们前面介绍过的数字指纹的知识。因为 SHA 算出来的指纹是毫无规律可循的一个数字,所以,想要满足“中本聪”的这个变态规定,唯一的办法就只能凭运气凑“奥数”,从 0 开始不断地去常试,直到满足要求为止。这就是一个纯粹的概率问题。我们来算一下要满足这个要求的概率是多大。
因为二进制数,每一位只有两种可能性,0 或者 1,所以,凑出一个奥数的可能性是 2 的 72 次方分之一,也就是 1 / 4722366482869645213696。这个数字已经大到看花眼了吧,它大约就是 4.7 万亿亿分之一。换句话说呢,就是平均要进行 4.7 万亿亿次 SHA 计算,才可能得到一个“奥数”,你可见每一个“奥数”的金贵。
最巧妙的是,“奥数”并不是某一个方程的解,解出一个少一个,因为每一个区块的字符串都不同,所以,每一次寻找奥数都需要从 0 开始,任何一个数字都有可能成为新的奥数,完全没有规律可循。
一旦成功找到了一个奥数,就获得了一次记账权力,可以给账本上新增加一个区块。那么,为什么要花时间找奥数,去给账本记账呢?因为好处实在太大了。
比特币系统规定,每成功增加一个区块,这台记账的电脑(实际上是某个账号)就能获得 12.5 个比特币的奖励(截止到 2018 年 2 月时的奖金额),以及这个区块中所有交易的手续费,总额取决于交易频繁程度(平均约 2 比特币)。这样一来,相当于每找到一个奥数,可以获得 14.5 个比特币奖励,按照 2018 年 2 月的比特币市场价,相当于12 万美元。这么丰厚的奖励,自然就会吸引大量的电脑愿意去抢夺记账权。
寻找奥数就是抢记账权,抢记账权也就是挖比特币。因此,寻找奥数也被形象地称为“挖矿”。挖矿的电脑就叫“矿机”,一个装满矿机的房间当然就可以叫“矿厂”了嘛,矿厂的主人就是“矿主”,他们是比特币江湖中的弄潮儿。
但是,我需要给你解释一下挖矿的难度,让你打消去挖矿的冲动。个人电脑的运算速度大约是每秒可以进行 60 万次 SHA 计算,也就意味着,一台个人电脑需要花一千万年才有可能凑出一个奥数。当然,这是一种概率计算,我不能从理论上排除某人的人品超新星爆发,算了一次奥数就中了 4 万亿亿分之一概率的奖。但我还是想劝你不要相信自己是耶稣转世,你没有那个命。
我给你看看人家专业的矿厂是怎样的:
图: 一个中等规模矿厂(图片来源:百度图片搜索)
这只是一个中等规模的矿厂,大规模的矿厂据说有几万甚至几十万台矿机同时运行。我在《看看新闻》 2017 年 6 月 17 日的一个新闻中看到,记者拜访了一座位于中国四川的矿厂,根据报道:这个矿厂有 5000 多台矿机的规模,平均每天耗电超过 20 万度,当地的电价是 3 毛/度,一天光是电费就 6 万多元,平均每天可以挖出大约 50 个比特币,一年左右回本,之后能做到 20% 左右的利润。
不过我觉得这个报道中的数据前后矛盾,我查了一下,比特币当时的市场价是大约 2500 美金/个,美元兑人民币的汇率大约是 6.8 ,所以,每天的收入大约是 85 万人民币,一年的收入大约 3.1亿元,一台矿机的成本均价是 1 - 2 万元, 矿厂的矿机总成本是 5000 万- 1 亿元,再算上电费等,一年起码 2 亿的利润。我想,在充分市场竞争下,出现这种暴利的可能性很低。所以,不是记者搞错了,就是被采访对象在吹牛不打草稿。由于比特币的价格和全网算力的波动很大,所以投资比特币矿厂很难做长期预测,不确定因素太多。
图:看看新闻报道的位于四川的某矿厂(图片来源:《看看新闻》官网)
根据我们前面掌握的比特币知识,50 个比特币,相当于找到了 4 个奥数,抢到了 4 次记账权。目前,整个比特币网络的所有矿机加起来的总算力能达到的水平,大约平均每 10 分钟可以找到一个奥数,也就意味着平均每 10 分钟生成一个新的区块。当然,这个 10 分钟是一个平均数,快一点的话 3、4 分钟生成一个区块,慢一点的话 15 分钟左右。
正因为奥数太难找,每个区块平均要 10 分钟才能生成一个,所以就能基本解决我在本章开头提出的第一个问题“如何同步账本?”,只要有个 3、4 分钟的时间,足以让所有在线的电脑同步到这个区块了,那些不在线的电脑或者第一次运行客户端的电脑,上线以后必须要先做一件事情,就是从相邻的节点上获取最新的账本。
请注意,我用了“基本解决”这个词,也就意味着,并没有完全解决账本同步的问题。这是因为总会有极小的概率两台矿机恰好同时(只要在网络上所有在线的节点没有完成区块链同步之前都可以算同时)找到奥数,也就意味着同时抢到了记账权。因为矿机实在太多了,这样的小概率事件时不时也会发生一次。同时抢到记账权的矿机都会将自己生成的新区块广播到比特币网络中。
遇到这种情况,比特币系统怎么处理呢?
在这种情况下,相当于网络上的其他节点收到了两个合法的新区块,因为网络节点的地域分布不同,所以,不同的节点收到这两个新区块的先后次序就会不同。此时,所有的节点会暂时保留两个新区块,并且把区块链做一个临时的分叉,如下图所示:
(图片来源:自绘)
接下去,比特币网络中必然又会有其中一个节点(矿机)抢到了记账权,这时该节点就会将生成的最新区块接到其中的一个分支上,那到底是接到新区块 1 上还是 2 上呢?系统规则是:这个节点先收到哪个区块,就接到哪个区块上,同时放弃另一个区块,然后全网广播,如下图所示:
(图片来源:自绘)
比特币网络上的所有节点在收到最新的区块链后,只要发现其中一个分支比另外一个分支多 2 个区块了,就立即也放弃那个短的分支,总之,比特币网络永远只承认更长的那条分支。你可能会想,那如果小概率事件再次发生,在区块链第一次分叉后,又同时产生了两个新区块,而恰好两个新区块产生在两个不同的分支上,这时候,其他节点收到的区块链还是两个一样长的分支,那怎么办?很好办。还是同样的规则,只要分支一样长就暂时保留,直到出现两个分支不一样长时,就放弃短于 2 个区块的,保留长的。那个被放弃的分支中所有交易和比特币奖励都会被判定为无效。
因为有了这个临时分叉的规则,所以,比特币玩家在完成一笔交易后,不能立即认为这笔交易是成功的,有可能会被取消,必须要等到一定数量的新区块生成后,如果交易依然没有被取消,这才能放心地认为交易成功了。那到底要等到多少个新区块产生才能放心呢?按照概率来说的话,小额交易有这么三个新区块产生就够了,但是大额交易的话,为了更保险,一般认为是等到 6 个新区块产生,就足以放心了。前面说过,每个区块产生的平均时间是 10 分钟,也就意味着,一笔大额交易需要 1 个小时左右才能确认交易成功。
但是小额交易确认的时间往往会更长,甚至长达好几天。听到这个你可能会有点儿糊涂,刚才不是还说小额交易一般只要三个新区块产生就够了吗?怎么确认时间反而会更长呢?比特币网络刚刚诞生的头几年,确实不会出现这样的怪事,但是这几年随着交易量的猛增,就会出现这种怪事了。
为什么?先回忆一下每个区块的规则:
区块规则
你的交易记录要被写到区块链上,有一个前提:矿工将你的这笔交易记录打包到这个区块上。你可能想问:为什么会不打包?难道系统规则还允许不打包吗?打包成功了不是还要给矿工交税吗?矿工好不容易抢到一次记账权,怎么会有钱不赚呢?
是的,允许不打包。原因不是矿工不想赚钱,而是“不可抗力”,关键问题是每一个区块允许存储的数据量有限。中本聪当初设计比特币系统时,规定了每一个区块最大只能是 1MB,一条交易记录大概是 0.25K,那么一个区块最多可以储存 4000 多条交易记录,如果在一个新区块产生的时段中,发生的交易请求超过了 4000 条,那就肯定存不下了。我们可以算算,这个量大概是一个怎样的交易频率。每个区块的平均产生时间是 10 分钟,也就意味着,平均每秒钟的交易量如果超过 7 条,那么就一定会出现排队等待打包的交易记录了。这个交易频率实在很低,要知道支付宝一秒钟大约要处理上万笔交易。这一秒钟七笔交易对于全球来说,实在是太不够用了。
一般来说,大额交易优先打包,小额交易,手续费越高的交易越优先打包,打包规则矿工有一定的自主权。比特币交易手续费的规则比较复杂,不同的矿工收得还不一样,不是三言两语能说清。但有一点可能会让你感到诧异,越是大额的交易反而收费越低,甚至免费。交易额越小反而费率越高。这是因为,交易手续费除了鼓励矿工挖矿,还有一个非常重要的功能,就是防止有人恶意发布大量的小额交易造成信息拥堵。
现在,比特币交易滞留是非常普遍的现象,很多小额交易甚至等上好几天都确认不了,因此,很多人不惜附加很高的交易手续费来让矿工提前替他们打包。
好了,讲到这里,有关区块链的核心原理就讲完了,关键要记住,“中本聪”利用区块链技术,巧妙地解决了账本同步和信息不重复的问题,这就使得去中心化账本的理想最终得以实现。
学习知识,我认为最佳的方式就是带着问题学习,在学习过程中,先掌握知识的主干,如果还有兴趣,再去了解那些枝枝杈杈。
公海客户筛选关键因素不包括什么?
不包含主营产品和地址、客户是否是其他业务员的客户、客户来源、客户基本联系方式因素。
公海客户分析是根据时间、部门、员工筛选分析统计公海池领取客户数、进入公海客户数生成柱状图和表格数据,并且支持导出。
可以根据配置采用公司级公海和部门级公海,即掉下来的客户可以根据设定掉落在公司范围或部门范围,这个范围的人可见并作申领,或者增加按客户类型设定的权限级公海(如XX类型或XX行业的客户掉落后仅特定的业务员可见)。
公海的掉落策略一般是有几重规则,如指定时间内未建跟踪记录、客户未产生明确意向、或者指定时间没有促成等,满足数据条件则自动掉落。这些规则可以相互组合成如:三个月没有走单,但此期间客户产生明确意向(参考CRM中的商机数据),那么在商机的预计成交时间内不掉落。
或是三个月没有促成,但此期间有一个频率较高的跟踪接触(参考客户跟踪数据),也可以按阀值重新计算延长掉落时间。至于掉落的时间限制,可以参考历史跟踪和订单记录,从众多客户初次跟踪的时间到最后成交时间得到一个客户平均开发周期,取值可以比这个稍大一点。
循环贷账户里面的G是什么意思?
G代表“循环贷账户”中的“个人循环贷款”。个人循环贷款是指银行或其他金融机构向个人客户提供的一种信用贷款产品,客户可以根据自身的资金需求,在一定的信用额度范围内进行多次借款和还款。这种贷款形式具有较高的灵活性和方便性,可以满足个人短期资金周转的需求。循环贷款账户中的G表示“个人循环贷款”的缩写,用于区分其他类型的贷款产品。在循环贷款账户中,G代表了该账户所对应的贷款产品为个人循环贷款。通过个人循环贷款,借款人可以根据自己的资金需求随时借款和还款,灵活运用资金,满足个人消费或投资的需要。个人循环贷款的优势在于可以根据个人的资金需求进行多次借款和还款,避免了频繁申请贷款的麻烦。同时,个人循环贷款通常具有较低的利率和较长的还款期限,为借款人提供了更多的灵活性和便利性。然而,个人循环贷款也需要借款人具备一定的信用等级和还款能力,以确保按时还款,避免逾期和产生额外费用。因此,在选择个人循环贷款时,借款人需要谨慎评估自己的资金需求和还款能力,合理规划借款用途和还款计划。