繁体   English   中英

使用 Rust 转移 SPL 代币

[英]Transfer SPL Token using Rust

有没有办法将 SPL 代币从一个钱包转移到另一个钱包。 我做了一些研究,发现我必须先使用创建关联帐户初始化帐户,然后再使用令牌转移?

有没有我可以转移代币的代码示例或有助于创建帐户/代币转移的库。 ETC

您可以直接使用spl-token crate 获取令牌程序使用的指令和类型: https://docs.rs/spl-token/latest/spl_token/

如果您需要创建关联的代币账户,您可以使用spl-associated-token-account crate: https://docs.rs/spl-associated-token-account/latest/spl_associated_token_account/index.html

如果您在链上,您可以创建transfer指令并将其与所需账户一起传递,即:

        let ix = spl_token::instruction::transfer(
            token_program.key,
            source.key,
            destination.key,
            authority.key,
            &[],
            amount,
        )?;
        invoke(
            &ix,
            &[source, destination, authority, token_program],
        )

这改编自token-swap传输代码: https://github.com/solana-labs/solana-program-library/blob/b2fad8a0781bddd90c8e9b768184f55306265cef/token-swap/program/src/processor.rs#L138

您需要先创建source帐户和destination帐户是正确的,并且最好将它们关联为令牌帐户。 您可以使用以下方法在链上创建它们:

let ix = spl_associated_token_account::instruction::create_associated_token_account(
    payer.key,
    wallet.key,
    token_mint.key,
    token_program.key,
);
invoke(
    &ix,
    &[payer, associated_token_account, wallet, token_mint, system_program, token_program, associated_token_account_program],
)

请注意,所有这些帐户都必须发送到您的程序才能执行跨程序调用。

Afaik 没有图书馆,但代币转账只能在账户之间进行,锚点内有一个转账 function,你必须调用并传递账户信息,你可以直接转移到一个地址,因为你也需要接收者的账户信息你可以从公钥得到它,但它可以通过托管来完成,这是我写的一个程序,它将 sol 发送到 PDA,接收者从 PDA 接受它

Github 托管程序链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM