使用sp.init_metadata/SmartPy初始化合约元数据时,是否需包含链上视图?
TZIP-16元数据视图列表的规范与SmartPy实践
核心问题解答
TZIP-16规范并未要求views数组仅包含链下视图,正确的做法是同时纳入链上视图和链下视图,具体原因和实践细节如下:
- 链上视图(比如SmartPy中用
sp.add_view定义的可链上调用视图):虽然Tezos节点会自动识别这类视图并提供调用入口,但将其加入元数据的views数组后,钱包、区块浏览器等第三方工具能更直接地发现并集成这些视图,降低用户调用合约的门槛。 - 链下视图:这类视图仅能离线执行,节点无法自动识别,必须显式加入
views数组,才能让工具知晓其存在、逻辑定义和调用方式。
SmartPy中的具体操作
在SmartPy里通过self.init_metadata("metadata", some_metadata)初始化元数据时:
- 若手动构造元数据结构,建议将所有需要对外暴露的视图(链上+链下)都按TZIP-16格式写入
views数组。 - 更高效的方式是使用SmartPy内置的
sp.build_metadata工具:它会自动把你用sp.add_view定义的所有链上视图同步到元数据的views数组中,你只需在生成的基础元数据里补充链下视图的定义即可,避免手动遗漏或格式错误。
格式注意事项
每个视图条目需遵循TZIP-16的必填字段要求:
- 通用字段:
name(视图名称)、description(功能描述)、inputs(输入参数列表)、outputs(返回值定义) - 类型标识:链上视图需指定
kind: "on-chain",链下视图需指定kind: "off-chain"
内容的提问来源于stack exchange,提问作者user18943198
相关产品推荐
相关产品推荐

