You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Tezos链上视图返回列表时遇类型不匹配错误

Tezos链上视图返回列表报错的修复与类型限制说明

错误原因

你遇到的「Doesn't have a comparable type」错误,是因为SmartPy的类型推断机制在处理链上视图返回列表时,默认尝试将返回类型标记为可比较类型,但列表(尤其是元素不可比较的列表)本身不满足可比较要求。链上视图本身并不要求返回类型必须可比较,但未显式指定返回类型时,自动推断会触发这个错误。

修复方法

定义链上视图时,通过sp.onchain_view的returns参数显式声明返回的列表类型,明确指定列表的元素类型,即可解决类型推断问题。

示例代码修改:

# 原错误写法(未指定返回类型)
@sp.onchain_view()
def get_string_list(self):
    return self.data.string_list

# 修正后写法(显式指定返回类型)
@sp.onchain_view(returns=sp.list(sp.string))
def get_string_list(self):
    return self.data.string_list

如果是整数列表,可指定returns=sp.list(sp.nat)或returns=sp.list(sp.int),其他元素类型以此类推。

链上视图返回类型的限制

Tezos链上视图的返回类型几乎没有严格限制,只要是合法的Michelson类型都可以返回,包括:

  • 基础类型:nat、int、string、bool等
  • 复杂类型:列表、记录、合约地址等
  • 嵌套类型:比如列表的列表sp.list(sp.list(sp.nat))等

需要注意的例外情况:

  • 不能返回函数类型的值,因为函数无法被序列化和传递
  • 所有嵌套的子类型必须是合法的Michelson类型,不能包含不可序列化的类型
  • 显式声明返回类型是SmartPy开发的最佳实践,既能避免类型推断错误,也能提升代码可读性

内容的提问来源于stack exchange,提问作者user18943198

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 09:33:15