LongCut logo

YouTube Video

By Unknown

Summary

Topics Covered

  • 比特币无需银行去中心化记账
  • 打包奖励总计2100万比特币
  • 工作量证明决定打包权利
  • 哈希函数前n位零难度挖矿

Full Transcript

各位同学大家好 我是李永乐老师 经常有小朋友问我比特币到底是什么 我们准备通过两期节目给大家介绍一下比特币的基本原理 那今天我们首先来介绍一下挖矿到底是怎么回事 比特币是什么呢 比特币实际上是一种电子货币或者叫数字货币 它是基于密码学的一种货币

这种货币跟我们以前用银行卡里面那个货币它不太一样 它的出现是一种传奇 在2008年的时候金融危机 2008年11月1日的时候有一个网络极客 他化名叫中本聪 这个中本聪我们到目前为止也不知道他到底是谁 他在网络上发表的一篇文章 这篇文章我们现在管它叫《白皮书》

全名叫比特币一种点对点的电子现金系统 他在这个白皮书里面提出了这样一种构想 就是说我们可以设计一种去中心化的电子记账系统 去中心化的电子记账系统 我们在进行交易的时候最重要的一件事就是记账 比如说我付给你多少多少钱

我要检查我自己的银行卡里还有没有这么多钱 我付给你之后还剩多少钱这就叫记账 那现在的记账是谁来记呢 是银行记 我们不管是用信用卡还是用这个支付宝或者微信都是银行来记账 我们信任银行 因为银行的背后是国家的信用 对不对 那么这个中本聪就说 其实我们并不需要一种中心化的这个记账系统 我们可以去中心化

每一个人的账本都是让别人去看 都是公开的 这就叫去中心化电子记账系统 举个例子来说 比如说有这么几个小朋友 这几个小朋友分别叫A B C D 他们进行交易买东西卖东西之类的 那所以相互之间就要进行支付 支付的时候比如说有一次A先支付了10个比特币给B

这件事情要记账 记账了之后你不能自己留着 因为你自己留着别人不信 所以你要把这个账单要广播出去要告诉所有人 所以说A把这账单告诉B 告诉C 又告诉D 广播到网络上所有人 过了一会B也要进行支付 比如说B支付了5个比特币给C 同时B把这个账单告诉D 告诉A 再告诉C

然后这个C又支付 比如支付了2个比特币给D 同时C也要把这个账单告诉其余的所有的人 这样 那么这个账单我们会把它进行打包 打包成一个块 这个块我们就叫它区块 这一个区块里面它大小大概是一兆 我们可以存4000条左右的交易记录 有时候多一点 有时候少一点

是取决于每一条记录的大小 好了 这个块打包完了之后 我们再把这个块链接到以前的交易记录上形成了一条链 就把这个块接到以前的块上 然后过一会再把新的块接到它后面 就叫区块链 就这么回事 对吧 那好 我们有了这么一个系统之后就要解决几个问题 什么问题呢 比如说账单以谁为准 这就是一个问题 以谁为准

因为每个人的账单可能是不一样的 比如说A他可能会先记录A把10个比特币给B这件事 后记录B把5个比特币给C这件事 但是因为网络的延迟效应 D这边可能不是这样 D的顺序可能是先记录的B付5个比特币给C 然后A又付了10个比特币给B 每个人的账单可能不太一样 你到底是以谁为准 第二个就是我们为何要记账

凭什么你广播给我 我就要收着呢 凭什么我要去花我自己的电脑资源 记录一个跟我无关的这个账目呢 对不对 为什么要记账 第二个问题 第三个问题就是如何防伪 什么叫防伪呢 比如说B广播的一条消息说A支付了10个比特币给他 但实际上A并没有支付给他

那这就是一个伪造的记录 我们怎么去防伪怎么去防止篡改 之前的记录我把它改掉这个怎么办 如何去防止篡改 还有很多很多其他的问题 比如说如何防止双重支付 一个人同时发给两个人10个比特币 但它实际上一共就只有10个比特币 还有就是如何进行保密 你这个信息都是公开的 那别人不就知道你有多少钱了嘛 怎么去保密等等一系列问题

我们今天主要就研究前两个 以谁的账单为准 还有我为什么要记账 我们首先来说一下为什么要记账 记账是因为记账有奖励 记账的奖励 那么每一个比特币系统中的这个用户他都可以去记账 如果他记了帐第一个他有手续费的收益 手续费什么意思 就是A付10个比特币给B的话

A必须要多付出那么一点点 这一点点就是给这个打包的这个人 他记账的这个人他的一个手续费 如果你要是用银行卡的话其实也有手续费 而且还其实挺高的 那如果你用比特币手续费就低了 这就是第一个他的收益 第二个他的收益就是打包的那个人 他有一个打包奖励 打包的奖励 只能是一个人打包

这一个人他会获得奖励 奖励是多少 中本聪在2008年提出这个系统的时候 他设计了这样一个方案 就是每十分钟打一个包 每十分钟打一个包 最开始这一个包会奖励打包者50个比特币 过了四年之后每打一个包会奖励你25个比特币 如果你要是再过四年就奖励12.5 也就是每过四年之后它会减半

咱们来算一算比特币一共有多少个 首先每过十分钟你会打一个包 这一个包有50个比特币的奖励 一个小时六个10分钟 可以打包六次 然后每天有24个小时 每年有365天 前四年的时候都是这样 我再乘个四年 但是第二个四年就不是这样 第二个四年会减半 所以我再乘个第一个四年 第二个四年会乘个1/2

第三个四年会乘1/2的平方 第四个四年(1/2)^3 这样一直加下去 如果我们把都算出来 最后结果大概是2100万个 也就是说这个比特币一共就只有2100万个 它是通过打包奖励这种方式把它扩散出去的 就是这样的一个问题 那正因为有的这个手续费和打包奖励这两条 所以大家都抢着去打包 你抢着去打包那以谁为准

下一个问题以谁为准 只能是一个人打包 以谁为准 只能是一个人打包 这个权利给谁 中本聪想到一个办法叫工作量证明 这个工作量证明是什么意思 就是说每一个参与的用户他都要去做一个很难的数学题 这个很难的数学题你把它做出来了 那你就可以有权利进行打包 你如果要进行打包了 你就会获得手续费以及打包奖励

这个很难的数学题难到什么程度 难到没有任何一个人能够直接通过脑子把它做出来 我们必须一个一个数去尝试 直到你把它尝试出来了 那么你就获得这个奖励 所以这个过程我们就称之为挖矿 如果你把这个数学题做出来了 你就获得了这个打包的奖励 而这个打包的奖励就是几十个比特币 你就称之为挖矿成功了 这就是挖矿的含义

那么具体这个数学题到底是怎么回事 咱们来往下继续说 我们下面来讲一下挖矿的具体原理是什么 挖矿的原理 挖矿我们刚才说过它是做一个很难的数学题 但是这个数学题并不是看你脑子聪明不聪明 而是看你CPU的速度如何 因为没有人能够通过脑子把它算出来 大家的方法只能是一个一个试 具体的原理是什么 首先我们回忆一下

以前我们曾经讲过一种叫做哈希函数的东西 这个哈希函数它的意思呢也可以叫数字摘要或者散列函数 它的意思是说我们可以把一个字符串通过一定的运算 转化成一个摘要的形式 而且你正着算比较容易 反着算很难 比如说哈希算法里面有一个很著名的哈希算法叫SHA256

SHA256这是美国国家安全局发明的一种算法 如果我把一个字符串输入到这个SHA256函数里边 比如这个字符串叫apple apple输出了多少呢 输出的是一个二进制数 这个二级数有256位 比如说101011010... 没有什么规律

比如说101011010... 没有什么规律

一共有多少位呢 一共有256位 所以就叫SHA256 而且这个算法就是不管你前面输入的是什么 那后面它结果都是256位的一个二进制数 你把一个10个G的电影放进去 它最后输出的还是256位的数 而且如果你改一点点它这个数字都不一样 比如我在apple这我加一个点 多了一个点 最后这每一位的数字都有可能会发生变化 这就是它的一个特点

而且哈希算法的难度就在于它正向...

而且哈希算法的难度就在于它正向...

有趣之处 它正向算比较容易 正向算比较容易 但是它反向算非常的困难 这就是它算法的一个特点 我们举个例子比如说有这么一个函数 就是x^3+log2(x)+sin(x)=y 我是举个例子

你给我一个x让我算出y来 其实这个并不难 但是你给我一个y问我x是几 这就很困难 哈希函数比这个还要复杂得多所以它反算基本上是不可能的 我们只能怎么办 我们只能一个一个去试 假如你告诉我一个结果 你问我什么结果是这个 那我就只能一个一个试 一直把它试出来为止 这个就是哈希算法的一个基本的问题 那么这个挖矿其实就是基于这个SHA256的这么一个运算

我们来说一下挖矿的具体的原理是什么 刚才我们说到这个区块链其实是一大堆的交易信息 一大堆的交易信息 比如说这个区块链已经链接到了某一个位置 从最开始第一个块开始链 一直链 链到了某一个位置 这是目前的情况 这个块里并不只有交易信息 它实际上是有一个块的头部 有一个块的头部

还有它里边有一些内容 这个内容其实就是信息 就是我们交易的这个记录账单 现在有很多的人说我现在都想进行打包 为什么呢 因为打包有奖励还有手续费 每一个人都有自己的一个账单 这个账单是他收集了周围一大堆人造成的账单 每一个人都拿着账单准备去网上接块 但是在接块的时候他必须要算一个数学题

什么数学题呢 首先它会有一个字符串 它会有一个字符串 这个字符串里边的内容非常多 但是我们说一些主要的 这个字符串包含哪些内容呢 首先包含目前的这个块 目前已有的这个块 也就是前块 这个前块的头部 这个前块的头部 这是第一个部分

第二个部分就是它现在已经有了这个账单的信息 你已经有打包好的这个账单的信息 还有比如说像时间之类的 时间戳之类的 还有一大堆乱七八糟的 然后还有一个很重要的就是有一个随机数 这是你的一个字符串 现在你对这个字符串做两次SHA256的运算

它的哈希值等于什么呢 等于SHA256 然后SHA256 然后字符串 你把这个字符串做两次这个哈希运算 这个速度其实非常快 你一下子能算出来这个数是几 但是你算出来之后会发现它是一个256位的数 这个256位的数我们要求什么呢

要求它的前n位必须是0 比如说你算出来的这么个数 这个数结果是00000000...

这个数结果是00000000...

比如说有这个九个0 这有九个0 然后后面是什么1011.....1

然后后面是什么1011.....1

一直到最后一共有256位 你算出这么一个数来 假如我的要求就是前九个位数是0 那你就算对了 你就算对了 你算对了你就有资格去打包 你就有资格打包的意思是说 你要把你算出来的这个哈希值 作为一个新块的头部 然后你算出来这么一个数 对吧 然后作为一个新块的头部打一个包

打完了这个包之后再把你这个包干嘛 接到后面去 于是你就接出一个新块来 接出个新块来你就获得了什么 获得了你想要的奖励 就这样 那么我们怎么能算出来前面这几位都是0呢 就要改变一个内容 就是改变这个随机数 其他的内容你是改不了的 对吧 所以你就改变这个随机数 随机数最开始从0开始 从0开始 0算一次 看看是不是满足条件

不满足好算1 1不行算2 2不行算3 它都是二进制的 你就不停这么试 直到你把它试出来为止 而且大家要注意 每个人在计算的时候它的这个题目难度是不一样的 为什么呢 因为每一个人虽然前块的头部大家都一样 但是你所打包的这个账单可能是不一样的 对吧 你的时间 开始时间可能是不一样的 还有你的个人信息也是不一样的

所以造成了这个随机数大小不同 有人运气好他第一个数就算出来了 那直接就打包起来了 对吧 有人运气不好 他虽然计算能力强 算得好长时间最后也算不出来 不过平均来讲是这样的 谁的计算能力更强 谁就更有希望打包这个块 谁就更有可能去挖到这个矿 就是这样子的 你说大家为什么拼命的去买这个矿机 对不对 好 那我们继续往下说

说这个 我们有一个难度的设置 这个难度的设置 也就是这个n位 这个n是怎么确定的 难度n的确定 显而易见 前面的这个0它个数越多 这个问题它就越难 为什么个数多就难 咱们想象说在这个问题中你不可能反算 只能是一个一个随机去试 每一位上出现0的概率和出现1的概率各是50%

所以第一个是0的话 你概率是多少 概率是1/2 对吧 概率是1/2 第二位是0的话 概率多少 概率也是1/2 第三位是0 概率也是1/2 一直到最后一位是0 概率也是1/2 这样乘起来结果得多少 得(1/2)^n 显而易见 这个n越大 这个难度就越高 n越小难度就越低 对吧 那中本聪当时在设计的时候 就是保证每十分钟

每十分钟他需要出一个块 需要出一个块 然后打包几千条信息 那怎么去保证 就是调整这个n的难度 调整这个n的数字 我们举个例子 比如说 比如说世界上有1万台矿机 1万台矿机 这个1万台矿机每一台的计算能力是14个T每秒 也就是每秒钟可以计算14T次哈希运算

14T是多少 1T是10的12次方 所以这个数是1.4x10^13次每秒 好 那么十分钟你到底能算多少次 咱们算一下 这个10分钟应该是600秒 对吧 1.4x10^13 这是每一个矿机一秒钟算的 再乘以10的4次方 这表示有1万台矿机

然后你还得乘以10分钟大概是600秒 对吧 这个数字大概是8x10^19 也就是说十分钟大家可以进行这么多次运算 这么多次运算 那我们再想一下 你如果概率是(1/2)^n 你想出来这个块的话 你需要计算的次数就是2^n吧 你概率1/64的话 你出的这个块平均你要算64次

同样道理你算了这么多次 对不对 那么它大概相当于是2的多少次幂 我们可以通过计算发现 如果这个n等于66的话 这个时候你的出现概率 能够算出概率是(1/2)^66 然后你平均需要算的次数 平均的次数就是2^66 大概也是8x10^19

所以在这种情况下矿机就会把难度设置成n等于66 第一个能够算出来前66位全都是0的人 就成功打包这个块 就成功地挖到了矿 你没有办法让自己运气变得更好 你能够做得就是买更多的矿机 然后拼命的去挖矿 这样你就有可能会得到这个比特币 大概就是这样一个原理 是吧 好 我们这次解释的到底区块链这个块到底是怎么形成 但实际上还有很多问题没有解决

比如说我们如何去防止这个双重支付的问题就没有解决 我们还没有解决说我们怎么防止伪造的问题 那这些问题我们会在下一回再给大家做介绍 大家如果喜欢我的视频 可以在西瓜视频和YouTube帐号李永乐老师里关注我

Loading...

Loading video analysis...