北大肖臻《区块链技术与应用》学习笔记5
五、BTC-网络
The BitCoin Network
-
比特币运行在应用层(application layer:BitCoin Block chain)
底层是一个网络层(Network layer:P2P Overlay Network)
-
比特币中的P2P网络是非常简单的,所有的节点都是对等的,不存在Super node,Master node
-
Seed node(种子节点):加入P2P网络首先得知道至少有一个种子节点,然后你要跟种子节点联系,它会告诉你它所知道的网络中的其他节点,节点之间是通过TCP通信的,这样有利于穿透防火墙
-
Simple,robust,but not efficient(简单,粗暴但是牺牲的是效率)零度节点的选取是随机的,没有考虑底层的拓扑结构。
-
比特币系统中每个节点要维护一个等待上链的交易的集合,如果出现相同交易将会删除除第一个以外的所有交易,如果出现双花现象,所有交易记录均会被删除
-
网络传播采用flooding方式,牺牲效率,每个节点除了要检查区块的内容合法性之外,还要查它是不是在最长合法链里。越是大的区块,在网络上传播速度越慢
-
比特币网络的传播属于best effort。一个交易发布到比特币网络上,不一定所以的节点都能收到,而且不同的节点收到这个交易的顺序也不一定是一样的
六、BTC-挖矿难度调整
-
比特币用的哈希算法是SHA-256,这个产生的哈希值是256位。所以整个输出空间是2的256次方。调整这个比例,即目标空间占输出空间的比例,通俗的说,就是哈希值前面要有多少个0
-
H(block header) <= target(比特币的挖矿难度调整)
目标预值越小,挖矿的难度越大。调整挖矿的难度就是调整目标空间在整个输出空间中所占的比例。
-
挖矿难度和目标域值是成反比的,公式是Difficulty = difficulty_1_target/target,挖矿难度最小就是1,这个时候对应的目标预值是个非常大的数。
-
调整难度是因为随着算力的提高,出块时间会受到影响,上面是指挖矿难度等于1的时候所对应的目标预值
-
51% attack。不能使出块时间过快,会导致分岔过多,对于系统达成共识是没有好处的,而且危害了系统的安全性。比特币协议是假设大部分算力掌握在诚实的矿工手里。系统当中的总算力越强,安全性就越好,因为有恶意的节点想掌控51%的算力就越难。如果掌握了51%的算力,它就可以干很多坏事,比如分岔攻击。经过六个区块确认认为其交易必然合法
-
具体调整公式2016x10/60x24 = 14天
*target=targetx(actual time/expected time)
actual time指Time spent mining the lat 2016 blocks(产生2016个区块实际花费的时间),expected time指产生2016个区块应用的时间,即2016x10min。
-
如果实际时间超过两个星期,平均下来出块时间超过了十分钟,挖矿难度调低,反之。而且上调和下调都有四倍的限制
-
挖矿难度公式
Next_difficulty=previous_difficulty x(2 weeks)/(time to mine last 2016 blocks)
七、BTC-挖矿
memoryless、Progress free

-
比特币的安全性由密码学保证、共识机制保证,但是密码学的保证是以节点上所有的节点都是诚实的为前提
-
挖矿机的变化趋势,是从通用变得越来越专用,CPU是通用计算,GPU是通用并行计算,ASIC是专用计算ASIC:Application Specific Integrated Cir
-
而有些新的加密货币设计的是Alternative mining puzzle。而设计它的出发点是asic resistance(抗asic芯片化),目的是让通用的计算机也能参与挖矿的过程。
-
挖矿的另外一个趋势,矿池。因为作为单个矿工,收益很难稳定维持,所以要引入矿池,矿池就是把这些矿工组织起来,作为一个整体,矿池的架构一般是一个全节点会驱动很多矿机,一个矿池有一个矿主pool manager。下面连了很多矿工,这些矿工只负责计算哈希值,全节点的其他职责都由矿主来承担。负责监听网上的交易,把这些交易组织打包成区块,同时要看一看有没有其他的节点抢先发布区块,如果有的话进行调整。
-
矿池的出现减轻了矿工的负担,矿工只需要挖矿,计算哈希值就行了,别的事情都由矿主来完成。矿工的收入分配也更加稳定。但矿池的出现也有危害,发动51%的攻击变得容易了。他不一定自己有这么强的算力,只要动员召集这些算力就可以了。这有点类似于云计算中的on demand computing。平时不需要维护很大的计算机群,需要用的时候可以随时召回来。而矿池的情况,是on demand mining。
-
Boycott(封锁境域)
比如说攻击者不喜欢某个账户,怀疑某个账户参与非法交易,想把这个账户封锁掉,所有跟这个账户相关的交易都不让上链。假如A把某个交易A→B发布到区块链上,攻击者就会马上进行分岔,产生一个不包含这个交易的区块,所有跟A有关的交易也都不包含进去。
-
封锁境域与分叉攻击的区别
他没必要等后面几个确认区块。这时候如果攻击者等待确认区块,是为了让B放心,B以为后面有六个确认区块,已经没事了,然后攻击者再发动分岔攻击。而如果目的是为了boycott的话,就没有必要等后面区块生成。A→B交易一上链马上进行分岔,越早越好,因为攻击者是希望别人沿着他的链往下挖的。

浙公网安备 33010602011771号