存储

这是您用Cairo能写的最简短的合约:

#[starknet::contract]
mod Contract {
    #[storage]
    struct Storage {}
}

存储是一个结构体,用 #[storage]标注。每个合约必须有且仅有一个存储空间。 它是一个键值存储空间,其中每个键都将映射到合约存储空间的存储地址。

您可以在合约中定义 [存储变量](./variables.md#storage-variables),然后使用它们来存储和检索数据。

#[starknet::contract]
mod Contract {
    #[storage]
    struct Storage {
        a: u128,
        b: u8,
        c: u256
    }
}

实际上,这两个合约的底层 sierra 程序是一样的。 从编译器的角度来看,存储变量在使用之前是不存在的。

您还可以阅读有关 存储自定义类型 的内容。

Last change: 2023-11-20, commit: 3890c7b