Solidity Visual Developer 不自动检测漏洞,仅通过语义高亮提示可疑语法节点;需开发者结合高亮信号人工判断逻辑缺陷,如重入、未检查调用返回值等,其不覆盖语义层风险。

Solidity Visual Developer 不会自动“检测”漏洞,它只做语义级高亮和结构提示;真正发现 reentrancy、unchecked call return 或 unsafe arithmetic 这类问题,得靠你结合高亮信号 + 自己读代码逻辑判断。
为什么有些安全元素没被高亮?
它只高亮明确符合规则的语法节点,比如:
-
fallback()和receive()函数会被标为橙色(表示潜在入口点) -
.call{value: x}("")会被标为红色(标记为低级调用) -
public状态变量默认蓝底(提示可被外部读取) - 但
require(bal > 0)后面没加状态重置或锁机制,它不会标红——这不是语法问题,是逻辑缺陷
如果你看到某行没高亮,不等于安全;高亮了,也不等于一定有漏洞。它只是把“容易出问题的位置”推到你眼皮底下。
如何识别重入风险对应的高亮模式
重点盯住三类组合:
- 函数里出现
.call{value: ...}("")或.send()—— 红色/紫色高亮 - 该调用之后,还有对
balances[msg.sender]、locked等状态变量的修改 —— 蓝色/绿色高亮 - 这个函数本身是
public或external,且没有nonReentrant修饰符(或类似锁)—— 没高亮,但你要主动查
例如:withdraw() 函数中先 call 再清空 balances,高亮会分开显示两部分,但不会画箭头告诉你“这里顺序错了”。你需要自己连起来看。
哪些常见漏洞它根本不会高亮?
这些属于语义/逻辑层问题,超出语法分析范围:
-
block.timestamp用于关键业务逻辑(如抽奖截止)—— 它只是普通全局变量,无特殊高亮 -
tx.origin做身份校验 —— 被当作文本常量,不会标黄警告 - 未检查
.call返回值(即忽略bool sent)——call本身高亮,但后面那句require(sent, ...)是否存在,它不验证 - 使用
assert()替代require()做输入校验 —— 两者都高亮为深蓝,外观几乎一样,需人工区分用途
换句话说:它帮你快速定位“可疑现场”,但不替你做刑侦推理。真正卡住开发者的,往往是那些没高亮、看起来很干净的几行代码。
最易被忽略的是高亮颜色主题切换后导致的误判——比如把 payable 和 view 都设成浅灰,就很难一眼区分函数是否可接收 ETH。建议用默认的 Solidity Security Theme,并定期在设置里确认 solidity-auditor.securityHighlighting 是启用状态。











