[英]Solana: Get Candy Machine info from a NFT token using Js
[英]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.