← 最新论文
💻 computer science

Assessing Vulnerability in Smart Contracts: The Role of Code Complexity Metrics in Security Analysis

本研究表明,尽管单个软件复杂度指标与 Solidity 智能合约中的特定漏洞之间的相关性较低,但通过对它们的集体分析,可以有效地区分安全代码与存在漏洞的代码,且存在漏洞的合约始终表现出更高的平均复杂度得分。

原作者: Masoud Jamshidiyan Tehrani

发布于 2026-01-26
📖 1 分钟阅读☕ 轻松阅读

原作者: Masoud Jamshidiyan Tehrani

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,智能合约就像一台构建在区块链上的自动执行的自动售货机。一旦你投入金钱并按下按钮,它就会自动给你零食。你无法在事后更改机器内部的齿轮;它是“不可篡改的”。如果齿轮出现了缺陷,黑客可能会偷走里面所有的钱,而且除了重新制造一台全新的机器外,没有任何办法可以修复它。

这篇论文旨在尝试在这些售货机部署之前,就找出那些损坏的齿轮。研究人员提出了一个简单的问题:“仅仅通过观察一个自动售货机的蓝图有多复杂,我们能否判断它是否容易出现故障?”

以下是他们研究结果的拆解,使用了日常生活的类比:

1. 核心理念:复杂度是一个“红旗”(警示信号)

研究人员查看了 21 种衡量代码多么“混乱”或“复杂”的不同方式。可以将这些指标视为衡量以下内容的东西:

  • SLOC(源代码行数): 说明书有多少页?
  • 嵌套(Nesting): “如果这样,那么那样”的盒子层层嵌套了多少层?(就像俄罗斯套娃一样)。
  • 耦合(Coupling): 这台机器为了工作,还需要与多少其他机器进行通信?

研究发现: 他们发现混乱的蓝图通常意味着损坏的机器
当他们观察那些被黑客攻击过的(存在漏洞的)合约时,这些合约的蓝图几乎总是比安全合约的蓝图更复杂、更长且更纠缠不清。

2. “水晶球”问题(单一指标)

研究人员试图观察是否可以通过某一个特定的测量值来预测一次黑客攻击。

  • 类比: 想象一下,你试图仅通过观察杯架的数量来猜测一辆汽车是否会发生碰撞。
  • 结果: 这项尝试效果并不理想。没有任何单一指标(比如仅仅计算代码行数)是一个完美的“水晶球”。如果你看行数,你就无法可靠地断言:“这个合约肯定会被黑客攻击。”这种联系确实存在,但很微弱。

3. “团队协作”的成功(组合指标)

然而,当他们将所有测量指标放在一起观察时,画面变得非常清晰。

  • 类比: 你不能仅通过品尝盐罐来判断汤是否咸,但如果你品尝了整碗汤,你就确切知道它有多咸。
  • 结果: 虽然单一指标不够,但组合后的指标在区分安全合约和危险合约方面表现得非常出色。“有漏洞”的合约在各项指标上(更多的行数、更深的嵌套、更多的连接)始终高于安全合约。

4. 令人惊讶的例外情况

有三个情况违背了“复杂度越高 = 危险越大”的规则:

  1. 注释(CLOC): 安全的合约拥有更多的注释(程序员编写的解释代码的笔记)。有漏洞的合约则注释较
    • 启示: 在你的蓝图上写下笔记似乎有助于保持机器的安全。
  2. 后代(NOD): 安全的合约拥有更多的“后代”(版本或子合约)。有漏洞的合约则较少。
  3. 参数(Parameters): 有漏洞的合约平均拥有的输入/参数实际上略少一些。

5. 这对开发者意味着什么

论文得出结论,复杂度并不是黑客攻击的原因(像病毒一样),但它是一个非常响亮的警告信号

  • 类比: 如果你看到一栋房子里电线纠缠在一起、管道裸露在外且平面图混乱,你并不确定它是否一定会起火,但你知道它比那些布线整洁有序的房子更容易起火。
  • 建议: 开发者应该尽量保持代码简单。如果一个合约变得过于复杂,这是一个停止并检查安全漏洞的信号。此外,多写注释;数据表明,文档齐全的代码更安全。

总结

这篇论文证明了复杂度是智能合约风险的一个强有力指标。你不能依靠单一数字来预测黑客攻击,但如果你观察代码整体的“混乱程度”,你可以比完全忽略复杂度时更好地识别出危险的合约。这是一个帮助审计员和开发者优先处理哪些合约需要最仔细检查的工具。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →