我正在编写一个只有合约所有者才能调用的公共函数。它是一个在智能合约中改变状态变量的函数。
(define-public (changeRatio (newRatio uint))
(begin
(asserts! (is-eq tx-sender (var-get contract-owner)) ERR-NOT-AUTHORIZED)
(var-set ratio newRatio)
)
)
得到
错误:检测到两个执行路径,返回两个不同的表达式类型(得到'(response UnknownType uint)'和'bool')
我在这里做错了什么?
Clarity中的公共函数必须在最后返回一个响应类型。有关这方面的更多信息,请参阅Clarity书:https://book.clarity-lang.org/ch05-01-public-functions.html
要解决特定的错误,您可以将var-set
包装在ok
响应类型中,如下所示:
(ok (var-set ratio newRatio))
请注意,这只会在您的ERR-NOT-AUTHORIZED
是err
而不仅仅是uint
时起作用,因为err
和ok
都是响应类型。