Как перевести (используя инструкции Программы) пользовательский токен SPL со своей учетной записи на кошелек другого пользователя?

Это моя ситуация:

  1. Я создал кошелек

    солана-кейген новый

  2. Я создал свой собственный токен SPL

    spl-токен создать токен

  3. Затем я создал учетную запись для этого токена SPL.

    spl-токен создать учетную запись

  4. Токен 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 с примером создания учетной записи.