DMint 发行指南
Last updated
Last updated
mint | 铸造。通常意味着在链上创建出内容。 |
---|---|
此教程旨在让项目方快速了解如何在 Atomicals 协议上链 DMint NFT 合集。在 Atomicals 协议上,NFT 合集称为 container,与 NFT collection 大致同等意思。
流程大致分为四大块:
准备合集的所有数据
配置 container
校验 NFT item
铸造 NFT item
其中作为项目方需要关注 1、2、3 步。
💰 步骤前有 ⛓️ 图标代表该操作上链,需要消耗gas。
准备所有 NFT 的数据 (A1, A2......AN)
准备合集的 dmint 数据 B
准备合集的其他元数据 C
用命令行工具本地创建一个新钱包用于隔离所有的 container 操作,避免混乱。
⛓️ Mint container
⛓️ 使用合集的数据 B 配置 dmint
⛓️ 配置其他元数据 C
⛓️ 所有信息确认后封闭**(最后一步!最后一步!)**
已有 item 数据、Container 已上链且配置 dmint,单独使用 NFT 的数据 A 校验 item 是否与 Container 匹配
Container 已封闭,可获取单个 item 的mint 情况和已 mint 的列表
⛓️ 下载 NFT 数据 A 并使用官方命令行工具进行本地 mint
📌 为了方便你区分不同的文件,我们通过大写英文标识把它们标识了出来。请在每一步操作时留意对应文件。错误的文件可能导致非预期的链上数据。
可以从上述大致步骤中看出,项目方不需要将 NFT 逐个上传到链上,而只需要用户在 Mint 时自行校验并承担其 gas 成本。
以下操作均基于 atomicals-js 命令行工具 0.1.46 版本 (@aa34095c)。官方会不定时更新版本,因此操作前请先检查本地 CLI 是否为最新版本或者可用版本。安装和配置请参考:https://github.com/atomicals/atomicals-js#install,过程对于某个命令有疑问请在输入时加上 -h
获取帮助内容。
💡 为了避免操作过程出现失误和预期外的错位,推荐先通过测试网测试全部流程后再进行正式网的任何操作。
❗ 每一步需要往指定地址转账时,请确保只转同样数量的 sats,因为工具不支持找零,会将整个 UTXO 使用掉。
❗ 每一步包含 #container-name
的内容即为 container 名字,必须以 #
开头,否则某些命令会识别出其他类型的 Atomicals。
💰 每一步带有 --satsbyte
的命令的值请自行根据链上 gas 情况填写。
准备好一个文件夹,里面放置所有的 NFT 原始文件(图片)。建议提前更改好文件名(例如“序号.png”:“1234.png”),减少之后修改数据的可能性和复杂度。文件名只支持数字和英文以及半角横杠(-
且不能以 -
开头),最多64位。
运行命令生成所有 NFT 的加工数据,完成后会生成新的文件夹。
生成的文件夹为 "output-folder" 加 -时间戳,内有每一个 NFT 对应的 item-*.json。注意此时生成的数据只有 mainHash
和 data
字段。如果有需要,你可以在 args
中指定 bitworkc
/bitworkr
,修改后在用户 mint 时会要求使用你声明的 bitwork。
运行以下命令生成 dmint 数据,path/to/folder
为第2步生成的文件夹路径,mintHeight
为起始铸造的区块高度(参考值 0
即发布后即可 mint)。完成后文件夹内会新增一个 "dmint-时间戳.json",同时所有的 NFT 加工数据都会更新。
❗ 每一次运行 prepare-dmint
都会生成新的 dmint-时间戳.json 文件,而不是修改旧的。请注意不要使用错误的数据进行后续操作。
你可以修改 dmint 的 bitwork 规则,在 rules
中的 p
代表 Pattern,即可以用正则来指定不同的 bitworkc
。请参考可搜索到的正则表达式资料编写规则。在下方的例子中,举例:
此处 1$
的规则代表以 1
结尾(比如 test1
)的 item 的 bitworkc
需要是 890a
,而其他 item(比如 test
)则是 7baf
。规则按照最小子集(最特殊的规则)到全集(最通用的规则)的顺序排序。
❗ 如果你为 item 单独设置了 bitworkc
/bitworkr
,你需要手动在 rules
中声明对应的模式和规则,否则它们与基础规则之间是互相矛盾的,正式封闭发布后将无法 mint。工具对此也没有任何提示,修改时请务必小心操作。
如果你修改了 item 数据,确保每次修改后都重新执行了第4步的命令重新生成。
从工具目录下的 template/containers/dmint-collection-general-dmint-metadata.json
或者 https://github.com/atomicals/atomicals-js/blob/master/templates/containers/dmint-collection-general-metadata.json 拷贝出一份元数据 dmint-metadata.json
,根据自己的内容进行调整。
❗ 该部分可以参考 官方文档 编写,但是请不要声明 attrs
和 items
,对于 dmint 而言它们是错误内容,会导致无法封闭 container。
⛓️ mint 指定的 container。如果要指定不同的接收地址,请将 "yourWalletAddress" 替换为对应的钱包地址。
⛓️ 通过之前生成的 dmint-时间戳.json 启用 container 的 dmint 状态。"dmint-json-path.json" 需要替换数据 B【准备合集数据-第2步生成的】文件路径。
❗ 需要等【配置 Container-第1步】完成后的 4 个区块确认(变成 verified 状态)才能操作。你可以在此查询 container 状态:https://wizz.cash/explorer,输入 revealTxid 即可。
⛓️ 将准备用于 container 封面的资源文件上链,先把文件名改为“logo.png”(图片推荐使用 png、jpg 或 svg 格式),然后执行下述命令即可。
完成后我们使用文件名和输出的 dataId
,拼接为:atom:btc:dat:{dataId}/logo.png
,并作为 image
字段填入元数据 C【准备合集数据-第7步生成的】文件里。
⛓️ 修改好元数据 C 后,将其设置到 container。
执行封闭 container 的命令。
❗ 此操作不可逆! 在封闭前,请先完成【校验 NFT item】中的验证 item 的操作。确保所有的 item 都已经被校验过且都正确。
由于 Merkle 验证的特殊性,我们不需要将每一个 NFT 都提前上链,只需要验证它们是否与 container 匹配即可。在 container 的不同状态或者生命周期里,你可以使用不同的方法来验证 NFT item 的有效性。
要验证某一个 item 是否有效,你需要 container 的名字、item 的名字及【准备合集数据-第2步生成的】json 文件:(path/to/item-3.json
替换为 item 的文件路径)
其结果会返回以下内容,proof_valid
为 true
则代表验证通过,applicable_rule
返回了完整的规则则代表规则配置正确:
❗ 建议每一个 item 都进行验证,确保全部数据的有效性。
Container 发布后,用户可以在能获取到 item 的 json 文件的情况下,使用命令行工具对对应的 NFT 进行 mint。
在 container 已经封闭,即可以开始让用户 mint。在已经有 item 被 mint 的情况下:
get-container-item
get-container-items
查询已 mint 的 item(limit
条目数量,参考值 10
;offset
从哪一条开始查询,参考值 0
)。
dmint
Decentralized mint,去中心化的铸造操作。
container
容器、合集。
bitwork
铸造难度。规则请参考 https://docs.atomicals.xyz/bitwork-mining 。
时间戳
连续的10或13位的数字用来代表时间。