#rust #solana
Вопрос:
Я знаю, что могу предоставить своей программе Solana Rust учетную запись токена пользователя с помощью контекстной структуры, как показано в учебнике 2: https://project-serum.github.io/anchor/tutorials/tutorial-2.html#defining-a-program
#[derive(Accounts)]
pub struct Stake<'info> {
pub user_reward_token_account: CpiAccount<'info, TokenAccount>,
...
}
Но что, если я хочу, чтобы пользователи сначала сохранили учетную запись токена этого пользователя в учетной записи хранения определенного пользователя, а затем позволили моей программе Solana получить эти учетные записи токенов из учетной записи хранения этого пользователя?
let user_acct = amp;ctx.accounts.user_acct;
Затем при попытке ввести некоторые бонусные токены в учетную запись токенов пользователя:
let cpi_accounts = MintTo {
mint: ctx.accounts.reward_mint.to_account_info(),
to: user_acct.reward_user,
authority: ctx.accounts.pg_signer.clone()
};
Я получил ошибку при компиляции: ожидаемая структура anchor_lang::prelude::AccountInfo
, найденная структура anchor_lang::prelude::Pubkey
но этот метод to_account_info() не найден в anchor_lang::prelude::Pubkey
Я проверил документ Pubkey: https://docs.rs/anchor-lang/0.13.2/anchor_lang/prelude/struct.Pubkey.html
Но это ничего не говорит об AccountInfo …
Затем я попытался создать структуру AccountInfo с адреса reward_user с помощью https://docs.rs/anchor-lang/0.13.2/anchor_lang/prelude/struct.AccountInfo.html:
let to_addr = AccountInfo {
key: amp;user_acct.reward_user,
is_signer: false,
is_writable: true,
lamports: Rc<RefCell<amp;'a mut u64>>,
data: Rc<RefCell<amp;'a mut [u8]>>,
owner: amp;user_pda.user_acct,
executable: false,
rent_epoch: u64,
};
Но это действительно сложно, и я не знаю, каковы значения lamports, data, rent_epoch…
Итак, как я могу преобразовать открытый ключ в тип AccountInfo?
Ответ №1:
Вам нужно будет передать учетные записи через контекст, чтобы иметь возможность получить доступ к его данным. Такая конструкция позволяет Solana лучше распараллеливать транзакции, зная, какие учетные записи и данные требуются до выполнения.