模糊测试

微信扫码分享
使用 Foundry 进行合约测试

使用 Foundry 进行合约测试

视频 AI 总结: 视频主要讲解智能合约测试的重要性及基于 Foundry 框架的测试方法。测试开发时间通常是编写的 2-3 倍,需覆盖所有分支及边界条件。利用 AI 可快速生成更全面的测试用例。核心工具包括 console.log 调试、单元测试、模糊测试、不变量测试和分叉测试,并强调 gas 优化及 gas snapshot 对比。详细介绍了 cheat codes(如 prank、deal、expectRevert、expectEmit)模拟账户、余额、区块、时间戳等场景,以及使用 Tenderly 或 cast 命令进行链上交易重放调试。 关键信息: - 测试时间占比高,需覆盖正常与异常分支。 - AI 辅助测试可提升全面性,测试用例比代码更重要。 - 本地调试用 console.log(仅本地环境),链上调试可用 Tenderly 或 cast 交易重放。 - 单元测试:以 test 开头,无状态,每次独立。Forge Test 命令支持 match 筛选和 verbose 日志输出。 - Gas 报告:关注平均/中位数 gas,利用 gas snapshot 和 diff 对比优化前后消耗。 - 模糊测试(Fuzz):随机输入验证健壮性,可用 bound 限定范围,结合 expect revert 处理异常。 - 不变量测试(Invariant):设定始终成立的约束(如总供应量不变),随机调用合约方法后验证。 - 分叉测试:基于主网/测试网状态创建本地分叉,依赖已部署合约(如 USDT、Uniswap)时使用。可在代码中用 vm.createFork 和 vm.selectFork 控制。 - Cheat codes 常用操作:模拟区块号/时间戳、设置余额(deal)、模拟调用者(prank/startPrank)、断言错误(expectRevert)、断言事件(expectEmit)。

114 0 0 2026-05-20 10:15
Foundry 智能合约测试 + AI 编写测试

Foundry 智能合约测试 + AI 编写测试

视频 AI 总结: 1. **核心内容概括:** 视频深入讲解了区块链智能合约测试的重要性,强调由于链上代码不可修改,部署前发现并解决问题至关重要。它介绍了Foundry测试框架的强大功能,包括验证函数预期、优化Gas消耗、调试日志、以及模拟EVM环境(如区块高度、时间戳、用户身份、账户余额)。视频还详细阐述了模糊测试(Fuzz Testing)、不变量测试(Invariant Testing)和分叉测试(Fork Testing)等高级测试方法,并多次强调AI在辅助生成和分析测试用例方面的巨大潜力,能显著提高测试效率。 2. **视频中提出的关键信息:** * **测试的重要性:** 链上代码不可修改,因此在部署前发现问题是核心。 * **测试目标:** 验证智能合约函数是否符合预期,关注事件触发,优化Gas消耗,进行调试。 * **调试手段:** 使用`console.log`进行本地日志调试;Tenderly可用于链上调试和交易模拟。 * **Foundry测试框架基础:** * 测试用例需继承`Test`,测试函数以`test`开头,每个测试用例独立无状态。 * 运行测试:`forge test`,`-v`显示详细日志,`--match-test`运行指定测试。 * Gas报告:`forge test --gas-report`,提供函数最小、平均、最大Gas消耗及调用次数。 * 快照:`forge snapshot`,用于生成快照文件以对比Gas变化。 * **EVM环境模拟工具(作弊码):** * `vm.roll()`:模拟区块高度变更,用于时间依赖逻辑。 * `vm.warp()`:模拟时间戳变更。 * `vm.prank()` / `vm.startPrank()` / `vm.stopPrank()`:模拟`msg.sender`,以不同用户身份执行操作。 * `vm.deal()`:重置指定地址的ETH余额。 * `vm.etch()`:加载指定存储槽的数据。 * `vm.env()`:读取环境变量。 * **断言机制:** * `vm.expectRevert()`:断言合约执行会失败(预期错误)。 * `vm.expectEmit()`:断言合约会触发特定事件。 * **模糊测试 (Fuzz Testing):** * 通过随机生成输入参数,测试函数在各种条件下的健壮性。 * 可指定参数范围和条件,默认运行256次。 * **不变量测试 (Invariant Testing):** * 模拟合约函数组合调用序列,验证在复杂操作下,合约的特定约束条件(如ERC-20总供应量不变)是否始终保持。 * **分叉测试 (Fork Testing):** * 在本地模拟主网或测试网的实时状态,用于测试与现有链上合约(如USDT、Uniswap)的交互。 * 可通过`forge test --fork-url`或`vm.createFork()`实现。 * **AI辅助测试:** 强调AI在生成测试用例、分析Gas报告、解决测试问题方面的强大辅助作用,能大幅提升开发效率。

98 0 0 2026-03-11 10:20
DeFi 安全 101 - 从模糊测试到形式化验证

DeFi 安全 101 - 从模糊测试到形式化验证

视频 AI 总结: 该视频主要讲解了如何从模糊测试(Fuzzing)过渡到形式化验证(Formal Verification),并对比了两者的异同。核心观点是,模糊测试和形式化验证都是发现智能合约漏洞的工具,但形式化验证能提供更强的保证。视频通过一个计算二进制数中“1”的个数(pop count)的例子,以及一个简单的 Vault 合约的例子,演示了如何使用 Certora 的工具进行形式化验证,并强调了在智能合约开发中尽早同时使用这两种方法的重要性。 视频中提出的关键信息: * **模糊测试 (Fuzzing)**:通过生成大量随机输入来测试代码,寻找违反预设属性的情况。虽然易于上手,但覆盖范围有限,只能提供概率性的保证。 * **形式化验证 (Formal Verification)**:通过数学证明来验证代码是否完全符合规范。可以覆盖所有可能的输入,提供更强的保证,但学习曲线较陡峭。 * **不变性 (Invariants)**:在合约的所有状态下都必须保持为真的属性。形式化验证可以用来证明不变性在合约的任何状态下都成立。 * **Certora Prover**:Certora 的形式化验证工具,可以将代码和规范编译成逻辑公式,并使用求解器来验证公式的有效性。 * **CVL (Certora Verification Language)**:Certora 的验证语言,用于编写形式化规范。 * **Solvency**:一种重要的 Vault 合约属性,指总的 shares 数量小于等于总的 tokens 数量。 * **尽早使用**:建议在智能合约开发的早期阶段就开始使用模糊测试和形式化验证,以便尽早发现并修复漏洞。

1716 0 0 2025-12-14 19:17
DeFi 安全 101 - 模糊测试

DeFi 安全 101 - 模糊测试

视频 AI 总结: 该视频主要讲解了如何使用模糊测试(Fuzzing)技术来发现智能合约中的安全漏洞,并将其优化成可利用的漏洞。演讲者分享了从最初的模糊测试失败,到最终发现并优化漏洞,实现高达 50,000 倍的利用的完整过程。核心在于利用状态模糊测试,结合 Foundry 工具,以及 Echidna 优化模式,对智能合约进行安全分析。 关键信息: * **状态模糊测试 (Stateful Fuzzing)**:通过尝试随机组合来改变合约状态,从而发现潜在漏洞。 * **Foundry 工具**:用于快速设置和使用模糊测试,但可能导致虚假的安全感,因为测试仅限于硬编码的操作序列。 * **Echidna 工具**:用于优化模糊测试结果,找到最大化漏洞利用的场景。 * **逐步升级 (Progressive Escalation)**:从简单的单元测试开始,逐步增加测试的复杂性,最终实现漏洞利用。 * **覆盖率报告 (Coverage Report)**:用于评估模糊测试的有效性,并指导测试方向。 * **真阳性与假阳性**:强调区分真正的漏洞和因不正确的测试属性导致的假阳性。 * **符号执行 (Symbolic Execution)**:用于快速验证属性是否可被破坏,但无法保证实际可利用性。 * **实际案例**:通过一个 Oracle 合约的例子,展示了如何使用这些技术发现并优化漏洞,最终实现高倍数的漏洞利用。

1384 0 0 2025-12-14 12:40
VS Code第一个 Solana 插件

VS Code第一个 Solana 插件

视频 AI 总结: 该视频评测了 Aki Blockchain 开发的 Solana VS Code 扩展,该扩展旨在通过静态代码分析和模糊测试覆盖率可视化来增强 Solana 开发的安全性。视频作者安装并测试了该扩展,发现它主要针对 Anchor 框架,并且存在一些bug和不准确的警告。尽管如此,作者认为该扩展在某些情况下仍然有用,可以帮助开发者发现潜在的安全问题,但不能完全依赖它,开发者仍需保持警惕。 关键信息: * 该扩展提供静态代码分析,例如检查是否缺少签名者验证,以及模糊测试覆盖率可视化。 * 该扩展主要针对 Anchor 框架,对原生 Rust 程序的支持有限。 * 该扩展存在一些bug,例如无法正确刷新警告信息,以及给出不准确的建议。 * 该扩展可以帮助开发者发现潜在的安全问题,但不能完全依赖它。 * 作者建议开发者安装并尝试该扩展,但要保持警惕,不要盲目相信其提供的警告信息。

1014 0 0 2025-11-05 14:33
智能合约审计、DeFi安全课程 | Tswap 重新审计(续)

智能合约审计、DeFi安全课程 | Tswap 重新审计(续)

视频 AI 总结: 该视频主要讲解了在智能合约安全审计中如何利用模糊测试(Fuzzing)和不变性测试(Invariant Testing)来发现漏洞,并以 TSWAP 协议为例,展示了从无到有构建测试套件的过程。视频强调了理解协议核心不变性的重要性,并介绍了无状态模糊测试、有状态模糊测试(包括 open 方法和 handler 方法)等不同测试策略。通过实例演示,说明了如何编写测试代码,以及如何解读测试结果,最终成功发现 TSWAP 协议中的一个漏洞。 视频中提出的关键信息包括: 1. **模糊测试(Fuzzing)**:通过向系统输入随机数据来尝试破坏它,分为无状态和有状态两种。 2. **不变性测试(Invariant Testing)**:验证系统中的某些属性是否始终成立,即使在随机输入下。 3. **无状态模糊测试**:每次测试都从头开始,不保留之前的状态。 4. **有状态模糊测试**:每次测试都基于前一次测试的状态,模拟更复杂的交互场景。 5. **Handler 方法**:通过创建一个 Handler 合约来限制模糊测试的范围,使其更贴近实际使用场景。 6. **核心不变性**:协议中必须始终保持的属性,例如 TSWAP 协议中的 x * y = k。 7. **WEIRD ERC20s**:具有非标准行为的 ERC20 代币,可能导致协议出现漏洞。 8. **代码覆盖率**:使用 Foundry 提供的工具来检查测试覆盖率,确保测试充分。 9. **工具链**:Slither、Adarin 等静态分析工具可以辅助发现潜在问题。 10. **手动代码审查**:即使有自动化工具,也需要进行手动代码审查,以发现逻辑错误和潜在风险。 11. **报告撰写**:清晰地描述漏洞、影响、复现步骤和修复建议。

1502 0 0 2025-09-07 16:50
Foundry 测试:作弊码、模糊测试与不变量测试

Foundry 测试:作弊码、模糊测试与不变量测试

视频 AI 总结: 该视频主要介绍了 Foundry 测试框架的使用,重点讲解了测试流程、常用作弊码、分叉测试、模糊测试和不变量测试。通过实例代码演示了如何使用 console.log 调试合约、编写测试用例、模拟区块链环境、进行模糊测试以及进行不变量测试。强调了测试在智能合约开发中的重要性,并鼓励开发者为自己的合约编写测试用例。 关键信息: 1. **Console.log 调试:** 可以在本地测试环境中使用 console.log 打印变量值,方便调试。 2. **测试流程:** 继承 Test 合约,使用 setup 函数初始化测试环境,使用 test 或 fuz 关键字定义测试用例。 3. **常用作弊码:** vm.warp、vm.skip、vm.prank、vm.deal、vm.mockBalance 等作弊码可以模拟区块链环境,方便测试。 4. **分叉测试:** 可以 fork 链上状态到本地进行测试,方便与真实合约交互。 5. **模糊测试:** 使用 forge fuzz 命令进行模糊测试,可以自动生成测试用例,覆盖各种边界条件。 6. **不变量测试:** 使用 invariant 关键字定义不变量测试,可以验证合约在各种状态下是否满足某些不变的条件。 7. **Gas 报告:** 使用 gas report 命令生成 gas 报告,可以帮助开发者优化合约的 gas 消耗。 8. **事件测试:** 使用 expectEmit 关键字测试合约是否触发了预期的事件。

263 0 0 2025-07-25 22:50
最佳Solana安全实践

最佳Solana安全实践

本视频是关于Solana程序(智能合约)安全性的课程,主要内容包括最佳安全实践、常见攻击向量以及安全测试方法。以下是视频的核心内容和关键论据总结: 1. **核心内容概括**: - 本周课程专注于Solana程序的安全性,强调开发者在编写智能合约时应遵循的最佳安全实践。 - 课程内容包括代码质量、测试、模糊测试(fuzzing)和审计等安全支柱,旨在帮助开发者提高智能合约的安全性。 2. **关键论据和信息**: - **代码质量**:开发者需了解常见的安全漏洞(如OWASP 10),并在设计阶段就考虑安全性,采用多层防御策略。 - **测试的重要性**:不仅要测试程序的正确性,还要模拟攻击者的思维,进行全面的安全测试,包括集成测试和模糊测试。 - **模糊测试**:通过输入大量随机数据来发现潜在漏洞,强调其在发现安全问题中的有效性。 - **审计**:建议在完成代码质量和测试后进行审计,以获得独立的安全评估,审计过程应包括对系统整体架构的理解和外部依赖的检查。 - **安全意识**:开发者和团队成员需保持安全意识,定期学习和更新安全知识,以应对不断变化的安全威胁。 总之,视频强调了在Solana智能合约开发中,安全性是一个多层次的过程,开发者需要从代码质量、测试到审计等各个方面进行全面考虑,以确保程序的安全性。

1398 0 0 2025-04-14 15:45
Solana Anchor程序的模糊测试与Trident I

Solana Anchor程序的模糊测试与Trident I

本视频是Solana审计员训练营的第三课,主要介绍了模糊测试(fuzzing)及其工具Trident。以下是视频的总结: 1. **核心内容概括**: 视频首先解释了模糊测试的概念及其重要性,接着介绍了Trident的功能和架构,最后通过实际示例演示了如何使用Trident进行模糊测试。 2. **关键论据和信息**: - **模糊测试的定义**:模糊测试是一种自动化技术,通过生成随机的有效、无效或意外输入数据来测试程序,以发现潜在的未知漏洞和错误。 - **模糊测试的重要性**: - 提高测试和安全性的信心。 - 覆盖意外的边界情况和错误。 - 低维护成本,一旦设置好可以长时间运行。 - 易于扩展,添加新指令时只需调整输入。 - **Trident的特点**: - 作为引导模糊测试工具,支持自定义生成的数据。 - 能够处理每秒数十到数百条指令,未来目标是提高到数千条。 - 支持跨程序调用(CPI),可以与主网程序进行模糊测试。 - **实际示例**:视频中展示了如何初始化Trident,编写模糊测试,运行测试并分析输出,最终发现了一个由于输入超出范围而导致的程序崩溃。 通过本课,观众能够理解模糊测试的基本原理及其在提高Solana程序安全性方面的应用,同时掌握使用Trident进行模糊测试的基本流程。

1465 0 0 2025-04-14 10:03