WTF Cairo极简教程: 10. 映射和其他类型
我最近在学cairo-lang
,巩固一下细节,也写一个WTF Cairo极简教程
,供小白们使用。教程基于cairo 2.2.0
版本。
WTF Academy 社群:Discord|微信群|官网 wtf.academy
所有代码和教程开源在 github: github.com/WTFAcademy/WTF-Cairo
在本章中,我们将介绍如何在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上开发更高效、更有组织的智能合约。