挖矿那些事儿

CKB篇

其他POW链在挖矿方面都跟BTC高度相似,CKB也不例外,所以本篇只讲CKB与BTC有差异的点。


Block header结构上,单论挖矿相关的字段,CKB与BTC最大的区别是Nonce大小为128bit。


挖矿历史和演进方面,CKB同样经历了CPU → GPU → FPGA → ASIC 等演进阶段,目前都是ASIC矿机。


CKB在发展到ASIC矿机阶段之后,同BTC一样,矿机固件直接内置挖矿协议,只能连接矿池。
Solo mining方面,目前CKB没有现成的解决方案。之前有一个grants项目( Insight - Automated Stratum V2 mining pool for Nervos ),但是已经很久没更新了。


结算模式方面,CKB的矿池基本上都是PPLNS,即矿工需要承担较大的收益波动风险。因为CKB难度调整比较频繁,相比之下收益波动更大。比特币网络每产生2016 个区块(大约两周)调整一下难度,但是CKB 大约每隔4 小时调整一次挖矿难度。


矿池协议方面

CKB节点提供了GBT(Getblocktemplate)的RPC接口,返回完整的candidate block(候选区块),并且允许挖矿软件任意调整区块的内容,给的自由度很大。

矿池协议方面跟BTC一样,现在都是Stratum (V1)协议,但是CKB相比之下要简单很多。因为CKB的Nonce大小为128bit,单单改变Nonce,搜寻空间就足够大,不存在BTC在Getwork时期的问题,也就不需要矿工去调整区块头的其他字段。

比如BTC中extranonce是coinbase交易中的字段,但是在CKB中直接就是Nonce的前缀,更加简单明了。

因此,CKB的矿池协议实际上只是Stratum (V1)的子集,很多方法和字段都不用。是套着Stratum (V1)壳子,但实际运行跟Getwork差不多。


矿机和矿池交互的实际例子

矿机发起auth
{"id":0,"method":"mining.authorize","params":["ckb1qyqznmjpc30dw337h20l9ukkmlrfkhycgtes0p7lll.bob","X"]}
矿池返回
{"id":0,"result":true,"error":null}

矿机subscribe
{"id":0,"method":"mining.subscribe","params":["ckbminer-v1.0.0",null]}
矿池返回
{"id":0,"result":[null,"665da3e8",12],"error":null}

矿池向矿机下发难度设置
{"id":null,"method":"mining.set_target","params":["000010c6f7000000000000000000000000000000000000000000000000000000"]}

矿池向矿机下发job
{"id":null,"method":"mining.notify","params":["a8be81b7","65634bac6f4d59fdc355008824b45e8e0ecdc0879e00dfbbc4989099a5beb674",2156,"d2f7dc7dcffdcc03a129783d12332b0b02d0453604290f41869ff41bf9c95cef",true]}

矿机向矿池提交share
{"id":0,"method":"mining.submit","params":["ckb1qyqznmjpc30dw337h20l9ukkmlrfkhycgtes0p7lll.bob","a8be81b7","000000000000000000967385"]}
矿池给矿机回复,确认share有效
{"id":0,"result":true,"error":null}

Stratum (V2)相关

其他POW链的挖矿和矿池软件都是BTC修改而来的,所以BTC没有迁移到Stratum V2之前,其他的链几乎不可能迁移。

不过CKB有一个跟stratum v2中templateProvider概念类似的机制,节点可以通过notify主动通知矿池有新的候选块。虽然没有templateProvider那么细化,但是相比于pull的方式已经方便很多


预告一下fi5pool项目

我们团队( https://www.fi5box.com/ )专注于发展Nervos生态,涵盖挖矿,Depin硬件、实物销售等多个领域。

挖矿业务原来都是连接大的矿池的,后来想solo mining,搜寻一圈后发现没有现成的解决方案。抱着自用加为社区做贡献的想法,开启了fi5pool项目。

一开始我们只找到开源的btcpool项目,该项目已经废弃很多年了。但是之前的grants项目为其增加了对CKB的支持,只不过支持的是非常老的CKB版本。

我们先尝试了对其进行修复,经过一些修改之后,勉强能跑起来,但是有非常多的报错,稳定性也比较差,如果要完全修复并长期维护还需要非常大的工作量。

然后我们开始静下心来梳理自己的目标。我们并不想做一个完善的商业矿池,需要的工作量很大,而且竞争非常激烈;也不想做一个多币矿池(btcpool支持很多种币),能填补CKB社区在这方面的空白就好。

最终,fi5pool的目标定为简单的ckb solo minning矿池:

  • 仅支持CKB。
  • 仅支持solo mining,没有分账和前端页面。
  • 深入CKB的特性,拓展自定义挖矿策略和MEV(miner extractable value)的获取能力。

这个目标可以减少项目复杂度,并避免与现有的商业化矿池竞争,使项目更加聚焦和易于长期维持。

  • 代码非常精简,易于维护。
  • 单个可行性文件,且没有持久化状态。
  • 占用资源非常少,可以部署在mini主机上。

CKB社区有了简单的solo mining解决方案后,有如下好处:

  • 矿工可以获得全部挖矿奖励:没有第三方抽成。
  • 自主性更强:矿工可以完全控制自己的挖矿策略。
  • 隐私保护:无需公开个人信息,确保高度的隐私安全。
  • 去中心化:有助于提升整个区块链网络的安全性和分散度。

目前fi5pool项目开发已经接近尾声,正在进行测试,后续会开源出来,敬请大家关注我们的github fi5box · GitHub

目前已经开源出一个挖矿统计工具 GitHub - fi5box/ckb-miner-stat: statistics info about ckb miners
可以统计全网的出块,算力,以及各个矿工的信息,比如

$ ckb-miner-stat history -d 20250104
show history info for date: 2025-01-04
shape: (8, 6)
┌───────────────────────────────────────────────────────────────────────────────────────────────────┬───────┬───────────────┬─────────────┬───────────┬────────────────┐
│ Miner                                                                                             ┆ Count ┆ User_Reward   ┆ Total_Count ┆ Percent   ┆ User_Hash_Rate │
│ ---                                                                                               ┆ ---   ┆ ---           ┆ ---         ┆ ---       ┆ ---            │
│ str                                                                                               ┆ u32   ┆ f64           ┆ u32         ┆ f64       ┆ f64            │
╞═══════════════════════════════════════════════════════════════════════════════════════════════════╪═══════╪═══════════════╪═════════════╪═══════════╪════════════════╡
│ ckb1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsqv8cuf7vzh62m9gwyv59lzha9nx6ar5d9qqkp5em ┆ 41    ┆ 25961.235496  ┆ 9600        ┆ 0.427083  ┆ 1.9077e12      │
│ ckb1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsqt3vn6g67jm7g5czehcmqdcr6jwjz8pdtg59p03h ┆ 125   ┆ 78593.945498  ┆ 9600        ┆ 1.302083  ┆ 5.8163e12      │
│ ckb1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsqvzz8cmjw9pqlx48d3s9nr49fhu89jk8rgycece5 ┆ 149   ┆ 93822.130516  ┆ 9600        ┆ 1.552083  ┆ 6.9330e12      │
│ ckb1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsq0dn8gg6ag6uvkl0lr0xpyt0n99dsal47sm7mzyj ┆ 801   ┆ 505831.745397 ┆ 9600        ┆ 8.34375   ┆ 3.7271e13      │
│ ckb1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsq22xdj8q4jdql98qkdhnqzgrsk4nqyavdcratvu9 ┆ 813   ┆ 514374.496015 ┆ 9600        ┆ 8.46875   ┆ 3.7829e13      │
│ ckb1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsq0259kv0x5jez6h0l5qr52k64weapapgyscsnmhn ┆ 1249  ┆ 790547.790185 ┆ 9600        ┆ 13.010417 ┆ 5.8116e13      │
│ ckb1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsqvgqh40v2g5ps3rann79tvw9gq6ewrft7gp909qk ┆ 2390  ┆ 1.5094e6      ┆ 9600        ┆ 24.895833 ┆ 1.1121e14      │
│ ckb1qzda0cr08m85hc8jlnfp3zer7xulejywt49kt2rr0vthywaa50xwsq0tpsqq08mkay9ewrfrdwlcghv62qw704s93hhsj ┆ 4032  ┆ 2.5470e6      ┆ 9600        ┆ 42.0      ┆ 1.8761e14      │
└───────────────────────────────────────────────────────────────────────────────────────────────────┴───────┴───────────────┴─────────────┴───────────┴────────────────┘

这个工具可以和fi5pool配套使用,因为fi5pool没有前端页面,矿工可以通过这个统计工具查看自己的出块,收益,占比和有效算力。

7 Likes