如何结合AccounId和时间戳为Substrate中的Storage map创建一个新的key

问题描述

我正在尝试通过组合帐户 ID 和时间戳来创建一个新密钥,以将数据存储到 StorageMap

我不确定如何获取帐户的字符串表示并连接时间戳

let origin_account = ensure_signed(origin);
let time = <pallet_timestamp::Module<T>>::get();

解决方法

听起来您想使用以下两种方法之一:

  1. 使用元组将两条信息表示为一个键:
/// Any signal messages waiting to be sent.
#[pallet::storage]
pub(super) type MyMap<T: Config> = StorageMap<
    _,Blake2_128Concat,(T::AccountId,T::Moment),// <--- key will be a tuple of the two data
    ValueType,>;

let origin_account = ensure_signed(origin)?;
let time = <pallet_timestamp::Module<T>>::get();
let value = 99;
MyMap::<T>::insert((origin_account,time),value);
  1. 或者您想使用双映射,它明确支持两个键。
#[pallet::storage]
pub(super) type MyDoubleMap<T: Config> = StorageDoubleMap<
    _,T::AccountId,// <-- key 1
    Blake2_128Concat,T::Moment,// <-- key 2
    ValueType,>;

let origin_account = ensure_signed(origin)?;
let time = <pallet_timestamp::Module<T>>::get();
let value = 99;
MyDoubleMap::<T>::insert(origin_account,time,value);