---
title: "智能合约安全检查清单（30 项） - 博客"
canonical: https://wavect.io/zh/blog/smart-contract-security-checklist-pre-audit/
language: zh
description: "我们在把 Solidity 代码交给外部审计之前会跑的 30 项内部检查清单。编译器、访问控制、算术运算、重入、可升级性、Gas 表面。"
image: "https://wavect.io/img/blog/headers/header_smart-contract-security-checklist-pre-audit.png"
---

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

7 分钟 阅读 · 2026年5月26日

[**下一篇**](/zh/blog/fractional-cto-austria-day-rates/)

# 智能合约安全清单：外部审计前我们核对的 30 项

要点速览

我们不做审计，做的是审前加固：把智能合约送外部审计之前，跑一份 30 项、6 类的清单，覆盖编译器与工具链、访问控制、算术与溢出、外部调用与重入、可升级性与存储、Gas 与 DoS 面。按我们的项目历史，全部清掉能把审计师的发现数减少约 60% 到 80%，意味着更便宜的审计和更快的主网。每一项由项目技术负责人以提交和测试引用签字，清单随代码一起交给审计师。

我们不做审计。我们交付并加固 [智能合约](/zh/glossary/smart-contract/) 代码，然后由外部机构审计。在那段审计窗口打开之前，我们跑这份30 项审前清单，分为6 类：编译器与工具链、访问控制与角色、算术与溢出、外部调用与重入、可升级性与存储、Gas 与 DoS 面。下面每一项都在我们或同行的真实项目里烧过。把 30 项全部清掉，按我们的项目历史，能把审计师在我们移交品上的发现数减少大约 60% 到 80%，意味着更便宜的审计和更快的主网。

这是我们希望在 [Scramble Pay](/zh/case-studies/scramble-pay/) 、 [Quivr](/zh/case-studies/quivr/) 、 [Lightbridge](/zh/case-studies/lightbridge/) 以及 [Account Abstraction](/zh/case-studies/account-abstraction/) 工作的第一天就有人递给我们的列表。我们不称之为审计。它是一次加固评审，目的是让审计变得无聊。

如果你仍在选择独立 reviewer，可查看我们基于一手证据整理的 [德国企业可选智能合约审计公司对比](/zh/blog/top-smart-contract-auditors-germany/) 。文章按技术适配与公开证据区分德国、DACH、欧盟及全球服务商。

如果合约要实现已经批准的供应、Vesting、金库或治理模型，请先阅读我们的 [Tokenomics 落地与基础设施指南](/zh/blog/tokenomics-implementation-infrastructure-2026/) 。它会先把经济规格映射到七层生产系统，再进入这道安全关卡。

## 智能合约审前加固评审实际检查什么？

6 类，每类 5 项，共 30 项。我们把清单当成关卡。任一项失败，合约不会离开我们的仓库，除非被修复或被客户书面豁免并说明原因。我们把它和 [TDD](/zh/glossary/tdd/) 工作流以及 [QA 服务](/zh/services/software-quality-assurance/) 一起搭配，使每个修复都带回归测试落地。

## 类别 1：编译器与工具链（第 1 到 5 项）

1. **固定的 Solidity 版本。** 在 `foundry.toml` 或 `hardhat.config` 中锁定单一编译器版本。 `^0.8.20` 这种浮动 pragma 意味着两位开发者能从同一份源码编译出两份不同字节码。
2. **优化器设置公开声明且可复现。** 记录 optimizer runs 值。Etherscan 验证在不一致时会失败，审计师在标记它之前会浪费一小时。
3. **SMTChecker 和 Slither 跑过且零未抑制发现。** 每一处抑制都有内联注释注明是哪位审计师或工程师签字豁免。无静默抑制。
4. **Foundry fuzz 和 invariant 测试在 CI 中跑且 seed 数量高。** 移交审计前我们要求每个关键函数至少 10,000 fuzz 跑和 256 invariant 跑。
5. **依赖 lockfile 已提交并审过。** OpenZeppelin、Solady 版本固定。没有指向 `main` 的 `git` 依赖。每次依赖升级我们都做 diff。

## 类别 2：访问控制与角色（第 6 到 10 项）

1. **每个特权函数都有显式角色检查。** 不是默认 `onlyOwner` 。我们把每个函数映射到角色并记录部署时谁持有它。
2. **主网上线时无 EOA 持有 admin 密钥。** 多签或 timelock，没有讨论余地。我们见过同行项目因单密钥 admin 被攻破而终结。
3. **两步所有权转移。** `Ownable2Step` 或等价方案。一步转移上的笔误是不可恢复的。
4. **角色 renounce 和 revoke 路径有测试。** DEFAULT_ADMIN_ROLE 实际能在不锁死协议的情况下被 renounce 吗？请测一次。
5. **可升级合约的 initializer 保护。** 每个实现合约的 constructor 中放 `_disableInitializers()` ，无例外。

## 类别 3：算术与溢出（第 11 到 15 项）

1. **使用 Solidity 0.8+ 且 unchecked 块就地说明理由。** 每个 `unchecked` 块附注释解释为何在调用点不可能溢出。
2. **除法顺序核验。** 在精度要紧的地方先乘后除。我们在金融路径 grep `/` 并逐一评审。
3. **费用与百分比数学使用 basis points 或定义好的精度常量。** 不用原始小数。把常量写文档并到处使用。
4. **处理代币 decimal 不一致。** USDC 是 6 位 decimal，WETH 是 18。我们对每一对在 mainnet 代币地址上做 fork test。
5. **类型转换检查。** 每一处 `uint256` 到 `uint128` 或更小的转换都有显式上限检查或 SafeCast。

## 类别 4：外部调用与重入（第 16 到 20 项）

1. **强制 Checks-Effects-Interactions。** 状态更新在任何外部调用之前发生。每个外部调用我们逐个人评审。
2. **对每个执行外部调用且修改状态的函数都加 ReentrancyGuard。** 默认开启，只有有理由时才关闭。
3. **跨函数重入有测试。** 对一个共享状态的姐妹函数进行重入调用是经典漏点。我们做 fuzz。
4. **处理不可信代币回调。** ERC777、ERC1155 `onERC1155Received` 、ERC721 `onERC721Received` 。假定任何外部代币都是敌对的。
5. **低层调用上检查返回数据长度。** `(bool ok,) = target.call(...)` 不检查返回数据是一个等着发生的静默失败。

![Kevin Riedl](/img/team/kevin.webp)

"加固让审计变得无聊。无聊的审计能上线。"

## 类别 5：可升级性与存储（第 21 到 25 项）

1. **存储布局有文档，每次升级都 diff。** 升级前后跑 `forge inspect` 存储布局，拒绝任何被重排的 slot。
2. **每个可升级父合约保留 storage gap。** 按 OpenZeppelin 惯例 `uint256[50] private __gap;` 。
3. **代理合约把 constructor 逻辑搬到 initializer。** 可升级合约里 constructor 里的任何内容都是 bug。
4. **UUPS 的 authorizeUpgrade 带角色检查。** OpenZeppelin 默认脚手架是抽象的。确保已实现并受保护。
5. **在 fork 上端到端测试升级路径。** 部署 V1、填充状态、升级到 V2、验证状态完整。强制。

## 类别 6：Gas 与 DoS 面（第 26 到 30 项）

1. **移除或分页无界循环。** 任何用户可增长的数组上的循环都是 DoS 向量。我们重构成 pull-based 模式。
2. **核验区块 gas 上限余量。** 在实际状态规模下，单个函数都不应超过约 30% 的区块 gas 上限。
3. **处理外部调用 gas stipend。** 把全部 gas 转给不可信合约会让 grief 成为可能。我们设上限或用 `try/catch` 。
4. **热路径上最小化存储写入。** 热存储 slot 打包。用 `forge snapshot` 测量，超过 5% 的回归就驳回。
5. **前置抢跑与 MEV 面有文档。** 必要时使用 commit-reveal、slippage 参数、deadline 参数。如果协议会被三明治攻击，用户在主网前就知道。

## 为什么有这份清单而不是干脆雇审计师？

审计师按代码行和天数收费。把未加固的代码送审，就是花 每天 €2,000 到 €4,000 让资深工程师去找那些你自己团队用 Slither 和 fuzz 框架就能抓到的 bug。在我们的项目历史里，移交审计前完成全部 30 项的项目，审计师发现数回来时只是个位数，大多是 informational。跳过清单的项目通常回来 30+ 发现，包括 critical，然后要重新审计、付全价。

这是 Wavect 与一家通用型外包的差别。完整背景请见 [Wavect vs 一家通用型开发外包](/zh/compare/wavect-vs-dev-agencies/) 。我们用一种把安全放在第一位的节奏构建 [Web3](/zh/glossary/web3/) 系统，这也内建在我们的 [区块链服务](/zh/services/blockchain/) 里，因此审计变成签字而非救火。

## 项目中由谁负责这份清单？

该项目的 Wavect 技术负责人。他们对每一项以提交引用加测试引用签字。客户在审计移交包里收到签字清单，外部审计师会和代码一起拿到这份清单。审计师喜欢这样，因为这告诉他们把注意力集中到哪里。

## 最终思考

30 项、6 类、每次发布一份签字文档。这就是审前加固评审。我们不替代外部审计师，也从不这样声称。我们做的是把已经清掉明显向量的代码递给他们，让他们的费用买到深层发现，而不是显然的发现。

如果你即将把一份 Solidity 代码库送上主网，却没跑过结构化加固，你就在用审计的价做工程的活。书审计档期之前，先来找我们，不是之后。

## 你可能也喜欢..

[**测试驱动开发** 为什么我们在每一条关键路径代码库上都跑 TDD，以及它如何改变修 bug 的经济。](/zh/blog/test-driven-development/) [**Wavect vs 一家通用型开发外包** 通用型卖产能，我们卖产品判断加上能交付的工程能力。](/zh/compare/wavect-vs-dev-agencies/)

区块链基础设施

## 继续浏览此集群

Web3 系统的网络、智能合约、支付与生产架构。

[从核心文章开始**Ethereum 到 Solana 迁移成本**](/zh/blog/ethereum-to-solana-migration-cost/)

- [原生 Rollup vs Based Rollup](/zh/blog/native-rollups-vs-based-rollups/)
- [2026 Tokenomics 落地指南：从模型到生产](/zh/blog/tokenomics-implementation-infrastructure-2026/)
- [德国企业可选的 10 家 Web3 与智能合约审计公司（2026）](/zh/blog/top-smart-contract-auditors-germany/)
- [x402 支付协议指南：Coinbase、Stripe 与主流方案](/zh/blog/x402-payments-comparison-2026/)
- [解读 Open USD：一个联盟稳定币改变了什么](/zh/blog/open-usd-stablecoin-explained-2026/)

只收重要内容

## 关注与你相关的内容

每当我们发布新文章，你会收到一封简短邮件。你可以关注整个博客，也可以只选感兴趣的主题。

[**返回**](/zh/blog/overview/)

[![Kevin Riedl](/img/team/kevin.webp)](/zh/team/kevin-riedl/)

[Kevin Riedl](/zh/team/kevin-riedl/) https://linkedin.com/in/wsdt

7 分钟 阅读 · 2026年5月26日

[**下一篇**](/zh/blog/fractional-cto-austria-day-rates/)

邮件订阅新文章 ×

×

通过邮件获取新文章

我们发布时给你一封简短邮件。免费，不做跟踪。

## Structured Data

```json
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@id": "https://wavect.io/#organization",
      "@type": [
        "Organization",
        "ProfessionalService",
        "LocalBusiness"
      ],
      "employee": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "founder": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "legalRepresentative": [
        {
          "@id": "https://wavect.io/team/kevin-riedl/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Kevin Riedl",
          "url": "https://wavect.io/team/kevin-riedl/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        },
        {
          "@id": "https://wavect.io/team/christof-jori/#person",
          "@type": "Person",
          "jobTitle": "Managing Director",
          "name": "Christof Jori",
          "url": "https://wavect.io/team/christof-jori/",
          "worksFor": {
            "@id": "https://wavect.io/#organization",
            "@type": [
              "Organization",
              "ProfessionalService",
              "LocalBusiness"
            ]
          }
        }
      ],
      "name": "Wavect GmbH",
      "subjectOf": {
        "@id": "https://wavect.io/verified-claims.json#dataset",
        "@type": "Dataset",
        "creator": {
          "@id": "https://wavect.io/#organization",
          "@type": [
            "Organization",
            "ProfessionalService",
            "LocalBusiness"
          ]
        },
        "description": "A machine-readable registry of quantitative and qualitative claims published by Wavect, with review dates, localized page appearances and public third-party citations where available.",
        "inLanguage": "en",
        "isAccessibleForFree": true,
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "name": "Wavect verified publication claims",
        "url": "https://wavect.io/verified-claims.json"
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/team/kevin-riedl/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Kevin Riedl",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796365",
        "https://www.linkedin.com/in/wsdt",
        "https://github.com/wsdt"
      ],
      "url": "https://wavect.io/team/kevin-riedl/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/team/christof-jori/#person",
      "@type": "Person",
      "jobTitle": "Managing Director",
      "name": "Christof Jori",
      "sameAs": [
        "https://www.wikidata.org/wiki/Q139796367",
        "https://www.linkedin.com/in/jocr77/",
        "https://github.com/jo-chris"
      ],
      "url": "https://wavect.io/team/christof-jori/",
      "worksFor": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      }
    },
    {
      "@id": "https://wavect.io/#website",
      "@type": "WebSite",
      "inLanguage": [
        "en",
        "de",
        "es",
        "zh"
      ],
      "name": "Wavect",
      "potentialAction": {
        "@type": "SearchAction",
        "query-input": "required name=search_term_string",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://wavect.io/search/?q={search_term_string}"
        }
      },
      "publisher": {
        "@id": "https://wavect.io/#organization",
        "@type": [
          "Organization",
          "ProfessionalService",
          "LocalBusiness"
        ]
      },
      "url": "https://wavect.io/"
    },
    {
      "@id": "https://wavect.io/zh/blog/smart-contract-security-checklist-pre-audit/#webpage",
      "@type": "WebPage",
      "dateModified": "2026-07-07",
      "inLanguage": "zh",
      "isPartOf": {
        "@id": "https://wavect.io/#website",
        "@type": "WebSite"
      },
      "lastReviewed": "2026-07-07",
      "url": "https://wavect.io/zh/blog/smart-contract-security-checklist-pre-audit/"
    }
  ]
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "abstract": "我们不做审计，做的是审前加固：把智能合约送外部审计之前，跑一份 30 项、6 类的清单，覆盖编译器与工具链、访问控制、算术与溢出、外部调用与重入、可升级性与存储、Gas 与 DoS 面。按我们的项目历史，全部清掉能把审计师的发现数减少约 60% 到 80%，意味着更便宜的审计和更快的主网。每一项由项目技术负责人以提交和测试引用签字，清单随代码一起交给审计师。",
  "articleBody": " 博客概览/Web3 与隐私/区块链基础设施 智能合约安全清单：外部审计前我们核对的 30 项 要点速览 我们不做审计，做的是审前加固：把智能合约送外部审计之前，跑一份 30 项、6 类的清单，覆盖编译器与工具链、访问控制、算术与溢出、外部调用与重入、可升级性与存储、Gas 与 DoS 面。按我们的项目历史，全部清掉能把审计师的发现数减少约 60% 到 80%，意味着更便宜的审计和更快的主网。每一项由项目技术负责人以提交和测试引用签字，清单随代码一起交给审计师。 我们不做审计。我们交付并加固智能合约代码，然后由外部机构审计。在那段审计窗口打开之前，我们跑这份30 项审前清单，分为6 类：编译器与工具链、访问控制与角色、算术与溢出、外部调用与重入、可升级性与存储、Gas 与 DoS 面。下面每一项都在我们或同行的真实项目里烧过。把 30 项全部清掉，按我们的项目历史，能把审计师在我们移交品上的发现数减少大约 60% 到 80%，意味着更便宜的审计和更快的主网。 这是我们希望在 Scramble Pay、Quivr、Lightbridge 以及 Account Abstraction 工作的第一天就有人递给我们的列表。我们不称之为审计。它是一次加固评审，目的是让审计变得无聊。 如果你仍在选择独立 reviewer，可查看我们基于一手证据整理的德国企业可选智能合约审计公司对比。文章按技术适配与公开证据区分德国、DACH、欧盟及全球服务商。 如果合约要实现已经批准的供应、Vesting、金库或治理模型，请先阅读我们的 Tokenomics 落地与基础设施指南。它会先把经济规格映射到七层生产系统，再进入这道安全关卡。 智能合约审前加固评审实际检查什么？ 6 类，每类 5 项，共 30 项。我们把清单当成关卡。任一项失败，合约不会离开我们的仓库，除非被修复或被客户书面豁免并说明原因。我们把它和 TDD 工作流以及 QA 服务 一起搭配，使每个修复都带回归测试落地。 类别 1：编译器与工具链（第 1 到 5 项） 固定的 Solidity 版本。在 foundry.toml 或 hardhat.config 中锁定单一编译器版本。^0.8.20 这种浮动 pragma 意味着两位开发者能从同一份源码编译出两份不同字节码。 优化器设置公开声明且可复现。记录 optimizer runs 值。Etherscan 验证在不一致时会失败，审计师在标记它之前会浪费一小时。 SMTChecker 和 Slither 跑过且零未抑制发现。每一处抑制都有内联注释注明是哪位审计师或工程师签字豁免。无静默抑制。 Foundry fuzz 和 invariant 测试在 CI 中跑且 seed 数量高。移交审计前我们要求每个关键函数至少 10,000 fuzz 跑和 256 invariant 跑。 依赖 lockfile 已提交并审过。OpenZeppelin、Solady 版本固定。没有指向 main 的 git 依赖。每次依赖升级我们都做 diff。 类别 2：访问控制与角色（第 6 到 10 项） 每个特权函数都有显式角色检查。不是默认 onlyOwner。我们把每个函数映射到角色并记录部署时谁持有它。 主网上线时无 EOA 持有 admin 密钥。多签或 timelock，没有讨论余地。我们见过同行项目因单密钥 admin 被攻破而终结。 两步所有权转移。Ownable2Step 或等价方案。一步转移上的笔误是不可恢复的。 角色 renounce 和 revoke 路径有测试。DEFAULT_ADMIN_ROLE 实际能在不锁死协议的情况下被 renounce 吗？请测一次。 可升级合约的 initializer 保护。每个实现合约的 constructor 中放 _disableInitializers()，无例外。 类别 3：算术与溢出（第 11 到 15 项） 使用 Solidity 0.8+ 且 unchecked 块就地说明理由。每个 unchecked 块附注释解释为何在调用点不可能溢出。 除法顺序核验。在精度要紧的地方先乘后除。我们在金融路径 grep / 并逐一评审。 费用与百分比数学使用 basis points 或定义好的精度常量。不用原始小数。把常量写文档并到处使用。 处理代币 decimal 不一致。USDC 是 6 位 decimal，WETH 是 18。我们对每一对在 mainnet 代币地址上做 fork test。 类型转换检查。每一处 uint256 到 uint128 或更小的转换都有显式上限检查或 SafeCast。 类别 4：外部调用与重入（第 16 到 20 项） 强制 Checks-Effects-Interactions。状态更新在任何外部调用之前发生。每个外部调用我们逐个人评审。 对每个执行外部调用且修改状态的函数都加 ReentrancyGuard。默认开启，只有有理由时才关闭。 跨函数重入有测试。对一个共享状态的姐妹函数进行重入调用是经典漏点。我们做 fuzz。 处理不可信代币回调。ERC777、ERC1155 onERC1155Received、ERC721 onERC721Received。假定任何外部代币都是敌对的。 低层调用上检查返回数据长度。(bool ok, ) = target.call(...) 不检查返回数据是一个等着发生的静默失败。 \"加固让审计变得无聊。无聊的审计能上线。\" 类别 5：可升级性与存储（第 21 到 25 项） 存储布局有文档，每次升级都 diff。升级前后跑 forge inspect 存储布局，拒绝任何被重排的 slot。 每个可升级父合约保留 storage gap。按 OpenZeppelin 惯例 uint256[50] private __gap;。 代理合约把 constructor 逻辑搬到 initializer。可升级合约里 constructor 里的任何内容都是 bug。 UUPS 的 authorizeUpgrade 带角色检查。OpenZeppelin 默认脚手架是抽象的。确保已实现并受保护。 在 fork 上端到端测试升级路径。部署 V1、填充状态、升级到 V2、验证状态完整。强制。 类别 6：Gas 与 DoS 面（第 26 到 30 项） 移除或分页无界循环。任何用户可增长的数组上的循环都是 DoS 向量。我们重构成 pull-based 模式。 核验区块 gas 上限余量。在实际状态规模下，单个函数都不应超过约 30% 的区块 gas 上限。 处理外部调用 gas stipend。把全部 gas 转给不可信合约会让 grief 成为可能。我们设上限或用 try/catch。 热路径上最小化存储写入。热存储 slot 打包。用 forge snapshot 测量，超过 5% 的回归就驳回。 前置抢跑与 MEV 面有文档。必要时使用 commit-reveal、slippage 参数、deadline 参数。如果协议会被三明治攻击，用户在主网前就知道。 为什么有这份清单而不是干脆雇审计师？ 审计师按代码行和天数收费。把未加固的代码送审，就是花 每天 €2,000 到 €4,000 让资深工程师去找那些你自己团队用 Slither 和 fuzz 框架就能抓到的 bug。在我们的项目历史里，移交审计前完成全部 30 项的项目，审计师发现数回来时只是个位数，大多是 informational。跳过清单的项目通常回来 30+ 发现，包括 critical，然后要重新审计、付全价。 这是 Wavect 与一家通用型外包的差别。完整背景请见 Wavect vs 一家通用型开发外包。我们用一种把安全放在第一位的节奏构建 Web3 系统，这也内建在我们的区块链服务里，因此审计变成签字而非救火。 项目中由谁负责这份清单？ 该项目的 Wavect 技术负责人。他们对每一项以提交引用加测试引用签字。客户在审计移交包里收到签字清单，外部审计师会和代码一起拿到这份清单。审计师喜欢这样，因为这告诉他们把注意力集中到哪里。 最终思考 30 项、6 类、每次发布一份签字文档。这就是审前加固评审。我们不替代外部审计师，也从不这样声称。我们做的是把已经清掉明显向量的代码递给他们，让他们的费用买到深层发现，而不是显然的发现。 如果你即将把一份 Solidity 代码库送上主网，却没跑过结构化加固，你就在用审计的价做工程的活。书审计档期之前，先来找我们，不是之后。 你可能也喜欢.. 测试驱动开发 为什么我们在每一条关键路径代码库上都跑 TDD，以及它如何改变修 bug 的经济。 Wavect vs 一家通用型开发外包 通用型卖产能，我们卖产品判断加上能交付的工程能力。 区块链基础设施 继续浏览此集群 Web3 系统的网络、智能合约、支付与生产架构。 从核心文章开始Ethereum 到 Solana 迁移成本 原生 Rollup vs Based Rollup 2026 Tokenomics 落地指南：从模型到生产 德国企业可选的 10 家 Web3 与智能合约审计公司（2026） x402 支付协议指南：Coinbase、Stripe 与主流方案 解读 Open USD：一个联盟稳定币改变了什么 集群中的上一篇为什么跨链桥不断被掏空集群中的下一篇21 个 Web3 项目。Gas 成本复盘 相关服务： 智能合约开发 看看生产环境中的应用: Account Abstraction 先做决定: 如何挑选软件开发公司 只收重要内容 关注与你相关的内容 每当我们发布新文章，你会收到一封简短邮件。你可以关注整个博客，也可以只选感兴趣的主题。 Company 电子邮箱 你希望接收哪些内容？ 完整的 Wavect 博客接收六个主题下的每一篇新文章。 仅接收所选主题请在下方选择一个或多个分类。 选择主题 AI 与智能体 产品与 MVP 交付与 QA 领导力与团队 商业与监管 Web3 与隐私 我希望接收所选的 Wavect 博客邮件，并已阅读 隐私信息。我可以随时退订。 发送确认邮件→ 免费、双重确认、不使用跟踪像素。 ",
  "articleSection": "Engineering",
  "author": {
    "@id": "https://wavect.io/team/kevin-riedl/#person",
    "@type": "Person",
    "name": "Kevin Riedl",
    "sameAs": [
      "https://www.wikidata.org/wiki/Q139796365",
      "https://www.linkedin.com/in/wsdt",
      "https://github.com/wsdt"
    ],
    "url": "https://wavect.io/team/kevin-riedl/"
  },
  "dateModified": "2026-07-07",
  "datePublished": "2026-05-26",
  "description": "我们不做审计，做的是审前加固：把智能合约送外部审计之前，跑一份 30 项、6 类的清单，覆盖编译器与工具链、访问控制、算术与溢出、外部调用与重入、可升级性与存储、Gas 与 DoS 面。按我们的项目历史，全部清掉能把审计师的发现数减少约 60% 到 80%，意味着更便宜的审计和更快的主网。每一项由项目技术负责人以提交和测试引用签字，清单随代码一起交给审计师。",
  "headline": "智能合约安全检查清单（30 项）",
  "image": "https://wavect.io/img/blog/headers/header_smart-contract-security-checklist-pre-audit.svg",
  "inLanguage": "zh",
  "mainEntityOfPage": {
    "@id": "https://wavect.io/zh/blog/smart-contract-security-checklist-pre-audit/",
    "@type": "WebPage"
  },
  "publisher": {
    "@id": "https://wavect.io/#organization",
    "@type": [
      "Organization",
      "ProfessionalService",
      "LocalBusiness"
    ]
  },
  "url": "https://wavect.io/zh/blog/smart-contract-security-checklist-pre-audit/",
  "wordCount": 390
}
```

```json
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/",
      "name": "首页",
      "position": 1
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/overview/",
      "name": "博客概览",
      "position": 2
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/topics/web3-privacy/",
      "name": "Web3 与隐私",
      "position": 3
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/clusters/blockchain-infrastructure/",
      "name": "区块链基础设施",
      "position": 4
    },
    {
      "@type": "ListItem",
      "item": "https://wavect.io/zh/blog/smart-contract-security-checklist-pre-audit/",
      "name": "智能合约安全检查清单（30 项） - 博客 | ",
      "position": 5
    }
  ]
}
```
