.
局部和状态变量

在本章中,我们将介绍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变量。