Я создаю децентрализованное приложение, в котором несколько пользователей могут вносить SOL на учетную запись события, и в зависимости от того, кто выиграет событие, они могут вернуть SOL обратно в свой кошелек.
Как я могу передать собственный SOL (а не какой-либо другой токен spl) непосредственно в адрес хранилища учетной записи события в инструкции якорного смарт-контракта?
Будет ли работать следующая инструкция якоря? Если да, то что должно быть PROGRAM_ACCOUNTв следующем? Предположительно, это должна быть учетная запись, которая обрабатывает собственный SOL, но я не смог найти ее в документации.
token::transfer(
CpiContext::new(
PROGRAM_ACCOUNT,
anchor_spl::token::Transfer {
from: source_user_info,
to: destination_user_info,
authority: source_user_info,
},
),
1,
)?;
Заранее спасибо!
Решение проблемы
Чтобы отправить собственный SOL с помощью Anchor, вы можете использовать следующий код внутри инструкции:
let ix = anchor_lang::solana_program::system_instruction::transfer(
&ctx.accounts.from.key(),
&ctx.accounts.to.key(),
amount,
);
anchor_lang::solana_program::program::invoke(
&ix,
&[
ctx.accounts.from.to_account_info(),
ctx.accounts.to.to_account_info(),
],
);
Где сумма — это число (u64), представляющее Лэмпортс (0,000000001 SOL).
Вы можете проверить функцию передачи в документации по программе Solana и в разделе Solana Cookbook в Sending SOL.
Комментариев нет:
Отправить комментарий