Solidity面试题更新 2026-08-03

在 Solidity 开发中,Checks-Effects-Interactions 模式的核心思想是什么?采用这种模式能够规避哪一类常见的安全风险?请具体说明。

考察说明

考察对 Solidity 安全编码规范的理解,特别是对状态更新与外部调用顺序的掌握。

回答思路

  1. 【回答框架 1】Checks-Effects-Interactions 模式是一种 Solidity 智能合约的编码规范,其核心思想是:在函数执行时,先进行条件检查,然后更新合约状态,最后再与外部合约进行交互。该模式旨在通过合理安排操作顺序来规避重入攻击等安全风险。
  2. 【回答框架 2】重入攻击的原理是:当合约调用外部合约时,会暂停当前合约的执行,并将控制权交给外部合约。攻击者可以在此时利用合约状态尚未更新的漏洞,再次调用原函数,导致状态变更不一致或重复执行。例如,在转账后再更新余额,攻击者可以在转账回调中反复提取资金。
  3. 【回答框架 3】遵循 Checks-Effects-Interactions 模式:首先执行所有必要的条件检查,例如余额验证、权限校验等;然后立即更新合约状态,例如减少调用者的余额;最后再进行外部交互,例如转账调用。这样即使外部调用被重入,由于状态已更新,检查会失败,从而阻止攻击。
  4. 【回答框架 4】该模式不仅有效防止重入攻击,还提高了代码的可读性和可维护性,是 Solidity 开发中的最佳实践。此外,还可以配合使用互斥锁等方式作为补充防御。
  5. 【关键点 1】该模式明确的执行顺序:先检查条件,再更新状态,最后外部交互。
  6. 【关键点 2】其核心目的是防止重入攻击,通过确保状态在外部调用前已更新来阻断攻击路径。
  7. 【关键点 3】在编写涉及外部调用的函数时,应始终遵循此模式,并注意状态变量的可见性和一致性。
  8. 【易错点 1】过度依赖该模式而忽略其他安全防护,如条件竞争、回调恶意代码等,仍可能存在风险。
  9. 【易错点 2】在复杂交互中,可能难以严格保证顺序,需要结合实际场景灵活处理,比如使用修饰器或库来强化约束。
  10. 【易错点 3】注意不要将状态更新和外部交互的代码混在一起,否则可能破坏模式的防御效果。