0xAA

Posted on Nov 26, 2022Read on Mirror.xyz

WTF Cairo极简教程: 1. Hello Cairo(5行代码)

我最近在学cairo-lang,巩固一下细节,也写一个WTF Cairo极简教程,供小白们使用。教程基于cairo 0.10.2版本

推特:@0xAA_Science@WTFAcademy_

WTF Academy 社群:Discord微信群官网 wtf.academy

所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairo


Cairo 简介

cairo(cairo-lang)是StarkNet(以太坊ZK-Rollup扩容方案)智能合约的编程语言。它同时也用于编写可证明程序,证明某个计算已正确执行。Cairo主要有两个特点:

  1. ZK友好: Cairo是原生的可证明计算的编程语言,可以直接编译为Stark可证明程序。而Solidity不能。

  2. 难学: Cairo是低级语言,学习曲线陡峭;并且现在属于开发早期,每个版本都会有很大改变。

目前Cairo版本为0.10.2,预计22年年底发行比较成熟的1.0版本。

开发工具: Cairo Playground

本教程中,我会用cairo playground来运行cairo合约。cairo playgroundCairo官方开发的在线编辑器,适合新手,可以在浏览器中快速部署智能合约,你不需要在本地安装任何程序。

网址: cairo-lang.org/playground/

Hello Cairo

第一个Cairo程序很简单,只有5行代码:

%lang starknet
@view
func gm() -> (res: felt) {
    return (res='Hello Cairo!');
}

我们拆开分析,学习cairo代码源文件的结构:

  1. 第1行声明了这段代码为 StarkNet 合约。如果不声明,则不能部署在StarkNet上。
%lang starknet
  1. 之后,我们写一个函数。第2行,我们用@view修饰这个函数。与solidity中的类似view类似,该函数只能查询但不能修改合约状态。

  2. 3-5行我们声明了名为gm的函数,没有参数,返回一个变量,类型为feltfelt(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 之程!

Cairo 资料推荐

  1. Cairo官方文档(英文)