简体   繁体   English

使用@Solana\\web3.js 传输 SPL 令牌

[英]Transferring SPL Token using @Solana\web3.js

I am trying to transfer SPL tokens and am getting the error from the function mintToken.getOrCreateAssociatedAccountInfo(wallet.publicKey);我正在尝试传输 SPL 令牌并从函数 mintToken.getOrCreateAssociatedAccountInfo(wallet.publicKey); 中收到错误消息;

Error: "Invalid seeds, address must fall off the curve"错误:“无效种子,地址必须脱离曲线”

My wallet variable a an AnchorWallet我的钱包变量 a AnchorWallet

ToWallet is obtained via: ToWallet 是通过以下方式获得的:
var toWallet = anchor.web3.Keypair.fromSecretKey(DEMO_TO_WALLET); var toWallet = anchor.web3.Keypair.fromSecretKey(DEMO_TO_WALLET);

 try {
    if (wallet) {
      const mintPublicKey = new anchor.web3.PublicKey("Token address");    
      const mintToken = new Token(
        props.connection,
        mintPublicKey,
        TOKEN_PROGRAM_ID,
        toWallet 
      );

      const fromTokenAccount = await mintToken.getOrCreateAssociatedAccountInfo(
        wallet.publicKey
      );
    
      const destPublicKey = new anchor.web3.PublicKey(toWallet);
    
      // Get the derived address of the destination wallet which will hold the custom token
      const associatedDestinationTokenAddr = await Token.getAssociatedTokenAddress(
        mintToken.associatedProgramId,
        mintToken.programId,
        mintPublicKey,
        destPublicKey
      );
    
      const receiverAccount = await props.connection.getAccountInfo(associatedDestinationTokenAddr);
            
      const instructions: anchor.web3.TransactionInstruction[] = [];  
    
      if (receiverAccount === null) {
    
        instructions.push(
          Token.createAssociatedTokenAccountInstruction(
            mintToken.associatedProgramId,
            mintToken.programId,
            mintPublicKey,
            associatedDestinationTokenAddr,
            destPublicKey,
            wallet.publicKey
          )
        )
    
      }
      
      instructions.push(
        Token.createTransferInstruction(
          TOKEN_PROGRAM_ID,
          fromTokenAccount.address,
          associatedDestinationTokenAddr,
          wallet.publicKey,
          [],
          1
        )
      );
    
      const transaction = new anchor.web3.Transaction().add(...instructions);
      transaction.feePayer = wallet.publicKey;
      transaction.recentBlockhash = (await props.connection.getRecentBlockhash()).blockhash;
      
      const transactionSignature = await props.connection.sendRawTransaction(
        transaction.serialize(),
        { skipPreflight: true }
      );
    
      await props.connection.confirmTransaction(transactionSignature);

Please ensure that wallet.publicKey contains valid value.请确保wallet.publicKey包含有效值。

console.log(wallet.publicKey);//I think this might be an empty string.

const fromTokenAccount = await mintToken.getOrCreateAssociatedAccountInfo(
        wallet.publicKey
      );

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

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