递归和引用
通过递归和引用来构建 Atomicals 数字对象的层次结构和包含内容
为了简化不同 Atomicals 资源的包含和引用,定义了以下统一资源名称(URN)。
注意:在涉及到 Atomicals 中的引用时,建议使用数据的顶级字段 ctx
来引入或包含其他 Atomicals 和数据文件的引用。ctx
字段专门为此目的保留。
以下是在 ctx
字段中使用引用的递归示例:
{
// Any Atomical data above...
"ctx": {
// Implied to always get the latest data for an atomical:
"resourcename": "atom:btc:id:<atomical_id>/mydata",
// Gets permanent data file image.png at the dat_id
"icon": "atom:btc:dat:<dat_id>/image.png",
// Gets the minted "name" property for a collection
"collection-name": "atom:btc:container:<dat_id>$name",
// Gets the latest version of import.js located at a realm name
"assetbuilder.js": "atom:btc:realm:<realm_name>/import.js",
},
// Another other Atomical data ...
}
注意:在适用的场合,最好使用 "dat"
命令来引用链上资源。当使用容器、领域或动态引用(使用斜杠 "/"
)时,它可能指的是资源。
惯例
规范是使用前缀 "atom:btc"
来标识比特币(BTC)网络上的 Atomicals 协议资源。可以通过 atomical_id
、容器名称或(子)领域名称,以及通过 data_id
引用不可变文件数据来定位数字对象。
Atomicals 统一资源名称(URN)的基础格式是:
atom:<chain>:<ref_type>:<identifier>[$ or / [<file>]]
其中:
chain
:引用的区块链,对于比特币设置为 "BTC"
ref_type
:引用的类型。当前支持 "id"、"container"、"realm" 和 "dat"(分别对应 atomical id,容器,领域和数据)
identifier
:对应于引用类型的标识符。如 atomical_id、容器名称、领域名称,或在 "dat" 情况下不可变数据的揭示位置(reveal location)
$ or /
:是指引用 Atomical 的铸造(原始)数据(使用美元符号 $)还是动态(最新)数据(使用斜杠 /)。你会注意到对于 dat 引用类型,$ 或 / 都是可接受的,并且无论如何都会返回相同的数据。
file
:文件名称是可选的,如果省略,则返回有关资源的一般信息
我们的理念是,我们应该能够根据 Atomicals 数字对象的类型明确引用它们。在基本层面,每种类型(例如容器和领域)也可以通过 atomical_id 来引用。此外,我们应该始终能够获取原始的铸造数据,并获取存储文件的最新版本,包括该文件的每个修订版本(按 txid、版本号或块高度)。
通过 Atomical ID 引用
获取一般信息
atom:btc:id:<atomical_id>
例如:
atom:btc:id:14a0d7c98304bf5ac9a5addceb1de0ce4e840641f82d71d84cebbdac427c1fc3i0
获取原始铸造的 JSON 数据
atom:btc:id:<atomical_id>$
获取原始铸造的文件
atom:btc:id:<atomical_id>$links
atom:btc:id:<atomical_id>$info.pdf
获取最新的动态数据状态
atom:btc:id:<atomical_id>/
获取文件的最新版本
atom:btc:id:<atomical_id>/image.png
获取文件的特定版本
atom:btc:id:<atomical_id>/image.png@[txid or version number or blockheight]
[txid or version number or blockheight]
可以是以下形式:
- 文件有效更新之一的 txid 的十六进制
- 以 "v" 开头的版本号,如 "v1"
- 该文件截至该区块高度的状态
通过容器名称引用
获取一般信息
atom:btc:container:<containerName>
示例:
atom:btc:id:my-coolcontainer-name
获取原始铸造的数据
atom:btc:container:<containerName>$
获取最新的动态数据状态
atom:btc:container:<containerName>/
获取原始铸造的文件
atom:btc:container:<containerName>$image.jpg
获取文件的最新版本
atom:btc:container:<containerName>/items
获取文件的特定版本
atom:btc:container:<containerName>/items@[txid or version number]
通过领域引用
获取一般信息
atom:btc:realm:<realmName>
领域名称可以是顶级领域或任何子领域
示例:
atom:btc:realm:myrealm
atom:btc:realm:myrealm.somesubrealm
atom:btc:realm:myrealm.somesubrealm.thirdlevel-subrealm
获取文件的最新版本
atom:btc:realm:<realmName>/profile
获取文件的特定版本
atom:btc:realm:<realmName>/profile@[txid or version number]
[txid or version number]
可以是以下形式:
- 文件有效更新之一的 txid 的十六进制
- 以 "v" 开头的版本号,如 "v1"
- 该文件截至该区块高度的状态
通过 ARC20 (同质化代币) 引用
获取一般信息
atom:btc:arc:<ticker>
这里的 ticker 可以是 ARC20 代币名称
获取铸造的原始数据
atom:btc:arc:<ticker>$
atom:btc:arc:<ticker>/icon.png
获取代币的事件种子(feed)
atom:btc:arc:<ticker>/events (To be determined - TBD)
引用不可变数据
要存储不可变的(非数字对象数据),使用 "dat" 命令(store-file)并使用以下形式的 dat URN 引用它:
atom:btc:dat:<data_id>/image.png
请注意,dat
不可变数据存储可以使用 $ 或 /,因为不可变数据只有一个版本,两者都会返回相同的数据。