import { PublicKey } from '@solana/web3.js';
import BN from 'bn.js';
import type { Logger, Nullable } from '../../utils';
import type { IdentityService } from '../identity';
import type { TransactionHandler } from './transactionHandler';
export declare type AttestationMeta = {
    ethAddress: string;
    signature: string;
};
export declare type SubmitAttestationsConfig = {
    rewardManagerProgramId: PublicKey;
    rewardManagerAccount: PublicKey;
    attestations: AttestationMeta[];
    oracleAttestation: AttestationMeta;
    challengeId: string;
    specifier: string;
    feePayer: PublicKey;
    attestationSignature?: string;
    recipientEthAddress: string;
    tokenAmount: BN;
    transactionHandler: TransactionHandler;
    instructionsPerTransaction?: number;
    logger: Logger;
};
export declare function submitAttestations({ rewardManagerProgramId, rewardManagerAccount, attestations, oracleAttestation, challengeId, specifier, feePayer, recipientEthAddress, tokenAmount, transactionHandler, instructionsPerTransaction, logger }: SubmitAttestationsConfig): Promise<{
    res: string | null;
    errorCode: string | number | null;
    error: string | null;
} | undefined>;
export declare type CreateSenderParams = {
    rewardManagerProgramId: PublicKey;
    rewardManagerAccount: PublicKey;
    senderEthAddress: string;
    feePayer: PublicKey;
    operatorEthAddress: string;
    attestations: AttestationMeta[];
    identityService: Nullable<IdentityService>;
    transactionHandler: TransactionHandler;
};
/**
 * Creates a new rewards signer (one that can attest)
 */
export declare function createSender({ rewardManagerProgramId, rewardManagerAccount, senderEthAddress, feePayer, operatorEthAddress, attestations, transactionHandler }: CreateSenderParams): Promise<{
    res: string | null;
    errorCode: string | number | null;
    error: string | null;
}>;
export declare type EvaluateAttestationsConfig = {
    rewardManagerProgramId: PublicKey;
    rewardManagerAccount: PublicKey;
    rewardManagerTokenSource: PublicKey;
    challengeId: string;
    specifier: string;
    recipientEthAddress: string;
    userBankProgramAccount: PublicKey;
    oracleEthAddress: string;
    feePayer: PublicKey;
    tokenAmount: BN;
    transactionHandler: TransactionHandler;
    logger: Logger;
};
/**
 * Evaluates previously submitted attestations, disbursing if successful.
 */
export declare const evaluateAttestations: ({ rewardManagerProgramId, rewardManagerAccount, rewardManagerTokenSource, challengeId, specifier, recipientEthAddress, userBankProgramAccount, oracleEthAddress, feePayer, tokenAmount, transactionHandler, logger }: EvaluateAttestationsConfig) => Promise<{
    res: string | null;
    errorCode: string | number | null;
    error: string | null;
}>;
/**
 * Derives the Solana account associated with a given sender Eth address.
 */
export declare const deriveSolanaSenderFromEthAddress: (ethAddress: string, rewardManagerProgramId: PublicKey, rewardManagerAccount: PublicKey) => Promise<PublicKey>;
