Substrate中Twox128(Prefix::pallet_prefix())++Twox128(Prefix::STORAGE_PREFIX)存储含义是什么
StorageValue 存储路径规则解析
官方定义:
pub struct StorageValue<Prefix, Value, QueryKind = OptionQuery, OnEmpty = GetDefault>(_);
该类型用于存储单个值,每个值的存储路径为Twox128(Prefix::pallet_prefix()) ++ Twox128(Prefix::STORAGE_PREFIX)
这段路径描述是Substrate框架计算链上存储键的标准规则,各部分含义如下:
Twox128:Substrate默认选用的非加密哈希算法,输出固定128位(即16字节)的哈希值,兼顾了计算效率和防碰撞能力,专门用于生成存储项的键前缀。Prefix::pallet_prefix():存储项所属Pallet(Substrate的功能模块)的唯一标识前缀,默认是Pallet的名称字符串,比如治理模块的前缀就是"Democracy"。Prefix::STORAGE_PREFIX:当前StorageValue存储项自身的名称字符串,比如你定义的存总发行量的存储项叫TotalSupply,这里的取值就是"TotalSupply"。++:字节拼接操作,指将前一个Twox128输出的16字节值和后一个Twox128输出的16字节值直接拼接,最终得到32字节的完整存储键,就是该StorageValue在链下KV数据库中对应的查询Key。
这种设计的核心作用是实现存储项的命名空间隔离:第一层哈希区分不同Pallet,第二层哈希区分同一Pallet内的不同存储项,从规则上彻底避免不同存储项的键冲突,同时固定长度的32字节键也更利于底层数据库做查询优化。
内容的提问来源于stack exchange,提问作者dodo
相关产品推荐
相关产品推荐

