《区块链技术与应用》北大肖臻老师——课程笔记【6-8】

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

《区块链技术与应用》北大肖臻老师——课程笔记【6-8】


提示以下内容只是个人在学习过程中记录的笔记图片均是肖老师课程的截图可供参考。如有错误或不足之处请大家指正。

一、BTC网络

比特币网络传播的工作原理the BitCoin network
比特币工作在应用层application layer底层是P2P的overlay network覆盖网络。

比特币的P2P网络结构非常简单所有节点都是对等的没有超级节点/主节点super node / master node所有节点都是平等的要加入这个网络首先要知道至少有一个种子节点seed node然后和种子节点联系种子节点会告诉它所知道的节点信息。节点之间是通过TCP协议通信的有利于穿透防火墙。节点要离开网络不需要任何操作通知其他节点只需要退出应用程序即可。其他节点一段时间内没有接收到某个退出网络的节点的消息会自动将该节点从网络中删除。

比特币网络的设计原则
simple简单robust鲁棒 but not efficient而不是高效。

每个节点维护一个邻近节点的集合消息传播在网络中flooding采取方式。节点第一次听到消息后把消息传播给其他邻近节点同时记录此消息已被记录下次再接收到该消息就不用再转发给邻近节点。
邻近节点的选取是随机的没有考虑底层的拓扑结构。

现实节点网络IP地址不同可以增强鲁棒性但是牺牲了效率。

比特币系统中每个节点要维护等待上链的交易的集合。当节点第一次监听到某个交易时把这个交易加入等待上链的交易集合中并且转发该交易给邻近节点再一次收到该交易就无需转发可以避免交易在网络中无限传播。

转发交易的前提是交易合法

新发布的区块在网络中传播的方式和新发布的交易是类似的每个节点除要检查区块交易内容合法性之外还要检查是否在最长合法链上

越大的区块传播速度越慢区块大小限制1M
比特币网络采用的传播方式非常耗带宽带宽是瓶颈。

比特币网络传播属于best effort 尽力而为。一个交易发布到比特币网络上不一定所有节点都能接收到每个节点收到的交易顺序也不一样网络传播存在延迟有的节点不一定按照协议要求进行转发交易导致某些合法交易收不到有些节点会转发不合法交易消息这是去中心化面临的一个问题。

回滚交易不等于后一个交易对前一个交易的退款。

二、BTC-挖矿难度

挖矿就是不断尝试nonce值小于等于给定的目标预值。目标预值越小挖矿难度越大。调整挖矿难度就是调整目标空间在整个输出空间中所占的比例。

比特币使用的哈希算法SHA-256 。产生的哈希值是256位整个输出空间是2的256次方的可能的取值调整这个比例通俗的说就是哈希值前面要有多少个0。目标预值并不是哈希值前面都是0后面从某一位是其他数字或字母。

挖矿难度和目标预值成反比。挖矿难度最小为1对应的目标预值数很大。

图片来源于肖臻老师视频截图侵权请联系删除
不调整挖矿难度会出现的情况总算力越来越强挖矿难度不变出块时间会减短。
出块时间太短会容易出现分叉这种分叉会成为常态会出现多分叉如二分叉、十分叉。
分叉出现过多不利于系统达成共识会危害到系统的安全性。系统中总算力越强安全性越好。

51%攻击恶意节点掌握系统中51%以上的节点就会做出对系统不利的操作。
如果系统中有很多分叉系统总算力会被分散诚实节点根据网络中位置的不同可能会沿着分叉继续扩展某个分叉的恶意节点可能会集中算力进行拓展逐渐拓展成最长合法链当算力被分散后51%的攻击 的比例可能会更低。

出块时间要有一个常数的波动范围不能无限地减小。
以太坊出块时间是每隔15秒一个块出块时间大大减少后以太坊设置了ghost共识协议

分叉产生了orphan block这些区块不能简单丢弃需要给一些奖励uncle reward。以太坊中也需要调整出块难度保持稳定。
无论出块时间设置成多少都要保持稳定不能无限减少。

比特币中调整挖矿难度
每隔2016区块调整一次挖矿难度大概是两个星期。
调整目标预值公式
图片来源于肖臻老师视频截图侵权请联系删除

如果实际调整时间超过两个星期说明出块时间超过十分钟间隔挖矿难度应该调低如果实际调整时间不超过两个星期说明出块时间小于十分钟间隔速度块应该调高挖矿难度。

实际调整难度代码中上调下调难度都有四倍的限制假如实际调整时间超过了八个星期也按照八个星期计算调整目标预值增大最多也只增加四倍不会一次性超过四倍主要是为了系统中出现意外情况导致目标预值有特别大的活动。

如何让所有矿工同时调整目标预值
调整计算目标预值的方法写在比特币系统中的代码里每挖到2016个区块会自动进行调整

代码是开源的如果某个恶意节点不进行调整该恶意节点发布的区块会不被诚实节点接受。
nBits域是target编码的版本在块头没有直接存储target域target域需要32字节nBits是4字节也可以说nBits是target的压缩编码。如果恶意节点不进行调整目标预值检查区块的合法性会不能通过。因为每一个区块要独立验证合法性检查内容包括nBits目标预值是否正确如果不一致发布的区块会不被其他节点接受。

以太坊调整挖矿难度是每个新出的区块都有可能会进行调整而且调整方法也比比特币更为复杂。

比特币成功从某种意义上说是因为它更不实用比特币没有任何真正法币背书没有底层的保证应用是凭空造出来的货币。比特币的设计比较保守也是后面有很多新的加密货币发展出来的原因之一。

2009-2018年比特币系统总算力的变化情况图片来源于肖臻老师视频截图在这里插入图片描述 2009-2018年比特币系统挖矿难度的变化情况图片来源于肖臻老师视频截图在这里插入图片描述
比特币系统2017年11月-2018年5月半年期间的难度变化曲线图片来源于肖臻老师视频截图
在这里插入图片描述

上图说明挖矿的人越来越多设备越来越先进反映出大家对比特币的热情越来越高。
如果是相反情况说明大家对这种币热情减少。

比特币系统2010-2018年每天的出块时间图片来源于肖臻老师视频截图
在这里插入图片描述

上图可以看出总体上出块时间稳定在十分钟左右上下波动说明难度调整达到预期目的

比特币系统2018上半年的出块时间图片来源于肖臻老师视频截图
在这里插入图片描述

计算挖矿难度代码
实际比特币代码中使用的是计算目标预值公式图片来源于肖臻老师视频截图
在这里插入图片描述

三、BTC-挖矿

在这里插入图片描述
验证其合法性三方面

  • 区块内每个交易都要合法
  • 每两周调整挖矿难度
  • 检查区块是在延伸最长合法链

在这里插入图片描述
轻节点无法检测链上区块都是合法的。
轻节点假设矿工都是有理智的不会沿着不合法的链挖下去。

挖矿过程缺省情况下
1、沿着最长合法链挖下去
2、选择最先监听的分叉

在挖矿过程中如果监听到其他节点发布了一个区块这个区块是合法的也是在延伸最长合法链此时应该停止已有的挖矿在本地重新组装一个候选区块然后重新进行挖矿。
原因沿着新发布区块往下挖本地所组装的区块中所包含的交易就会发生变化有些区块可能已经被包含在新发布区块中块头也会发生变化。

挖矿的性质是无记忆性无论是停止挖矿重新组装后重新挖矿还是继续挖矿只要还未找到符合的nonce值成功的概率都是一样的对最后的结果没有影响。

比特币是如何保证安全性的
从两方面保证一是密码学上的保证另一方面是共识机制
密码学上的保证是别人没有自己的私钥就没有办法伪造自己的签名前提是系统中拥有的大多数矿工是好的是遵守协议的不会接受没有合法签名的协议。

挖矿的演化趋势
1、挖矿设备趋于专业化从通用变成越来越专用
1CPU、通用计算机性价比太低
2GPU用于通用并行计算
3ASIC芯片

ASIC专门为挖矿设计的芯片没有多余的电路逻辑就是为了计算哈希值比特币挖矿而设计。性价比最高ASIC芯片研发周期很长
为某一种加密货币设计的芯片只能挖那一种加密货币不能挖其他的除非都是使用同一种mining puzzle可以吸引更多人挖矿merge mining。
设计alternative puzzle的出发点抗ASIC芯片化resistance目的是为了让通用的计算机也能参与挖矿。

2、挖矿的另一个趋势是大型矿池的出现。单个矿工的收入是不稳定的。单个矿工还要承担全节点的其他责任。

矿池是把矿工组织起来作为一个整体。矿池的架构是一个全节点会驱动很多矿主pool manager 矿机矿主下连着很多矿工矿工只负责计算哈希值全节点的其他职责都由pool manager承担把交易组织打包成候选区块监听其他节点有没有发布新区块。
矿池出现的另一个目的解决收入不稳定

挖矿收益该如何分配
一般来说矿池有两种组织形式。一种是像大型数据中心那样另一种是分布式矿工和矿主不在一个地方矿工要加入矿池就是按照矿池规定的通讯协议与矿主进行联系矿主把要计算哈希值的任务分配给矿工矿工计算完后把结果返回给矿主有出块奖励时一起参与分红。

如果矿工是来自世界各地收益该如何分配
按照矿工贡献大小分配工作量证明
降低挖矿难度后挖到的叫做sharealmost valid block。矿工挖到share后提交给
矿主矿主记录矿工提交的share数目可以用这个证明矿工的工作量等挖到新
的区块后用share数目分配收益。

每个矿工挖到的概率取决于挖到的nonce数和share成正比。
如果矿工挖到后不提交给矿主发不出去收款地址是矿主的地址矿工无法取出
收益是无用的。只要矿工按照矿主分配的任务分区块奖励就不可能能偷出块
奖励。
如果矿工捣乱不提交真正挖到的结果这样对矿工没有经济上的好处。

矿池在各个国家的分布比例:
在这里插入图片描述
矿池的算力的分布比例(2014年6月12日):
在这里插入图片描述
在这里插入图片描述

矿工转换矿池很容易。
大型矿池会使得51%的攻击更加容易。

占据51%以上算力的矿池可以发布的攻击不是只要达到51%预值就可以发动攻击。
1、分叉攻击。
在这里插入图片描述
2、封锁禁令boycott把封锁的账户的有关系的交易都不让上链当其他节点把这个交易发布到区块上会立刻分叉让这个交易所在的链不能成为最长合法链。和回滚的区别不用等多个区块被确认
3、盗币不可能实现的没有其他账户的私钥

强行把不合法的交易打包到区块会造成分叉。


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 区块链