公共功能智能合约清晰度堆栈



我正在编写一个只有合约所有者才能调用的公共函数。它是一个在智能合约中改变状态变量的函数。

(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-AUTHORIZEDerr而不仅仅是uint时起作用,因为errok都是响应类型。

最新更新