接下来,我们将介绍存储块。这是您在合约中存储所有持久性状态变量的地方。
在函数内声明的变量,如果没有保存在存储块中,将在函数执行完成后被丢弃。将下面的存储块添加到您的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的数字。此计数器可用于跟踪列出的物品的总数。
StorageMap
是一种允许在存储块中保存键值对的独特类型。
要定义一个存储映射,您需要指定键和值的类型。例如,在下面的示例中,键类型是u64
,值类型是一个Item
结构体。
// map of item IDs to Items
item_map: StorageMap<u64, Item> = StorageMap {},
在这里,我们创建了一个从物品ID到Item
结构体的映射。使用这个映射,我们可以通过其ID检索有关物品的信息。
在这里,我们将owner
变量定义为可能是None
或持有Identity
的变量。
// owner of the contract
owner: Option<Identity> = Option::None,
如果您希望某个值在特定条件下可能为null或未定义,则可以使用Option
类型。它是一个枚举,可以取Some(value)
或None
。关键字None
表示没有值,而Some
表示存储的值的存在。