簡體   English   中英

創建 metaplex 元數據帳戶時出現索引超出范圍錯誤

[英]Getting index out of range error when creating metaplex metadata account

為什么在嘗試使用 @ createCreateMetadataAccountV2Instruction @metaplex-foundation/mpl-token-metadata庫中的 createCreateMetadataAccountV2Instruction 創建元數據帳戶時出現以下錯誤?

SendTransactionError: failed to send transaction: Transaction simulation failed: Error processing Instruction 0: Program failed to complete
    at Connection.sendEncodedTransaction (C:\xampp\htdocs\sol-tools\node_modules\@solana\web3.js\src\connection.ts:4464:13) 
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
    at async Connection.sendRawTransaction (C:\xampp\htdocs\sol-tools\node_modules\@solana\web3.js\src\connection.ts:4423:20)
    at async Connection.sendTransaction (C:\xampp\htdocs\sol-tools\node_modules\@solana\web3.js\src\connection.ts:4411:12)  
    at async sendAndConfirmTransaction (C:\xampp\htdocs\sol-tools\node_modules\@solana\web3.js\src\util\send-and-confirm-transaction.ts:31:21)
    at async addMetadataToToken (C:\xampp\htdocs\sol-tools\src\lib\metadata.ts:86:16)
    at async Command.<anonymous> (C:\xampp\htdocs\sol-tools\src\cli.ts:48:7) {
  logs: [
    'Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s invoke [1]',
    'Program log: Instruction: Create Metadata Accounts v2',
    "Program log: panicked at 'range end index 36 out of range for slice of length 0', program/src/utils.rs:231:27",        
    'Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s consumed 6223 of 1400000 compute units',
    'Program failed to complete: BPF program panicked',
    'Program metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s failed: Program failed to complete'
  ]
}

這是我的代碼:

import {
  createCreateMetadataAccountV2Instruction,
  PROGRAM_ID,
} from '@metaplex-foundation/mpl-token-metadata'
import {
  Connection,
  Keypair,
  PublicKey,
  sendAndConfirmTransaction,
  Transaction,
} from '@solana/web3.js'

export const addMetadataToToken = async (
  connection: Connection,
  tokenMint: PublicKey,
  tokenOwner: Keypair,
  name: string,
  symbol: string,
  arweaveLink: string
) => {
  const seed1 = Buffer.from('metadata', 'utf8')
  const seed2 = PROGRAM_ID.toBuffer()
  const seed3 = tokenMint.toBuffer()
  const [metadataPDA, _bump] = PublicKey.findProgramAddressSync(
    [seed1, seed2, seed3],
    PROGRAM_ID
  )
  const accounts = {
    metadata: metadataPDA,
    mint: tokenMint,
    mintAuthority: tokenOwner.publicKey,
    payer: tokenOwner.publicKey,
    updateAuthority: tokenOwner.publicKey,
  }
  const dataV2 = {
    name,
    symbol,
    uri: arweaveLink,
    // we don't need these
    sellerFeeBasisPoints: 0,
    creators: null,
    collection: null,
    uses: null,
  }
  const args = {
    createMetadataAccountArgsV2: {
      data: dataV2,
      isMutable: true,
    },
  }
  const ix = createCreateMetadataAccountV2Instruction(accounts, args)
  const tx = new Transaction()
  tx.add(ix)
  const txid = await sendAndConfirmTransaction(connection, tx, [tokenOwner])
  console.log(txid)
}

原來我是在嘗試為 devnet 上的令牌創建元數據,但正在為Connection類使用 mainnet-beta rpc 端點。 因此,我試圖為其創建元數據的令牌不存在。

這是一個非常常見的錯誤消息,當您傳遞給程序的內容出現問題時會發生這種錯誤消息。 因此,請確保您輸入到程序中的所有內容都是正確的。 在 90% 的情況下,在正確檢查輸入時它會得到解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM