比特币实际上是一种电子货币或者叫数字货币,它是基于密码学的一种货币,这种货币跟我们以前用银行卡里面的那种货币不一样,它的出现是一种传奇.
在2008年11月1日金融危机的时候有一个网络极客,他的用户名叫中本聪,这个中本聪我们到目前为止也不知道他到底是谁,他在网络上发表了一篇文章,这一篇文章我们现在管他叫<白皮书>,全名叫<比特币:一种点对点的电子现金系统>
(PDF原本链接—译文),他在这个<白皮书>里面提出了这样一种构想:
现在我们进行交易的时候最重要的一件事就是记账,比如说我付给你多少钱,我要检查自己的银行卡里还有没有那么多钱,我付给你之后还剩多少钱这就叫记账.现在的记账是银行来负责,不管是信用卡还是支付宝微信都是银行来记账,我们信任银行因为银行的背后是国家的信用.
但是中本聪就说 我们可以设计一个去中心化的电子记账系统,其实我们并不需要这么一个中心化的记账系统,每一个人的账本都是可以让别人去看,都是公开的没有银行在中间帮我们记账所有人都可以来记账,这就叫去中心化的电子记账系统.
举个例子 有A B C D四个小朋友(无中生友 q(≧▽≦q)) 他们之间有交易行为(买卖东西),那么相互中间就要进行支付
第一次 A 给 B 10个BTC(比特币) 交易之后需要记账 但是这个账单不能只是A自己留着,因为自己留着别人不信
所以A要把账单广播出去告诉所有人 所以A把账单告诉B 告诉C 又告诉D …广播到网络上所有的人
第二次 B 给 C 5个BTC(比特币) 同时B 把账单告诉D 告诉A 再告诉C …广播到网络上所有的人
第三次 C 给 D 2个BTC(比特币) 同时C 把账单告诉D 告诉B 再告诉A …广播到网络上所有的人
银行系统每天都会对账单进行整理存档,相同的现在我们也需要把账单打包成一个块,这个块就是"区块".一个区块的大小大概是一兆,可以存4000条左右的交易记录.
区块打包好之后,再把这个区块链接到之前的区块上,就是把这个区块接到以前的区块之后,把这个区块接到以后形成的区块之前,这样就形成了一条链,这就叫区块链
我们有了这个系统之后就要解决几个问题
我们逐个分析
因为有奖励!
每一个BTC系统中的用户都可以去记账,如果他记了账他会有一个手续费的收益(A 给 B 10个BTC的交易 A必须多付出一点点作为记账打包的这个人的手续费)如果用银行卡的话其实也是有手续费的,而且还挺高的,比特币交易的手续费就低了,这是第一个收益!
第二个收益就是打包的这个人执行完打包操作之后有一个打包奖励(打包只能一个人完成,后面会说到),那这个奖励是多少呢?
中本聪在2008年提出这个系统的时候,他设计了这样一个方案:
每十分钟打一个包 最开始这一个包会奖励打包者50个BTC,过了四年之后每打一个包会奖励25 个BTC,如果再过四年就是奖励12.5,也就是每过四年奖励减半
我们来算一算BTC一共有多少个.首先每过10分钟会打一个包这一个包会有50个BTC.一小时有6个十分钟,一分钟可以打包6次,每天有24小时,每年有365天 前四年是这样,之后会减半…
50×6×24×365×4×(1+(1/2)+((1/2)^2)+....) =21000000
也就是说BTC一共就有2100万个,它是通过打包奖励这种方式扩散出去.
正因为有手续费和打包奖励这两条 所以大家都抢着去打包 但是都想打包,那么以谁为准呢?
这个权力给谁呢?中本聪想了一个办法叫工作量证明
这个工作量证明在这里就是说每一个用户他都要去做一个很难的数学题,这个很难的数学题你把它做出来了,那么你就有权利进行打包,你如果获得了打包的权力,你就会获得手续费以及打包奖励,就酱紫 <( ̄︶ ̄)↗[GO!]
这个很难的数学题难道什么程度呢?难到没有任何一个人能够直接通过脑子把它做出来 我们必须一个一个数的去尝试 直到你把他尝试出来了,你才能解出这一道数学题得到打包的权力获得奖励,这个解题获得奖励的过程我们称之为挖矿!
挖矿我们刚才说过,是做一个很难的数学题,但是这个数学题不是看你的脑子聪明不聪明,而是看你的CPU的速度如何,因为没有人能够通过脑子把它计算出来大家的方法只能是一个一个的试,那具体原理是什么呢?在次之前我们先说一下另外的很有意思的东西:哈希函数
哈希函数又可以叫数字摘要或者散列函数 我们可以把一个字符串通过一定的运算,转化成一个摘要的形式,它正着算比较容易 但反向逆推是很难的!
哈希算法里面有一个很著名的哈希算法叫SHA256,SHA256 是美国国家安全局发明的一种算法,如果我把一个字符串’cnfox’输入到这个SHA256函数里面,输出的是一个二进制数,这个二进制数有256位不管输入什么最后输出的都是256位的二进制,而且输入的字符串改一点点输出的二进制就会有变化.
sha256(cnfox)=
100001000001010011010010111100111000011110001010100110000111101011100100111010010011001110100011101001010010101000001110110101011110011000011111100111101100011101100111000110010100010001011110111000001111000110101
=68c2bbe1644e68e5fa90aae1318e7e0736a17a4c424fcff1cd2f30855d9ae6ac
sha256(icnfox)= a464f62280b7bbe64bd0d710dbc72fc3a6c6003d6891e7a55ec23a34bd79e483
哈希算法正向算比较容易,但是反向算非常非常困难
这个怎么理解呢~举个例子 x^3+log2(x)+sin(x)=y 已知x求y是比较简单的 但是已知y求x就很困难
哈希函数比这个还要复杂的多 所以它反算基本上是不可能的 我们只能一个一个去试(后面会说到这边怎理解,先记下就好)
假如你告诉我一个二进制形式的结果,问我什么字符串结果是这个二进制,我只能一个一个去这个字符串,一直试出来为止,这就是哈希算法的一个基本的问题
这边可能不是很好理解,那就暂且搁下,看完后面的就懂了
挖矿就是基于SHA256S算法的一个运算
前面说到,区块链是账单打包成块,然后块连接成链形成的.实际上是区块中还有一个头部.
现在假设区块链刚好某一个区块打包完成,所有的人都想拿着自己的账单去打包接块,但是接块的时候必须算一个很难的数学题
随机数
.拥有打包的权力的人需要打一个包并且把算出来的哈希值作为一个新块的头部,再把这个包接到上一个区块的后面,就可以获得奖励BTC.
现在问题来了我们应该怎么让前面几个数都是 0 呢?怎么控制0的数量呢?这就需要做一个操作:就是改变随机数.因为其他的内容是改不了的
,随机数从0开始 ,算一次看一下是不是满足0的数量,如果不满足开始算1…直到试出来为止
每个人再计算的时候它的这个题的难度是不一样的,因为每一个人的前块的头部虽然都是一样的,但是账单的内容可能是不一样的,开始时间可能是不一样的个人信息也是不一样的所以造成了随机数的大小不同;有的人运气比较好第一次就算出来了,直接就打包了;有的人运气不好需要算好久.但是平均下来说是谁的计算能力越强谁就更有希望打包这个块,谁就更有可能挖到这个矿,所以大家都拼命的去买矿机~
N越大,这个数学题就越难
为什么呢?首先这个不可能逆算,只能正向一个一个去试 ,每一个0出现的概率试50% 这就显而易见了 N越大难度越高 N 越小难度越低
(1/2)×(1/2)×(1/2)×(1/2)×...×(1/2)=(1/2)^n
中本聪在设计的时候设置的是每10分钟出一个块,那这个是怎么保证的呢?就是调整N的难度
比如说现在世界上有1w台矿机 每一台的计算能力是14T/s 也就是每秒钟可以计算14T次哈希运算(1.4×10^13次每秒),十分钟是600秒1w台矿机 可以算(1.4×1013×600×104)=8×10^19次
也就是说1w台计算能力位14T/s的矿机 十分钟可以计算8×10^19次
如果0出现的概率是(1/2)^n 那么就需要计算的次数就是2^n次 如果n出现的概率是1/64的话,那么你出这个块的平均要计算64次
同样的道理 现在计算了8×10^19次 N=66的时候 0出现的概率是(1/2)^66 计算的次数大概就是8×10^19次,所以说这种情况下,矿机就会把难度设置位N=66 第一个能够算出来前66位全是0的人 就有权利去打包这个块拿到奖励!
一时心血来潮,就是想看一下这个创世区块和中本聪老师的钱包地址~
BTC的官网(可能需要科学上网):https://bitcoin.org/en/
包括概念介绍、代码提交等基础信息都可以找到相应链接,有中文版!
但是我们想找的不在这里 ╰(‵□′)╯
https://www.blockchain.com/
这个网址就是比特币的区块链网站地址,可以查询区块、哈希、交易记录等等信息。
好~现在好像也有中文版
我们直接在搜索框写’0’回车
网页底部可以修改语言 ,然后点击BTC
这就是创世区块的信息啦~
很显然,没有 点下一个区块看看…
果然,并不是查不到而是被隐藏了,本来还想偷偷给这个地址捐点钱,表达一下对中本聪老师的敬意呢
讲到这里还有很多问题没有解决:比如说如何防止伪造,如何防止双重支付,我们以后再聊~晚安
本人个人网站: https://www.icnfox.cn 欢迎来访
有任何问题可以在个人网站的评论区留言,看到就会第一时间回复 啾咪ヾ(≧▽≦*)o