簡體   English   中英

Candy Machine V2 - 試圖獲得一台糖果機創建的所有 nfts

[英]Candy Machine V2 - Trying to get all the nfts created by one candy machine

我試圖找出由一台糖果機創建的所有 nfts。 我對v2很困惑。 這是我到目前為止所做的。

async function getProgramAccounts(
    connection,
    programId,
    configOrCommitment,
  ) {
    const extra = {};
    let commitment;
    //let encoding;
  
    if (configOrCommitment) {
      if (typeof configOrCommitment === 'string') {
        commitment = configOrCommitment;
      } else {
        commitment = configOrCommitment.commitment;
        //encoding = configOrCommitment.encoding;
  
        if (configOrCommitment.dataSlice) {
          extra.dataSlice = configOrCommitment.dataSlice;
        }
  
        if (configOrCommitment.filters) {
          extra.filters = configOrCommitment.filters;
        }
      }
    }
    const args = connection._buildArgs([programId], commitment, 'base64', extra);
    const unsafeRes = await (connection)._rpcRequest(
      'getProgramAccounts',
      args,
    );
  
    return unsafeRes.result;
  }

根據之前的 metaplex discord 聊天。 我需要用這個 function 找到第一個創建者

  const deriveCandyMachineV2ProgramAddress = async (
    candyMachineId,
  ) => {
    const candyMachineID = new PublicKey(candyMachineId);
    return await PublicKey.findProgramAddress(
      [Buffer.from('candy_machine'), candyMachineID.toBuffer()],
      candyMachineProgram,
    );
  };
  

為了獲取哈希表如下

  const fetchHashTable = async (hash, metadataEnabled) => {
    const connection = new web3.Connection(
      process.env.REACT_APP_SOLANA_RPC_HOST
    );
    const creatorKey = await deriveCandyMachineV2ProgramAddress(hash)
  
    const metadataAccounts = await getProgramAccounts(
      connection,
      {
        filters: [
          {
            memcmp: {
              offset:
                1 +
                32 +
                32 +
                4 +
                MAX_NAME_LENGTH +
                4 +
                MAX_URI_LENGTH +
                4 +
                MAX_SYMBOL_LENGTH +
                2 +
                1 +
                4 +
                0 * MAX_CREATOR_LEN,
              bytes: creatorKey,
            },
          },
        ],
      }
    );

    const mintHashes = [];

    for (let index = 0; index < metadataAccounts.length; index++) {
      const account = metadataAccounts[index];
      const accountInfo = await connection.getParsedAccountInfo(account.pubkey);
      const metadata = new Metadata(hash.toString(), accountInfo.value);
      if (metadataEnabled) mintHashes.push(metadata.data);
      else mintHashes.push(metadata.data.mint);
    }
    console.log(mintHashes, 'minthashes')
    return mintHashes;
  };

問題是我的 function getProgramAccounts沒有返回任何東西。

誰能告訴我我做錯了什么?

謝謝

derivedCandyMachineV2ProgramAddress應該返回一個包含 2 個值的數組,因此要獲取創建者密鑰,您需要訪問第一個元素: const [creatorKey] = await deriveCandyMachineV2ProgramAddress(hash)並且這會返回一個 publicKey 接口,所以只需將bytes: creatorKey更改為bytes: creatorKey.toBase58()

暫無
暫無

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

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