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