UNPKG

@paulstinchcombe/kami721c-sdk

Version:

SDK for interacting with KAMI721C NFT contracts

299 lines (298 loc) 10.7 kB
import { ContractRunner } from 'ethers'; /** * Royalty data structure */ export interface RoyaltyData { receiver: string; feeNumerator: bigint; } /** * Rental information structure */ export interface RentalInfo { renter: string; startTime: bigint; endTime: bigint; rentalPrice: bigint; active: boolean; } /** * KAMI721C contract wrapper class */ export declare class KAMI721C { private contract; /** * Creates a new instance of the KAMI721C contract wrapper * @param runner An ethers.js ContractRunner (Provider or Signer) * @param contractAddress The address of the KAMI721C contract */ constructor(runner: ContractRunner, contractAddress: string); /** * Connect a signer to the contract * @param signer The signer to connect * @returns A new instance of the KAMI721C contract with the connected signer */ connect(signer: ContractRunner): KAMI721C; /** * Get the contract address * @returns The contract address */ getAddress(): string; /** * Get the contract name * @returns The name of the NFT collection */ name(): Promise<string>; /** * Get the contract symbol * @returns The symbol of the NFT collection */ symbol(): Promise<string>; /** * Get the total supply of tokens * @returns The total number of tokens minted */ totalSupply(): Promise<bigint>; /** * Get the token URI for a specific token ID * @param tokenId The ID of the token to query * @returns The token URI */ tokenURI(tokenId: number | bigint): Promise<string>; /** * Get the owner of a specific token * @param tokenId The ID of the token to query * @returns The address of the token owner */ ownerOf(tokenId: number | bigint): Promise<string>; /** * Get the balance of an address * @param owner The address to query * @returns The number of tokens owned by the address */ balanceOf(owner: string): Promise<bigint>; /** * Get the current mint price * @returns The mint price in USDC (with 6 decimals) */ mintPrice(): Promise<bigint>; /** * Set the mint price (requires OWNER_ROLE) * @param newMintPrice The new mint price in USDC (with 6 decimals) * @returns The transaction */ setMintPrice(newMintPrice: bigint | string): Promise<any>; /** * Mint a new token (requires USDC approval) * @returns The transaction */ mint(): Promise<any>; /** * Set royalties for all newly minted tokens (requires OWNER_ROLE) * @param royalties Array of royalty receivers and fee numerators * @returns The transaction */ setMintRoyalties(royalties: RoyaltyData[]): Promise<any>; /** * Set royalties for a specific token's mint event (requires OWNER_ROLE) * @param tokenId The ID of the token to set royalties for * @param royalties Array of royalty receivers and fee numerators * @returns The transaction */ setTokenMintRoyalties(tokenId: number | bigint, royalties: RoyaltyData[]): Promise<any>; /** * Set global transfer royalties for all tokens (requires OWNER_ROLE) * @param royalties Array of royalty receivers and fee numerators * @returns The transaction */ setTransferRoyalties(royalties: RoyaltyData[]): Promise<any>; /** * Set transfer royalties for a specific token (requires OWNER_ROLE) * @param tokenId The ID of the token to set royalties for * @param royalties Array of royalty receivers and fee numerators * @returns The transaction */ setTokenTransferRoyalties(tokenId: number | bigint, royalties: RoyaltyData[]): Promise<any>; /** * Get the current royalty percentage for transfers * @returns The royalty percentage in basis points (e.g., 1000 = 10%) */ royaltyPercentage(): Promise<number>; /** * Set the royalty percentage for transfers (requires OWNER_ROLE) * @param newRoyaltyPercentage New royalty percentage in basis points (e.g., 1000 = 10%) * @returns The transaction */ setRoyaltyPercentage(newRoyaltyPercentage: number): Promise<any>; /** * Get the platform commission details * @returns The platform commission percentage and address */ getPlatformCommission(): Promise<{ percentage: number; address: string; }>; /** * Set the platform commission details (requires OWNER_ROLE) * @param newPercentage New commission percentage in basis points (e.g., 500 = 5%) * @param newAddress New platform address to receive commission * @returns The transaction */ setPlatformCommission(newPercentage: number, newAddress: string): Promise<any>; /** * Sell a token to another address with royalties handled automatically * @param to The buyer address * @param tokenId The token ID to sell * @param salePrice The sale price in USDC * @returns The transaction */ sellToken(to: string, tokenId: number | bigint, salePrice: bigint | string): Promise<any>; /** * Get royalty information for a token sale * @param tokenId The ID of the token being sold * @param salePrice The sale price * @returns The royalty receiver address and amount */ royaltyInfo(tokenId: number | bigint, salePrice: bigint | string): Promise<{ receiver: string; royaltyAmount: bigint; }>; /** * Get mint royalty receivers for a token * @param tokenId The ID of the token * @returns Array of royalty data */ getMintRoyaltyReceivers(tokenId: number | bigint): Promise<RoyaltyData[]>; /** * Get transfer royalty receivers for a token * @param tokenId The ID of the token * @returns Array of royalty data */ getTransferRoyaltyReceivers(tokenId: number | bigint): Promise<RoyaltyData[]>; /** * Check if an address has a specific role * @param role The role to check (OWNER_ROLE, PLATFORM_ROLE, or RENTER_ROLE) * @param address The address to check * @returns True if the address has the role */ hasRole(role: string, address: string): Promise<boolean>; /** * Grant a role to an address (requires DEFAULT_ADMIN_ROLE) * @param role The role to grant (OWNER_ROLE, PLATFORM_ROLE, or RENTER_ROLE) * @param address The address to grant the role to * @returns The transaction */ grantRole(role: string, address: string): Promise<any>; /** * Revoke a role from an address (requires DEFAULT_ADMIN_ROLE) * @param role The role to revoke (OWNER_ROLE, PLATFORM_ROLE, or RENTER_ROLE) * @param address The address to revoke the role from * @returns The transaction */ revokeRole(role: string, address: string): Promise<any>; /** * Get the OWNER_ROLE constant * @returns The OWNER_ROLE bytes32 value */ OWNER_ROLE(): Promise<string>; /** * Get the PLATFORM_ROLE constant * @returns The PLATFORM_ROLE bytes32 value */ PLATFORM_ROLE(): Promise<string>; /** * Get the RENTER_ROLE constant * @returns The RENTER_ROLE bytes32 value */ RENTER_ROLE(): Promise<string>; /** * Set the base URI for tokens (requires OWNER_ROLE) * @param baseURI The new base URI * @returns The transaction */ setBaseURI(baseURI: string): Promise<any>; /** * Burn a token (requires token owner permission) * @param tokenId The ID of the token to burn * @returns The transaction */ burn(tokenId: number | bigint): Promise<any>; /** * Set the security policy for the contract (requires OWNER_ROLE) * @param securityLevel The security level * @param operatorWhitelistId The operator whitelist ID * @param permittedContractReceiversAllowlistId The permitted contract receivers allowlist ID * @returns The transaction */ setSecurityPolicy(securityLevel: number, operatorWhitelistId: number, permittedContractReceiversAllowlistId: number): Promise<any>; /** * Rent a token (requires USDC approval) * @param tokenId The ID of the token to rent * @param duration The rental duration in seconds * @param rentalPrice The rental price in USDC * @returns The transaction */ rentToken(tokenId: number | bigint, duration: number | bigint, rentalPrice: bigint | string): Promise<any>; /** * End a rental early (can be called by either the owner or the renter) * @param tokenId The ID of the token to end rental for * @returns The transaction */ endRental(tokenId: number | bigint): Promise<any>; /** * Extend a rental period * @param tokenId The ID of the token to extend rental for * @param additionalDuration The additional duration in seconds * @param additionalPayment The additional payment in USDC * @returns The transaction */ extendRental(tokenId: number | bigint, additionalDuration: number | bigint, additionalPayment: bigint | string): Promise<any>; /** * Check if a token is currently rented * @param tokenId The ID of the token to check * @returns Whether the token is rented */ isRented(tokenId: number | bigint): Promise<boolean>; /** * Get rental information for a token * @param tokenId The ID of the token to get rental info for * @returns The rental information */ getRentalInfo(tokenId: number | bigint): Promise<RentalInfo>; /** * Check if a user has any active rentals * @param user The user address to check * @returns Whether the user has active rentals */ hasActiveRentals(user: string): Promise<boolean>; /** * Get the USDC token address * @returns The address of the USDC token contract */ getUsdcTokenAddress(): Promise<string>; /** * Get the platform commission percentage * @returns The platform commission percentage in basis points (e.g., 500 = 5%) */ getPlatformCommissionPercentage(): Promise<bigint>; /** * Get the platform address * @returns The address that receives platform commission */ getPlatformAddress(): Promise<string>; /** * Check if the contract is paused * @returns Whether the contract is paused */ paused(): Promise<boolean>; /** * Pause the contract (requires OWNER_ROLE) * @returns The transaction */ pause(): Promise<any>; /** * Unpause the contract (requires OWNER_ROLE) * @returns The transaction */ unpause(): Promise<any>; }