07 BTC-挖矿
《区块链技术与应用》课程链接:https://www.bilibili.com/video/BV1Vt411X7JF/?spm_id_from=333.337.search-card.all.click
07 BTC-挖矿
比特币网络中大多数节点都是轻节点。
全节点监听到一个合法区块,需要停止当前的挖矿,重新再本地组装一个候选区块,然后重新进行挖矿。【因为交易可能冲突】
这样白挖了,是不是很可惜?
其实不可惜,因为挖矿的性质是,无记忆性,memory less / progress free。
比特币是怎么保证安全性的?
前提:比特币中的大多数节点都是诚实节点。(银行的工作人员必须遵守规定)
- 密码学:别人没有你的私钥,没有办法伪造你的签名;所以,没有把你账上的钱转走;产生私钥和签名的时候,都要有好的随机源。
- 共识机制
挖矿设备:CPU(通用计算) ——> GPU(通用并行计算) ——> ASIC芯片(Application Specific Integrated Circuit)(挖矿专用) 【通用 ——> 专用】
一般,一个ASIC芯片只能为一个加密货币服务。(ASIC芯片只能复杂计算hash值)
有些加密货币,一开始为了吸引更多的人挖矿,使用相同的mining puzzle,叫做 merge mining。
ASIC芯片研发周期很长,比特币的可能需要一年的时间,虽然已经很快了,如果比特币价格波动变化,前期的投入可能打水漂。
Alternative mining puzzle,出发点是 ASIC resistance,目的是让通用计算机也能挖矿。
大型矿池的出现:
(pool manager 负责执行全节点的功能;miner仅负责计算hash值)
矿主会按照一定比例收取一定的管理费,来管理矿池。
单个矿工收入不稳定,类似中彩票;同时,还需要维护全节点的其它功能;
收入分配解决单个矿工收入不稳定问题。
那么如果矿工来自五湖四海,那么利益该怎么分配?平均分配行不行?
问题:吃大锅饭,干好干坏一个样。
按照每个矿工的贡献大小来进行分配,也就说,同样需要工作量证明,证明每个矿工做了多少工作?
矿工只需要挖到 almost valid block(差不多是那个难度)就行了,将结果提交给矿主,矿主拿到该区块,该区块除了证明矿工所作了工作量之外,没有什么其他用处。矿主按照每个矿工提交的区块数目进行分配奖励。
有没有一个矿工,挖到一个区块之后,不把结果提交给矿工,自己偷偷摸摸发布出去?
不可能,每个矿工的任务是由矿主来进行分配的,矿主负责组装区块,交给矿工去尝试各种各样的nonce值,区块中的第一笔交易CoinBase的的收款人写的是矿主的地址,矿工偷偷发布之后,没什么用。
矿工有没有可能捣乱呢?
almost valid block提交给矿主,计算出的真正的nonce丢掉。好像是损人不利己,但是矿池之间存在利益关系,可能是矿池相互搞破坏。
矿池的统计数据:
矿池在各个国家的分布比例:
2014年矿池数据:
矿池主动把矿池算力占比大幅度减少,以免动摇大家对比特币的信心。
大型矿池使得51%攻击更加容易。
矿池51%的算力,能发动那些攻击呢?
分叉攻击
Boycott(封锁境遇):所有跟某个账户有关的所有交易,监听到某个账户的交易上链,立马分叉。这样会导致别的矿工也不敢打包该账户的交易,因为区块奖励可能会作废。
如果恶意节点仗着自己的算力强,强行把一个没有合法签名的交易发布到区块链上,会有什么样的结果?
会分叉。
大型矿池:
好处:给单个矿工减轻了负担,收入更加稳定。
坏处:51%攻击更加容易。(即使没有51%的算力,但是能召集51%的算力就行。on demand mining)