如何将自定义 SPL 令牌从我自己的帐户转移(使用程序说明)到另一个用户的钱包?
How to transfer (using Program instructions) custom SPL token from my own account to another user's wallet?
这是我的情况:
我已经创建了一个钱包
新的 solana-keygen
我已经创建了自己的自定义 SPL 令牌
spl-token 创建令牌
然后我为此 SPL 令牌创建了一个帐户
spl-token 创建账户
SPL 代币现在在我的钱包 A
在 Solana 程序中,我想在满足某些条件时以编程方式将自定义 SPL 令牌从钱包 A 转移到 Alice(用户)钱包(例如,当 Alice 正确回答了测验时,她将获得一些奖励自定义 SPL 代币)。
如何授权 Solana 程序从我创建的钱包 A 中扣除代币并将代币转移到 Alice 钱包?
请告诉我该怎么做。非常感谢。
要在程序中转移 SPL 代币,最好的选择是让钱包 A 拥有一个 program-derived 地址,然后您的程序可以根据它想要的任何逻辑从钱包 A 转移代币。
所以首先,将所有权转移到您的 program-derived 地址:
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
有关 program-derived 地址的更多信息 https://solanacookbook.com/references/programs.html#how-to-create-a-pda,以及如何创建帐户的示例。
这是我的情况:
我已经创建了一个钱包
新的 solana-keygen
我已经创建了自己的自定义 SPL 令牌
spl-token 创建令牌
然后我为此 SPL 令牌创建了一个帐户
spl-token 创建账户
SPL 代币现在在我的钱包 A
在 Solana 程序中,我想在满足某些条件时以编程方式将自定义 SPL 令牌从钱包 A 转移到 Alice(用户)钱包(例如,当 Alice 正确回答了测验时,她将获得一些奖励自定义 SPL 代币)。
如何授权 Solana 程序从我创建的钱包 A 中扣除代币并将代币转移到 Alice 钱包?
请告诉我该怎么做。非常感谢。
要在程序中转移 SPL 代币,最好的选择是让钱包 A 拥有一个 program-derived 地址,然后您的程序可以根据它想要的任何逻辑从钱包 A 转移代币。
所以首先,将所有权转移到您的 program-derived 地址:
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
有关 program-derived 地址的更多信息 https://solanacookbook.com/references/programs.html#how-to-create-a-pda,以及如何创建帐户的示例。