本节介绍如何创建一种特殊类型的原子数字对象,称为容器(Collection)。它专为 NFT 集合等而设计。基本上任何时候我们想要将项目分组在一起时,我们都会使用容器。
快速概览:什么是容器?
容器是人类可读的标识符,用于表示 NFT 和元数据的集合。容器名称以主题标签 #
符号开头。容器名称是使用 Atomicals 数字对象格式直接在比特币区块链上自行拥有和自行管理的 - 添加和更新容器集合中的项目,并可选择永久密封容器以防止将来发生更改
合集格式(推荐)
出于效率原因,属性与项目属性关联分开定义。数值用于将每个项目的属性链接或连接到属性定义。 请参阅 github 中的示例集合格式。
name(可选,string 类型)
name 字段定义集合的显示名称。集合容器本身用#标签slug
(例如:#mycollection-name
)进行标识,名称是网站可以用来显示更具描述性的名称。
desc (可选,string 类型)
desc 字段定义集合的详细描述。
legal (推荐,object 类型)
legal 定义了规则条款和许可,以明确 NFT 的用户和持有者如何使用数据
terms (推荐): 集合使用或项目使用的任何特定条款
license (推荐): 任何类型的许可证代码
"legal": {
"terms": "...",
"license": "CC",
}
link (可选,object 类型)
链接部分定义了其他的外部资源,例如网站和社交媒体链接。
{
"links": {
"x": {
"v": "https://x./com/..."
},
"website": {
"v": "https://..."
},
"art-assets.zip": {
"v": "atom:btc:dat:<dat_id>/assets.zip"
},
"realm": {
"v": "atom:btc:realm:myrealmname.subrealm"
},
"othercontainer": {
"v": "atom:btc:container:relatedcollection-of-cool-things"
},
"discord": {
"v": "https://discord.gg/..."
}
}
}
attrs (可选,object 类型)
attrs 部分定义属性的类型及其详细信息,例如名称、描述和可能的值范围。
items(必须,object 类型)
item 使用项目密钥将所有 NFT 连接到容器,建立使用项目键的字符串,即使使用编号方案也是如此
id (required): 代表项目的“id”,对应于 NFT 的 Atomical ID
a (required): 代表项目的“属性”。要求采用数组的形式,数组中的每个元素代表属性定义部分 attr 中的关联值
n (optional): 代表项目的名称
{
"name": "Collection Name",
"desc": "Collection description",
"image": "atom:btc:dat:<location of store-file data>/image.png",
"legal": {
"terms": "...",
"license": "CC"
},
"links": {
"x": {
"v": "https://x./com/..."
},
"website": {
"v": "https://..."
},
"art-assets.zip": {
"v": "atom:btc:dat:<dat_id>/assets.zip"
},
"realm": {
"v": "atom:btc:realm:myrealmname.subrealm"
},
"othercontainer": {
"v": "atom:btc:container:relatedcollection-of-cool-things"
},
"discord": {
"v": "https://discord.gg/..."
}
},
"attrs": [
{
"name": "bodyarmor",
"desc": "Type of body armor",
"type": "string",
"values": [
"metal",
"leather",
"field"
]
},
{
"name": "headcovering",
"desc": "The type of head covering",
"type": "string",
"values": [
"bandana",
"helmet",
"scarf",
"baseball cap"
]
},
{
"name": "stamina",
"desc": "The stamina of the hero",
"type": "integer",
"min": 0,
"max": 10
}
],
"items": {
"0": {
"id": "84718b469c40b1bcc7cb324b8e24e4e442f88cd913687ea2bc7b3e79d4fc4fdei0",
"n": "Some Name",
"a": [
0,
3,
8
]
},
"1": {
"id": "1070d7c98304bf5ac9a5addceb13e0ce4e840641f82d71d84cebbdac427c1f4fi0",
"n": "Another Name",
"a": [
1,
2,
10
]
},
"Signature Series 1": {
"id": "14a0d7c98304bf5ac9a5addceb1de0ce4e840641f82d71d84cebbdac427c1fc3i0",
"n": "Special",
"a": [
2,
3,
7
]
}
}
}
按照上述格式格式化集合信息后,执行以下指令
// first store the desired main image on chain (see section below)
npm run cli store-file ./path/to/image.png image.png --satsbyte=10
Success sent tx: db8a761ed493627138c5733071558c4caa65912c5cba3e1061c02d6d7933461f
{
"success": true,
"data": {
"commitTxid": "b57bad8c0b7f58a552574fafc16b6efbbb3bf966b9ccfb24f03580f9462b5997",
"revealTxid": "db8a761ed493627138c5733071558c4caa65912c5cba3e1061c02d6d7933461f",
"dataId": "db8a761ed493627138c5733071558c4caa65912c5cba3e1061c02d6d7933461fi0"
}
}
// We will use the dataId above to reference the data on chain
// ie: atom:btc:dat:db8a761ed493627138c5733071558c4caa65912c5cba3e1061c02d6d7933461fi0/image.png
// Store the collection metadata with the following command:
npm run cli set-container-data #mycollection-name collection.json --satsbyte=10
推荐的最低限度集合格式
{
"name": "Collection Name",
"image": "atom:btc:dat:<location of store-file data>/image.png",
"items": {
"0": {
"id": "84718b469c40b1bcc7cb324b8e24e4e442f88cd913687ea2bc7b3e79d4fc4fdei0"
},
"1": {
"id": "1070d7c98304bf5ac9a5addceb13e0ce4e840641f82d71d84cebbdac427c1f4fi0"
},
"9999": {
"id": "14a0d7c98304bf5ac9a5addceb1de0ce4e840641f82d71d84cebbdac427c1fc3i0"
}
}
}
按照上述格式格式化集合信息后,执行以下指令
// first store the desired main image on chain (see section below)
npm run cli store-file ./path/to/image.png image.png --satsbyte=10
Success sent tx: db8a761ed493627138c5733071558c4caa65912c5cba3e1061c02d6d7933461f
{
"success": true,
"data": {
"commitTxid": "b57bad8c0b7f58a552574fafc16b6efbbb3bf966b9ccfb24f03580f9462b5997",
"revealTxid": "db8a761ed493627138c5733071558c4caa65912c5cba3e1061c02d6d7933461f",
"dataId": "db8a761ed493627138c5733071558c4caa65912c5cba3e1061c02d6d7933461fi0"
}
}
// We will use the dataId above to reference the data on chain
// ie: atom:btc:dat:db8a761ed493627138c5733071558c4caa65912c5cba3e1061c02d6d7933461fi0/image.png
// Store the collection metadata with the following command:
npm run cli set-container-data #mycollection-name collection.json --satsbyte=10
在链上存储不可变的图像文件
使用命令行程序,执行以下命令来设置上面示例文件中的数据
// immutably store an image on-chain to reference in the container metadata
npm run cli store-file ./path/to/image.png image.png --satsbyte=10
Success sent tx: db8a761ed493627138c5733071558c4caa65912c5cba3e1061c02d6d7933461f
{
"success": true,
"data": {
"commitTxid": "b57bad8c0b7f58a552574fafc16b6efbbb3bf966b9ccfb24f03580f9462b5997",
"revealTxid": "db8a761ed493627138c5733071558c4caa65912c5cba3e1061c02d6d7933461f",
"dataId": "db8a761ed493627138c5733071558c4caa65912c5cba3e1061c02d6d7933461fi0"
}
}
我们将使用揭示位置 db8a761ed493627138c5733071558c4caa65912c5cba3e1061c02d6d7933461fi0
来引用下面的图片 image.png
将 NFT 添加到合集容器中
提供与上述合集格式匹配的文件,并执行以下命令来更新示例 #mycollection-name
npm run cli set-container-data #mycollection-name sample-collection.json --satsbyte=10
查询合集容器元数据和项目
在交易被确认后,可以使用以下的命令查询 #mycollection-name
的状态
npm run cli state #mycollection-name
Last updated