北京大学肖臻老师《区块链技术与应用》P20(挖矿难度调整)和P21(权益证明)

news2024/11/15 15:39:46

1️⃣ 参考

  • 北京大学肖臻老师《区块链技术与应用》
    • P20 - ETH挖矿难度调整篇
    • P21 - ETH权益证明篇

2️⃣0️⃣ ETH挖矿难度调整

  • 在ETH中最长合法链也是最难合法链Total Difficulty
    在这里插入图片描述

  • 比特币与以太坊难度的宏观比较

比特币以太坊
调整难度隔2016个区块每个区块都有可能
平均出块时间10min13s

① 整体算法

一些说明

  • 公式是从代码中总结出来的,看懂共识更有利于看懂后面代码实现
  • 父区块:当前正在挖的区块的上一个区块
  • 基础部分目的:是为了维持出块时间
  • 时间炸弹目的:向POS过度

在这里插入图片描述

①① 自适应难度

在这里插入图片描述


注意是向下取整, 1 9 \frac{1}{9} 91 8 9 \frac{8}{9} 98向下取整后为0

在这里插入图片描述

①② 难度炸单

不难看出这炸弹是指数的,后期难度上升会很大,这也是想迫使矿工转入POS

在这里插入图片描述


当指数炸弹比POS计划先来临时,也只能继续挖矿,因为只有这一个共识机制

在这里插入图片描述

①③ 关于ETH的去中心化补充

尽管以太坊是一个去中心化的网络,但它仍然需要通过社区驱动的治理流程来进行重大更改,例如修改难度炸弹。该流程涉及以下几个步骤:

  • 提案阶段:

社区成员提出变更建议,通常以Ethereum Improvement Proposal (EIP) 的形式发布。EIP 应包含对更改的详细描述,其理由以及潜在影响。EIP 提交给以太坊核心开发人员团队进行审查和讨论。

  • 讨论阶段:

开发人员团队评估 EIP 的技术可行性和对网络的影响。社区成员对 EIP 进行公开讨论,并提供反馈。可能有多次修订 EIP,以解决疑虑并达成共识。

  • 投票阶段:

一旦 EIP 准备就绪,将对其进行投票表决。投票由以太坊矿工和节点运营商进行。为了使 EIP 被接受,需要达到大多数(通常为 2/3)的投票权同意。

  • 实施阶段:

如果 EIP 获得批准,则将其纳入以太坊协议的下一个版本。新版本发布后,它将自动在所有节点上激活。

② 难度调整代码

②① 自适应难度

// makeDifficultyCalculator creates a difficultyCalculator with the given bomb-delay.
// the difficulty is calculated with Byzantium rules, which differs from Homestead in
// how uncles affect the calculation
func makeDifficultyCalculator(bombDelay *big.Int) func(time uint64, parent *types.Header) *big.Int {
	// Note, the calculations below looks at the parent number, which is 1 below
	// the block number. Thus we remove one from the delay given
	bombDelayFromParent := new(big.Int).Sub(bombDelay, big1)
	return func(time uint64, parent *types.Header) *big.Int {
		// 上面的计算公式
		// https://github.com/ethereum/EIPs/issues/100.
		// algorithm:
		// diff = (parent_diff +
		//         (parent_diff / 2048 * max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // 9), -99))
		//        ) + 2^(periodCount - 2)

		bigTime := new(big.Int).SetUint64(time)
		bigParentTime := new(big.Int).SetUint64(parent.Time)

		// holds intermediate values to make the algo easier to read & audit
		x := new(big.Int)
		y := new(big.Int)

		// (2 if len(parent_uncles) else 1) - (block_timestamp - parent_timestamp) // 9
		x.Sub(bigTime, bigParentTime)
		// 时间戳相减后除以9
		x.Div(x, big9) 
		// 判断叔父区块
		if parent.UncleHash == types.EmptyUncleHash {
			x.Sub(big1, x)
		} else {
			x.Sub(big2, x)
		}
		// max((2 if len(parent_uncles) else 1) - (block_timestamp - parent_timestamp) // 9, -99)
		// 防止"黑天鹅",不能小于99
		if x.Cmp(bigMinus99) < 0 {
			x.Set(bigMinus99)
		}
		// parent_diff + (parent_diff / 2048 * max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // 9), -99))
		// DifficultyBoundDivisor = big.NewInt(2048) 在params/protocol_params.go文件中
		// 难度单位
		y.Div(parent.Difficulty, params.DifficultyBoundDivisor)
		x.Mul(y, x)
		x.Add(parent.Difficulty, x)

		// minimum difficulty can ever be (before exponential factor)
		// minimumDifficulty = 131072
		// 也就是难度最小值D0
		if x.Cmp(params.MinimumDifficulty) < 0 {
			x.Set(params.MinimumDifficulty)
		}

②② 难度炸弹(ice-age delay)

		// calculate a fake block number for the ice-age delay
		// Specification: https://eips.ethereum.org/EIPS/eip-1234
		// 实际比较应该减1,因为是父区快与正在挖的区块差一个
		fakeBlockNumber := new(big.Int)
		if parent.Number.Cmp(bombDelayFromParent) >= 0 {
			fakeBlockNumber = fakeBlockNumber.Sub(parent.Number, bombDelayFromParent)
		}
		// for the exponential factor
		periodCount := fakeBlockNumber
		periodCount.Div(periodCount, expDiffPeriod)

		// the exponential factor, commonly referred to as "the bomb"
		// diff = diff + 2^(periodCount - 2)
		if periodCount.Cmp(big1) > 0 {
			y.Sub(periodCount, big2)
			y.Exp(big2, y, nil)
			// x指的基础部分难度
			x.Add(x, y)
		}
		return x
	}
}

// https://github.com/ethereum/go-ethereum/blob/master/consensus/ethash/consensus.go

https://eips.ethereum.org/EIPS/eip-1234
ice-age delay 回退500万的区块难度

在这里插入图片描述

2️⃣1️⃣ ETH权益证明

① POW的问题

  • 不环保
    • 比特币的消耗能源情况:Bitcoin Energy Consumption Index
    • 以太坊的消耗能源情况:Ethereum Energy Consumption Index

说明

  • 可以看到非常耗电
  • 可以看到ETF在2022年末已经转向POS
  • 为什么以太坊智能合约比单纯转账的比特币复杂却耗电少呢?
    • 因为出块时间短,计算消耗少

在这里插入图片描述


  • 想想看,矿工的收益是由什么决定的?
    • 由算力决定,算力由是由投入资金决定,那直接“拼”投入资金不就行了,这就是权益证明的基本思想
      在这里插入图片描述

② POS权益证明

一般来说,采用权益证明的货币,会先预留一些货币给开发者,而开发者也会出售一些货币换取开发所需要的资金,在系统进入稳定状态后,每个人都安装持有货币的数量进行投票。

  • 优点:

    • 环保
    • 维护区块链安全的资源形成闭环
      • 在POW中维护其安全的资源需要通过现实中流通的货币购买矿机等设备进去区块链的,这也就导致只要有人想要攻击,只需要外部聚集足够资金就可以攻击成功(小型币种很容易被攻击,也就是在摇篮里就扼杀掉(Infanticide)
      • 在POS如果想要发动攻击也需要大量资金,但大量资金的注入同时也会太高ETF的价格,机制可以有效防御这种情况。

  • 说明:POW和POS是可以结合的并不互斥
    • 比如有些币种根据持有币的权益进行挖矿难度调整,持有越多挖矿难度越小,为了避免马太效应,所有其中会设置冻结刚刚投入挖矿的币一段时间,也是Proof of Deposit

②① 权益证明的难题:双边下注

由于不确定哪条链会是最终合法链,所以在A和B同时进行了下注。最终A区块胜出,那么他能够获得A区块相应收益,而在B区块进行投票放入的“筹码”也会被退还,这也就导致其每次都能获得收益,也称为nothing of stake

但在POW中双边下注使算力分散可能都得不到收益

在这里插入图片描述

③ 以太坊拟采用的权益证明

以太坊中,准备采用的权益证明协议为Casper the Friendly Finality Gadget(FFG),该协议在过渡阶段是要和POW结合使用的。

在比特币系统中,一个交易在其后出6个区块才认为安全。但实际上,这种安全只是概率意义上的安全,仍然可能会被拥有强大算力的用户在其前面发动分叉攻击进行回滚,也就是缺乏Finality(不可改变性)


Casper协议引入一个概念:Validator(验证者)

Validator的职责是推动系统达成共识,投票决定哪一条链成为最长合法链,投票权重取决于保证金数目。

一个用户想要成为Validator,需要上交一笔“保证金”,这笔保证金会被系统锁定。

原始Casper协议中,规定每100个区块为一个epoch,采用两阶段投票的方式(two-phase commit):Prepare MessageCommit Message,都需要超2/3票才算通过。

在实际优化后,两次投票在实际中只需要一次即可,对于刚挖的区块是Commit Message,对于下一个区块是Prepare Message,且epoch为50
在这里插入图片描述

  • Casper协议

规定矿工挖矿会获得出块奖励,而验证者也会得到相应奖励。

当然,为了防止验证者的不良行为,规定其被发现时要受到处罚。

例如某个验证者“行政不作为”,不参与投票导致系统迟迟无法达成共识,这时扣掉部分保证金;如果某个验证者“乱作为”,给两边都进行投票,被发现后没收全部保证金。没收的保证金被销毁,从而减少系统中货币总量。

验证者存在“任期”,在任期结束后,进入“等待期”,在此期间等待其他节点检举揭发是否存在不良行为,若通过等待期,则可以取回保证金并获得一定投票奖励。


以太坊系统设想,随着世界推移,挖矿奖励逐渐减少而权益证明奖励逐渐增多,从而实现POW到POS的过渡,最终实现完全放弃挖矿(当然现在早已经实现了)

④ 对挖矿消耗大量电能的其他看法

前面的基本观点都是“挖矿消耗大量电能,而这是不好的”

但有人认为其所消耗的电能所占比值并不大,而且其对于环境的影响是有限的。挖矿提供了将电能转换为钱的手段,而电能本身难以传输和存储,一般来说,白天所发的电不足,晚上所发的电又多于实际需求。因此,挖矿为将多余的电能转换为有价值的货币提供了很好的解决手段。也就是说挖矿消耗电能可以有效消耗过剩产能,带动当地经济发展

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1685559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LiveGBS流媒体平台GB/T28181用户手册-版本信息:查看机器码、切换查看流媒体服务

LiveGBS流媒体平台GB/T28181用户手册--版本信息:查看机器码、切换查看流媒体服务 1、版本信息1.1、查看机器码1.2、多个流媒体服务1.3、提交激活 2、搭建GB28181视频直播平台 1、版本信息 版本信息页面&#xff0c;可以查看到信令服务 流媒体服务相关信息&#xff0c;包含硬件…

MySQL5个查询

# 总查询 EXPLAIN SELECT * FROM city; # 范围查询 EXPLAIN SELECT * from city where ID>5 and ID<20; #主键查询 EXPLAIN SELECT * from city where ID5; # 索引查询 EXPLAIN SELECT * from city where CountryCodeNLD; # 普通索引 EXPLAIn SELECT * from cit…

鸿蒙OS开发:【一次开发,多端部署】(多设备自适应能力)实例

多设备自适应能力 介绍 此Demo展示在JS中的多设备自适应能力&#xff0c;包括资源限定词、原子布局和响应式布局。 效果预览 使用说明 1.本示例中的资源限定词和响应式布局针对常见设备类型做了适配&#xff0c;可以在预览器中开启"Multi-profile preview"进行多…

创建桌面快捷方式

①点击桌面任务栏中的【开始图标】>点击【所有应用】 ②将【EndNote】图标拖到电脑桌面。

用kimi一键绘制《庆余年》人物关系图谱

《庆余年》里面人物关系复杂&#xff0c;如果能画出一个人物关系图谱&#xff0c;可以直观的理解其中人物关系&#xff0c;更好的追剧。 首先&#xff0c;用kimi下载庆余年的分集剧情&#xff0c;常见文章《AI网络爬虫&#xff1a;批量爬取电视猫上面的《庆余年》分集剧情》&am…

【WebGIS实例】(15)GeoServer 备份地图服务器

笔者GeoServer版本号&#xff1a;2.23.4 官方教程文档&#xff1a;Backup and Restore Documentation — GeoServer 2.26.x User Manual 一、下载社区插件 选择对应的版本&#xff1a;Index of /geoserver/进入插件列表&#xff1a;Index of /geoserver/2.23.x/community-late…

无人机监测系统:天空之眼,精准掌握地球脉动

在当今信息化快速发展的时代&#xff0c;无人机技术以其独特的优势&#xff0c;正在成为资源调查、环境监测和规划支持的重要工具。无人机监测系统通过搭载多种传感器和设备&#xff0c;能够快速、高效地获取地表信息&#xff0c;为决策提供科学依据。 项目背景 随着全球环境…

如何在Mac上恢复未保存的Excel文件

您是否不小心关闭了 Excel&#xff0c;而没有将工作保存在 Mac 上&#xff1f;不要惊慌&#xff01;本指南概述了帮助您在 Mac 上恢复未保存的 Excel 文件的简单方法。 由于断电、系统崩溃或关闭它而不保存而意外丢失您的 Excel 文件可能会造成挫败感&#xff0c;因为您可能在…

创建型模式之单例

文章目录 概述定义场景小结 概述 设计模式包括创建型模式&#xff0c;结构型模式&#xff0c;行为型模式。 今天先看看创建型模式&#xff0c;而单例是创建型模式中的第一个而且是常用的&#xff0c;就从它开始吧。 定义 单例模式用来创建全局唯一的对象。一个类只允许创建一…

GNU Radio之OFDM Divide和Matrix Transpose底层C++实现

文章目录 前言一、OFDM Divide 模块1、简介2、模块作用3、参数意义4、C 具体实现 二、Matrix Transpose 模块1、简介2、参数意义3、C 具体实现 前言 gr-radar 中的 OFDM Divide 模块是GNU Radio中的一个组件&#xff0c;专门用于处理正交频分复用&#xff08;OFDM&#xff09;…

防火墙技术基础篇:配置基本转发策略(安全策略)

防火墙基础基础篇&#xff1a;配置基本转发策略&#xff08;安全策略&#xff09; 1 什么是安全策略&#xff1f; 安全策略指的是用于保护网络的规则。它是由管理员在系统中配置&#xff0c;决定了哪些流量可以通过&#xff0c;哪些流量应该被阻断。安全策略是防火墙产品的一…

智能科技的新风潮:探索Web3与物联网结合

引言 随着科技的不断进步和创新&#xff0c;智能科技正成为新时代的主旋律。在这个充满活力和变革的时代&#xff0c;Web3技术与物联网的结合成为了一股新的风潮。本文将深入探讨这一新趋势&#xff0c;揭示Web3与物联网结合的意义、挑战和前景。 Web3技术的特点与优势 区块链…

Git系列:git init 深入理解及其使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

好的架构是进化来的,不是设计来的

很多年前&#xff0c;读了子柳老师的《淘宝技术这十年》。这本书成为了我的架构启蒙书&#xff0c;书中的一句话像种子一样深埋在我的脑海里&#xff1a;“好的架构是进化来的&#xff0c;不是设计来的”。 2015 年&#xff0c;我加入神州专车订单研发团队&#xff0c;亲历了专…

抄表:现代生活中的数据采集关键

1.界定与发源 抄表&#xff0c;简单的说&#xff0c;指从各种各样计量机器设备(如智能水表、电度表、天然气表等)载入做好记录使用量的全过程。这一概念自工业化时代至今就出现了&#xff0c;最初由人工进行&#xff0c;伴随着科技创新&#xff0c;如今已经演化出自动化和远程…

保研面试408复习 5——操作系统(死锁)、计网(TCP和UDP)

文章目录 1、操作系统一、死锁的定义、原因和必要条件a.死锁的定义b.死锁的原因c.死锁产生的必要条件 二、如何预防死锁&#xff1f; 2、计算机网络一、TCP和UDP的相同点二、TCP和UDP的区别 标记文字记忆&#xff0c;加粗文字注意&#xff0c;普通文字理解。 1、操作系统 一、…

深度学习之基于Matlab的BP神经网络交通标志识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着智能交通系统&#xff08;ITS&#xff09;的快速发展&#xff0c;交通标志识别&#xff0…

【DevOps】深入浅出:Jenkins 性能监控全解析

目录 一、监控指标&#xff1a;把握系统健康状况 1、资源利用率&#xff1a; 2、 任务执行效率&#xff1a; 3、系统稳定性&#xff1a; 二、监控工具&#xff1a;选择合适的利器 1、Jenkins 内置监控 1.1、Jenkins Performance Plugin&#xff1a;系统性能指标的直观展…

出谈论点云文件pcd加载01

刚写完基于potree开发地图水印效果的时候&#xff0c;在网上分享实例&#xff0c;刚发出去&#xff0c;竟然被人喷了&#xff0c;这么简单的实例&#xff0c;竟然好意思发群里&#xff0c;哎… 好无奈&#xff01; 不过我还是坚持我的想法&#xff0c;大家看到文章后&#xff0…

赛事|基于SprinBoot+vue的CSGO赛事管理系统(源码+数据库+文档)

CSGO赛事管理系统 目录 基于SprinBootvue的CSGO赛事管理系统 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 3参赛战队功能模块 4合作方功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&…