Skip to content

Commit

Permalink
Adding Metadata fetch for mints.
Browse files Browse the repository at this point in the history
  • Loading branch information
blockiosaurus committed Jan 18, 2024
1 parent 375ccd5 commit 25f3fdf
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
34 changes: 34 additions & 0 deletions clients/cli/commands/fetch/nft.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { fetchInscriptionMetadataFromSeeds, findMintInscriptionPda, mplInscription } from "@metaplex-foundation/mpl-inscription";
import { PublicKey } from "@metaplex-foundation/umi";
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
import { writeFileSync } from "fs";
import pMap from "p-map";

export async function fetchInscriptionsByMint(rpc: string, mints: PublicKey[], concurrency: number, output: string) {
const umi = createUmi(rpc);
umi.use(mplInscription());

const inscriptionMetadataAccounts = await pMap(mints, async (mint) => {
const mintInscription = findMintInscriptionPda(umi, { mint });
const inscriptionMetadata = await fetchInscriptionMetadataFromSeeds(umi, { inscriptionAccount: mintInscription[0] });
delete inscriptionMetadata["header"];
delete inscriptionMetadata["padding"];
return inscriptionMetadata;
}, { concurrency });

inscriptionMetadataAccounts.sort((a, b) => {
if (a.inscriptionRank < b.inscriptionRank) {
return -1;
}
if (a.inscriptionRank > b.inscriptionRank) {
return 1;
}
return 0;
});

writeFileSync(output, JSON.stringify([...inscriptionMetadataAccounts], (key, value) =>
typeof value === 'bigint'
? value.toString()
: value,
2));
}
30 changes: 30 additions & 0 deletions clients/cli/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import { test_createCollection } from './commands/test/createCollection.js';
import { cost_nfts } from './commands/cost/nft.js';
import { compress_images } from './commands/compress/images.js';
import { compress_json } from './commands/compress/json.js';
import { fetchInscriptionsByMint } from './commands/fetch/nft.js';

const program = new Command();

Expand Down Expand Up @@ -125,6 +126,35 @@ compressCmd.command('json')
await compress_json(remove, parseInt(concurrency));
});

const fetchCmd = program.command('fetch');

fetchCmd.command('nft')
.description('Fetch an NFT\'s Inscription data')
.option('-r --rpc <string>', 'The endpoint to connect to.')
.option('-m --mint <string>', 'Mint address of the NFT')
.option('-c --concurrency <number>', 'Number of concurrent writes to perform', '10')
.option('o --output <string>', 'Output file', 'output.json')
.action(async (str, options) => {
const { rpc, mint, concurrency, output } = options.opts();

await fetchInscriptionsByMint(rpc, [publicKey(mint)], parseInt(concurrency), output);
});

fetchCmd.command('hashlist')
.description('Fetch a Hashlist\'s Inscription data')
.option('-r --rpc <string>', 'The endpoint to connect to.')
.option('-h --hashlist <string>', 'The file containing the hashlist')
.option('-c --concurrency <number>', 'Number of concurrent writes to perform', '10')
.option('o --output <string>', 'Output file', 'output.json')
.action(async (str, options) => {
const { rpc, hashlist, concurrency, output } = options.opts();

const hashlistArray = JSON.parse(readFileSync(hashlist, 'utf-8'));
const mints: PublicKey[] = hashlistArray.map((mint: string) => publicKey(mint));

await fetchInscriptionsByMint(rpc, mints, parseInt(concurrency), output);
});

const createCmd = program.command('create');

createCmd.command('shards')
Expand Down

0 comments on commit 25f3fdf

Please sign in to comment.