Hello, World
创建一个项目目录你首先要做一个目录来存储你的Cairo代码。对于Cairo来说,你的代码放在哪里并不重要。 但对于本书中的练习和项目来说,我们建议在你的主目录下建立一个 cairo_projects 目录,并将你的所有项目存放在这里。 打开一个终端,输入以下命令,建立一个 cairo_projects 目录 并在 cairo_projects 目录下为 "Hello, world!"项目建立一个目录。注意:从现在起,对于书中显示的每个示例,我们都假定 你都是在 Scarb 项目目录中进行编码。如果您没有使用 Scarb,并试图从其他目录运行示例,可能需要相应调整命令或创建一个 Scarb 项目。对于Linux、macOS和Windows上的PowerShell,输入:mkdir ~/cairo_projects cd ~/cairo_projects 对于Windows CMD,请输入以下内容:> mkdir "%USERPROFILE%\cairo_projects" > cd /d "%USERPROFILE%\cairo_projects" 用Scarb创建一个项目让我们使...
Hello, World
创建一个项目目录你首先要做一个目录来存储你的Cairo代码。对于Cairo来说,你的代码放在哪里并不重要。 但对于本书中的练习和项目来说,我们建议在你的主目录下建立一个 cairo_projects 目录,并将你的所有项目存放在这里。 打开一个终端,输入以下命令,建立一个 cairo_projects 目录 并在 cairo_projects 目录下为 "Hello, world!"项目建立一个目录。注意:从现在起,对于书中显示的每个示例,我们都假定 你都是在 Scarb 项目目录中进行编码。如果您没有使用 Scarb,并试图从其他目录运行示例,可能需要相应调整命令或创建一个 Scarb 项目。对于Linux、macOS和Windows上的PowerShell,输入:mkdir ~/cairo_projects cd ~/cairo_projects 对于Windows CMD,请输入以下内容:> mkdir "%USERPROFILE%\cairo_projects" > cd /d "%USERPROFILE%\cairo_projects" 用Scarb创建一个项目让我们使...
Cairo v2 — 新合约语法
目前Starknet智能合约的语法大部分继承了之前的Cairo 1.0设计。该设计存在一些我们希望解决的问题。我们转向新语法的目标是通过使合约的行为更加明确来提高安全性。通过为合约的外部函数、存储和事件引入更多结构,我们可以显着降低出现错误的可能性。这将有助于保护协议免受潜在的黑客攻击和资金损失。此外,新语法允许我们引入可扩展性,这是社区强烈要求的功能,它允许开发人员轻松使用外部库编写的组件。 新语法需要进行重大更改。虽然我们选择在现阶段尽可能避免重大变更,但经过内部和社区讨论后,我们得出的结论是,这是未来会带来红利的正确道路,这里我们只想强调,只有合约的“最外层”(外部函数和事件的定义)需要修改。您现有的 Cairo v1 代码只需要进行少量调整(请参阅文档以获取快速迁移指南)。另一方面,新语法的好处非常显着:使用外部库中的组件(处理大型项目时的一个关键功能)将变得很平常,并且不再需要临时的解决方法。向后兼容性保证文章中描述的一些即将发生的变化(特别是新的合约语法)将意味着语言的重大变化。虽然在 Cairo v2 之后,大部分重大更改已经过去,但从现在开始致力于向后兼容还为时过...
Cairo v2 — 新合约语法
目前Starknet智能合约的语法大部分继承了之前的Cairo 1.0设计。该设计存在一些我们希望解决的问题。我们转向新语法的目标是通过使合约的行为更加明确来提高安全性。通过为合约的外部函数、存储和事件引入更多结构,我们可以显着降低出现错误的可能性。这将有助于保护协议免受潜在的黑客攻击和资金损失。此外,新语法允许我们引入可扩展性,这是社区强烈要求的功能,它允许开发人员轻松使用外部库编写的组件。 新语法需要进行重大更改。虽然我们选择在现阶段尽可能避免重大变更,但经过内部和社区讨论后,我们得出的结论是,这是未来会带来红利的正确道路,这里我们只想强调,只有合约的“最外层”(外部函数和事件的定义)需要修改。您现有的 Cairo v1 代码只需要进行少量调整(请参阅文档以获取快速迁移指南)。另一方面,新语法的好处非常显着:使用外部库中的组件(处理大型项目时的一个关键功能)将变得很平常,并且不再需要临时的解决方法。向后兼容性保证文章中描述的一些即将发生的变化(特别是新的合约语法)将意味着语言的重大变化。虽然在 Cairo v2 之后,大部分重大更改已经过去,但从现在开始致力于向后兼容还为时过...
Cairo开发流程简介
基本概念StarkNet - 一个无需许可的去中心化 ZK-Rollup,作为以太坊上的 L2 网络运行,任何 dApp 都可以在不影响以太坊的可组合性和安全性的情况下实现无限规模的计算。Cairo - 一种编程语言用于可被证明程序的编写,使得其他验证者确信该程序被正确执行。StarkNet的基础设施及其合约都是使用Cairo编写的。内存模型 - 支持只读的非确定性内存,这意味着每个内存单元的值由证明者选择,但它不能随时间改变(在 Cairo 程序执行期间)。我们使用语法 [x] 来表示地址 x处的内存值。例如,如果我们在程序开始时断言 [0] = 7,那么在整个运行期间 [0] 的值将是 7。Assert - 断言声明,assert <expr0> = <expr1>,在Cairo中有2个用处:一是验证左右2边的值是否相同;二是给内存单元设置值,如“内存模型”中的例子。递归,而非循环 - 由于内存模型的不可变性,需要使用递归实现循环的功能。类型felt - field element,整型,范围在-P/2 < x < P/2,其中P的取值(StarkNet实现时)是质数2^25...
Cairo开发流程简介
基本概念StarkNet - 一个无需许可的去中心化 ZK-Rollup,作为以太坊上的 L2 网络运行,任何 dApp 都可以在不影响以太坊的可组合性和安全性的情况下实现无限规模的计算。Cairo - 一种编程语言用于可被证明程序的编写,使得其他验证者确信该程序被正确执行。StarkNet的基础设施及其合约都是使用Cairo编写的。内存模型 - 支持只读的非确定性内存,这意味着每个内存单元的值由证明者选择,但它不能随时间改变(在 Cairo 程序执行期间)。我们使用语法 [x] 来表示地址 x处的内存值。例如,如果我们在程序开始时断言 [0] = 7,那么在整个运行期间 [0] 的值将是 7。Assert - 断言声明,assert <expr0> = <expr1>,在Cairo中有2个用处:一是验证左右2边的值是否相同;二是给内存单元设置值,如“内存模型”中的例子。递归,而非循环 - 由于内存模型的不可变性,需要使用递归实现循环的功能。类型felt - field element,整型,范围在-P/2 < x < P/2,其中P的取值(StarkNet实现时)是质数2^25...
StarkNet开发
了解如何构建您的第一个 Cairo 智能合约! 在 Starknet 上编写和部署您的第一个 ERC20 代币 本文是我们正在努力帮助将开发人员带入 Starknet 生态系统的扩展内容系列的一部分。 之前,我们解释了如何使用 Protostar、Argent X 和 StarkScan 创建终极 Cairo 开发环境。 设置完成后,您就可以编写您的第一个 ERC20 代币并将其部署到 Starknet! 到本文结束时,您将了解什么是 ERC20 令牌以及如何使用 OpenZeppelin 的库创建一个。 WTF 是 ERC20 代币吗? ERC20 代币是可替代的,这意味着它们可以被另一个代币替换。这就是金钱的运作方式。一个钱包中的 20 美元钞票具有相同的价值,并且可以以与不同的 20 美元钞票相同的方式使用。 Fabian Vogelsteller 和 Vitalik Buterin 提出了 ERC20 标准,以创建一套可替代代币的通用标准。在 ERC20 标准之前,以太坊上的每个代币都是不同的,这意味着钱包必须编写自定义代码来支持它们。 ERC20包括以下主要方法: na...
StarkNet开发
了解如何构建您的第一个 Cairo 智能合约! 在 Starknet 上编写和部署您的第一个 ERC20 代币 本文是我们正在努力帮助将开发人员带入 Starknet 生态系统的扩展内容系列的一部分。 之前,我们解释了如何使用 Protostar、Argent X 和 StarkScan 创建终极 Cairo 开发环境。 设置完成后,您就可以编写您的第一个 ERC20 代币并将其部署到 Starknet! 到本文结束时,您将了解什么是 ERC20 令牌以及如何使用 OpenZeppelin 的库创建一个。 WTF 是 ERC20 代币吗? ERC20 代币是可替代的,这意味着它们可以被另一个代币替换。这就是金钱的运作方式。一个钱包中的 20 美元钞票具有相同的价值,并且可以以与不同的 20 美元钞票相同的方式使用。 Fabian Vogelsteller 和 Vitalik Buterin 提出了 ERC20 标准,以创建一套可替代代币的通用标准。在 ERC20 标准之前,以太坊上的每个代币都是不同的,这意味着钱包必须编写自定义代码来支持它们。 ERC20包括以下主要方法: na...