在之前的 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
https://starkware.medium.com/starknets-new-sequencer-339e63845003
这是以太坊不同客户端不同交易的处理数据的对比。“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 的学习了!
运行完该命令后会让进入 watch mode,把这个终端放在一边不用去管,打开 vscode,到exercises/intro
文件夹里进行编辑。在注释行里会有基本的语法介绍,想让你了解学习的内容,掌握之后根据要求修改程序,使其能够成功编译就算过关。
回到处于 watch mode 的终端,就可以看到报错或者提示成功,完成编译后,将//I AM NOT DONE
一行删除,就可以进入下一个练习了。
目前更新的 1-4 都是非常简单的,作者正在更新十多个语法点,可以保持关注。
intro 1
这里告诉大家 Cairo1 必须要有个 main 函数才算有效,尽管这个是空的。不需要做任何修改就能编译,直接移除//I AM NOT DONE
进入下一个练习。
intro 2
这里一片空白,提示说这个练习无法编译。想到 intro1 里介绍,cairo1 必须要有个 main 函数才有效,于是添加
fn main() {}
回到终端查看是否成功:
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 就可以了:
intro 4
这里提了在编写函数内容时,如果在结尾不加分号;
,就会自动返回这行的结果,这会使得代码看起来更简洁。这里他以 add 函数作为例子,我们需要修改 sub 函数和 main 函数:
到此为止,4 个练习就都完成啦!
关于 Cairo1 的语法,最好的是追踪官方的仓库:
https://github.com/starkware-libs/cairo
但是由于是基于 rust 的,学 rust 也准没错,可以参考@Asten正在更新的中文版 rust 文档:
https://github.com/0xAsten/rust-book-zh
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。