可扩展的 UDT(Extensible UDT,本文统一称为 xUDT)是基于 Simple UDT 的扩展,可用于定义更多 UDT 可能需要的行为。sUDT 为在 Nervos CKB 上发行 UDT 提供了一个最基本的核心,xUDT 则可以建立在 sUDT 的基础上,满足更多的潜在需求,例如监管。
数据结构
xUDT Cell
xUDT cell 向后兼容于 sUDT,所有 sUDT 规范中定义的既存规则仍然适用于 xUDT cell。在 sUDT 的基础上,xUDT 扩展的 cell 如下:
data:
<amount: uint128> <xudt data>
type:
code_hash: extensible_udt type script
args: <owner lock script hash> <xudt args>
lock:
<user_defined>
这个被加上去的 xudt args 和 xudt data 部分提供了所有 xUDT 所需的新功能,我们将会在下文阐述这些细节的架构。
xUDT Args
xUDT args 的架构如下:
- 4 个字节的 xUDT 标记
- 可变长度扩展数据
依赖于 flags 的内容,可能会附加不同的扩展数据:
- 如果 flags 全部为 0,我们不需要任何扩展数据。值得注意的是,向后兼容的查看方式是,一个空白的 sUDT cell 也等于有一个全部为 0 的隐藏 flags 字段。
- 如果 flags 是 0x1,那么扩展数据将包含一个以 ScriptVec 结构进行序列化的 molecule (https://github.com/nervosnetwork/molecule)
table Script {
code_hash: Byte32,
hash_type: byte,
args: Bytes,
}
vector