跳转至

07挖矿难度

约 1067 个字 预计阅读时间 4 分钟

Q: BTC系统中如何调整挖矿的难度

  • 不断找nonce,使得\(H(\mbox{block header}) \leq \mbox{target}\)
  • BTC期望出块时间稳定在10min

比特币每2016个区块,会做一次难度调整,约14天

  • 新target = 当前target * 实际2016个区块出块时间 / 理论2016个区块出块时间(2周)

挖矿

全节点:

  • 一直在线 & 在本地硬盘上维护完整区块链信息
  • 在内存中维护UTXO集合,以便于快速检验交易合法性
  • 监听比特币网络中交易内容,验证每个交易合法性
  • 决定哪些交易会打包到区块中
  • 监听其他矿工挖出的区块,验证其合法性
  • 挖矿:
    • 决定沿着哪条链挖下去 → 最长合法链
    • 当出现等长分叉,选择哪一个分叉 → 最先被监听到的

轻节点

  • 不是一直在线; 不用保存整个区块链,只保存每个区块的块头
  • 不用保存全部交易,只保存与自己相关的交易
  • 无法检验大多数交易的合法性,只能检验与自己相关的那些交易的合法性
  • 无法检测网上发布的区块的正确性
  • 可以验证挖矿的难度
  • 只能检测哪个是最长链,不知道哪个是最长合法链

比特币系统如何安全性?

  1. 密码学的保证:别人没有自己的私钥,则无法伪造其合法签名,故无法将其账户上BTC转走(前提:系统中大多数算力掌握在好人手中)
  2. 共识机制:保证了恶意交易不被系统承认

挖矿设备

普通CPU → GPU → ASIC芯片Application-Specific Integrated Circuit(挖矿专用矿机)

  • ASIC芯片并不是普通人可以参与的,大大提升了挖矿的门槛(普通人别想了...)

矿池

对于单个矿工来说,即使用了ASIC,其算力在整个系统中仍只占据很少一部分,收入很不稳定。还要承担全节点其他责任,造成了算力的消耗

  • 矿池的出现(把矿工组织起来,作为一个整体)
    • 矿工只需要不停计算哈希值,而全节点其他职责由矿主(pool manager)来承担

矿池一般具有两种组织形式:

  1. 类似大型数据中心(同一机构),集中成千上万矿机进行哈希计算
  2. 分布式: 矿工与矿主不认识(不同机构),矿工与矿主联系,自愿加入其矿池,矿主分配任务,矿工进行计算,获得收益后整个矿池中所有矿工进行利益分配

若矿工来自非同一机构(五湖四海),收益如何分配?

  • Idea1:平均分配,所有人平分出块奖励(按照工作量大小,如何衡量工作量?)
  • Idea2:降低挖矿难度(可行方案)
    • 假设挖矿难度需126位的hash前70位=0,现在只需前60位=0,这样会更容易挖到
    • 但这个哈希是不会被区块链所承认的,将其称为一个share(almost valid share)
    • 矿工每挖到一个share,将其提交给矿主,矿主对其进行记录,作为矿工工作量的证明
    • 等到某个矿工真正挖到符合要求的的区块后,根据所有矿工提交的share数量进行分配

为何可行?: 因每个矿工尝试的nonce越多,挖到矿的可能性越大,所能得到的share也会越多,故可作为工作量的衡量

若51%算力矿池可以发动哪些攻击?

  1. forking attack(分叉攻击)
  2. Boycott封锁交易: 假如攻击者不喜欢账户A,不想让A的交易上区块链,在监听到有其他人将A的交易发布到区块链上时,立刻发动分叉攻击,使A所在链无法成为"最长合法链"。便实现了对A账户的封锁

矿池出现的优劣:

  • 优点:解决了矿工收入不稳定的问题,减轻了矿工的负担
  • 缺点:威胁到了区块链系统的安全,使得51%攻击变得容易

颜色主题调整

快来和我聊天~

可以的话请给我赞和 star喔~    =>  GitHub stars

评论