# Cairo v2 — 新合约语法

By [Untitled](https://paragraph.com/@0xe29bae43a910e40b20c6603972c502990cbc47c2) · 2023-11-01

---

目前Starknet智能合约的语法大部分继承了之前的Cairo 1.0设计。该设计存在一些我们希望解决的问题。我们转向新语法的目标是通过使合约的行为更加明确来提高安全性。通过为合约的外部函数、存储和事件引入更多结构，我们可以显着降低出现错误的可能性。这将有助于保护协议免受潜在的黑客攻击和资金损失。此外，新语法允许我们引入可_扩展性_，这是社区强烈要求的功能，它允许开发人员轻松使用外部库编写的组件。

新语法需要进行重大更改。虽然我们选择在现阶段尽可能避免重大变更，但经过内部和社区讨论后，我们得出的结论是，这是未来会带来红利的正确道路，这里我们只想强调，**只有合约的“最外层”（外部函数和事件的定义）需要修改**。您现有的 Cairo v1 代码只需要进行少量调整（请参阅文档以获取[快速迁移指南](https://docs.starknet.io/documentation/architecture_and_concepts/Cairo_on_Starknet/contract-syntax/)）。另一方面，新语法的好处非常显着：使用外部库中的组件（处理大型项目时的一个关键功能）将变得很平常，并且不再需要临时的解决方法。

**向后兼容性保证**
===========

文章中描述的一些即将发生的变化（特别是新的合约语法）将意味着语言的重大变化。虽然在 Cairo v2 之后，大部分重大更改已经过去，但从现在开始致力于向后兼容还为时过早。也就是说，在 Starknet 之上开发智能合约的项目需要稳定性和仔细的审核，这对我们来说是一个重要的考虑因素。为了解决这些问题，我们提供以下稳定性保证：

1.  Starknet 上声明的任何类都将继续像以前一样工作，并且不会受到语言变化的影响
    
2.  部署在 Starknet 上的任何合约都将继续像以前一样工作，并且不会受到语言变化的影响
    
3.  对于每一次重大语言升级，以前版本编写的合约将继续在 Starknet 上声明至少六个月。
    

例如，如果您正在使用 Cairo 版本 X 开发项目（或接近部署/在审核阶段），并且 Cairo Y 发布时带有重大更改，则使用版本 X 编写的合约仍将在 Starknet 上接受至少 6**年月**。也就是说，您有至少六个月的时间将您的合约部署在 Starknet 上，此时它们将永远受到第 1 点和第 2 点的保护。

**我应该什么时候迁移？**
==============

随着新合约语法的发布（并在即将发布的 v0.12.0 中在 Starknet 上提供）以及我们身后的大量重大更改，Cairo 现在足够稳定和丰富，足以支持复杂的应用程序，并移植现有的 Cairo 0 逻辑。此外，Starknet 的向后兼容性保证确保即使语言发生重大变化，您也将有足够的时间（至少六个月）来完成合约的开发或审核和部署。

**概括**
======

Cairo 不断发展，已经达到了极大地绕过原始语言的地步。如果您还没有，现在是时候参与其中了。我们欢迎开发者社区积极参与讨论，可以直接在[编译器存储库](https://github.com/starkware-libs/cairo)上提出问题，也可以在[cairo Discord 频道](https://discord.gg/qypnmzkhbc)或 Starknet[社区论坛](https://community.starknet.io/latest)上发帖。希望这篇文章（及其技术性更强的文章[）](https://docs.google.com/document/d/1qemNmIWYuYyVg0f9J_SO6SqGQVDPOBVt10wXH0rrT_U/edit#)有助于阐明预期的变化，并消除对开罗未来的大部分疑虑。

---

*Originally published on [Untitled](https://paragraph.com/@0xe29bae43a910e40b20c6603972c502990cbc47c2/cairo-v2)*
