主页 > imtoken安卓怎么下载 > 北京大学肖震老师《区块链技术与应用》公开课笔记8-Bitcoin Mining

北京大学肖震老师《区块链技术与应用》公开课笔记8-Bitcoin Mining

imtoken安卓怎么下载 2023-04-08 06:45:03

全节点介绍(第八个视频31秒)

轻节点介绍(第八期视频之三)

比特币网络中的大多数节点都是轻节点。 如果只是转账而不是挖矿,就没有必要使用全节点。 在挖矿的过程中,如果你听到别人发布了一个区块,那么这个区块就是合法的,也是在延伸最长的合法链。 这个时候你该怎么办?

应该停止挖矿,在本地重新组装一个候选区块,然后从头开始挖矿。 因为如果沿着新发布的交易往下挖,本地组装的区块包含的交易会发生变化,有的交易可能已经包含在新发布的区块中。 另外,区块头的内容也会发生变化,比如区块头中交易所组成的默克尔树的根哈希值,以及指向上一个区块的指针,这些也会发生变化。

这样做很可惜吗? 挖矿的特性之一是无记忆。 无论是继续挖原来的方块,还是停下来挖一个新组装好的方块,成功的概率都是一样的。 只要满足要求的nonce值没有被开采,之前开采多久都无所谓。

即使挖出一个合法的区块并发布在区块链上,也不能保证一定会赢。 有可能你发布的区块最后没有成为最长的合法链,可能有一些冲突,其他人可能同时发布了一些合法区块,或者有一些你不知道的双花,使得一些你的区块交易变得有冲突。

比特币如何保证安全? 两个方面:①密码学②共识机制

①如果别人没有你的私钥,就无法伪造你的签名,也就无法转出你账户中的钱。 (前提是系统中拥有多数算力的矿工是好的,遵守协议,不会接受没有合法签名的交易。没有这些,密码保证是没有用的。)

比如:你去银行取钱,按照规定,你必须出示合法证件,银行工作人员才能给你钱。 合法证书相当于密码学中的签名。 密码学的本质确保其他人无法伪造您的签名,因此无法伪造您的身份。 在生成私钥和签名的时候,一定要有好的随机源,生成的随机数要足够随机。 但这些还不够。 银行工作人员必须有足够的意识,不要把钱交给没有合法证件的人。 只有这两者结合才能保证别人不能把你账户里的钱转走。

挖矿设备:挖矿设备的演化趋势是越来越专业化。 最早的时候是用普通的CPU挖矿,比如家用电脑、笔记本电脑。 但是买一台专用于挖矿的电脑并不划算。 电脑内存大部分闲置,只有一小部分内存用于挖矿。 CPU 中的大部分组件也处于闲置状态,因为挖矿中计算哈希值的操作只使用了通用 CPU 中的一小部分指令。 硬盘等很多资源也处于闲置状态,所以随着比特币挖矿难度的增加,用CPU和通用电脑挖矿似乎太划算了。

所以挖矿转移到第二代设备:GPU。 GPU的效率远高于CPU,主要用于大规模并行计算。 但是用GPU挖矿有点浪费。 GPU 专为通用并行计算而设计。 如果用于挖矿,很多组件还处于闲置状态,比如用于浮点计算的组件。 这些组件对于深度学习很重要,但比特币操作仅使用整数挖掘。 因此,GPU的效率虽然提升了很多,但是还是存在很多浪费。 近年来,GPU的价格上涨很快。 有人将其归因于深度学习的流行。 事实上,许多 GPU 用于挖矿。 但有个好消息。 随着比特币挖矿难度越来越大,GPU挖矿已经不值得了,已经超出了GPU的算力范围。 因此,GPU现在可以更多地用于深度学习和游戏应用服务。

一些新开发的加密货币仍然是用 GPU 开采的,但现在它们是用 ASIC 芯片开采的。 这是一款专为挖矿设计的芯片。 上面没有多余的电气逻辑。 整个芯片都是为比特币准备的。 它是为挖矿和计算哈希值的操作而设计的。 这是最具成本效益的。 这个芯片除了挖矿什么也做不了,而为某种加密货币设计的ASIC芯片只能挖这种加密货币。 除非这两种加密货币使用相同的挖矿难题。

一些加密货币在刚发行时,为了解决不能入手的问题,特意使用一个已有的加密货币挖矿谜题,比如和比特币一样的挖矿谜题,以此来吸引更多的人来挖矿。 这种情况称为合并挖掘。 除了这种情况,其他都是一个芯片只能挖一种加密货币。 ASIC芯片的生产周期需要一年,但与其他通用芯片相比,ASIC芯片的发展速度已经非常快了。

在这么长的生产周期中,如果比特币的价格发生剧烈变动,前期投入的研发成本可能会付之东流。 从历史上看,比特币的价格变化非常剧烈。 比特币价格在几个月内下跌 80%,然后又慢慢回升的情况已经发生过好几次了。

如果比特币价格大幅下跌,挖矿可能会亏本,也可能无法支付电费。 即使在比特币发展的黄金时期,价格不断上涨的时候,此时挖矿也是有利可图的。 但竞争也越来越激烈,定制的 ASIC 芯片可能会在几个月内过时。 一款ASIC矿机刚上线时,大部分利润是在上市的前两个月获得的,因为此时它的算力是同类产品中最强的。 未来随着更强大矿机的出现,可能会被淘汰。 所以购买ASIC矿机的时机非常重要,现在一定要提前预定。 一些不法厂商,ASIC矿机生产出来后,并没有马上提供给消费者,而是用它挖矿一段时间赚取比特币,等到最赚钱的黄金时间,也就是前两次之后几个月过去了,然后将矿机发送给用户。 当比特币系统中的算力突然大幅增加时,就意味着有大公司生产了新的ASIC矿机。 所以,真正在挖矿热潮中赚钱的不一定是矿工用户,而是卖矿机的大厂商。

矿机的变化趋势是从通用到专用,CPU是通用计算,GPU是通用并行计算,ASIC是专用计算。 ASIC 一旦过时就毫无用处,不像 CPU 和 GPU 可以做其他事情。 很多人认为这样不好,不符合去中心化的理念,也违背了比特币设计的初衷。 最民主的情况是大家用家里的CPU电脑挖矿。 后来改成GPU噪音很大。 并且一些新的加密货币被设计为另类挖矿难题。 它的设计出发点是asic resistance(反asic芯片),目的是让通用计算机参与挖矿过程。

挖矿的另一个趋势是大型矿池的出现。 即使单个矿工使用ASIC芯片,从平均收益上看,挖矿是有利可图的,但收益很不稳定。 比特币系统平均每10分钟产生一个区块,这意味着比特币系统中的所有矿工整体平均每10分钟产生一个区块。 但是如果具体到某个矿工,他可能要挖很长时间,如果用矿机的话,可能要挖一两年。 这就像买彩票一样。 如果你挖掘它,你将赢得大奖。 单个矿工还有其他问题,除了挖矿之外还承担全节点的其他职责(本课开头介绍的那些)。

所以我们需要引入一个矿池,所谓矿池就是把这些矿工组织成一个整体,矿池的结构一般是一个全节点会带动很多矿机,一个矿池有一个矿主,叫做游泳池经理。 下面连接了很多矿工。 这些矿工只负责计算哈希值,整个节点的其他责任由矿主承担。 他负责监控互联网上的交易,并将这些交易组织打包成区块。 同时,他还要看看有没有其他节点先发布区块,如果有,怎么调整……

ASIC芯片只能负责计算哈希值,不能做全节点的其他功能。 矿池的出现也是为了解决另一个问题:收益不稳定。 单个矿工的收入是不稳定的,所以大家一起工作,然后分配收入。

那么收入应该怎么分配呢? 矿池一般有两种组织形式。 一个就像一个大型数据中心。 有些互联网公司有几千台服务器,一个大矿池就有几千台矿机。 ,如果这些矿机属于同一个组织,那么收益怎么分配都无所谓。

但是也有不同组织的矿机,就是第二种组织方式:分布式。 矿工和矿主不在一个地方,可能分散在世界各地。 矿工想要加入矿池,必须按照矿池规定的通信协议与矿主进行通信。 矿主给他分配了计算哈希值的任务。 矿工完成计算后,将结果反馈给矿主,在未来获得区块奖励时统一分配。

如果矿工来自世界各地,不属于同一个组织,利益该如何分配? 可以均匀分布吗? 例如,每个矿工挖出一个区块,获得一个区块奖励,然后平均分配给其他矿工。 这个可以吗? ?不,因为矿工会偷懒。 所以需要按照矿工的贡献来分配,也就是这里也需要工作量证明。 那么如何证明每个矿工做了多少工作呢?

为什么矿工收入不稳定,是因为挖矿太难了。 如果挖矿难度降低,挖矿就会变得稳定。 如何降低难度? 之前的要求是矿工必须找到一个nonce,用这个nonce来计算区块头的哈希值。 它前面至少应该有 70 个零才是一个合法的块。 降低挖矿难度后,比如只要前面有60个0,就叫做一个share,这个share叫做几乎有效的块。 矿工挖出份额或几乎有效的区块后,将其提交给矿主。 矿工拿到这个区块有什么用? 用于证明矿工完成的工作量,仅此而已。 矿工无法获得区块奖励或任何好处。 因此,矿主计算每个矿工提交了多少这样的份额。 未来,某个矿工真正挖出一个合法区块后,将根据每个矿工的工作量和提交的份额数量来分配区块奖励。 .

为什么这是可行的? 每个矿工挖矿的概率取决于他尝试的随机数的数量。 他尝试的随机数越多,他能找到的份额就越多。

有没有可能矿工挖到一个合法的区块后,不是提交给矿主,而是偷偷发布,获得区块奖励? 也就是提交了平时挖到的份额,却挖到了合法区块。 提交? 不可能,因为每个矿工的任务都是矿主分配的。 矿主负责组装一个区块,然后交给矿工去尝试各种nonce北京比特币挖矿,调整nonce挖矿是不够的,需要调整coinbase参数。 所以矿主会给不同的矿工不同的coinbase参数对应的nonce取值范围,让他们去尝试。 那么这个块中包含什么? coinbase交易包含收款人地址,里面填的是矿主的地址,也就是矿池管理员的地址,所以矿工挖出区块后,如果不自己提交给矿主发不出去也没用。 里面的收款地址是矿主的,不能提现。 因此,只要按照矿主分配的任务进行挖矿,就不可能窃取区块奖励。

如果他一开始就无视矿主的任务,自己组装一个区块,偷偷把收货地址改成自己的地址怎么办? 那么如果他把份额提交给矿主,矿主是不会认的,因为里面的交易列表变了,coinbase交易里面的内容变了,计算出的merkle树的根哈希值也是不同的。 在这种情况下,矿主不会给他工作证明。 那相当于矿工从一开始就单独工作,与矿池无关。

虽然不可能盗取区块奖励,但是会不会有人闹事,比如挖一个份额提交给矿主作为工作量证明。 在他挖出一个真正合法的区块后,他就把它扔掉了。 这是有可能的,虽然没有经济利益,但可能是另一个矿池派来的卧底,不想让这个矿池获得区块奖励。 这些矿工仍然会分享分红,这是其他矿工挖出的区块奖励。

如图(视频第八段第38小节)所示,展示了各国矿池的分配比例。 中国矿池占全球81%,远超其他国家。 因此,从矿池占比来看,中国的总算力是占据绝对优势的。

如图(第八个视频38分24秒),单看一个矿池,2014年有一个叫GHash.IO的矿池,这个矿池算力占全球算力的一半以上。 当时引起了一些恐慌,这块矿石的算力足以发动51%的攻击。 此事公布后,矿池主动大幅降低算力占比,以免动摇大家对比特币的信心。

如图(第八个视频第38分56秒),展示了2018年各个矿池的算力分布情况,好像没有那么集中,GHash.IO矿池已经很久了停止运作。 当然,挖矿中心化程度还是比较大的,几个大矿池也占了相当大的比重,但没有一个矿池超过50%。 这似乎更安全,但这可能只是一种表面现象。 如果一个组织拥有一半以上的算力,则不必将算力集中在一个矿池中,而是可以将算力分散隐藏在多个矿池中,真正需要时再集中发动攻击发动攻击。

矿工切换矿池非常容易。 加入矿池就是根据矿池的约定联系矿主。 矿池会将组装好的区块信息发送给矿工,矿工可以尝试各种nonce值。

所以这就是矿池带来的危害。 如果没有矿池,想发起51%攻击,攻击者就得花大价钱购买足够多的矿机,才能达到系统一半以上的算力。 有了矿池之后,他可能只占算力的一小部分,只要他能吸引足够多的矿工和足够多的不明真相的人加入他的矿池即可。

一般来说,矿池中的矿场主要收取一定比例的区块奖励作为管理费。 矿主也需要按比例收取管理费,有的是按照区块奖励的比例,有的是交易手续费。 一些恶意矿池在发起攻击前,可能会故意将管理费压低到很低,甚至亏本获利,吸引足够多的矿工加入后发起攻击。 这是大型矿池的一个缺点,使 51% 攻击变得容易得多。

如果某个矿池的算力占了一半以上,他可以发起什么样的攻击? 最常见的一种是分叉攻击。 假设一个区块链,其中一个区块包含了一笔大交易,在等待几个确认区块后,它认为它是安全的。 那么这个时候,就可能有人在交易前的区块发起分叉攻击。

看起来追赶的路还很长北京比特币挖矿,但是如果你有51%的算力,最后还是可以攻击成功的。 另外,不要把51%当成一个绝对的门槛,可能还不到51%。 算力是估计的,算力还在变化。

攻击者还能做什么坏事? 你也可以抵制。 例如,攻击者不喜欢某个账户,怀疑某个账户涉及非法交易,想要封禁这个账户,所有与这个账户相关的交易都不允许上传到链上。 如果A将某笔交易A→B发布到区块链上,攻击者会立即分叉并生成一个不包含该笔交易的区块,所有与A相关的交易都不会被收录。

这种攻击和分叉攻击有什么区别? 他不需要等待接下来的几个确认块。 这时如果攻击者等待确认块,就是为了安抚B,B认为后面有6个确认块,没问题,然后攻击者发起分叉攻击。 而如果以抵制为目的,则无需等待后续区块生成。 A→B交易一上链,就会尽快进行分叉,因为攻击者希望别人顺着他的链往下挖。

如前所述,一些恶意节点可能故意不将某些交易写入区块。 不过没关系,后面的方块还是会被包含进去的。 但如果坏人拥有51%的算力,他可能会依靠自己的算力公开抵制他想要抵制的交易。 这样其他矿工就不敢随便打包交易了。

那么攻击者掌握了51%的算力后,是否有可能从别人的账户中转账呢? 这是不可能的。 因为他没有别人账户的私钥,所以没有办法伪造签名。 如果他依靠自己的算力强行将一笔没有合法签名的交易发布到区块链上,会发生什么? 会造成分叉。 因为诚实的矿工会沿着另一条叉子往下挖,而不会沿着他放出的区块往下挖。 所以偷币是不可能的。

总结:矿池的出现减轻了矿工的负担。 矿工只需要挖矿并计算哈希值,其他的事情由矿主完成。 矿工的收入分配也更加稳定。 但是矿池的出现也是有害的,发起51%攻击变得更容易了。 他不一定有这么强的算力,他只需要调动这些算力即可。

这有点类似于云计算中的按需计算。 平时不用维护庞大的电脑群,需要的时候可以随时调出。 至于矿池,是按需挖矿。