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官方文档(英文)
Subscribe to 0xAA
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.