[北大肖臻-区块链技术与应用笔记]第七节课——BTC mining

2023-10-31 06:10

本文主要是介绍[北大肖臻-区块链技术与应用笔记]第七节课——BTC mining,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[北大肖臻-区块链技术与应用笔记]第七节课——BTC mining

文章目录

  • [北大肖臻-区块链技术与应用笔记]第七节课——BTC mining
    • 一、BTC中的节点
      • 全节点
      • 轻结点
    • 二、mining
      • 注意事项
      • 设备
        • 第一代设备:CPU
        • 第二代设备:GPU
        • 第三代挖矿设备:ASIC芯片
      • 大型矿池
        • 矿工无法独吞出块奖励
        • 矿池危害
    • 参考资料

一、BTC中的节点

全节点

1️⃣ 一直在线

2️⃣ 在本地硬盘上维护完整的区块链信息

3️⃣ 在内存中维护UTXO集合,以便快速检验交易的正确性

4️⃣ 监听比特币网络上的交易信息,验证每个交易的合法性

5️⃣ 监听别的矿工挖出的区块,验证其合法性:

区块中的每个交易都要合法(包括铸币交易及其出块奖励)

发布的区块是不是符合难度要求、难度目标阈值的设置是否正确、每两周调整的挖矿难度

区块是在延伸最长合法链

6️⃣ mining:

决定沿着哪条链挖下去

决定哪些交易被打包进区块

决定当出现等长分叉时选择哪个分叉(缺省情况是选择最先接收到的区块的分叉)

轻结点

1️⃣ 不是一直在线

2️⃣ 不用保存完整区块链,只要保存每个区块块头(大小比全节点小的很多)

3️⃣ 不用保存全部交易,只需要保存和自己相关的交易

4️⃣ 没法验证大多数交易的合法性,只能检验与自己相关的交易的合法性

5️⃣ 无法检测比特币网络上发布的区块的正确性

6️⃣ 可以验证挖矿的难度(因为挖矿时候计算哈希值只用到了块头信息)

7️⃣ 只能检测哪个是最长链,不知道哪个是最长合法链(因为无法检测这条链上所包含的交易都是合法的)

BTC中大部分节点都是轻节点,只需要交易不需要mining的话,只需要用轻结点即可

二、mining

注意事项

当在mining过程中发现新发布了一个区块,那么应该停止mining,重新取出一系列合法交易组成候选区块,在刚发布的这个区块后面开始挖矿。

因为一方面这个区块中的交易可能和刚刚在挖的那个区块有重复,另一个本质的原因就是候选区块的块头有指向前一个区块的哈希指针。因为最新的区块已经变了,这个哈希指针也要跟着改变。

挖矿具有无记忆性(memoryless | progress free)——无论是在刚刚的区块上继续挖,还是新组装一个区块继续挖,成功的概率是一样的。

BTC中的安全性由密码学保证以及由共识机制保证,没有私钥就无法转走BTC,前提是拥有大多数算力的节点要保持诚实。

设备

通用->专用

第一代设备:CPU

大部分内存闲置、不划算

第二代设备:GPU

主要用于大规模并行计算,但是其中用于浮点计算的部件还是没有使用,还是不划算

第三代挖矿设备:ASIC芯片

ASIC即Application Specific Integrated Circuit,这之中有专门为了挖矿而设计的芯片,没有多余的电路,干不了别的事,它的性价比是最高的,而且为某一种加密货币设计的ASIC芯片只能挖这一种加密货币的矿,除非两个货币用同一个mining puzzle。

研发周期长,风险大

为了让通用计算机也能参与挖矿过程,抗ASIC芯片化,有些加密货币采用Alternative mining puzzle,以去对抗那些只为了解决特定mining puzzle而设计出来的ASIC矿机。

大型矿池

image-20220612161056141

单个矿工挖矿的收益是很不稳定的,平均出块时间10分钟是对于比特币系统中的所有矿工而言的。一个矿工用一个矿机挖出矿的时间可能要很久,并且除了挖矿之外还要承担全结点的其它责任。

矿池将很多矿工组织起来,一般的架构就是一个矿主(pool manager)全结点去驱动很多矿机,下属矿工只负责计算哈希值,全结点的其它职能只由矿主来承担。有了收益以后再大家一起分配。

image-20220612160202719

如果矿机来自不同机构,这时候矿工很可能分布在世界各地,只是都加入了这个矿池。矿工和矿主联系,矿主将要计算的哈希值的任务分配给他,矿工计算好后将结果发给矿主,最终得到出块奖励后一起参与分红。

每个矿工单打独斗之所以收入不稳定,是因为挖矿难度太大了(相比比特币系统的平均出块区间),所以可以考虑矿池将挖矿的难度降下来。比如本来要求前面有70个0,现在矿池只要求前面有60个0,这样挖到的是一个share(almost valid block),即这个区块差不多在一定程度上是符合难度要求的。

矿工挖到这样的区块之后,将其提交给矿主,矿主拿到这些区块并没有什么用,仅仅是因为目标空间是这个问题的解空间的子集,并且求解两个问题的过程是一样的(都是计算哈希),因此这些区块可以作为证明矿工所做的工作量的证明。等到某个矿工真正挖到矿,获取出块奖励之后,再按照提交的share的多少来进行分配。——工作量证明。

矿工无法独吞出块奖励

每个矿工的任务是由矿主来分配的,矿主负责组装好区块,然后交给矿工去不断尝试nonce和CoinBase transaction中的extra nonce,有可能就是划分一下,然后分配给不同的矿工去做,要注意铸币交易CoinBase transaction中的收款人地址是矿主的地址,不是任何一个矿工的地址。

如果自己把铸币交易的地址改成自己的,然后去挖矿,这样提交上去的share矿主是不认可的,所以还是没有用。

矿池危害

如果没有矿池,如果要发动51%攻击,攻击者要花费大量的硬件成本。有了矿池以后,矿池实际上将算力集中了起来,攻击者未必拥有很多算力,只要吸引大量的不明真相的群众将算力集中到自己的矿池就可以。

假设有矿池占据了半数以上的算力,能够发动下面这些攻击:

1️⃣ 分叉攻击

交易对矿工来说是不知道的,他们的算力可能被矿主利用产生分叉攻击

2️⃣ Boycott

假设攻击者不喜欢某个账户A,不允许和A有关的所有交易上链。这时如果有人发布了含有和A有关的交易的区块,它可以很快发布一个不包含这些交易的区块,然后不必等候6个确认区块,立即发布到比特币网络上竞争最长合法链

这里不必等候的原因是,之前普通分叉攻击等候几个确认区块只是为了让收款人认为已经没问题了,已经成功收款了,这里没有这种顾虑。

参考资料

1、【区块链学习笔记】7:比特币中的挖矿

这篇关于[北大肖臻-区块链技术与应用笔记]第七节课——BTC mining的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/313360

相关文章

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Java中的登录技术保姆级详细教程

《Java中的登录技术保姆级详细教程》:本文主要介绍Java中登录技术保姆级详细教程的相关资料,在Java中我们可以使用各种技术和框架来实现这些功能,文中通过代码介绍的非常详细,需要的朋友可以参考... 目录1.登录思路2.登录标记1.会话技术2.会话跟踪1.Cookie技术2.Session技术3.令牌技

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”

如何确定哪些软件是Mac系统自带的? Mac系统内置应用查看技巧

《如何确定哪些软件是Mac系统自带的?Mac系统内置应用查看技巧》如何确定哪些软件是Mac系统自带的?mac系统中有很多自带的应用,想要看看哪些是系统自带,该怎么查看呢?下面我们就来看看Mac系统内... 在MAC电脑上,可以使用以下方法来确定哪些软件是系统自带的:1.应用程序文件夹打开应用程序文件夹

Python Flask 库及应用场景

《PythonFlask库及应用场景》Flask是Python生态中​轻量级且高度灵活的Web开发框架,基于WerkzeugWSGI工具库和Jinja2模板引擎构建,下面给大家介绍PythonFl... 目录一、Flask 库简介二、核心组件与架构三、常用函数与核心操作 ​1. 基础应用搭建​2. 路由与参

Spring Boot中的YML配置列表及应用小结

《SpringBoot中的YML配置列表及应用小结》在SpringBoot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,:本文主要介绍SpringBoot中的YML配... 目录YAML列表的基础语法在Spring Boot中的应用从YAML读取列表列表中的复杂对象其他注意事项总

电脑系统Hosts文件原理和应用分享

《电脑系统Hosts文件原理和应用分享》Hosts是一个没有扩展名的系统文件,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应... Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应

CSS 样式表的四种应用方式及css注释的应用小结

《CSS样式表的四种应用方式及css注释的应用小结》:本文主要介绍了CSS样式表的四种应用方式及css注释的应用小结,本文通过实例代码给大家介绍的非常详细,详细内容请阅读本文,希望能对你有所帮助... 一、外部 css(推荐方式)定义:将 CSS 代码保存为独立的 .css 文件,通过 <link> 标签

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件