Cairo 不断发展。为了方便社区,我们创建了一个公共面板来描述即将到来的酷炫功能。
新的合约语法即将与 Starknet alpha v0.12.0 一起推出,只需要最少的代码,即可显着丰富智能合约语言。
随着 Cairo 1.1.0 在 Starknet 主网发布,以及 Starknet v2 即将上线,我们已经达到了这个语言成熟度的一个重要里程碑。从文档、书籍到 Starknet 的 discord,您应该可以获得足够的资源来着手工作,并从 Cairo 0 迁移。
Cairo v1 自早期 alpha 版本以来已经有了显着的发展,达到了与 Cairo 0 功能对等,并在此基础上积累了新功能(基本循环现已可用,并且更多功能正在开发中)。这篇文章目的是阐明更多关于 Cairo 的短期路线图:目前正在做什么以及开发人员在未来几周和几个月内可以期待的内容。未来,您可以通过跟踪 Github 上的 cairo-roadmap board 来了解该语言的最新发展或计划。
除了高级语言的重大进展之外,我们认为有必要强调 Cairo 的基本优势,以及为什么我们认为它是未来区块链扩展的基础。
从一开始,Cairo 就是为编写可证明程序而设计的最高效语言。如原始论文中所述,Cairo 虚拟机(VM)的架构旨在为 Cairo 程序执行高效生成 STARK 证明,使其成为有效性证明 Rollups 的理想基础。 Cairo v2 是当今我们拥有的新的类 Rust 语言,它建立在这些基础之上,但旨在为广泛的开发人员社区提供人体工程学、安全性以及易于学习和编写便捷性方面的服务。 Cairo 在过去两年中经历的演变,使其从一种小众低级语言变成了一种对开发人员友好的高级语言,在证明和扩展效率方面具备优势。
不要再说「 Cairo 1 — 编译器版本 vX.Y.Z」了。从现在开始,请直接称它 Cairo 吧!
使用新的 Cairo 编译器,我们遵循语义版本控制标准;也就是说,编译器版本由三位数字组成,最重要的数字的变化表示重大的改变。在下一个 Cairo 版本中,我们对智能合约语法进行了重大更改(后文有详细描述),因此正确的做法是将版本升级到 Cairo v2。为了避免这些麻烦的符号,我们将不再说 Cairo 1,从现在开始,用(唯一的)编译器版本来标识该语言的版本。原始语言未来仍可在 Starknet 之外的不同环境中使用,将被称为 「Cairo 0」。
在下面的章节中,我们将回顾该语言即将到来的主要发展,并解释它们如何影响 Cairo 的开发者体验。
虽然与 Cairo 0 的功能对等是一个重要的里程碑,但这绝对不是最终目标。高级语言总是可以改进的,并且还有更多的功能正在开发中。您可以查看路线图,了解正在开发的功能,并跟踪待办事项。几个值得一提的事情有:
组件:新合约语法的下一阶段,允许合约导入外部库中定义的组件。
Keccak 和 Secp-k1:已包含在 Cairo v2 中,它们将允许在即将推出的 Starknet 版本上验证以太坊签名。
支持有符号的整数。
Secp-r1 曲线运算:这将允许使用本机硬件来签署交易,从而简化与 Starknet 交互的用户体验更。
字符串:(长)字符串的原生类型,允许标准字符串操作。这是一个基本功能,NFT 和游戏项目对此也有很高的需求。
迭代器:这些将使我们能够丰富循环语法,并更方便地迭代数组/跨度。
目前 Starknet 智能合约的语法大部分继承了之前的 Cairo 0 设计。该设计存在一些我们希望解决的问题。迁移到新语法的目的是通过使合约的行为更加明确来提高安全性。通过为合约的外部函数、存储和事件引入更多结构,我们可以大大降低 bug 的发生概率。这将有助于保护协议免受潜在的黑客攻击以及资金损失。此外,新语法允许我们引入可扩展性,这是社区强烈要求的功能,它允许开发人员轻松使用外部库编写的组件。
新语法需要进行重大更改。虽然我们选择在现阶段尽可能避免重大变更,但经过内部和社区讨论后,我们得出的结论是,这是一条未来会带来回报的正确道路。
这些更改在社区论坛中发布的一篇更具技术性的帖子中进行了详细讨论(有关即将发生的更改的全面概述,请参阅该帖子)。这里我们只想强调,只有合约的「最外层」(外部函数和事件的定义)需要修改。您现有的 Cairo v1 代码只需要稍作调整(请参阅文档以获取快速迁移指南)。另一方面,新语法的好处非常显着:使用外部库中的组件(处理大型项目时的一个关键功能)将变得很平常,并且不再需要临时的解决方法。
本文中描述的一些即将发生的变化(特别是新的合约语法)将意味着语言的重大变化。虽然在 Cairo v2 之后,大部分重大更改已经成为过去,但从现在开始致力于向后兼容还为时过早。也就是说,在 Starknet 之上开发智能合约的项目需要具备稳定性,并需要进行仔细的审计,这对我们来说是一个重要的考虑因素。为了解决这些问题,我们对稳定性提供了以下保证:
任何在 Starknet 上声明的类型将继续保持原有的工作方式,并且不受语言变化的影响。
任何部署在 Starknet 上的合约将继续保持原有的工作方式,并且不受语言变化的影响。
对于每一次重大的语言升级,以前版本编写的合约将继续在 Starknet 上可声明至少六个月。
例如,如果您正在使用 Cairo 版本 X 开发项目(或接近部署/在审计阶段),并且 Cairo Y 已发布重大更改,那么使用版本 X 编写的合约仍将在 Starknet 上被接受至少 6 个月。也就是说,您有至少 6 个月的时间将您的合约部署在 Starknet 上,此时它们将永远受到第 1 点和第 2 点的保护。
随着新合约语法的发布(并在即将到来的 Starknet v0.12.0 上提供)以及后续大部分的重大更改,Cairo 现在已经变得足够稳定且功能和丰富,足以支持复杂的应用程序,并可以移植现有的 Cairo 0 逻辑。此外,Starknet 的向后兼容性可以确保即使语言发生重大变化,您也将有足够的时间(至少 6 个月)来完成合约的开发、审计和部署。
Cairo 持续发展,并已经到达了一个阶段,它大大超越了原始的语言。如果您还没有接触到它,现在是时候参与其中了。我们欢迎开发者社区积极参与讨论,可以直接在编译器 repo 上提出问题,也可以在 cairo Discord 频道或 Starknet 社区论坛上发帖。希望这篇文章(以及更具技术性的文章)有助于阐明预期的变化,并消除大家对 Cario 未来的大部分疑虑。