Vin*_*nce 6 solana solana-cli solana-program-library solana-web3js solana-transaction-instruction
这是我的情况:
我创建了一个钱包
solana-注册机 新
我创建了自己的自定义 SPL 令牌
spl 令牌创建令牌
然后我为此 SPL 令牌创建了一个帐户
spl 令牌创建帐户
SPL 代币现在在我的钱包 A 中
在 Solana 计划中,当满足某些条件时(例如,当 Alice 正确回答测验时,她将获得一些自定义 SPL 代币),我希望以编程方式将自定义 SPL 代币从钱包 A 转移到 Alice(用户)钱包。
如何授权 Solana 程序从我创建的钱包 A 中扣除代币并将代币转移到 Alice 钱包?
请告诉我如何去做这件事。真的很感激这一点。
要在程序内转移 SPL 代币,最好的选择是让钱包 A 由程序派生地址拥有,然后您的程序可以根据它想要的任何逻辑从钱包 A 转移代币。
因此,首先,将所有权转移到您的程序派生地址:
spl-token authorize <WALLET_2_ADDRESS> owner <PROGRAM_DERIVED_ADDRESS>
Run Code Online (Sandbox Code Playgroud)
然后在您的程序中,您可以使用以下内容转移给 Alice:
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",]
    ]
)?;
Run Code Online (Sandbox Code Playgroud)
这是根据在程序中传输 SPL 令牌的完整示例改编的:https ://solanacookbook.com/references/programs.html#how-to-do-cross-program-inplication
有关程序派生地址的更多信息,请访问https://solanacookbook.com/references/programs.html#how-to-create-a-pda,并提供如何创建帐户的示例。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           3304 次  |  
        
|   最近记录:  |