///
///
import { Keypair, TransactionInstruction } from '@solana/web3.js';
import BN from 'bn.js';
import type { ValidatorBondsProgram } from '../../src';
import type { Provider } from '@coral-xyz/anchor';
import type { StakeState } from '@marinade.finance/marinade-ts-sdk/dist/src/marinade-state/borsh/stake-state';
import type { Wallet as WalletInterface } from '@marinade.finance/web3js-1x';
import type { ExtendedProvider } from '@marinade.finance/web3js-1x';
import type { PublicKey } from '@solana/web3.js';
import type { AccountInfo, Lockup, Signer } from '@solana/web3.js';
export type SetLockupStakeParams = {
stakePubkey: PublicKey;
authorizedPubkey: PublicKey;
unixTimestamp?: number;
epoch?: number;
custodian?: PublicKey;
};
export declare function setLockup(params: SetLockupStakeParams): TransactionInstruction;
export declare enum StakeStates {
Uninitialized = 0,
Initialized = 1,
Delegated = 2,
RewardsPool = 3
}
export declare function getAndCheckStakeAccount(provider: Provider, account: PublicKey, stakeStateCheck?: StakeStates): Promise<[StakeState, AccountInfo]>;
export type VoteAccountKeys = {
voteAccount: PublicKey;
validatorIdentity: Keypair;
authorizedVoter: Keypair;
authorizedWithdrawer: Keypair;
};
export declare function createVoteAccountWithIdentity(provider: ExtendedProvider, validatorIdentity: Keypair): Promise;
export declare function createVoteAccount({ provider, rentExempt, authorizedVoter, authorizedWithdrawer, validatorIdentity, voteAccount, }: {
provider: ExtendedProvider;
rentExempt?: number;
authorizedVoter?: Keypair;
authorizedWithdrawer?: Keypair;
validatorIdentity?: Keypair;
voteAccount?: Keypair;
}): Promise;
export declare function removeVoteAccount({ provider, voteAccount, authorizedWithdrawer, toPubkey, }: {
provider: ExtendedProvider;
voteAccount: PublicKey;
authorizedWithdrawer: Keypair;
toPubkey?: PublicKey;
}): Promise<{
voteAccount: PublicKey;
authorizedWithdrawer: Keypair;
toPubkey: PublicKey;
lamports: number;
}>;
export declare function authorizeStakeAccount({ provider, stakeAccount, authority, staker, withdrawer, custodian, }: {
provider: ExtendedProvider;
stakeAccount: PublicKey;
authority: WalletInterface | Signer;
staker?: PublicKey;
withdrawer?: PublicKey;
custodian?: WalletInterface | Signer;
}): Promise;
export type DelegatedStakeAccount = {
stakeAccount: PublicKey;
voteAccount: PublicKey;
validatorIdentity: Keypair | undefined;
staker: Keypair;
withdrawer: Keypair;
};
export declare function delegatedStakeAccount({ provider, voteAccountToDelegate, lockup, lamports, rentExemptVote, staker, withdrawer, }: {
provider: ExtendedProvider;
voteAccountToDelegate?: PublicKey;
lockup?: Lockup;
lamports?: number | BN;
rentExemptVote?: number;
staker?: Keypair;
withdrawer?: Keypair;
}): Promise;
export declare function createBondsFundedStakeAccount({ program, provider, configAccount, lamports, voteAccount, }: {
program: ValidatorBondsProgram;
provider: ExtendedProvider;
configAccount: PublicKey;
lamports: number | BN;
voteAccount: PublicKey;
}): Promise;
export declare function createSettlementFundedDelegatedStake({ program, provider, configAccount, settlementAccount, voteAccount, lamports, }: {
program: ValidatorBondsProgram;
provider: ExtendedProvider;
configAccount: PublicKey;
settlementAccount: PublicKey;
voteAccount: PublicKey;
lamports: number;
}): Promise;
export declare function createSettlementFundedInitializedStake({ program, provider, configAccount, settlementAccount, lamports, }: {
program: ValidatorBondsProgram;
provider: ExtendedProvider;
configAccount: PublicKey;
settlementAccount: PublicKey;
lamports?: number;
}): Promise;
export declare function createDelegatedStakeAccount({ provider, lamports, voteAccount, withdrawer, staker, }: {
provider: ExtendedProvider;
lamports: number | BN;
voteAccount: PublicKey;
withdrawer: PublicKey;
staker: PublicKey;
}): Promise;
export declare function isErrorEpochRewardsPeriod(e: unknown): boolean;
export declare function retryOnEpochRewardsPeriod(fn: () => Promise): Promise;
export declare function nonInitializedStakeAccount(provider: ExtendedProvider, rentExempt?: number): Promise<[PublicKey, Keypair]>;
export type InitializedStakeAccount = {
stakeAccount: PublicKey;
staker: Keypair | PublicKey;
withdrawer: Keypair | PublicKey;
};
export declare function createInitializedStakeAccount({ provider, lockup, rentExempt, staker, withdrawer, }: {
provider: ExtendedProvider;
lockup?: Lockup;
rentExempt?: number;
staker?: Keypair | PublicKey;
withdrawer?: Keypair | PublicKey;
}): Promise;
//# sourceMappingURL=staking.d.ts.map