收益:
- 能够使用人工智能基于经过验证的库(例如 OpenZeppelin)来生成框架、测试和审查草稿,并了解人类保证生产安全
- 能够通过编译、测试和测试网验证人工智能产生的代码版本、模式和访问控制
- 能够区分编译并不意味着安全,测试网和审计至关重要。
编写智能合约与普通软件不同:你编写的代码是公开的、不可变的,是直接转移资金的程序。在本单元中,您将学习如何使用人工智能作为智能合约开发助手;我们将从草稿制作到测试编写,从模式回忆到gas(交易费)优化进行学习。但让我们从一开始就明确一点:人工智能产生蓝图;人工智能产生蓝图。人类确保投入生产的代码安全。
基础第一:语言和环境
最常见的智能合约语言是 Solidity(以太坊和 EVM 的语言——以太坊虚拟机,合约运行的虚拟机——兼容链)。另一种选择是 Vyper(一种类似 Python 的语言,旨在更具约束性和可读性)。你的代码消耗gas(区块链每笔交易的成本);低效的代码是昂贵的。在提供给人工智能的上下文中保持这些术语的清晰是获得准确输出的关键。
人工智能最有价值的地方不在于“从头开始编写”,而在于生成框架+良好的模具:一个符合标准的开始,一个可以添加您的专业知识的蓝图。
在编码中使用人工智能的层次
1. 生成骨骼。人工智能快速挖掘标准代币(ERC-20)或NFT(ERC-721 - 独特的数字资产标准)的骨架。但一定要让AI使用经过验证的库:例如OpenZeppelin(社区值得信赖、经过审计的标准签约库)。规则是使用经过测试的块,而不是从头开始编写安全性。
2. 功能描述与回顾。向人工智能解释现有功能可以让您及早发现逻辑错误。
3.测试生成。 AI 擅长为边缘情况生成测试用例:零输入、数量非常大、未经授权的调用者、重复调用。这让人想起了人们跳过的场景之一。
4.气体和可读性。人工智能会标记昂贵的模式,例如不必要的存储写入,并建议替代方案。
提示:指示 AI“基于 OpenZeppelin 的审计合约构建,从头开始重写安全性”。对于人工智能来说,编写原始安全代码比使用经过测试的库风险要大得多。
弱提示/强提示
弱提示:
给我写一份代币合约。
这个提示是危险的:不清楚哪个标准、哪个链、哪个库、哪个安全要求。人工智能生成随机、可能过时或不安全的代码。
强力提示:
您的角色:高级 Solidity 开发人员。为 EVM 兼容链生成 ERC-20 代币草案。规则:- 基于 OpenZeppelin 经审计的 ERC20 和 Ownable 合约。- 明确编写 Solidity 版本和许可证 (SPDX) 行。- 只有所有者有权铸造;添加一个防止无限按下的上限。 - 为每个函数添加 NatSpec 注释。 - 从头开始编写安全性;使用标准块。 - 在末尾添加警告:“这是草案;需要审核和测试”。用 // TODO 标记您不确定的区域。
区别:强烈的提示给出了明确的角色、标准、库、安全边界、文档和验证期望。
四个可复制模板
1)基于标准的骨架:
您的角色:Solidity 开发人员。基于OpenZeppelin审计库生成[ERC-20 / ERC-721 / stake]合约框架。编写 SPDX 许可证和编译指示版本。为每个外部函数添加访问控制(谁可以调用)。重塑安全;使用标准块。这是一个草案。
2)功能回顾:
像高级开发人员一样检查以下函数:它做什么,它改变什么状态,谁可以调用它?将可能的逻辑错误和安全风险标记为假设,将每个错误和安全风险链接到代码中的一行。不要直接说“安全”;只是列出注意点。
3)测试场景草案:
为本合同提出测试用例(可以是 Foundry/Hardhat 的草案)。具体涵盖限制情况:零输入、数量非常大、未授权调用、重入调用、资金不足。写下每个测试确认的内容。
4)气体和可读性审查:
在这个合约中,标记出可以降低gas成本的模式:不必要的存储写入、循环中的外部调用、重复计算。解释每个建议之前/之后的差异。推荐破坏安全的优化;如果不清楚,请说“询问审核员”。
三个迷你箱(数量)
案例 1 — 骷髅节省了 4 个小时。一个团队在 30 分钟内挖掘了一份经过审计的、基于图书馆的 AI 归属合同的框架;手动耗时约 4 小时。该团队将时间投入到安全和测试上。收益不是来自于转移安全性,而是来自于加速繁琐的框架。
案例 2 — 过时版本陷阱。 AI 产生了一种通过转账发送原始以太币的模式,但由于训练数据已过时,因此不再推荐这种模式。开发人员注意到了这一点,并将其更改为当前的基于调用和重入保护的模式。教训:AI 的库/模式始终被确认是最新的;人工智能不知道训练截止日期之后的情况。
案例3——测试草案弹出隐藏的bug。 AI 生成的“未经授权的调用者”测试表明,开发人员忘记了函数中的访问控制。 onlyOwner 缺少 1 条线路,在测试网上 5 分钟就被捕获;主网上可能存在资金损失。教训:人工智能弥补了人类在测试中的盲点。
使用 AI 记住安全模式
人工智能擅长提醒您已知的漏洞模式,例如清单。最常见的模式:
- 可重入:进行外部调用而不更新状态。解决方案:检查-效果-交互顺序,重入防护。
- 缺乏访问控制:任何人都可以调用关键功能。
- 整数溢出/不足:Modern Solidity 捕获了其中的大部分,但在低级代码中仍然存在风险。
- 输入验证不足:零地址、零数量控制。
- Oracle依赖:对外部数据(如价格)的盲目信任。
注意:AI可以调用此列表,但不能保证列表中的项目是否在您的特定代码中。清单是一个开始;它不能替代容器控制。
掌握正确的上下文:人工智能编写优秀代码的秘诀
人工智能生成的代码的质量直接取决于您为其提供的上下文的质量。在 Web3 中,这一点尤其重要,因为一个小细节(哪个链、哪个 Solidity 版本、哪个代币标准)会改变整个输出。一个好的上下文包括:
- 目标链和环境:以太坊主网还是第 2 层(在主链之上运行的更便宜的侧链)? Gas 成本和一些功能因链而异。
- 版本和库:哪个 Solidity 版本,哪个 OpenZeppelin 版本?如果未指定版本,AI 可能会生成过时的、已弃用的模式。
- 安全要求:有上限吗,可以暂停,可以增加吗?这些应该从一开始就说。
- 约束:明确的限制,例如“不要使用汇编”、“避免外部调用”、“优化gas但保持可读性”。
另一个强大的技术是先向人工智能询问计划,然后是代码:“首先列出这个合约的功能以及每个合约将做什么;一旦我批准了,就编写代码。”这可以尽早发现人工智能走向错误的方向,并允许您保留架构决策。
提示:问AI“你为什么要这样写这段代码?”问。解释其基本原理不仅可以加快您的学习速度,还可以使任何逻辑错误(例如错误的安全假设)暴露出来。不要相信无法保护自己代码的人工智能的输出。
常见错误
- 从头开始将安全性融入人工智能。使用经过测试的库。
- 不确认人工智能产生的版本/模式。训练数据可能是旧的。
- 绕过测试网。每个草案在上线之前都应该在测试网络上运行。
- 不添加 NatSpec/文档。检查和维护变得困难。
- “它是经过编译的,所以它是安全的”误解。被编译并不意味着安全。
- 忘记访问控制。这是最常见且代价最高的错误之一。
综上所述
- 在智能合约编写中,人工智能产生框架、测试和审查草稿;人为保障生产安全。
- 不是从头开始构建安全性,而是基于经过验证的库(例如 OpenZeppelin)。
- YZ 生产的版本和图案始终是最新的。
- 测试存根对于捕获人类盲点(限制情况、访问控制)非常有价值。
- 被编译并不意味着安全;测试网和审计是必须的。
应用任务
对于简单的 ERC-20 代币,请使用上面的“基于标准的框架”提示生成草案。然后:(1) 检查它是否使用已检查的库,(2) 检查访问控制,(3) 使用“测试用例草稿”提示生成测试,并实际运行至少一个恶意调用者测试。找到并记下人工智能错过的至少一个安全点。
清单
- [ ] 我已经在提示中明确说明了标准和链条。
- [ ] 我想要经过验证的基于库的制作。
- [ ] SPDX 许可证和编译指示版本可用。
- [ ] 每个关键功能都有访问控制。
- [ ] 我创建并运行了极限情况测试。
- [ ] 我确认库/模式是最新的。
- [ ] 我对代码进行了标记,用于审计和测试;我没有在主网上不受监督地得到它。