区块链学习笔记7——BTC挖矿
点击阅读更多查看文章内容
区块链学习笔记7——BTC挖矿
学习视频:北京大学肖臻老师《区块链技术与应用》
笔记参考:北京大学肖臻老师《区块链技术与应用》公开课系列笔记——目录导航页
结点
全结点:
- 一直在线
- 在本地硬盘上维护完整的区块链信息
- 在内存里维护UTXO集合,以便快速检验交易的正确性
- 监听比特币网络上的交易信息,验证每个交易的合法性
- 决定哪些交易会被打包到区块里
- 监听别的矿工挖出来的区块,验证其合法性
- 挖矿
决定沿着哪条链挖下去?(缺省:最长合法链)
当出现等长的分叉的时候,选择哪一个分叉?(缺省:最先监听到的)
轻节点:
- 不是一直在线
- 不能保存整个区块链,只要保存每个区块的块头
- 不用保存全部交易,只保存与自己相关的交易
- 无法检验大多数交易的合法性,只能检验与自己相关的那些交易的合法性
- 合法检测网上发布的区块的正确性
- 可以验证挖矿的难度
- 只能检测哪个是最长链,不知道哪个是最长合法链
挖矿设备
刚开始用CPU、通用计算机挖矿会导致内存等其他资源有很多闲置,性价比太低
后转入第二代GPU计算,用于通用并行计算,但其中还有许多部件是闲置的(如用于浮点数计算的部件)
ASIC芯片专门为挖矿设计,一种芯片只能挖一种货币,除非使用相同的mining puzzle,性价比最高
CPU(通用计算)->GPU(通用并行计算)->ASIC(挖矿专用)
大型矿池的出现
挖矿另一个趋势便是大型矿池的出现。对于单个矿工来说,即使使用了ASIC矿机,其算力在整个系统中仍然只占据很少一部分,即使从平均收益看有利可图,但收入很不稳定。
此外,单个矿工除挖矿还要承担全节点其他责任,造成了算力的消耗。
一个全结点驱动很多矿机。矿工只需要不停计算哈希值,而全节点其他职责由矿主来承担。ASIC芯片只能计算哈希值,不能实现全节点其他功能。此外,矿池出现解决了单个矿工收益不稳定的问题。当获得收益后,所有矿工对收益进行分配,从而保证了收益的稳定性。
矿池一般具有两种组织形式。1.类似大型数据中心(同一机构),集中成千上万矿机进行哈希计算。2.分布式。矿工与矿主不认识(不同机构),矿工按照矿池规定的通讯协议与矿主联系,矿主分配任务,矿工进行计算并将结果返回给矿主,获得收益后整个矿池中所有矿工进行利益分配。
矿池利益分配
- 平均分配,平分出块奖励,会使得有些矿工不工作,偷懒
- 按照工作量分配
之前说到的挖矿收益不稳定是因为挖矿难度太高假设要前70位为0,可能要一两年才能挖到,现在可以降低挖矿的难度,只需要前60位为0,这样挖矿会更容易挖到。当然,这个哈希是不会被区块链所承认的,我们将其称为一个share,或almost valid share。矿工每挖到一个share,将其提交给矿主,矿主对其进行记录,作为矿工工作量的证明。等到某个矿工真正挖到符合要求的的区块后,根据所有矿工提交的share数量进行分配。
因为每个矿工尝试的nonce越多,挖到矿的可能性越大,所能得到的share也会越多,所以这种方案作为工作量证明方案是可行的。
思考一:有没有可能,某个矿工平时正常提交share,但真正挖到区块后不提交给矿主而是自己偷偷发布出去,从而避免他人分走挖矿所得到的出块奖励?
事实上,这种情况是不可能的。因为每个矿工挖矿任务是矿主分配的。矿主组装区块,交给矿工计算,而区块中铸币交易的收款人地址是矿主,区块发布出去的收益也是矿主的,如果矿工修改该地址,算出的Merkle tree是不同的,矿主不会承认share。
思考二:有没有可能矿工自己刚开始就自己偷偷组装一个区块,自己挖矿?
这样就类似于其脱离了该矿池。因为其自己所组织的区块交易列表已经被改过了,算出的Merkle tree的根哈希值是不同的,不会被矿主所认可,其提交的share也不会被认可,也就得不到分配的收益。
思考三:有没有可能矿工捣乱?平时提交share,等挖到后扔掉区块,不提交?
这种可能是有的,如果矿工本身仅仅想捣乱,是可以这么做的。但扔掉区块后,对其本身来说,也没有相应的奖励获得,看似是损人不利己的情况。
但是,矿池之间存在竞争关系。有可能为了打击竞争对手,会派出矿机加入竞争对手矿池挖矿,从而起到搞破坏的作用。即只参与其他矿工挖矿分红,自己挖到的区块却丢掉不给他人分。
关于矿池的一些统计数据
矿池在各个国家分布比例图(2018年)
这个时间,存在一个矿池(GHash.IO)算力比例占据全部算力一半以上,当时引起了恐慌(一个矿池就可以发动51%攻击)。之后,该矿池主动降低了矿池算力(化整为零,实际上仍然存在发动51攻击能力),避免动摇人们对比特币信心。
表面看上去是安全的,但实际实上某个机构如果有超过50%算力,其必然不会将其放入一个矿池中。而是将其分散隐藏,真正需要发动攻击时候再集中起来发动51攻击(注意:矿工转换矿池是很容易的)。
由这些数据可以得知,矿池本身对BTC系统带来了较大威胁。某个恶意用户如果想发动攻击,以前需要自己达到51%算力,现在自己只需要作为矿主,只需要很少一部分算力就可以了。只要能够吸引到足够多的不明真相的矿工,便可以用较低成本实现51%攻击。
当然,矿主经验管理矿池,也需要收取一定比例(出块奖励、交易费)作为管理费用。如果恶意者想要攻击系统,会将管理费降低甚至赔本吸引足够多矿工加入。这便使得发动51%攻击变得容易了起来。
51%算力矿池可以发动的攻击
- 分叉攻击
即使某个区块已经经过6次确认,矿池依旧可以进行分叉攻击,因为原则上51%算力的矿池扩展区块链的速度更快,可以将交易记录回滚, - 封锁交易(Boycott)
之前说过,如果某个矿工发布的区块故意不包含A的交易,但其他诚实的矿工还是会包含A的交易。假设某个拥有51%算力的矿池要封锁A的交易,每次发布一个包含A的交易,就立刻发动分叉攻击,使得这个区块无法获得收益,这样就使得其他的诚实矿工也不敢发布包含A的交易,实现了对A的交易封锁。 - 盗币(将他人账户BTC转走)
这个是不可能的,因为其并没有他人账户私钥。如果依仗算力强,强行将没有签名的转账发布到区块链,正常节点不会认为其合法,这样,即使这条链再长,其他人也不会认为其是最长合法链。
矿池出现的优劣
优点:解决了矿工收入不稳定的问题,减轻了矿工的负担。
缺点:威胁到了区块链系统的安全,使得51%攻击变得容易起来
区块链学习笔记7——BTC挖矿