Cairo 101 入门

1. Hello Cairo
2. 基本类型
3. 局部和状态变量
4. 变量可变性
5. 函数
6. 元组 Tuple
7. 数组
8. 结构体
9. 枚举
10. 映射和其他类型
11. 控制流
12. 模式匹配
13. Option
14. 类型转换
15. 构造函数
3. 局部和状态变量
局部和状态变量

在本章中,我们将介绍Cairo中的两种变量类型:局部变量local和状态变量storage。

局部变量(Local Variables)

local 变量在函数内声明。它们是临时的,不会存储在链上。

// local 变量
#[external(v0)]
fn local_var(self: @ContractState){
    // use `let` keywods to declare local variables 
    let local_felt: felt252 = 5;
    let local_bool = true;
    let local_uint = 1_u8;
}

状态变量(Storage Variables)

与Solidity类似,Cairo支持合约状态变量。它们会被记录在链上。你需要在合约中的一个名为 Storage 的特殊结构中声明状态变量,每个合约最多可以有一个 Storage 结构。

// 声明存储变量
#[storage]
struct Storage{
    var_felt: felt252,
    var_bool: bool,
    var_uint: u8,
    }

每个存储变量有两个成员函数:read() 和 write()。你可以用下面的方法在函数中读取和写入状态变量。

注意:这里的self: @ContractState代表view函数,ref self: ContractState代表external函数。

// 读取存储变量
#[external(v0)]
fn read_bool(self: @ContractState) -> bool {
    return self.var_bool.read();
}

// 写入存储变量
#[external(v0)]
fn write_bool(ref self: ContractState, bool_: bool) {
    self.var_bool.write(bool_);
}

总结

在本章中,我们介绍了Cairo中的local和storage变量。

PreviousNext