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

Clarity扩展v0.7.1代码通知问题及解决方案咨询

解决Clarity扩展v0.7.1中lock函数的安全提示问题

问题描述

  • 编写lock函数时,工具提示source of untrusted input here:
    (define-public (lock (new-beneficiary principal) (unlock-at uint) (amount uint))
    
  • 执行变量赋值代码时,工具提示use of potentially unchecked data:
    (var-set beneficiary (some new-beneficiary))
    

解决方案

这两个提示是Clarity扩展的安全检查机制,用于规避不可信输入带来的风险,具体解决方法如下:

1. 消除source of untrusted input here提示

函数的三个参数均为外部传入的不可信输入,必须添加针对性的合法性校验:

  • new-beneficiary校验:用is-principal函数确认其为有效主体地址
  • unlock-at校验:确保解锁时间晚于当前区块高度,用(> unlock-at (block-height))判断
  • amount校验:校验金额大于0,且不超过调用者的可用余额(可结合get-balance实现)

示例校验代码:

(asserts! (is-principal new-beneficiary) (err u100)) ; 拦截无效主体地址
(asserts! (> unlock-at (block-height)) (err u101)) ; 拦截早于当前时间的解锁设置
(asserts! (> amount u0) (err u102)) ; 拦截零金额操作

2. 消除use of potentially unchecked data提示

必须先完成上述所有输入校验,确认new-beneficiary合法安全后,再执行var-set赋值操作,避免未校验的数据存入变量。

完整代码示例片段:

(define-public (lock (new-beneficiary principal) (unlock-at uint) (amount uint))
  (let ()
    ; 执行所有输入合法性校验
    (asserts! (is-principal new-beneficiary) (err u100))
    (asserts! (> unlock-at (block-height)) (err u101))
    (asserts! (> amount u0) (err u102))
    ; 校验通过后再赋值变量
    (var-set beneficiary (some new-beneficiary))
    ; 后续业务逻辑...
    (ok true)
  )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:30:21