# 比特币 Atomicals ARC20无限难度/无限代币 详解

By [Hero Yang](https://paragraph.com/@hero-yang) · 2024-01-28

---

本文讨论mint arc20代币新增的 无限难度/无限代币的部署/挖矿技术分析

阅读本文必备知识：

*   对比特币投资和ARC20代币的初步了解，懂得1聪1币和每一个arc20代币都有1聪的最低价值
    
*   了解或希望使用Atomicals-js CLI 来挖矿和部署代币
    

请参考 Daniel大佬的这篇文章学习前备知识：

[https://mirror.xyz/0x6EaD271a45ACc328Af22b369870509471a46f59D/0\_UpzGUJJ4VZghruO\_itmFZBAvw94z9xHu\_Sto6iFdI](https://mirror.xyz/0x6EaD271a45ACc328Af22b369870509471a46f59D/0_UpzGUJJ4VZghruO_itmFZBAvw94z9xHu_Sto6iFdI)

* * *

正文开始
====

首先 Atomicals的官方账号发布了最新的版本，这个版本内支持了最新的无限难度，英文名字为perpetual，永续合约就是这个词，含义为可以永远存在，没有停止的。但是在arc20这里叫无限难度/无限代币更合适，总量无限，但是每挖出来一定数量，难度提升，产出减少，最终总会到大家谁都挖不出来为止，创造人为的稀缺和无限的参与度。就像比特币一样，每4年难度增加，产出减半，永远挖不完：

[https://twitter.com/atomicalsxyz/status/1750856685218938928](https://twitter.com/atomicalsxyz/status/1750856685218938928)

更新内容和注意事项
---------

1.  之前的固定难度代币保留，新增了无限代币 （perpetual ），不再拥有总量限制
    
2.  CLI和索引必须要升级
    
3.  发布代币 （init-dft），多了几个可设置的变量
    
4.  对于挖矿来说 （mint-dft），基本不变
    

> 按照常人的阅读顺序和理解顺序，我会先讲固定难度和无限难度的区分。对于挖币的影响在文章结尾，对于技术需求不大的读者，可以直接跳过到末尾看结论

固定难度
----

固定难度就不过多赘述，和之前一样，需要满足一定的bitwork才可以挖到，有总量的限制，挖完就没了，推特里面有大量的教程。不过CLI 中改为了如下指令

    init-dft-fixed
    

无限难度
----

CLI内新增了如下指令来发布这样子的无限难度的 无限代币，不再拥有总量限制，max\_mint改为每一个难度周期可挖的数量，新增了以下几种重要选项，下面我们逐个分析：

    init-dft-perpetual
    ...............
      '--max_mints <number>', 'The number of mints allowed per mint phase of max_mints'
      '--mintbitworkvec <string>', 'The base bitwork prefix vector to use'
      '--mintbitworkcinc <number>', 'The amount of bitworkc to increase for each phase of max_mints'
      '--mintbitworkrinc <number>', 'The amount of bitworkr to increase for each phase of max_mints'
      '--mintbitworkcincstart <number>', 'The starting amount of bitworkc to increase for each phase of max_mints'
      '--mintbitworkrincstart <number>', 'The starting amount of bitworkr to increase for each phase of max_mints''
    ...............
    

### 逐个拆解：

    max_mints： The number of mints allowed per mint phase of max_mints
    

**max\_mint： 每个难度周期最多能挖的数量，最大100000**

新的无限难度机制，取消了代币的总量上限，而改为了每个难度周期的上限，到达上限之后，难度增加，新的一轮代币开挖。部署者需要设定每一轮的总量，代笔对应的聪量，全体社群参与挖矿。当然，在这之中，“科学家”依旧会加速这场比赛，前期大家都挖得很快，但是后期就会逐渐变慢，最终会自然的达到谁都挖不出来或者产出极其有限的平衡

作用：定义每个难度周期挖多少，挖满了进入下一个难度周期，难度增加

**mintbitworkvec: 预设的bitwork的前缀，至少是4位的 hex，比如0000，123456或者ffffffff**

作用：可自定义的bitwork前缀，如果当前难度周期没有这个初始长度长，使用当前难度周期的最大长度，如果当前难度比这个长度大，后面会加0

**mint\_bitwork{c,r}\_inc: 难度增长，每一个难度周期，增加的bitwork难度倍数，可用数值： 1-64**

作用：每经历一个周期，难度成倍增长，如果设置为16，每个难度周期正好多一个hex前缀

**mint\_bitwork{c,r}\_inc\_start: 初始难度倍率，难度从多少倍开始增加，可用数值64-256 （CLI前端限制了192）**

作用：定义了最小难度倍数。如果难度从96倍增加（6\*16=96），那么最少要满足的bitwork就是6位，之后每个难度周期增加固定倍率

计算难度的代码是这一段，能看懂的各位可以去研究，或者直接看我的总结：

[https://github.com/atomicals/atomicals-electrumx/blob/b6d1136405b3ae03c167fa1a546beb8e134cc399/electrumx/lib/util\_atomicals.py#L1643C1-L1666C26](https://github.com/atomicals/atomicals-electrumx/blob/b6d1136405b3ae03c167fa1a546beb8e134cc399/electrumx/lib/util_atomicals.py#L1643C1-L1666C26)

### 怎么理解？

**难度**：此处所有的难度都是相对没有bitwork而言的，难度定为1倍。通常来讲arc20 里的 bitwork至少4位hex，也就是最低是4\*16=64的难度。

**难度递增**：由 **mintbitworkcinc 难度倍率** 定义，设定为16时，每个难度周期增加16倍难度，那么每次难度增加，都会正好多一位hex前缀：假设最开始是64倍（4位）难度，下一个周期就会变为5位hex前缀，再下一个周期就是6位hex前缀，以此类推直到无限（理论无限，现实不可能，10位都很难挖）。难度不需要是16的倍数，可以是5倍，10倍，官方索引考虑到了这种情况。

**前缀计算**：通过最开始定义的 **mintbitworkvec 预设前缀** ，假设设定为12345678，那么最小难度是64倍（4位）的时候，只需要满足前缀1234即可。每增加16倍（1倍）难度，多满足一位。80倍的时候需要满足12345，96倍需要满足123456, 直到用完预设的前缀，之后后面会逐渐添0。

**初始难度**：由 **mintbitworkcincstart 初始难度**定义，定义了最低难度倍率。以前面的12345678为例：

*   如果**初始难度**设定为64，那么第一个周期就是1234，第二个周期12345
    
*   如果**初始难度**设定为80，那么第一个周期大家挖12345，第二个周期123456
    

这里引入了几个新东西，看不懂了是不是？来一个例子你们就明白了

### 例子

测试网里有一个代币叫 perp，主网也有一个相同的代币，很可能是官方布的。它的参数是：

    '$max_mints': 3, # 每挖3张，进入下一个难度周期
    '$mint_bitwork_vec': '123456',  # 预设前缀123456
    '$mint_bitworkc_inc': 16,  # 每次难度周期，挖矿难度翻16倍，也就是正好多一位hex
    '$mint_bitworkc_start': 80,  # 从80倍难度开始，正好是5位 （5*16=80）
    '$mint_bitworkr_inc': 16, 
    '$mint_bitworkr_start': 80,
    

通过分析参数，我们能知道:

*   第一个难度周期，难度为80倍，也就是5位hex，需要满足前缀12345
    
*   第二个难度周期，多16倍，80+16 = 96 也就是6位hex，满足前缀123456
    
*   第三个周期，96+16 = 112，7位hex，要满足1234560 （前缀满足后会加0）
    
*   一直到无限
    

### 总结

所以如果你想要发一个币，前缀是ffffffffffffffffff，每10000张之后，难度翻10倍，初始难度为4个f，你就可以如下配置：

    # 前缀ffffffffffffffffff
    mintbitworkvec=ffffffffffffffffff 
    
    # 每个周期10000
    max_mints=10000 
    
    # 每次翻10倍
    mintbitworkcinc=10
    
    # 最开始的难度是4个f （4*16=64）
    mintbitworkcincstart=64
    

最多人关心的 -- 挖矿
------------

挖矿没有任何改变，还是使用最早的同样的方法和代码。值得注意的是，会多了一个新的--current 参数来指定是否选择挖当前难度：

    '--current', 'Whether to mine with the current actual bitwork. By default the next one is used for more reliability'
    

对固定难度的没有任何影响，但是对无限难度来说：

如果设置了这个 current，只会挖当前难度，假设当前是6难度，只会挖6难度，这个很好理解。而默认是下一难度，因为如果你挖了当前难度6，但是6被挖光了，你挖的这一次就被埋了，如果挖的是下一难度，虽然会难一些，不过保证不会被埋 （这个确实比较反人类，但是暂时想不到更好的解决方案）

因此大家在挖矿的时候，最优解是：

为了保证效率只挖当前难度，同时关注当前难度下还有多少代币可挖，一旦接近下一难度就自行调整。

最后
==

大家有任何问题可以推特关注 @hero\_yang\_v ， 会随时给大家带来一手消息和分析

[https://twitter.com/hero\_yang\_v](https://twitter.com/hero_yang_v)

* * *

> 花了一下午的时间钻研代码，研究不易，各位大佬们赚到钱了可以给小的投喂：
> 
> btc地址：bc1pjwzukjjnzrmspn3pued884668v6dzjkwtf5ga95g3p5nsj3hyngs0adn58
> 
> eth地址：0xd6d037c6f2846ff9b8ef4248a13f8fd89cc111ef
> 
> 感谢各位🙏

---

*Originally published on [Hero Yang](https://paragraph.com/@hero-yang/atomicals-arc20)*
