import { ProviderRpcClient } from 'everscale-inpage-provider';
import { AbstractBlockchainController, IMessage, IMessageContent, IMessageCorruptedContent, IExtraEncryptionStrateryBulk, IExtraEncryptionStrateryEntry, MessageKey, PublicKey, BlockchainControllerFactory, Uint256, AbstractNameService } from '@ylide/sdk';
import { GqlSender } from '../misc/GqlSender';
export declare class EverscaleBlockchainController extends AbstractBlockchainController {
    private options;
    ever: ProviderRpcClient;
    gql: GqlSender;
    readonly everscaleEncryptCore: Promise<any>;
    readonly MESSAGES_FETCH_LIMIT = 50;
    readonly mailerContractAddress: string;
    readonly broadcasterContractAddress: string;
    readonly registryContractAddress: string;
    private readonly everscaleMainnetEndpoints;
    private readonly venomTestnetEndpoints;
    constructor(options?: {
        type?: 'everscale-mainnet' | 'venom-testnet';
        dev?: boolean;
        mailerContractAddress?: string;
        broadcasterContractAddress?: string;
        registryContractAddress?: string;
        endpoints?: string[];
    });
    isReadingBySenderAvailable(): boolean;
    defaultNameService(): AbstractNameService | null;
    init(): Promise<void>;
    getBalance(address: string): Promise<string>;
    getDefaultMailerAddress(): string;
    getRecipientReadingRules(address: Uint256): Promise<any>;
    private getPublicKeyByAddress;
    extractPublicKeyFromAddress(address: string): Promise<PublicKey | null>;
    private _retrieveMessageHistoryByTime;
    private _retrieveMessageHistoryByBounds;
    retrieveMessageHistoryByTime(sender: string | null, recipient: Uint256 | null, fromTimestamp?: number, toTimestamp?: number, limit?: number): Promise<IMessage[]>;
    retrieveMessageHistoryByBounds(sender: string | null, recipient: Uint256 | null, fromMessage?: IMessage, toMessage?: IMessage, limit?: number): Promise<IMessage[]>;
    retrieveBroadcastHistoryByTime(sender: string | null, fromTimestamp?: number, toTimestamp?: number, limit?: number): Promise<IMessage[]>;
    retrieveBroadcastHistoryByBounds(sender: string | null, fromMessage?: IMessage, toMessage?: IMessage, limit?: number): Promise<IMessage[]>;
    private convertMsgIdToAddress;
    retrieveAndVerifyMessageContent(msg: IMessage): Promise<IMessageContent | IMessageCorruptedContent | null>;
    retrieveMessageContentByMsgId(msgId: string): Promise<IMessageContent | IMessageCorruptedContent | null>;
    private formatPushMessage;
    private formatBroadcastMessage;
    isAddressValid(address: string): boolean;
    private queryMessagesListDescRaw;
    private queryMessagesList;
    extractNativePublicKeyFromAddress(addressStr: string): Promise<Uint8Array | null>;
    decodeNativeKey(senderPublicKey: Uint8Array, recipientPublicKey: Uint8Array, key: Uint8Array): Promise<Uint8Array>;
    getExtraEncryptionStrategiesFromAddress(address: string): Promise<IExtraEncryptionStrateryEntry[]>;
    getSupportedExtraEncryptionStrategies(): string[];
    prepareExtraEncryptionStrategyBulk(entries: IExtraEncryptionStrateryEntry[]): Promise<IExtraEncryptionStrateryBulk>;
    executeExtraEncryptionStrategy(entries: IExtraEncryptionStrateryEntry[], bulk: IExtraEncryptionStrateryBulk, addedPublicKeyIndex: number | null, messageKey: Uint8Array): Promise<MessageKey[]>;
    addressToUint256(address: string): Uint256;
    compareMessagesTime(a: IMessage, b: IMessage): number;
}
export declare const everscaleBlockchainFactory: BlockchainControllerFactory;
export declare const venomBlockchainFactory: BlockchainControllerFactory;
