метод into_sub_account не найден

#substrate #polkadot

Вопрос:

Я пытаюсь использовать PALLET_ID

 const PALLET_ID: PalletId = PalletId(*b"ex/cfund");
 fn fund_account_id(index: FundIndex) -> T::AccountId {
            PALLET_ID.into_sub_account(index)
        }
 

Но он выдает ошибку:

  method not found in `frame_support::PalletId`
 

Документы: Ссылка
Все методы недоступны и выдают ошибку.

Версия:
git = ‘https://github.com/paritytech/substrate.git ‘
tag = ‘ежемесячно-2021-10’
версия = ‘4.0.0-dev’

Ответ №1:

Этот метод является частью признака AccountIdConversion , который реализован для типа PalletId . Поэтому вам нужно иметь признак в области видимости или явно вызывать метод из признака.

Так что, как:

 use sp_runtime::traits::AccountIdConversion;
const PALLET_ID: frame_support::PalletId = frame_support::PalletId(*b"ex/cfund");
fn fund_account_id(index: u32) -> u128 {
    PALLET_ID.into_sub_account(index)
}
 

или

 const PALLET_ID: frame_support::PalletId = frame_support::PalletId(*b"ex/cfund");
fn fund_account_id(index: u32) -> u128 {
    sp_runtime::traits::AccountIdConversion::into_sub_account(amp;PALLET_ID, index)
}
 

Также в вашем примере тип FundIndex должен быть реализован Encode для удовлетворения реализации признака.