/* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-argument */ import type { BN } from "@coral-xyz/anchor"; import { utils } from "@coral-xyz/anchor"; import { PublicKey } from "@solana/web3.js"; import { IDENTIFIER_PREFIX, METADATA_PROGRAM_ID, PROJECT_ADDRESS, PROJECT_PREFIX, TOKEN_AUTH_RULES_ID, } from "./constants"; /** * Finds the project id. * @returns PublicKey */ export const findProjectId = (identifierCount: BN): PublicKey => { return PublicKey.findProgramAddressSync( [ utils.bytes.utf8.encode(PROJECT_PREFIX), identifierCount.toArrayLike(Buffer, "le", 8), ], PROJECT_ADDRESS )[0]; }; /** * Finds the identifier id. * @returns PublicKey */ export const findIdentifierId = (): PublicKey => PublicKey.findProgramAddressSync( [utils.bytes.utf8.encode(IDENTIFIER_PREFIX)], PROJECT_ADDRESS )[0]; export const findMintMetadataId = (mintId: PublicKey): PublicKey => { return PublicKey.findProgramAddressSync( [ utils.bytes.utf8.encode("metadata"), METADATA_PROGRAM_ID.toBuffer(), mintId.toBuffer(), ], METADATA_PROGRAM_ID )[0]; }; export const findMintEditionId = (mintId: PublicKey): PublicKey => { return PublicKey.findProgramAddressSync( [ utils.bytes.utf8.encode("metadata"), METADATA_PROGRAM_ID.toBuffer(), mintId.toBuffer(), utils.bytes.utf8.encode("edition"), ], METADATA_PROGRAM_ID )[0]; }; export function findTokenRecordId( mint: PublicKey, token: PublicKey ): PublicKey { return PublicKey.findProgramAddressSync( [ Buffer.from("metadata"), METADATA_PROGRAM_ID.toBuffer(), mint.toBuffer(), Buffer.from("token_record"), token.toBuffer(), ], METADATA_PROGRAM_ID )[0]; } export const findRuleSetId = (authority: PublicKey, name: string) => { return PublicKey.findProgramAddressSync( [Buffer.from("rule_set"), authority.toBuffer(), Buffer.from(name)], TOKEN_AUTH_RULES_ID )[0]; };