本笔记对应北京大学肖臻老师《区块链技术与应用》公开课第八课。

0.前言

在本节中,肖老师首先回顾了一下节点的定义,然后讲了讲挖矿的现有的趋势。

1.全节点和轻节点

以下介绍了一些全节点和轻节点的特点和区别:

全节点:

  • 一直在线。
  • 在本地硬盘上维护完整的区块链信息
  • 在内存中维护UTXO集合,以便于快速检验交易合法性
  • 监听比特币网络中交易内容,验证每个交易合法性
  • 决定哪些交易会打包到区块中
  • 监听其他矿工挖出的区块,验证其合法性

轻节点

  • 不是一直在线
  • 不保存整个区块链,只需要保存每隔区块块头
  • 无法验证大多数交易合法性,只能检验和自己相关的交易合法性
  • 无法检测网上发布的区块正确性
  • 可以验证挖矿难度

在比特币网络中,大多数节点都是轻节点。 在挖矿过程中,如果监听到别人已经挖出区块延申了最长合法链,此时应该立刻放弃当前区块,在本地重新组装一个指向最后这个新合法区块的候选区块,重新开始挖矿。

  • 直接丢弃当前区块会很可惜吗?

之前文章中提及,挖矿本身具有无记忆性,前面无论挖多久,对后续继续挖矿没有影响。

  • 比特币系统如何保证安全性?

1.密码学的保证。没有私钥,就无法伪造其合法签名,从而无法随意转移别人账户上的钱。

2.共识机保证。保证恶意交易不被系统承认。

2.挖矿产生的两个趋势

1.设备演变趋势

目前,挖矿设备逐渐趋于专业化,其经历了三个过程。

普通CPU -> GPU ->ASIC芯片(挖矿专用矿机)

2.大型矿池的出现

由于比特币挖矿难度太高,常常一些算力不够的人,可能要1到2年才能获得一次出块奖励,此外,单个矿工除挖矿还要承担全节点其他责任,造成了算力的消耗,因此为了解决这个问题,便引入了矿池的概念。

矿池的架构,通常是一个全节点驱动多台矿机。 矿工要做的是不断的计算哈希值,而全节点其他职责由矿主来承担,这就解决的部分算力消耗的问题。而当获得收益后,所有矿工对收益进行分配,保证了收益的稳定性,这又解决了收入不稳定的问题。

  • 分配方式:

矿池一般具有两种组织形式:

1.类似大型数据中心(同一机构),集中成千上万矿机进行哈希计算。

2.分布式。矿工与矿主不认识(不同机构),矿工与矿主联系,自愿加入其矿池,矿主分配任务,矿工进行计算,获得收益后整个矿池中所有矿工进行利益分配。

第一种类似一个中心化机构,机构内部就可以协商后解决,第二种就需要一些策略来应对了。老师讲了一种思路:降低挖矿难度,再根据工作量进行分配。

假设原本挖矿难度要求,计算所得126位的哈希值前70位都必须为0,现在降低要求,只需要前50位为0,这样挖矿会更容易。当然,这个哈希可能不会被区块链所承认的,我们将其称为一个share,或almost valid share。矿工每挖到一个share,将其提交给矿主,矿主对其进行记录,作为矿工工作量的证明。等到某个矿工真正挖到符合要求的的区块后,根据所有矿工提交的share数量进行分配。

因为每个矿工尝试的nonce越多,所能得到的share也会越多,所以这种方案作为工作量证明方案是可行的。

老师提供了以下几个思考问题:

  • 有没有可能,某个矿工平时正常提交share,但真正挖到区块后不提交给矿主而是自己偷偷发布出去,从而避免他人分走挖矿所得到的出块奖励?

事实上,这种情况是不可能的。因为每个矿工挖矿任务是矿主分配的。矿主组装区块,交给矿工计算,而区块中铸币交易的收款人地址是矿主,如果矿工修改该地址,计算的nonce值也会作废。

  • 有没有可能矿工捣乱?平时提交share,等挖到后扔掉区块,不提交?

这种可能是有的,如果矿工本身仅仅想捣乱,是可以这么做的。但扔掉区块后,对其本身来说,也没有相应的奖励获得,看似是损人不利己的情况。但是,矿池之间存在竞争关系。有可能为了打击竞争对手,会派出矿机加入竞争对手矿池挖矿,从而起到搞破坏的作用。即只参与其他矿工挖矿分红,自己挖到的区块却丢掉不给他人分。

3.如果有矿池集中了51%算力,可以做什么?

  • 分叉攻击:对已经经过6次确认的交易分叉,利用51%算力将交易记录回滚。
  • 封锁交易:假如攻击者不喜欢某个账户A,不想让A的交易上区块链,在监听到有其他人将A的交易发布到区块链上时,立刻发动分叉攻击,使A所在链无法成为”最长合法链“。这样,便实现了对A账户的封锁。
  • 盗币?:这个是不可能的,因为其并没有他人账户私钥。如果依仗算力强,强行将没有签名的转账发布到区块链,正常节点不会认为其合法,这样,即使这条链再长,其他人也不会认为其是最长合法链。

肖臻公开课(八)——比特币中的挖矿相关推荐

  1. 肖臻公开课(七)——比特币中的挖矿难度

    本笔记对应北京大学肖臻老师<区块链技术与应用>公开课第七课. 0.前言 在本节中,肖老师介绍了比特币的挖矿难度的调整算法. 1.定义 在比特币的挖矿算法中,需要找出一个"恰当&q ...

  2. 肖臻公开课(六)——比特币中的网络

    本笔记对应北京大学肖臻老师<区块链技术与应用>公开课第六课. 0.前言 在本节课中,肖老师主要讲了比特币的底层网络实现.以计算机网络传统架构来说,比特币网络工作在应用层,底下的网络层是一个 ...

  3. 公开课精华 | 无人驾驶中感知的挑战与尝试

    本文总结于深圳元戎启行公司点云感知方向技术负责人邹晓艺,在深蓝学院的关于无人驾驶中感知的挑战与尝试的公开课演讲内容. 全文约3500字 主讲人邹晓艺来自深圳元戎启行公司,曾在百度IDL和ADU部门工作 ...

  4. 中职计算机专业优质课公开课,如何上中职计算机公开课.pdf

    如何上中职计算机公开课 2011 年第 14 期 中国职业技术教育 教 学 教海拾贝 Chinese Vocational and Technical Education 如何上好中职计算机公开课 梁 ...

  5. [MIT公开课(计算机教育中缺失的一课)]2.Shell工具与脚本

    (该系列文章大部分内容来源于MIT课程笔记,加入了个人的理解.原笔记中没有的细节和其他的需要理解的内容,公开课地址:https://www.bilibili.com/video/BV14E411J7n ...

  6. [MIT公开课(计算机教育中缺失的一课)]10.大杂烩

    (该系列文章大部分内容来源于MIT课程笔记,加入了个人的理解.原笔记中没有的细节和其他的需要理解的内容,公开课地址:https://www.bilibili.com/video/BV14E411J7n ...

  7. [MIT公开课(计算机教育中缺失的一课)]6. 版本控制(git)

    (该系列文章大部分内容来源于MIT课程笔记,加入了个人的理解.原笔记中没有的细节和其他的需要理解的内容,公开课地址:https://www.bilibili.com/video/BV14E411J7n ...

  8. 区块链系列教程之:比特币中的挖矿

    文章目录 简介 比特币的节点构造 挖矿 挖矿节点 创币交易 矿池收入分配 挖矿方向 算力浪费 算力调整 总结 简介 我们知道比特币就是挖矿产生的,那么在比特币网络中,挖矿有什么特点呢?怎么分配挖矿收入 ...

  9. 北京大学肖臻老师《区块链技术与应用》公开课笔记8——BTC挖矿篇

    北京大学肖臻老师<区块链技术与应用>公开课笔记 比特币挖矿篇,对应肖老师视频:click here 全系列笔记请见:全系列笔记请见:click here About Me:点击进入我的Pe ...

最新文章

  1. Java学习从入门到精通的学习建议
  2. mitmdump 脚本使用python第三方包方法(报错:in script xxx.py: No module named ‘xxx‘)
  3. PAT:1019. 数字黑洞 (20) AC(同甲级1069)
  4. Map map = request.getParameterMap(); BeanUtils.populate(bean, map);对前端表单的迅速封装与判断
  5. merge r语言daframe_R语言总结
  6. leetcode049. 最后一块石头的重量 II
  7. 震惊!温州一程序员编完八皇后吐血而亡,他的代码是什么样子?!!
  8. 搭建实用深度学习环境(Ubuntu16.10+Theano0.8.2+Tensorflow0.11.0rc1+Keras1.1.0)
  9. Gulp-静态网页模块化
  10. mysql subindex_mssql server sql分页存储过程
  11. 设计模式之空对象模式
  12. oracle读取表空间物理文件中数据,shell脚本读取oracle数据库数据写入到文件中
  13. opencv30-图像矩
  14. Android开发:调用camera API 创建MediaRecorder
  15. C4D电商促销活动背景素材|设计提升,只差一个背景
  16. redis返回的结果是null_Spring AOP 用注解封装 redis 缓存
  17. Quartus II 13.1入门级使用方法 -仿真篇,适用于小白
  18. win7讲述人修复_windows7讲述人被精简了 怎样修复-win7讲述人,win7讲述人修复工具...
  19. 几何公差标注示例及解释——直线度
  20. 让工控机通过笔记本的Wifi实现上网

热门文章

  1. ShowType=0,● 交换机命令show interfaces type 0/port_# switchport|trunk用于显示中继连接的配置情况,下面 - 赏学吧...
  2. 手机端input控制键盘弹出
  3. 2023程序员找工作难?盘点目前IT各大热门行业,看看哪些更有前景
  4. win10禁用笔记本自带键盘、触摸盘
  5. python统计单词出现次数 青少年编程电子学会python编程等级考试二级真题解析2022年3月
  6. 电脑打字习惯让人提笔忘字
  7. oracle 企业管理器网页打不开 解决https://localhost:1158/em问题
  8. NLP推理与语义相似度数据集
  9. 安卓华为魅族等手机含有副账号登陆问题
  10. 在天翼网关2.0上如何使用自己的路由器