Я переношу аукционный дом метаплекса на мобильный Flutter.
При создании аукциона с мгновенной ценой продажи 0,1 обернутого сола я столкнулся со следующей ошибкой на этапе инструкции ValidateSafetyDepositBoxV2.
Ошибка была «Предоставлен недопустимый индекс создателя для пустой платежной учетной записи», и есть только одна точка, где это сообщение может быть напечатано, — это process_empty_payment_account () в Rust.
Самое странное, что функция process_empty_payment_account вызывается только из инструкции EmptyPaymentAccount и моя программа ее не вызывала.
Любая идея, что происходит?
Фактический журнал ошибок:
I/flutter ( 2718): {accounts: null, err: {InstructionError: [0, {Custom: 63}]}, logs: [Program p1exdMJcjVao65QdewkaZRUnU6VPSXhus9n2GzWfh98 invoke [1], Program log: Instruction: Validate Safety Deposit Box V2, Program log: Supplied an invalid creator index to empty payment account, Program p1exdMJcjVao65QdewkaZRUnU6VPSXhus9n2GzWfh98 consumed 11849 of 200000 compute units, Program p1exdMJcjVao65QdewkaZRUnU6VPSXhus9n2GzWfh98 failed: custom program error: 0x3f], unitsConsumed: 0}
Решение проблемы
Я нашел причину, по которой эта ошибка выдавалась после развертывания новой программы с некоторыми журналами в программе rust. Дело в том, что я передал неверное значение адреса метаданных в качестве четвертой учетной записи.
pub fn process_validate_safety_deposit_box_v2<'a>(
program_id: &'a Pubkey,
accounts: &'a [AccountInfo<'a>],
safety_deposit_config: SafetyDepositConfig,
) -> ProgramResult {
let account_info_iter = &mut accounts.iter();
let safety_deposit_config_info = next_account_info(account_info_iter)?;
let auction_token_tracker_info = next_account_info(account_info_iter)?;
let mut auction_manager_info = next_account_info(account_info_iter)?;
*let metadata_info = next_account_info(account_info_iter)?;*
....
Итак, программа не удалась Metadata::try_from_slice_checked
и возвращает ошибку InvalidCreatorIndex
в следующем коде.
impl Metadata {
pub fn from_account_info(a: &AccountInfo) -> Result<Metadata, ProgramError> {
let md: Metadata =
try_from_slice_checked(&a.data.borrow_mut(), Key::MetadataV1, MAX_METADATA_LEN)?;
Ok(md)
}
}
Жаль, что код не дал более сложной ошибки.
Комментариев нет:
Отправить комментарий