Как перевести (используя инструкции Программы) пользовательский токен SPL со своей учетной записи на кошелек другого пользователя?
Это моя ситуация:
Я создал кошелек
солана-кейген новый
Я создал свой собственный токен SPL
spl-токен создать токен
Затем я создал учетную запись для этого токена SPL.
spl-токен создать учетную запись
Токен SPL теперь в моем кошельке A
В программе Solana я хотел бы программно перенести пользовательский токен SPL из кошелька A в кошелек Алисы (пользователя) при соблюдении определенных условий (например, когда Алиса правильно ответила на викторину, она получит некоторый пользовательский токен SPL).
Как мне разрешить программе Solana вычитать из кошелька А (который я создал) и переводить токены в кошелек Алисы?
Пожалуйста, посоветуйте мне, как это сделать. Очень ценю это.
1 ответ
Чтобы передать токен SPL внутри программы, лучше всего иметь кошелек А, принадлежащий программно-производному адресу, и тогда ваша программа может передавать токены из кошелька А на основе любой логики, которую она хочет.
Итак, сначала передайте право собственности на ваш программный адрес:
spl-token authorize <WALLET_2_ADDRESS> owner <PROGRAM_DERIVED_ADDRESS>
Затем в вашей программе вы можете передать Алисе что-то вроде:
let transfer_instruction = spl_token::instruction::transfer(
&token_program.key,
&wallet_a_token_account.key,
&alice_token_account.key,
&program_derived_account.key,
&[],
transfer_amount,
)?;
let required_accounts_for_transfer = [
wallet_a_token_account.clone(),
alice_token_account.clone(),
program_derived_account.clone(),
];
invoke_signed(
&transfer_instruction,
&required_accounts_for_transfer,
&[
&[b"your", b"seeds", b"here",]
]
)?;
Это было адаптировано из полного примера передачи токенов SPL в программе: https://solanacookbook.com/references/programs.html#how-to-do-cross-program-invocation
Дополнительные сведения об адресах, полученных от программ, см. на странице https://solanacookbook.com/references/programs.html#how-to-create-a-pda с примером создания учетной записи.