当前位置: 首页 > ops >正文

Sui Prover:将形式化验证引入 Sui

形式化验证不再遥不可及 — — 现在所有在 Sui 上构建的开发者都能使用。由 Asymptotic 开发并向社区开放的 Sui Prover,将这种强大能力引入日常的 Sui 开发流程中。

Sui Prover 的设计初衷是为智能合约开发带来更强的安全保障,它通过支持形式化证明代码行为,提升链上逻辑的安全性、可靠性和清晰度。

开发者可以利用它数学验证合约在各种极端场景下是否仍按预期运行,避免传统测试可能遗漏的 bug。比如你可以验证:金库不可被清空、份额价格不可下降或 coin 数量保持一致 — — 这些都能被形式上证明而不是假设。

形式化验证的重要性

形式化验证是一种在所有输入和状态下,证明程序行为符合预期的方法。与测试仅验证特定情况不同,形式化验证会检查代码是否始终满足某些定义好的条件。这些条件(spec)与代码一同编写,以逻辑语言精确描述预期行为。如果代码在任何情况下违背这些条件,验证工具将捕捉到错误。

对于智能合约而言,形式化验证尤为重要。因为一个边界场景的 bug 可能导致资产永远丢失,或逻辑完全崩溃。借助形式化验证,开发者可以自信地断言:这个函数不会溢出;这个 vault 的份额价格永远不降;这些条件在所有情况下都成立,不只是测试中覆盖的场景。

虽然形式化验证好处显著,但一直以来其应用非常困难。很多区块链平台的工具支持有限、难以融入开发流程,甚至要绕过语言限制。相比之下,Move 从一开始就为安全和可验证性而设计。其资源导向模型和强静态类型系统非常适合形式化验证,使开发者能更直接地表达和验证智能合约的关键属性。

面向 Sui 开发者的实用工具

Sui Prover 就是在上述基础上构建,为 Move on Sui 提供了实用且友好的形式验证工具。开发者可以编写 spec 来验证诸如:正确的舍入逻辑、不可抽干的池、coin 数量精确保持等关键属性。一旦验证通过,这些 spec 不仅是安全保障,也作为合约集成与审计的重要文档。

该工具最初由 Asymptotic 为其审计工作而开发,并已开源,现正深刻改变 Sui 开发者编写、验证与保护智能合约的方式。

实战经验与开发优化

Sui Prover 的早期用户之一 — — 开发者 Krešimir Klas(kklas)分享了如何用形式化 spec 验证两个 DeFi 合约(AMM 和杠杆收益协议)中的关键安全属性。
他指出传统测试方法存在明显不足,比如单元测试易遗漏边界场景,模糊测试覆盖面也可能不够。而通过形式 spec 明确函数行为后,借助 Sui Prover 验证,可以获得前所未有的信心。

这些 specs 并非仅用于审计或发布后防护,也在开发过程中发挥作用。例如,在实现一个存入即发行份额的金库模块时,Sui Prover 可验证份额价格是否只升不降,以及舍入操作是否存在被利用的风险。在更复杂的逻辑中(如杠杆协议的清算机制),spec 帮助确保边界场景不会触发关键函数异常终止,既提升了安全性,也让逻辑更清晰。

构建更安全、更可靠的合约

Sui Prover 的核心价值在于:它不是基于具体输入来测试,而是验证代码在所有输入下都满足 spec,因此提供了完全不同级别的确定性。一旦底层模块验证通过,其保障将传递至更高层逻辑。

虽然形式化验证不能替代审计,也不能消除协议设计的重要性,但它能让审计更高效:明确哪些属性已经通过形式验证;使合约文档更清晰,利于集成;也能提升可靠性,特别是面对更复杂的应用。

下一步

Sui Prover 现已开源,集成于 Asymptotic 的审计流程中,欢迎开发者查阅代码库并在项目中尝试使用。可前往文档页面了解更多技术细节。

随着越来越多的合约采用形式化 spec,Sui 生态也将共同受益,构建者能更明确地保证合约行为,用户也能更安心地使用安全、可靠的 DApp。通过提升智能合约的信任度,整个 Sui 生态将迈入下一个阶段。


关于 Sui Network

Sui是基于第一原理重新设计和构建而成的L1公有链,旨在为创作者和开发者提供能够承载Web3中下一个十亿用户的开发平台。Sui上的应用基于Move智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。获取更多信息:https://linktr.ee/sui_apac

官网|英文Twitter|中文Twitter|Discord|英文电报群|中文电报群

http://www.xdnf.cn/news/12019.html

相关文章:

  • yFiles:专业级图可视化终极解决方案
  • 2025年6月4日第一轮
  • Unity大型项目资源框架
  • 运行labelme
  • 【C/C++】析构函数好玩的用法:~Derived() override
  • day44python打卡
  • AI 基础应用与提示词工程
  • 深入理解计算机进制:从原理到 C++ 实现
  • WireShark相关技巧
  • 根据重叠点云生成匹配图像之间的对应点对
  • 【二分图 图论】P9384 [THUPC 2023 决赛] 着色|普及+
  • AI数字人软件开发:赋能企业数字化转型,打造智能服务新标杆
  • c#压缩与解压缩-SharpCompress
  • MySQL EXPLAIN 命令详解
  • 为什么选择电商平台API接口服务商?
  • 剑指offer16_在O(1)时间删除链表结点
  • Google AI 模式下的SEO革命:生成式搜索优化(GEO)与未来营销策略
  • 假票入账会怎样?
  • 沉金电路板有哪些特点?
  • JDK 8 到 JDK 24 新特性大全
  • [3-02-01].第13节:三方整合 - Jedis客户端操作Redis
  • 基于VMD-LSTM融合方法的F10.7指数预报
  • return this;返回的是谁
  • 遍历继承QObject的对象的属性
  • macOS 连接 Docker 运行 postgres,使用navicat添加并关联数据库
  • Inno Setup 脚本中常用术语释义
  • Python中库的安装使用过程详解
  • Spring Boot微服务架构(十一):独立部署是否抛弃了架构优势?
  • 嵌入式Linux之RK3568
  • 本地日记本,用于记录日常。