Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 36x 36x 36x 8x 8x 8x 8x 8x 8x 6x 6x 4x 4x 4x 4x 4x | import { Asset, Cardano } from '@cardano-sdk/core'; import { AssetBuilder } from './DbSyncAssetProvider'; import { AssetPolicyIdAndName, NftMetadataService } from './types'; import { Logger } from 'ts-log'; import { Pool } from 'pg'; import { TxMetadataService } from '../Metadata'; /** Dependencies that are need to create DbSyncNftMetadataService */ export interface DbSyncNftMetadataServiceDependencies { metadataService: TxMetadataService; db: Pool; logger: Logger; } /** NftMetadataService implementation using cardano-db-sync database as a source */ export class DbSyncNftMetadataService implements NftMetadataService { #builder: AssetBuilder; #logger: Logger; #metadataService: TxMetadataService; constructor({ db, logger, metadataService }: DbSyncNftMetadataServiceDependencies) { this.#builder = new AssetBuilder(db, logger); this.#logger = logger; this.#metadataService = metadataService; } async getNftMetadata(assetInfo: AssetPolicyIdAndName): Promise<Asset.NftMetadata | null> { // Perf: could query last mint tx metadata in 1 query instead of 2 const lastMintedTx = await this.#builder.queryLastMintTx(assetInfo.policyId, assetInfo.name); if (!lastMintedTx) return null; const lastMintedTxId = lastMintedTx.tx_hash.toString('hex') as unknown as Cardano.TransactionId; this.#logger.debug('Querying tx metadata', lastMintedTxId); const metadatas = await this.#metadataService.queryTxMetadataByHashes([lastMintedTxId]); const metadata = metadatas.get(lastMintedTxId); return Asset.NftMetadata.fromMetadatum(assetInfo, metadata, this.#logger); } } |