import { Connection, PublicKey, Transaction, VersionedTransaction } from "@solana/web3.js";
import { StakingInstructions } from "./instructions";
import { TransactionPayload } from "./payload";
import { LockupInfo, StakeInfo } from "./types";
export declare class StakingService {
    readonly instructions: StakingInstructions;
    readonly _connection: Connection;
    private readonly _signTransaction;
    static deriveLockupInfoAddress(lockerName: string, programId: string | PublicKey): PublicKey;
    static deriveStakeVaultAddress(lockupAddress: string | PublicKey, programId: string | PublicKey): PublicKey;
    static deriveStakeInfoAddress(lockupAddress: string | PublicKey, stakerAddress: string | PublicKey, programId: string | PublicKey): PublicKey;
    private readonly _programId;
    private readonly _programErrorMap;
    constructor(instructions: StakingInstructions, _connection: Connection, _signTransaction: <T extends Transaction | VersionedTransaction>(transaction: T) => Promise<T>);
    private _createPayload;
    initLockup(params: {
        creatorAddress: string | PublicKey;
        rewardTokenAddress: string | PublicKey;
        stakeTokenAddress: string | PublicKey;
        totalAllocationReward: string;
        lockTimespan: string;
        name: string;
        stakingEndTime: number;
        stakingStartTime: number;
    }): Promise<TransactionPayload>;
    stake(params: {
        lockupAddress: string | PublicKey;
        stakerAddress: string | PublicKey;
        stakeAmount: string;
    }): Promise<TransactionPayload>;
    unstake(params: {
        lockupAddress: string | PublicKey;
        stakerAddress: string | PublicKey;
    }): Promise<TransactionPayload>;
    claimRewardToken(params: {
        lockupAddress: string | PublicKey;
        stakerAddress: string | PublicKey;
    }): Promise<TransactionPayload>;
    getLockupInfo(lockupAddress: string | PublicKey): Promise<LockupInfo>;
    getStakeInfo(lockupAddress: string | PublicKey, stakerAddress: string | PublicKey): Promise<StakeInfo>;
    calculateReward(lockupAdress: string | PublicKey, stakerAddress: string | PublicKey): Promise<string>;
}
