Ari*_*Ari 7 metaplex solana-web3js
我正在尝试获取来自大师版 NFT 的所有版本。根据文档,有一个 PDA 可以将该版本链接回主版本,但我无法通过 Metaplex/Solana sdk 以编程方式找到这种关系。
我当前的解决方案是解析主版本的所有交易并通过查找创建的版本进行过滤:
import {JsonMetadata, Metadata, Metaplex, TaskStatus} from "@metaplex-foundation/js";
import {Connection, PublicKey, ConfirmedSignatureInfo} from "@solana/web3.js";
import * as fs from "fs";
const RPC_URL = 'https://...';
const MASTER_EDITION_ADDRESS = '';
(async () => {
const connection = new Connection(RPC_URL);
const metaplex = new Metaplex(connection);
const start = new Date().toISOString()
// Paginate transactions from Master Edition
const signatures: { signature: string; }[] = []
let before: string | undefined = undefined;
while (true) {
const sigs: ConfirmedSignatureInfo[] = await metaplex.connection.getSignaturesForAddress(
new PublicKey(MASTER_EDITION_ADDRESS),
{
before: before
},
'finalized'
)
if (!sigs.length) break
signatures.push(...sigs)
before = sigs[sigs.length - 1].signature
}
// Parse Transactions and find new edition mints
const hashlist: string[] = []
for (let i = 0; i < signatures.length; i++) {
console.log(`${i}/${signatures.length}`);
await metaplex.connection.getParsedTransaction(signatures[i].signature).then(tx => {
if (!tx) return
if (JSON.stringify(tx).toLowerCase().includes('error')) return
if (JSON.stringify(tx).includes('Mint New Edition from Master Edition')) {
console.log(JSON.stringify(tx, null, 4))
hashlist.push(tx.transaction.message.accountKeys[1].pubkey.toString());
}
});
}
console.log('found:', hashlist.length, 'items')
})()
Run Code Online (Sandbox Code Playgroud)
然而,一旦交易达到一定规模,速度就会呈指数级下降。有没有一种快速可靠的方法来做到这一点。
假设:
| 归档时间: |
|
| 查看次数: |
447 次 |
| 最近记录: |