跳到主要内容

WTF Cairo极简教程: 10. 映射和其他类型

我最近在学cairo-lang,巩固一下细节,也写一个WTF Cairo极简教程,供小白们使用。教程基于cairo 2.2.0版本。

推特:@0xAA_Science@WTFAcademy_

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上开发更高效、更有组织的智能合约。