Clarity合约public函数执行路径类型不匹配错误排查求助
Clarity合约public函数类型不匹配问题修复
你的问题出在public函数的执行路径返回类型不一致:
- 当
asserts!验证失败时,会返回一个错误响应((err ERR-NOT-AUTHORIZED)),属于response类型 - 验证通过后执行
var-set,返回的是bool类型(表示变量是否设置成功)
Clarity要求public函数的所有分支必须返回相同类型,所以编译器报错检测到两种不同类型的返回值。
解决方法很简单,把成功路径的返回值包装成统一的response类型即可,比如用ok包裹var-set的结果:
(define-public (changeRatio (newRatio uint)) (begin (asserts! (is-eq tx-sender (var-get contract-owner)) ERR-NOT-AUTHORIZED) (ok (var-set ratio newRatio)) ) )
如果不需要返回var-set的结果,也可以直接返回固定的成功响应,比如(ok true),效果是一样的。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

