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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | 4x 4x 4x 4x 4x 4x 4x 9x 9x 9x 9x 1x 1x 1x 14x 14x 14x 10x 14x 14x 14x 14x 14x 14x 14x 14x 14x 14x | /* eslint-disable @typescript-eslint/no-explicit-any */ import * as Queries from './queries'; import { Asset, Cardano, ProviderUtil } from '@cardano-sdk/core'; import { LastMintTxModel } from '../../../src'; import { Logger } from 'ts-log'; import { Pool, QueryResult } from 'pg'; import { bufferToHexString } from '@cardano-sdk/util'; export enum AssetWith { CIP25Metadata = 'CIP25Metadata' } export class AssetData { id: Cardano.AssetId; name: Cardano.AssetName; policyId: Cardano.PolicyId; metadata: any; } export class AssetFixtureBuilder { #db: Pool; #logger: Logger; constructor(db: Pool, logger: Logger) { this.#db = db; this.#logger = logger; } public async queryLastMintTx(policyId: Cardano.PolicyId, name: Cardano.AssetName) { this.#logger.debug('About to query last nft mint tx for asset', { name, policyId }); const result: QueryResult<LastMintTxModel> = await this.#db.query(Queries.findLastNftMintTx, [ Buffer.from(policyId, 'hex'), Buffer.from(name, 'hex') ]); return result.rows[0]; } public async getAssets(desiredQty: number, options?: { with?: AssetWith[] }): Promise<AssetData[]> { this.#logger.debug(`About to fetch up to ${desiredQty} assets`); let query = Queries.withoutMetadata; if (options?.with?.includes(AssetWith.CIP25Metadata)) { query = Queries.withCIP25Metadata; } const result: QueryResult<{ policy: Buffer; name: Buffer; json: any }> = await this.#db.query(query, [desiredQty]); const resultsQty = result.rows.length; Iif (result.rows.length === 0) { throw new Error('No assets found'); } else Iif (resultsQty < desiredQty) { this.#logger.warn(`${desiredQty} assets desired, only ${resultsQty} results found`); } return result.rows.map(({ policy, name, json }) => { const hexPolicy = bufferToHexString(policy); const hexName = bufferToHexString(name); const policyId = hexPolicy as unknown as Cardano.PolicyId; const assetName = hexName as unknown as Cardano.AssetName; return { id: Cardano.AssetId(`${hexPolicy}${hexName}`), metadata: json ? Asset.NftMetadata.fromMetadatum( { name: assetName, policyId }, new Map<bigint, Cardano.Metadatum>([[721n, ProviderUtil.jsonToMetadatum(json)]]), this.#logger ) : null, name: assetName, policyId }; }); } } |