import { EthereumProvider, HardhatRuntimeEnvironment } from 'hardhat/types';
import { ChainConfig } from '@nomicfoundation/hardhat-verify/types';
import { ContractInformation } from '../solc/types';
import { ZkSyncEtherscanExplorerVerifyRequest, ZkSyncExplorerVerifyRequest } from './verify-contract-request';
import { VerificationStatusResponse } from './verification-status-response';
export type VerificationServiceVerificationIdReturnType = string | number;
export type VerificationServiceVerifyRequest = ZkSyncExplorerVerifyRequest | ZkSyncEtherscanExplorerVerifyRequest;
export type VerificationServiceInitialVerifyRequest = ZkSyncExplorerVerifyRequest;
export type VerificationServiceVerificationStatus = VerificationStatusResponse;
export interface VerificationServiceVerifyResponse<V extends VerificationServiceVerificationIdReturnType = VerificationServiceVerificationIdReturnType> {
    verificationId: V;
    contractVerifyDataInfo: ContractVerifyDataInfo;
}
export interface ContractVerifyDataInfo {
    contractName: string;
    contractAddress: string;
}
export declare abstract class VerificationService<ReturnVerificationIdType extends VerificationServiceVerificationIdReturnType = VerificationServiceVerificationIdReturnType, ContractVerifyRequestType extends VerificationServiceVerifyRequest = VerificationServiceVerifyRequest, VerificationStatusType extends VerificationServiceVerificationStatus = VerificationServiceVerificationStatus, VerificationServiceVerifyResponseType = VerificationServiceVerifyResponse<ReturnVerificationIdType>> {
    protected hre: HardhatRuntimeEnvironment;
    protected verifyUrl: string;
    protected browserUrl?: string | undefined;
    constructor(hre: HardhatRuntimeEnvironment, verifyUrl: string, browserUrl?: string | undefined);
    protected abstract generateRequest(initialRequest: VerificationServiceInitialVerifyRequest): ContractVerifyRequestType;
    protected abstract getVerificationId(initialRequest: VerificationServiceInitialVerifyRequest): Promise<ReturnVerificationIdType>;
    abstract getVerificationStatus(verificationId: ReturnVerificationIdType, contractVerifyDataInfo: ContractVerifyDataInfo): Promise<VerificationStatusType>;
    protected abstract getSupportedCompilerVersions(): Promise<string[]>;
    protected abstract getSolcVersion(contractInformation: ContractInformation): Promise<string>;
    protected abstract getContractBorwserUrl(address: string): string | undefined;
    static getCurrentChainConfig(ethereumProvider: EthereumProvider, customChains: ChainConfig[], builtinChains: ChainConfig[]): Promise<ChainConfig>;
    verify(address: string, contract: string, constructorArguments: any, libraries: any, noCompile: boolean, isWithFullContext?: boolean): Promise<VerificationServiceVerifyResponseType>;
    getVerificationStatusWithRetry(verificationId: ReturnVerificationIdType, contractVerifyDataInfo: ContractVerifyDataInfo, maxRetries?: number, baseRetries?: number, baseDelayInMs?: number): Promise<VerificationStatusType>;
}
export interface VerificationServiceVerificationIdResponse {
    isOk(): boolean;
}
//# sourceMappingURL=service.d.ts.map