Cairo 101 入门

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

在本章中,我们将介绍如何在Cairo中使用“映射”和其他常用类型。

Mapping

mapping(映射)类型允许用户通过键来查询相应的值。例如,可以通过账户地址查询账户余额。在Cairo中,可以使用LegacyMap来创建映射。

在下面的示例中,我们在存储变量中创建了一个名为balances的映射。此映射存储了相应地址(键的ContractAddress类型)的余额(值的u256类型)。

// balances存储变量:从账户地址映射到u256
#[storage]
struct Storage {
    balances: LegacyMap::<ContractAddress, u256>,
}

你可以查询给定地址的余额。请注意,Cairo不像Solidity那样原生支持address类型。相反,你需要使用use starknet::ContractAddress;来导入它。

// 读取余额
#[external(v0)]
fn read_balance(self: @ContractState, account: ContractAddress) -> u256 {
    self.balances.read(account)
}

可以使用以下函数更新给定地址的余额:

// 更新余额
#[external(v0)]
fn write_balance(ref self: ContractState, account: ContractAddress, new_balance: u256){
    self.balances.write(account, new_balance);
}

总结

在本章中,我们讨论了如何在Cairo中使用映射类型和其他有用的类型来创建和管理智能合约中的键值对。这些概念将帮助你在Starknet上开发更高效、更有组织的智能合约。

PreviousNext