如何使用@solana-labs/web3.js发送USDC-SPL
How to send USDC-SPL using @solana-labs/web3.js
我可以使用 web3.js 发送 SOL 代币,但无法使用 USDC-SPL 代币发送。这是我当前发送 SOL 代币的代码:
// .......
const connection = new Connection(network);
const transaction = new Transaction()
.add(
SystemProgram.transfer({
fromPubkey: publicKey,
toPubkey: to,
lamports: Number(amount) * 1000000000,
})
);
const { blockhash } = await connection.getRecentBlockhash();
transaction.recentBlockhash = blockhash;
transaction.feePayer = publicKey;
let signedTransaction: any = null;
if ("solana" in window) {
signedTransaction = await window.solana.signTransaction(transaction)
} else if ("solflare" in window) {
signedTransaction = await window.solflare.signTransaction(transaction);
}
// .......
我之前看到的答案来自发送他们自己定制的令牌的人
solana 上的所有 spl 代币(也是 USDC 代币)均由 spl-token 程序所有。
因此,您可以通过将代币地址更改为 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'(这是 solana 主网上的 USDC spl 代币地址),以与发送您自己定制的代币相同的方式发送 USDC。
例如:
import * as web3 from "@solana/web3.js";
import * as splToken from "@solana/spl-token";
const DEMO_WALLET_SECRET_KEY = new Uint8Array([
...
]);
const SOLANA_MAINNET_USDC_PUBKEY = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
(async () => {
// Connect to cluster
var connection = new web3.Connection(web3.clusterApiUrl("devnet"));
// Construct wallet keypairs
var fromWallet = web3.Keypair.fromSecretKey(DEMO_WALLET_SECRET_KEY);
var toWallet = web3.Keypair.generate();
// Construct my token class
var USDC_pubkey = new web3.PublicKey(SOLANA_MAINNET_USDC_PUBKEY);
var USDC_Token = new splToken.Token(
connection,
USDC_pubkey,
splToken.TOKEN_PROGRAM_ID,
fromWallet
);
// Create associated token accounts for my token if they don't exist yet
var fromTokenAccount = await USDC_Token.getOrCreateAssociatedAccountInfo(
fromWallet.publicKey
)
var toTokenAccount = await USDC_Token.getOrCreateAssociatedAccountInfo(
toWallet.publicKey
)
// Add token transfer instructions to transaction
var transaction = new web3.Transaction()
.add(
splToken.Token.createTransferInstruction(
splToken.TOKEN_PROGRAM_ID,
fromTokenAccount.address,
toTokenAccount.address,
fromWallet.publicKey,
[],
0
)
);
// Sign transaction, broadcast, and confirm
var signature = await web3.sendAndConfirmTransaction(
connection,
transaction,
[fromWallet]
);
console.log("SIGNATURE", signature);
console.log("SUCCESS");
})();
我可以使用 web3.js 发送 SOL 代币,但无法使用 USDC-SPL 代币发送。这是我当前发送 SOL 代币的代码:
// .......
const connection = new Connection(network);
const transaction = new Transaction()
.add(
SystemProgram.transfer({
fromPubkey: publicKey,
toPubkey: to,
lamports: Number(amount) * 1000000000,
})
);
const { blockhash } = await connection.getRecentBlockhash();
transaction.recentBlockhash = blockhash;
transaction.feePayer = publicKey;
let signedTransaction: any = null;
if ("solana" in window) {
signedTransaction = await window.solana.signTransaction(transaction)
} else if ("solflare" in window) {
signedTransaction = await window.solflare.signTransaction(transaction);
}
// .......
我之前看到的答案来自发送他们自己定制的令牌的人
solana 上的所有 spl 代币(也是 USDC 代币)均由 spl-token 程序所有。 因此,您可以通过将代币地址更改为 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'(这是 solana 主网上的 USDC spl 代币地址),以与发送您自己定制的代币相同的方式发送 USDC。 例如:
import * as web3 from "@solana/web3.js";
import * as splToken from "@solana/spl-token";
const DEMO_WALLET_SECRET_KEY = new Uint8Array([
...
]);
const SOLANA_MAINNET_USDC_PUBKEY = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
(async () => {
// Connect to cluster
var connection = new web3.Connection(web3.clusterApiUrl("devnet"));
// Construct wallet keypairs
var fromWallet = web3.Keypair.fromSecretKey(DEMO_WALLET_SECRET_KEY);
var toWallet = web3.Keypair.generate();
// Construct my token class
var USDC_pubkey = new web3.PublicKey(SOLANA_MAINNET_USDC_PUBKEY);
var USDC_Token = new splToken.Token(
connection,
USDC_pubkey,
splToken.TOKEN_PROGRAM_ID,
fromWallet
);
// Create associated token accounts for my token if they don't exist yet
var fromTokenAccount = await USDC_Token.getOrCreateAssociatedAccountInfo(
fromWallet.publicKey
)
var toTokenAccount = await USDC_Token.getOrCreateAssociatedAccountInfo(
toWallet.publicKey
)
// Add token transfer instructions to transaction
var transaction = new web3.Transaction()
.add(
splToken.Token.createTransferInstruction(
splToken.TOKEN_PROGRAM_ID,
fromTokenAccount.address,
toTokenAccount.address,
fromWallet.publicKey,
[],
0
)
);
// Sign transaction, broadcast, and confirm
var signature = await web3.sendAndConfirmTransaction(
connection,
transaction,
[fromWallet]
);
console.log("SIGNATURE", signature);
console.log("SUCCESS");
})();