各位同学大家好我是蒋明蒋老师经常有小朋友问我啊比特币到底是什么我们准备通过两期节目的给大家介绍一下比特币的基本原理
那今天呢我们首先来介绍一下挖矿到底是怎么回事
比特币是什么呢比特币呢实际上是一种电子货币或者叫数字货币
它是基于密码学的一种货币
这种货币呢跟我们以前的用银行卡里面那个货币它不太一样啊它的出现的是一种传奇在2008年的时候
金融危机2008年11月1日的时候有一个网络即刻
他呢画名叫中本聪啊这个中本聪呢我们到目前为止也不知道他到底是谁
他在网络上发表了一篇文章啊这篇文章我们现在管他叫白皮书
嗯
白皮书啊全名叫比特币一种点对点的电子现金系统
他在这个白皮书里面呢提出了这样一种构想就是说呢我们可以设计一种去中心化的
电子记账系统
去中心化的电子记账系统我们在进行交易的时候最重要两件一件事啊就是记账
啊就是记账
比如说吧我付给你多少多少钱我要检查我自己的银行卡里还有没有这么多钱对吧我付给你之后还剩多少钱这就叫记账
那么那现在的记账是谁来记呢是银行记我们不管是用信用卡
还是用这个支付宝或者微信都是银行来记账我们信任银行因为银行的背后是国家的信用对不对那么他这个
这个不中满聪就说呢其实我们并不需要一种中心化的这个记账系统
我们可以去中心化每一个人的账本呢都是让别人去看都是公开的那这就叫去中心化电子集账系统举个例子来说啊比如说有这么
几个小朋友这几个小朋友啊分别叫abcd吧
abcd他们呢进行交易啊买东西卖东西之类的那所以相互之间就就要进行支付对吧
支付的时候比如说有一次a呢先支付了十个比特币
十个比特币给b
这件事情的a要记账记账了之后你不能自己留着因为你自己留着别人不信对吧所以你要把这个账单的要广播出去要告诉所有人所以说a把这账单告诉b
告诉c又告诉d了广播到网络上所有人过了一会呢b要进行支付比如说b支付了五个比特币
给c同时呢必把这个账单呢告诉d告诉a再告诉c
对吧然后呢这个c呢又支付比如支付了两个比特币给d对吧同时呢c也要把这个账单呢告诉其余的所有的人
这样那么这个账单呢我们会把它进行打包啊打包成一个块这个块我们就叫它区块
啊区块
这一个区块里面呢它大小大概是一兆啊我们可以存4000条左右的交易记录有时候多一点有时候少一点是取决于每一条记度大小啊
好了这个块打包完了之后我们再把这个块链接到以前的交易记录上形成了一条链就把这个块接到以前的块上
然后过一会再把新的块接到他后面就叫区块裂就这么回事对吧
那好我们有了这么一个系统之后就要解决几个问题什么问题呢比如说啊这个账单呢以谁为准
这就是一个问题
以谁为准
啊因为每个人的账单可能是不一样的比如说a呢他可能会先记录a把十个比特b给b这件事后记录b把五个比特b给c这件事
但是因为网络的延迟效应
d这边可能不是这样的d的顺序可能是先记录的b负五个比特b给c然后au负的十个比特b给b对吧每个人的账单可能不太一样你到底是以谁为准
第二个呢就是我们为何要记账
啊凭什么你广播给我我就要收着呢凭什么我要去花我自己的电脑资源记录一个跟我无关的这个账户呢对不对
为什么要记账第二第第二个问题第三个问题呢就是如何防伪
如何防伪什么叫防伪呢比如说吧这个
b呀广播的一条消息说a支付了十个比特币给他
但实际上的a并没有支付给他那这就是一个伪造的记录我们怎么去防伪对吧怎么去防止篡改之前的记录我把它改掉啊这个怎么办
如何去防止篡改啊还有很多很多其他的问题比如说如何防止双重支付啊一个人同时发给两个人
十个比特币但他实际上一共就只有十个比特币啊还有呢就是如何进行保密你这个信息都是公开的那别人不就知道你有多少钱了吗怎么去保密等等一系列的问题
我们今天的主要就研究前两个啊以谁的账单为准还有我为什么要记账
我们首先呢来说一下为什么要记账记账是因为啊记账有奖励记账的奖励啊记账的奖励
那么每一个比特币系统中的这个用户呢他都可以去记账如果他记得账第一个他有手续费的收益
手续费
手续费什么意思呢就是a付十个比特币给b的话ab需要多付出那么一点点这一点点就是给这个打包的这个人他记账了这个人
他的一个手续费这个如果你要是用银行卡的话其实也有手续费而且还其实挺高的那如果你用比特币的手续费就低了对吧啊这就是第一个他的收益第二个他的收益
就是打包的那个人他有一个打包奖励啊打包的奖励只能是一个人打包
这一个人他会获得奖励奖励是多少呢中本聪在2008年提出这个系统的时候呢他涉及了这样的一个方案就是
每十分钟打一个包每十分钟打一个包最开始这一个包呢会奖励打包者50个比特币
过了四年之后呢没打一个包会奖励你25个比特币如果你要是再过四年就奖励125也就是每过四年之后他会减半
咱们来算一算比特币一共有多少个啊首先呢每过十分钟你会打一个包这一个包呢有50个比特币的奖励对吧
一个小时呢有六个十分钟可以打包六次啊然后呢每天有24个小时
每年都有365天前四年的时候都是这样我再乘个四年
但是第二个四年就不是这样第二个四年会减半对吧所以我再乘个第一个四年第二个四年会乘个12第三个四年会乘12的平方
第四个四年12的三次方这样一直加下去如果我把它都算出来最后结果大概是2100万个
也就是说呢
这个比特币一共就只有2100万个他是通过打包奖励这种方式把它扩散出去的
对吧啊就是这样的一个问题那正因为有的这个手续费和打包奖励这两条所以大家都抢着去打包
你抢着去打包那谁以谁为准呢下一个问题以谁为准对吧以谁为准
只能是一个人打包对吧这个权利给谁呢这中本从想到一个办法叫工作量证明工作量证明
这个工作量证明是什么意思呢就是说每一个参与的用户他都要去做一个很难的数学题这个很难的数学题你把它做出来了
那你就可以有权利进行打包你如果要进行打包了你就会获得手续费以及打包奖励
对吧这个很难的数学题难道什么程度的难道没有任何一个人能够直接通过脑子把它做出来我们必须一个一个数去尝试
直到你把它尝试出来了那么你就获得了这个奖励所以这个过程我们就称之为挖矿
称之为挖矿
如果你把这个数学题做出来了
你就获得了这个打包的奖励而这个打包的奖励就是几十个比特币对吧你就称之为八矿成功了啊这就是八矿的含义
那么具体呢这个数据题到底是怎么回事呢咱们再往下继续说我们下面来讲一下挖矿的具体原理是什么挖矿的原理
挖矿啊
我们刚才说过他是做一个很难的数学题
但是这个数学题并不是看你脑子聪明不聪明而是看你cpu的速度如何啊因为没有人能够通过脑子把它算出来大家的方法只能是一个一个事
具体的原理是什么呢首先我们回忆一下以前我们曾经讲过一种叫做哈西
哈西函数的东西啊
这个哈西函数啊
他的意思呢也可以叫数字摘药或者散列函数啊他的意思是说我们可以把一个字符串通过一定的运算转化成一个摘药的形式
而且呢你挣的算比较容易反正算很难比如说吧哈西算法里面有一个很著名的哈一算法叫上256
杀256啊这是美国国家安全局发明的一种算法如果我把一个字符串输入到这个杀256函数里边比如这个字符串叫apple
apple那输出的多少呢输出的是一个
那个二斤之数这个二斤数有256位比如说101011010啊没有什么规律是吧一共有多少位呢一共有256位
位啊所以就叫杀256嘛
而且他这个算法吧就是不管你前面输入的是什么
那后面他结果都是256位的一个二斤之数你把一个十个g的电影放进去他最后输出了还是256位的数
而且呢如果你改一点点它就数字都不一样比如我的apple这我加一个点多了一个点最后的这每一位的数字都有可能会发生变化这就是它的一个特点
而且呢哈气算法的难度啊就在于它正向
有去之处啊他正向算比较容易正向算比较容易但是他反向算
非常的困难
这就是他算法的一个特点啊我们举个例子啊
比如说吧有这么一个函数就是x的三次方加log二x加赛一x等于y
我是举个例子你给我一个x让我算出外来其实这个并不难但是你给我一个y问我x是几这就很困难
哈西函数比这个还要负责的多所以它反算基本上是不可能的
我们只能怎么办我们只能一个一个去试啊假如你告诉我一个一个结果你问我什么结果是这个那我就只能一个一个试一直把它试出来为止啊
这个呢就是哈西算法的一个基本的问题啊那么这个挖矿呢其实就是基于这个杀256的这个一个运算
我们来说一下挖矿的具体的原理是什么
刚才我们说到啊这个区块链呢其实是一大堆的交易信息对吧一大堆的交易信息啊比如说呢这个区块链已经链接到了某一个位置
从最一开始第一个块开始练一直练练到了某一个位置这是目前的情况
这个块里并不只有交易信息它实际上是有一个块的头部有一个块的头部
还有呢它里面有一些内容啊这个内容呢其实就是信息
就是我们交易的这个记录账单
现在呢有很多的人说我现在呀
都想进行打包为什么呢因为打包有奖励还有手续费对吧每一个人呢都有自己的一个账单啊这个账单是他收集了周围一大堆人
造成了账单每一个人都拿到账单准备去往上接块但是在接块的时候他必须要算一个数学题什么数学题呢首先它会有一个字符串
啊它会有一个字符串
这个字符串里边的内容非常多啊但是我们说一些主要的这个字符串包含哪些内容呢
首先包含目前的这个块目前已有的这个块也就是前块这个前块的头部
这个前块的头部啊这是第一个部分第二个部分呢就是他现在已经有了这个账账单啊账单的信息
你已经有打包好的这个账单的信息啊还有呢比如说像时间呢之类的时间戳之类的啊
还有一大堆乱78糟的啊然后还有一个很重要的就是有一个随机数
随机数啊这是你的一个字符串现在呢你对这个字符串
做两次哈西运算那做两次这个杀256运算它的哈西值等于什么呢等于煞256
然后下256然后字符串
你把这个字符串啊做两次这个哈气运算啊这个速度其实非常快你一下子能算出来这个数是几
但是你算出来之后会发现它是一个256倍的数对不对这个256倍的数我们要求什么的要求它的前n位
必须是零
前恩位必须是00如说你算出来的这么个数这个数结果是000002000如说有这个九个零
这有九个零然后后面是什么10111直到
最后一共有256位你算成这么一个数了假如我的要求就是前九个位数是零那你就算对了
那你就算对了你算对了你就有资格去打包你就有资格打包的意思是说你要把你算出来的这个哈西纸作为一个新块的头部
然后呢
你算出来这么一个一个数对吧一个数
然后呢作为一个新块的头部打一个包打完了这个包之后再把你这个包干嘛呀接到后面去啊于是呢你就接触一个新块了
接触个新块了你就获得了什么呀获得了你想要的奖励就这样那么我们怎么能算出来前面这几位都是零呢
就要改变一个内容就是改变这个随机数
其他的内容你是改不了的对吧所以你就改变就随机数随机数最开始从零开始
从零开始零算一次看看是不是满足条件不满足好算11不行算22不行算三他都是二进制的你就不停这么试直到你把它试出来为止
而且他要注意每个人在计算的时候他的这个题目难度是不一样的为什么呢因为每一个人呢虽然前块的头部大家都一样啊
但是你所打包的这个账单可能是不一样的对吧你的时间开始时间可能是不一样的还有你的个人信息也是不一样的
所以呢造成了这个随机数大小不同有人运气好他第一个数就算出来了那直接就打包起来了对吧有人运气不好他虽然计算能力强算了好长时间最后也算不出来
不过平均来讲是这样的谁的计算能力更强
谁就更有希望打包这个块谁就更有可能去挖到这个矿啊就是这样的原因说大家为什么拼命的去买这个矿机呢对不对
好那我们继续往下说啊说这个
我们啊有一个难度的设置这个难度的设置也就是这个n位啊这个n是怎么确定的
难度n的确定
显而易见啊
前面的这个零它个数越多这个问题它就越难啊为什么个数多就难呢咱们想象说在这个问题中啊你不可能反算只能是一个一个随机去试
每一个每一位上出现零的概率和出现一的概率各是分之50所以第一个是零的话
你概率是多少概率是12对吧概率是12第二位是零的话概率多少概率也是12第三位是零概率也是12
一直到最后一位士兵概率也是12这样成绩的结果得多少得12的恩赐命
显而易见这个恩越大这个难度就越高恩越小难度就越低对吧那中本通当时在设计的时候就是保证每十分钟
每十分钟他需要出一个块
需要出一个块然后打包几千条信息啊那怎么去保证呢就是调整这个n的难度啊调整这个n的数字我们举个例子啊比如说
比如说世界上有1万台矿机
万台矿机
这个1万台矿机啊每一台的计算能力是14个t每秒也就是每秒钟可以计算14t次哈气运算
t是多少一t是十的12次方所以这个数是一点四乘十的13次方每秒啊
明秒好那么十分钟你到底能算多少次
咱们算一下这个十分钟啊应该是600秒对吧一点四乘十的13次方
啊这是每一个矿机一秒钟算的再乘以十的四次方这表示有1万台矿机然后呢你还得乘以十分钟大概是600秒
对吧这个数字大概是8x10的19次方
也就是说呢十分钟大家可以进行这么多次运算那这么多次运算那我们再想一下
你如果啊
概率是12的n次密你想出来这个块的话你需要计算的次数就是二的n次密次吧你概率164的话你出了这个块平均你要算64次同样到底
你算了这么多次
对不对那么它大概相当于是二的多少次幂呢我们可以通过计算发现如果这个n等于66的话
啊这个时候啊你的出现概率能够算出的概率是12的66次幂
然后呢你平均需要算的次数平均的次数就是二的66次方大概也是8x10的19次方
所以在这种情况下呢矿漆就会把难度设置成n等于66
第一个能够算出来前66位全都是零的人就成功打包这个块也就成功的挖到了块
你没有办法让自己运气变得更好你能够做的就是买更多的矿机然后拼命的去挖矿这样的你就有可能会得到这个比特币大概就是这样一个原理是吧
好我们这次呢解释的到底区块链这个块到底是怎么形成但身上还有很多问题没有解决啊比如说我们如何去防止这个双重支付的问题就没有解决
我们还没有解决说我们怎么防止伪造的问题啊那这些问题呢我们会在下一回再给大家做介绍大家如果喜欢我的视频呢可以在西瓜视频里关注我蒋老师