Icon Link定义存储块

接下来,我们将介绍存储块。这是您在合约中存储所有持久性状态变量的地方。

在函数内声明的变量,如果没有保存在存储块中,将在函数执行完成后被丢弃。将下面的存储块添加到您的main.sw文件中:

storage {
    // counter for total items listed
    item_counter: u64 = 0,
 
    // map of item IDs to Items
    item_map: StorageMap<u64, Item> = StorageMap {},
 
    // owner of the contract
    owner: Option<Identity> = Option::None,
}

我们存储的第一个变量是item_counter,一个初始化为0的数字。此计数器可用于跟踪列出的物品的总数。

Icon LinkStorageMap

StorageMap是一种允许在存储块中保存键值对的独特类型。

要定义一个存储映射,您需要指定键和值的类型。例如,在下面的示例中,键类型是u64,值类型是一个Item结构体。

// map of item IDs to Items
item_map: StorageMap<u64, Item> = StorageMap {},

在这里,我们创建了一个从物品ID到Item结构体的映射。使用这个映射,我们可以通过其ID检索有关物品的信息。

Icon Link选项

在这里,我们将owner变量定义为可能是None或持有Identity的变量。

// owner of the contract
owner: Option<Identity> = Option::None,

如果您希望某个值在特定条件下可能为null或未定义,则可以使用Option类型。它是一个枚举,可以取Some(value)None。关键字None表示没有值,而Some表示存储的值的存在。