我最近在学cairo-lang
,巩固一下细节,也写一个WTF Cairo极简教程
,供小白们使用。教程基于cairo 0.10.2
版本
WTF Academy 社群:Discord|微信群|官网 wtf.academy
所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairo
cairo
(cairo-lang)是StarkNet(以太坊ZK-Rollup扩容方案)智能合约的编程语言。它同时也用于编写可证明程序,证明某个计算已正确执行。Cairo主要有两个特点:
ZK友好: Cairo
是原生的可证明计算的编程语言,可以直接编译为Stark可证明程序。而Solidity
不能。
难学: Cairo
是低级语言,学习曲线陡峭;并且现在属于开发早期,每个版本都会有很大改变。
目前Cairo
版本为0.10.2
,预计22年年底发行比较成熟的1.0
版本。
本教程中,我会用cairo playground
来运行cairo合约。cairo playground
是Cairo
官方开发的在线编辑器,适合新手,可以在浏览器中快速部署智能合约,你不需要在本地安装任何程序。
网址: cairo-lang.org/playground/
第一个Cairo程序很简单,只有5行代码:
%lang starknet
@view
func gm() -> (res: felt) {
return (res='Hello Cairo!');
}
我们拆开分析,学习cairo代码源文件的结构:
StarkNet
合约。如果不声明,则不能部署在StarkNet
上。%lang starknet
之后,我们写一个函数。第2行,我们用@view
修饰这个函数。与solidity
中的类似view
类似,该函数只能查询但不能修改合约状态。
第3-5
行我们声明了名为gm
的函数,没有参数,返回一个变量,类型为felt
。felt
(field element,域元素)是 cairo
的基本类型,数字,字符串,地址通通由它表示。然后在函数体中,我们将返回值设为 Hello Cairo!
。
@view
func gm() -> (res: felt) {
return (res='Hello Cairo!');
}
我们将代码拷贝到cairo playground的编辑器(Editor)中,然后点击右上角的 Deploy on StarkNet
就能将合约编译并部署到StarkNet
测试网上。部署好以后,下面的输出栏(Output)会显示智能合约地址和交易哈。合约部署上链大概需要2-5分钟
合约部署成功后,点击合约地址链接跳转到StarkNet的区块链浏览器Voyager(类似以太坊的etherscan)就可以查看合约。一个已部署好的例子。
下滑到页面底,点击Read Contract
栏,可以看到合约里的只读函数gm()
。点击gm
,将输出选为Text
(文本),然后点击Query
运行函数,就可以看到Hello Cairo!
了!
这一讲,我们简单介绍了cairo-lang
,并在cairo playground
中部署了第一个cairo
智能合约--Hello Cairo
。之后,我们将继续 Cairo
之程!