UNPKG

@silvana-one/nft

Version:
231 lines (230 loc) 11.1 kB
import { Bool, DeployArgs, PublicKey, SmartContract, State, VerificationKey, UInt64, Field, AccountUpdate, UInt32, UInt8 } from "o1js"; import { MintRequest, NFTState, NFTAdminBase, MintParamsOption, PausableContract, PauseEvent, OwnershipChangeEvent, OwnableContract, TransferEvent } from "../interfaces/index.js"; export { NFTAdmin, NFTAdminDeployProps, NFTAdminAllowFlags }; interface NFTAdminDeployProps extends Exclude<DeployArgs, undefined> { admin: PublicKey; uri: string; canBePaused?: Bool; allowChangeRoyalty?: Bool; allowChangeTransferFee?: Bool; allowPauseCollection?: Bool; isPaused?: Bool; } declare const NFTAdminAllowFlags_base: (new (value: { allowChangeRoyalty: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowChangeTransferFee: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowPauseCollection: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; }) => { allowChangeRoyalty: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowChangeTransferFee: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowPauseCollection: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; }) & { _isStruct: true; } & Omit<import("node_modules/o1js/dist/node/lib/provable/types/provable-intf.js").Provable<{ allowChangeRoyalty: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowChangeTransferFee: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowPauseCollection: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; }, { allowChangeRoyalty: boolean; allowChangeTransferFee: boolean; allowPauseCollection: boolean; }>, "fromFields"> & { fromFields: (fields: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[]) => { allowChangeRoyalty: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowChangeTransferFee: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowPauseCollection: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; }; } & { fromValue: (value: { allowChangeRoyalty: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowChangeTransferFee: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowPauseCollection: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; }) => { allowChangeRoyalty: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowChangeTransferFee: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowPauseCollection: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; }; toInput: (x: { allowChangeRoyalty: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowChangeTransferFee: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowPauseCollection: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; }) => { fields?: Field[] | undefined; packed?: [Field, number][] | undefined; }; toJSON: (x: { allowChangeRoyalty: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowChangeTransferFee: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowPauseCollection: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; }) => { allowChangeRoyalty: boolean; allowChangeTransferFee: boolean; allowPauseCollection: boolean; }; fromJSON: (x: { allowChangeRoyalty: boolean; allowChangeTransferFee: boolean; allowPauseCollection: boolean; }) => { allowChangeRoyalty: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowChangeTransferFee: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowPauseCollection: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; }; empty: () => { allowChangeRoyalty: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowChangeTransferFee: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; allowPauseCollection: import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool; }; }; /** * Contains flags for the admin contract related to the NFT collection permissions. */ declare class NFTAdminAllowFlags extends NFTAdminAllowFlags_base { /** * Packs the NFTAdminAllowFlags into a UInt8 representation for efficient storage. * @returns The packed UInt8 instance. */ pack(): UInt8; /** * Unpacks a UInt8 instance into a NFTAdminAllowFlags instance. * @param packed The packed UInt8 instance. * @returns A new NFTAdminAllowFlags instance. */ static unpack(packed: UInt8): NFTAdminAllowFlags; } /** * The **NFTAdmin** contract serves as the foundational administrative layer for NFT collections on the Mina Protocol. * It provides essential functionalities such as contract upgrades, pausing and resuming operations, and ownership management. * This contract can be extended by custom admin contracts to implement specific administrative logic, * ensuring flexibility while maintaining a standardized interface. */ declare class NFTAdmin extends SmartContract implements NFTAdminBase, PausableContract, OwnableContract { /** * The public key of the contract's administrator. * This account has the authority to perform administrative actions such as pausing the contract or upgrading the verification key. */ admin: State<PublicKey>; /** * The public key of the contract's pending administrator. */ pendingAdmin: State<PublicKey>; /** * A boolean flag indicating whether the contract is currently paused. * When `true`, certain operations are disabled. */ isPaused: State<import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool>; /** * A boolean flag indicating whether the contract has the ability to be paused. * This allows for disabling the pause functionality if desired. */ canBePaused: State<import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool>; /** * A boolean flags indicating whether the collection is allowed to change the royalty fee, transfer fee and pause the collection. */ flags: State<UInt8>; /** * Deploys the contract with initial settings. * @param props - Deployment properties including admin, upgradeAuthority, uri, canPause, and isPaused. */ deploy(props: NFTAdminDeployProps): Promise<void>; /** * Contract events emitted during various operations. */ events: { /** Emitted when the verification key is upgraded. */ upgradeVerificationKey: typeof import("node_modules/o1js/dist/node/lib/provable/field.js").Field & ((x: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/core/fieldvar.js").FieldConst | import("node_modules/o1js/dist/node/lib/provable/core/fieldvar.js").FieldVar | import("node_modules/o1js/dist/node/lib/provable/field.js").Field) => import("node_modules/o1js/dist/node/lib/provable/field.js").Field); /** Emitted when the contract is paused. */ pause: typeof PauseEvent; /** Emitted when the contract is resumed. */ resume: typeof PauseEvent; /** Emitted when ownership of the contract changes. */ ownershipTransfer: typeof OwnershipChangeEvent; /** Emitted when ownership of the contract is accepted. */ ownershipAccepted: typeof OwnershipChangeEvent; }; /** * Ensures that the transaction is authorized by the contract owner. * @returns A signed `AccountUpdate` from the admin. */ ensureOwnerSignature(): Promise<AccountUpdate>; /** * Upgrades the contract's verification key after validating with the upgrade authority. * @param vk - The new verification key to upgrade to. */ upgradeVerificationKey(vk: VerificationKey): Promise<void>; /** * Determines whether minting is allowed for the given request. * Returns mint parameters if allowed, or none if not allowed. * @param mintRequest - The minting request details. * @returns A `MintParamsOption` indicating if minting is permitted. */ canMint(mintRequest: MintRequest): Promise<MintParamsOption>; /** * Checks whether the NFT state can be updated. * Typically returns true if the contract is not paused. * @param input - The current state of the NFT. * @param output - The desired new state of the NFT. * @returns A `Bool` indicating whether the update is allowed. */ canUpdate(input: NFTState, output: NFTState): Promise<Bool>; /** * Determines whether a transfer between the specified addresses is permitted. * @param transferEvent - The transfer event details. * @returns A `Bool` indicating whether the transfer is allowed. */ canTransfer(transferEvent: TransferEvent): Promise<Bool>; /** * Pauses the contract, disabling certain administrative actions. * Can only be called by the admin if `canPause` is `true`. */ pause(): Promise<void>; /** * Resumes the contract, re-enabling administrative actions. * Can only be called by the admin if `canPause` is `true`. */ resume(): Promise<void>; /** * Transfers ownership of the contract to a new admin. * @param to - The public key of the new owner. * @returns The public key of the previous admin. */ transferOwnership(to: PublicKey): Promise<PublicKey>; /** * Accept transfer of the ownership of the contract. * @returns The public key of the previous admin. */ acceptOwnership(): Promise<PublicKey>; canChangeVerificationKey(vk: VerificationKey, address: PublicKey, tokenId: Field): Promise<Bool>; /** * Determines if the name can be changed for a Collection. */ canChangeName(name: Field): Promise<Bool>; /** * Determines if the creator can be changed for a Collection. */ canChangeCreator(creator: PublicKey): Promise<Bool>; /** * Determines if the base URI can be changed for a Collection. */ canChangeBaseUri(baseUri: Field): Promise<Bool>; /** * Determines if the royalty fee can be changed for a Collection. */ canChangeRoyalty(royaltyFee: UInt32): Promise<Bool>; /** * Determines if the transfer fee can be changed for a Collection. */ canChangeTransferFee(transferFee: UInt64): Promise<Bool>; /** * Determines if the admin contract can be changed for a Collection. */ canSetAdmin(admin: PublicKey): Promise<Bool>; /** * Determines if the collection can be paused. */ canPause(): Promise<Bool>; /** * Determines if the collection can be resumed. */ canResume(): Promise<Bool>; }