Cover photo

通过Starklings学习Cairo 1.0 (一)

Starklings

在之前的Cairo 0.10版本的学习中,发现一个非常神奇的工具Starklings,可以以一种交互式的方式轻松学习Cairo,有点像学习Solidity时的打僵尸教程(crypto zombie),是由OnlyDust编写的,OnlyDust也是Starkware的战略合作伙伴。

https://github.com/onlydustxyz/starklings

最近偶然看到了Cairo 1.0版本的Starklings,不过好像不是OnlyDust官方出品,但是使用方法上和之前非常类似,我也不挑了,能学就行。

目前该repo只更新了4则非常简单的cairo 1.0的语法,看起来甚至有点无聊,说明也较少,不过可以关注着,在这记录Starklings的使用方法。

https://github.com/shramee/starklings-cairo1

使用方法

1. 克隆该仓库到本地,下载配套的rust工具。

  1. Cairo 0.1是类python的,而1.0是类Rust的,所以我们需要先安装Rust。多提一句,Cairo的编译器Sierra也是用Rust写的。上个月底,Starware宣布了他们正在开发一个新的由Rust编写的开源Sequencer(定序器)— blockifier。

    https://starkware.medium.com/starknets-new-sequencer-339e63845003

post image

这是以太坊不同客户端不同交易的处理数据的对比。“Python 客户端是众所周知的慢和贵。StarkNet 换 Rust 客户端后会直接提高 TPS 和降低 Gas ”。但是客户端的优化能提高TPS可以理解,为什么能或者什么情况下能降低Gas呢?可以看看这条thread的解析:

https://twitter.com/cryptonerdcn/status/1621351302566666242?s=20&t=-U3LGxldbq8PhcvLHoCHow

回到Starklings,安装完成后按照指引,运行cargo run --bin starklings watch就可以进入starklings的学习了!

post image

2. 怎么用?

运行完该命令后会让进入watch mode,把这个终端放在一边不用去管,打开vscode,到exercises/intro文件夹里进行编辑。在注释行里会有基本的语法介绍,想让你了解学习的内容,掌握之后根据要求修改程序,使其能够成功编译就算过关。

回到处于watch mode的终端,就可以看到报错或者提示成功,完成编译后,将//I AM NOT DONE一行删除,就可以进入下一个练习了。

post image

3. intro1-4.cairo

目前更新的1-4都是非常简单的,作者正在更新十多个语法点,可以保持关注。

intro 1

post image

这里告诉大家Cairo1必须要有个main函数才算有效,尽管这个是空的。不需要做任何修改就能编译,直接移除//I AM NOT DONE 进入下一个练习。

intro 2

这里一片空白,提示说这个练习无法编译。想到intro1里介绍,cairo1必须要有个main函数才有效,于是添加

fn main() {}

post image

回到终端查看是否成功:

post image

intro 3

这里开始介绍cairo的类型。felt(field element,域元素)是cairo的基本类型,数字,字符串,地址通通由它表示。它是定义在 的整数,其中 P 是一个非常大的质数。在目前的版本中,P = 2^{251}+17*2^{192}+1,大小为252 bit。P 具有一些很好的数学性质用于零知识证明,因此没有选择和Solidity一致的256 bit。在cairo 0.10中仅支持这一种类型,在1.0中不知道是否有更多类型。

这个练习中定义了输入的类型,即a,b都为felt,add函数中缺少返回类型,加上个返回felt就可以了:

post image

intro 4

这里提了在编写函数内容时,如果在结尾不加分号,就会自动返回这行的结果,这会使得代码看起来更简洁。这里他以add函数作为例子,我们需要修改sub函数和main函数:

post image

到此为止,4个练习就都完成啦!

post image

关于Cairo1的语法,最好的是追踪官方的仓库:

https://github.com/starkware-libs/cairo

但是由于是基于rust的,学rust也准没错,可以参考@Asten正在更新的中文版rust文档:

https://github.com/0xAsten/rust-book-zh

欢迎交流:

https://twitter.com/lviswang

Subscribe