/// <reference types="bn.js" />
import * as anchor from "@coral-xyz/anchor";
import { Program } from "@coral-xyz/anchor";
import { PublicKey, TransactionSignature, TransactionInstruction } from "@solana/web3.js";
import { SoulBoundAuthority } from "./_idls/soulBoundAuthority";
import { CardinalStakePool } from "./_idls/cardinalStakePool";
import { CardinalRewardDistributor } from "./_idls/cardinalRewardDistributor";
declare const BN: typeof anchor.BN;
export declare function createStakeApi(PROVIDER: any): {
    stake: ({ user, nft, stakePool, rewardDistributor, stakePoolProgram, rewardDistributorProgram, }: {
        user: PublicKey;
        nft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        stakePool?: anchor.web3.PublicKey | undefined;
        rewardDistributor?: anchor.web3.PublicKey | undefined;
        stakePoolProgram?: anchor.Program<CardinalStakePool> | undefined;
        rewardDistributorProgram?: anchor.Program<CardinalRewardDistributor> | undefined;
    }) => Promise<TransactionSignature>;
    stakeInstruction: ({ user, nft, stakePool, rewardDistributor, stakePoolProgram, rewardDistributorProgram, }: {
        user: PublicKey;
        nft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        stakePool?: anchor.web3.PublicKey | undefined;
        rewardDistributor?: anchor.web3.PublicKey | undefined;
        stakePoolProgram?: anchor.Program<CardinalStakePool> | undefined;
        rewardDistributorProgram?: anchor.Program<CardinalRewardDistributor> | undefined;
    }) => Promise<TransactionInstruction>;
    unstake: ({ user, nft, stakePool, stakePoolProgram, options, }: {
        user: PublicKey;
        nft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        stakePool?: anchor.web3.PublicKey | undefined;
        stakePoolProgram?: anchor.Program<CardinalStakePool> | undefined;
        options?: any;
    }) => Promise<TransactionSignature>;
    unstakeInstruction: ({ user, nft, stakePool, stakePoolProgram, }: {
        user: PublicKey;
        nft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        stakePool?: anchor.web3.PublicKey | undefined;
        stakePoolProgram?: anchor.Program<CardinalStakePool> | undefined;
    }) => Promise<TransactionInstruction>;
    claimAndUnstakeInstructions: ({ user, nft, stakePool, stakePoolProgram, }: {
        user: PublicKey;
        nft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        stakePool?: anchor.web3.PublicKey | undefined;
        stakePoolProgram?: anchor.Program<CardinalStakePool> | undefined;
    }) => Promise<Array<TransactionInstruction>>;
    isStaked: ({ user, nft, stakePool, stakePoolProgram, }: {
        user: PublicKey;
        nft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        stakePool?: anchor.web3.PublicKey | undefined;
        stakePoolProgram?: anchor.Program<CardinalStakePool> | undefined;
    }) => Promise<boolean>;
    isSoulBoundAuthorityUserInitialized: (user: PublicKey, soulboundProgram?: anchor.Program<SoulBoundAuthority>) => Promise<any>;
    readGoldPoints: ({ user, nft, goldMint, stakePool, rewardDistributor, soulboundProgram, stakePoolProgram, rewardDistributorProgram, accounts, }: {
        user: PublicKey;
        nft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        goldMint?: anchor.web3.PublicKey | undefined;
        soulboundProgram?: anchor.Program<SoulBoundAuthority> | undefined;
        stakePool?: anchor.web3.PublicKey | undefined;
        rewardDistributor?: anchor.web3.PublicKey | undefined;
        stakePoolProgram?: anchor.Program<CardinalStakePool> | undefined;
        rewardDistributorProgram?: anchor.Program<CardinalRewardDistributor> | undefined;
        accounts?: any;
    }) => Promise<number>;
    readUnclaimedGoldPoints: ({ user, nft, stakePool, rewardDistributor, stakePoolProgram, rewardDistributorProgram, accounts, }: {
        user: PublicKey;
        nft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        stakePool?: anchor.web3.PublicKey | undefined;
        rewardDistributor?: anchor.web3.PublicKey | undefined;
        stakePoolProgram?: anchor.Program<CardinalStakePool> | undefined;
        rewardDistributorProgram?: anchor.Program<CardinalRewardDistributor> | undefined;
        accounts?: {
            stakeEntry: any;
            rewardEntry: any;
            rewardDistributor: any;
            goldTokenAccount: any;
        } | undefined;
    }) => Promise<anchor.BN>;
    readClaimedGoldPoints: ({ user, nft, goldMint, soulboundProgram, rewardDistributorProgram, accounts, }: {
        user: PublicKey;
        nft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        goldMint?: anchor.web3.PublicKey | undefined;
        soulboundProgram?: anchor.Program<SoulBoundAuthority> | undefined;
        rewardDistributorProgram?: anchor.Program<CardinalRewardDistributor> | undefined;
        accounts?: {
            stakeEntry: any;
            rewardEntry: any;
            goldTokenAccount: any;
        } | undefined;
    }) => Promise<anchor.BN>;
    transferRewards: ({ amount, fromUser, fromNft, toNft, goldMint, stakePool, rewardDistributor, soulboundProgram, stakePoolProgram, rewardDistributorProgram, }: {
        amount?: anchor.BN | undefined;
        fromUser: PublicKey;
        fromNft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        toNft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        goldMint?: anchor.web3.PublicKey | undefined;
        stakePool?: anchor.web3.PublicKey | undefined;
        rewardDistributor?: anchor.web3.PublicKey | undefined;
        soulboundProgram?: anchor.Program<SoulBoundAuthority> | undefined;
        stakePoolProgram?: anchor.Program<CardinalStakePool> | undefined;
        rewardDistributorProgram?: anchor.Program<CardinalRewardDistributor> | undefined;
    }) => Promise<TransactionSignature>;
    anchor: {
        soulbound: anchor.Program<SoulBoundAuthority>;
        rewardDistributor: anchor.Program<CardinalRewardDistributor>;
        stakePool: anchor.Program<CardinalStakePool>;
    };
    constants: {
        REWARD_DISTRIBUTOR: anchor.web3.PublicKey;
    };
    rewardEntryAddress: ({ user, nft, stakePool, rewardDistributor, stakePoolProgram, rewardDistributorProgram, }: {
        user: PublicKey;
        nft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        stakePool?: anchor.web3.PublicKey | undefined;
        rewardDistributor?: anchor.web3.PublicKey | undefined;
        stakePoolProgram?: anchor.Program<CardinalStakePool> | undefined;
        rewardDistributorProgram?: anchor.Program<CardinalRewardDistributor> | undefined;
    }) => Promise<anchor.web3.PublicKey>;
    stakeEntryAddress: ({ user, nft, stakePool, stakePoolProgram, }: {
        user: PublicKey;
        nft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        stakePool?: anchor.web3.PublicKey | undefined;
        stakePoolProgram?: anchor.Program<CardinalStakePool> | undefined;
    }) => Promise<anchor.web3.PublicKey>;
    goldPointsAddress: ({ user, nft, goldMint, soulboundProgram, rewardDistributorProgram, }: {
        user: PublicKey;
        nft: {
            mintAddress: PublicKey;
            metadataAddress: PublicKey;
        };
        goldMint?: anchor.web3.PublicKey | undefined;
        soulboundProgram?: anchor.Program<SoulBoundAuthority> | undefined;
        rewardDistributorProgram?: anchor.Program<CardinalRewardDistributor> | undefined;
    }) => Promise<PublicKey>;
};
export {};
//# sourceMappingURL=index.d.ts.map