FRAME2存储中的ValueQuery有什么用?
What is the use of ValueQuery in FRAME2 storage?
使用以下语法定义 FRAME2 存储:
#[pallet::storage]
type SomePrivateValue<T> = StorageValue<_, u32, ValueQuery>;
#[pallet::storage]
#[pallet::getter(fn some_primitive_value)]
pub(super) type SomePrimitiveValue<T> = StorageValue<_, u32, ValueQuery>;
但是存储在没有 ValueQuery 关键字的情况下工作。
例如
#[pallet::storage]
type SomePrivateValue<T> = StorageValue<_, u32>;
ValueQuery有什么用?
同样设置默认值需要 ValueStorage,而 getter 函数不允许使用 ValueStorage。如何使用设置默认值的 getter 功能?
https://substrate.dev/docs/en/knowledgebase/runtime/storage#default-values
可以在此处找到 StorageValue
的正式文档 https://paritytech.github.io/substrate/monthly-2021-09+1/frame_support/storage/types/struct.StorageValue.html
你可以看到第三个泛型QueryKind
默认是类型OptionQuery
,当你不提供特定类型时,则使用OptionQuery
。
在类型 StorageValue
的方法实现中,您可以看到它需要对泛型进行一些限制 https://paritytech.github.io/substrate/monthly-2021-09+1/frame_support/storage/types/struct.StorageValue.html#impl
特别是需要QueryKind: QueryKindTrait<Value, OnEmpty>,
这意味着 QueryKind 必须实现如何从存储中查询值。
目前有2个实现者:OptionQuery
和ValueQuery
:https://paritytech.github.io/substrate/monthly-2021-09+1/frame_support/storage/types/trait.QueryKindTrait.html#implementors
当在存储中找不到值时,OptionQuery
以 returns None 的方式实现特征。 ValueQuery
以在存储中找不到值时 return 一些空值(由通用 OnEmpty
配置)的方式实现特征。
所以当你想从存储中获取一些值但没有值时你会使用 ValueQuery
和 OptionQuery
当你想获得一些“默认”值时获取 None,当您尝试从存储中获取一些值但没有值时。
结果在方法的签名中可见:方法get
将return一个值或一个选项:https://paritytech.github.io/substrate/monthly-2021-09+1/frame_support/storage/types/struct.StorageValue.html#method.get
使用以下语法定义 FRAME2 存储:
#[pallet::storage]
type SomePrivateValue<T> = StorageValue<_, u32, ValueQuery>;
#[pallet::storage]
#[pallet::getter(fn some_primitive_value)]
pub(super) type SomePrimitiveValue<T> = StorageValue<_, u32, ValueQuery>;
但是存储在没有 ValueQuery 关键字的情况下工作。
例如
#[pallet::storage]
type SomePrivateValue<T> = StorageValue<_, u32>;
ValueQuery有什么用?
同样设置默认值需要 ValueStorage,而 getter 函数不允许使用 ValueStorage。如何使用设置默认值的 getter 功能?
https://substrate.dev/docs/en/knowledgebase/runtime/storage#default-values
可以在此处找到 StorageValue
的正式文档 https://paritytech.github.io/substrate/monthly-2021-09+1/frame_support/storage/types/struct.StorageValue.html
你可以看到第三个泛型QueryKind
默认是类型OptionQuery
,当你不提供特定类型时,则使用OptionQuery
。
在类型 StorageValue
的方法实现中,您可以看到它需要对泛型进行一些限制 https://paritytech.github.io/substrate/monthly-2021-09+1/frame_support/storage/types/struct.StorageValue.html#impl
特别是需要QueryKind: QueryKindTrait<Value, OnEmpty>,
这意味着 QueryKind 必须实现如何从存储中查询值。
目前有2个实现者:OptionQuery
和ValueQuery
:https://paritytech.github.io/substrate/monthly-2021-09+1/frame_support/storage/types/trait.QueryKindTrait.html#implementors
OptionQuery
以 returns None 的方式实现特征。 ValueQuery
以在存储中找不到值时 return 一些空值(由通用 OnEmpty
配置)的方式实现特征。
所以当你想从存储中获取一些值但没有值时你会使用 ValueQuery
和 OptionQuery
当你想获得一些“默认”值时获取 None,当您尝试从存储中获取一些值但没有值时。
结果在方法的签名中可见:方法get
将return一个值或一个选项:https://paritytech.github.io/substrate/monthly-2021-09+1/frame_support/storage/types/struct.StorageValue.html#method.get