import type { Address, EIP1193Provider, WriteContractReturnType } from "viem";
import { SupportedChainId } from "./config";
import type { LeaderboardProperties, Score } from "./types";
export declare class Leaderboard {
    private contract;
    private contractAddress;
    private chain;
    private walletKey;
    constructor(chainId: SupportedChainId, walletKey?: string, contractAddress?: string);
    connect(provider?: EIP1193Provider): boolean;
    private handleError;
    addAdmin(newAdmin: Address): Promise<WriteContractReturnType>;
    removeAdmin(admin: Address): Promise<WriteContractReturnType>;
    updateLeaderboard(startTime: number, endTime: number, title: string): Promise<WriteContractReturnType>;
    incrementScores(inputs: Array<{
        user: Address;
        score: number;
        timestamp: number;
    }>): Promise<WriteContractReturnType>;
    decrementScores(inputs: Array<{
        user: Address;
        score: number;
        timestamp: number;
    }>): Promise<WriteContractReturnType>;
    updateScores(inputs: Array<{
        user: Address;
        score: number;
        timestamp: number;
    }>): Promise<WriteContractReturnType>;
    overwriteScores(inputs: Array<{
        user: Address;
        score: number;
        timestamp: number;
    }>): Promise<WriteContractReturnType>;
    blacklistUsers(users: Address[]): Promise<WriteContractReturnType>;
    unblacklistUser(user: Address): Promise<WriteContractReturnType>;
    addEligibleUsers(users: Address[]): Promise<WriteContractReturnType>;
    removeEligibleUsers(users: Address[]): Promise<WriteContractReturnType>;
    increaseUserAttempts(user: Address, amount: number): Promise<WriteContractReturnType>;
    decreaseUserAttempts(user: Address, amount: number): Promise<WriteContractReturnType>;
    getUserAttempts(user: Address): Promise<number | undefined>;
    /**
     * Get all users and their scores, sorted by score in descending order
     */
    getAllScores(): Promise<Score[]>;
    /**
     * Get top N users and their scores
     * @param limit Number of top users to return
     */
    getTopScores(limit: number, startIndex?: number): Promise<Score[]>;
    /**
     * Get player ranking and score
     * @param userAddress Address of the player to look up
     */
    getPlayerRanking(userAddress: Address): Promise<Score | undefined>;
    getUserScore(user: Address): Promise<{
        score: number;
        lastUpdated: number;
    } | undefined>;
    getLeaderboardUserCount(): Promise<number | undefined>;
    getLeaderboardStartTime(): Promise<number | undefined>;
    getLeaderboardEndTime(): Promise<number | undefined>;
    isLeaderboardActive(): Promise<boolean>;
    isLeaderboardEnded(): Promise<boolean>;
    isPrivate(): Promise<boolean>;
    isUserBlacklisted(user: Address): Promise<boolean>;
    isUserEligible(user: Address): Promise<boolean>;
    getEligibleUsers(): Promise<string[]>;
    getAdmins(): Promise<string[]>;
    getBlacklistUsers(): Promise<string[]>;
    getLeaderboardProperties(): Promise<LeaderboardProperties | undefined>;
    getRemainingTime(): Promise<number | undefined>;
    getTimeUntilStart(): Promise<number | undefined>;
    getSlug(): Promise<string | undefined>;
    getTitle(): Promise<string | undefined>;
}
