在 Counterparty 的世界里查一枚藏品,第一步往往是”它叫什么”。官方 API 文档对这件事有一句很干脆的说明:在接口的任何地方,资产都用它的名字来引用,而不是它的 ID;至于什么才算一个合法资产名,由协议规范定义。这句话背后,其实藏着四种不同写法和两套数量口径。
文档给出的四种示例写法
API 概览页在讲资产引用时直接列了例子,形态差别很大:BTC、XCP 这样的原生符号;FOOBAR 这样的大写字母名;A7736697071037023001 这种以 A 起头、后跟一长串数字的名字。此外它单独列出子资产(subasset)一节,例子形如 PIZZA.X 与 PIZZA.REALLY-long-VALID-Subasset-NAME。
看到一串资产名时先分类
- 纯字母:常规命名资产
- A + 一长串数字:数字资产(numerical asset)形态
- 含点号:子资产,名字挂在某个父资产之下
- 需要精确规则时:回到协议规范,而不是猜
A 开头这种形态,正是 Stamps 协议要求藏品必须采用的样子——协议文档规定一枚 Bitcoin Stamp 必须是数字资产,并举例形如 A1997663462583877600。理解了”资产名本身就是一种资产类型”,才能明白为什么 Stamps 的编号与显示逻辑和普通代币不一样。

可分与不可分:同一份 JSON 里的一个布尔
发行资产时的参数差别体现在 issuance 的 divisible 字段上,文档给的两段示例,一段可分、一段写作 "divisible": false 表示不可分。这个开关决定了后续所有数量字段的读法。
文档在”数量与余额”一节写得很明确:任何出现数量的地方,如果资产是可分的,数字以聪(satoshi)为单位;如果是不可分的,则就是整数本身。把聪换算成浮点数的做法是转成 float 后除以 100,000,000。文档还举了一个具体例子:同一串 4381030000,若资产可分则等于 43.8103,若不可分则就是 4381030000。顺带说明,XCP 与 BTC 本身就是可分资产。
为什么这决定了”你有多少枚”
NFT 场景里绝大多数资产是不可分的,数量本该是”几枚”这种整数。但如果你在同一个接口里既查藏品又查可分代币,很容易把两类数字混进同一张表:一边要除以 1e8,一边不能除。这类口径错误在自建的持仓表格里非常常见,表现就是某个系列莫名变成零点几枚。
反过来看,可分性也是发行时的一次性选择:文档的示例里它是 issuance 的参数,一旦资产存在,这个属性就不再是可随意改的东西。把一枚本该”一张一枚”的作品发成可分资产,会让它在链上被拆成任意碎小的单位——这是”资产能不能被切碎”的结构问题,与它后来值多少钱无关。
查询时最省事的三条习惯
1. 先确定资产名属于哪一类,再决定要不要做 1e8 换算
2. 遇到点号名字,先查父资产:父级改名、销毁或策略变化会影响子资产
3. 数量口径写进备注:同一串数字在可分与不可分下的含义完全不同
命名与数量口径都是协议层的确定性事实,能核对到字节。把它们和市场价格、稀缺性叙事分开记账,是读任何链上资产记录时都不多余的习惯。
子资产那一类值得再多看一眼。官方文档给的例子包括短名与很长的名字,形如父资产名加点号再跟子名。这个结构意味着读子资产时必须连着父资产一起读:链上引用的是完整字符串,而不是某个“归属于某系列”的内部编号。做批量整理时,只按点号后半段做分组,会把不同父资产下的同名子资产并到一起;把整串名字当作键,才能保持一一对应。什么才算合法名字,文档的口径是回看协议规范,而不是从示例里归纳规律。
数量口径的错误还有一个隐蔽后果。可分资产需要除以 1e8 才是常见显示值,而不可分资产直接就是枚数,很多接口返回的都是同一种整数形式,不会在字段名上告诉你它属于哪一类。于是同一份导出表里,一类被正确显示、另一类被误除或误乘,持仓表上就出现“一枚变 0.00000001 枚”或“0.00000001 变一枚”的荒谬结果。稳妥做法是给每一行标注资产的可分性,或干脆分别导出再合并,而不是指望显示端猜对。
落到日常对账,能得出三条很实用的结论。第一,把完整资产名当作唯一主键:既然接口处处用名字引用资产,缩写、去掉前缀或只留点号后半段,都会让两条不同资产看起来相同。第二,把可分性与数量口径写在同一行:同一串整数在两类资产下的含义差一亿倍,事后无法凭数字本身反推。第三,把来源区块高度与解码方式一并留档:元协议写在比特币交易里的内容,日后能否复现取决于你保存的是原始交易还是某个站点的转译。这三条都是纯粹的技术习惯,与任何关于价值的判断无关。
本文为机制说明,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。