import { ethers } from 'ethers';
import { AmountRoutingHook, ArbL2ToL1Hook, CCIPHook, DomainRoutingHook, InterchainGasPaymaster, OPStackHook, PausableHook, ProtocolFee, RateLimitedHook, StaticAggregationHook, StorageGasOracle } from '@hyperlane-xyz/core';
import { Address, Domain, EvmChainId, ProtocolType } from '@hyperlane-xyz/utils';
import { CCIPContractCache } from '../ccip/utils.js';
import { HyperlaneAddresses } from '../contracts/types.js';
import { HyperlaneModule, HyperlaneModuleParams } from '../core/AbstractHyperlaneModule.js';
import { CoreAddresses } from '../core/contracts.js';
import { HyperlaneDeployer } from '../deploy/HyperlaneDeployer.js';
import { ProxyFactoryFactories } from '../deploy/contracts.js';
import { ContractVerifier } from '../deploy/verify/ContractVerifier.js';
import { IgpConfig } from '../gas/types.js';
import { HyperlaneIsmFactory } from '../ism/HyperlaneIsmFactory.js';
import { MultiProvider } from '../providers/MultiProvider.js';
import { AnnotatedEV5Transaction } from '../providers/ProviderType.js';
import { ChainName, ChainNameOrId } from '../types.js';
import { EvmHookReader } from './EvmHookReader.js';
import { DeployedHook, HookFactories } from './contracts.js';
import { AggregationHookConfig, AmountRoutingHookConfig, ArbL2ToL1HookConfig, CCIPHookConfig, DerivedHookConfig, DomainRoutingHookConfig, FallbackRoutingHookConfig, HookConfig, IgpHookConfig, OpStackHookConfig, PausableHookConfig, ProtocolFeeHookConfig, RateLimitedHookConfig } from './types.js';
type HookModuleAddresses = {
    deployedHook: Address;
    mailbox: Address;
    proxyAdmin: Address;
    rateLimitedSender?: Address;
};
declare class HookDeployer extends HyperlaneDeployer<{}, HookFactories> {
    protected cachingEnabled: boolean;
    deployContracts(_chain: ChainName, _config: {}): Promise<any>;
}
export declare class EvmHookModule extends HyperlaneModule<ProtocolType.Ethereum, HookConfig, HyperlaneAddresses<ProxyFactoryFactories> & HookModuleAddresses> {
    protected readonly multiProvider: MultiProvider;
    protected readonly contractVerifier?: ContractVerifier | undefined;
    static protocols: ProtocolType[];
    protected readonly logger: import("pino").default.Logger<never>;
    protected readonly reader: EvmHookReader;
    protected readonly hookFactory: HyperlaneIsmFactory;
    protected readonly deployer: HookDeployer;
    readonly chain: ChainName;
    readonly chainId: EvmChainId;
    readonly domainId: Domain;
    protected readonly txOverrides: Partial<ethers.providers.TransactionRequest>;
    constructor(multiProvider: MultiProvider, params: HyperlaneModuleParams<HookConfig, HyperlaneAddresses<ProxyFactoryFactories> & HookModuleAddresses>, ccipContractCache?: CCIPContractCache, contractVerifier?: ContractVerifier | undefined);
    read(): Promise<DerivedHookConfig | string>;
    update(targetConfig: HookConfig): Promise<AnnotatedEV5Transaction[]>;
    static create({ chain, config, proxyFactoryFactories, coreAddresses, multiProvider, ccipContractCache, contractVerifier, }: {
        chain: ChainNameOrId;
        config: HookConfig;
        proxyFactoryFactories: HyperlaneAddresses<ProxyFactoryFactories>;
        coreAddresses: Omit<CoreAddresses, 'validatorAnnounce' | 'quotedCalls'> & {
            rateLimitedSender?: Address;
        };
        multiProvider: MultiProvider;
        ccipContractCache?: CCIPContractCache;
        contractVerifier?: ContractVerifier;
    }): Promise<EvmHookModule>;
    protected computeRoutingHooksToSet({ currentDomains, targetDomains, }: {
        currentDomains: DomainRoutingHookConfig['domains'];
        targetDomains: DomainRoutingHookConfig['domains'];
    }): Promise<DomainRoutingHook.HookConfigStruct[]>;
    protected updateMutableHook(configs: {
        current: Exclude<HookConfig, string>;
        target: Exclude<HookConfig, string>;
    }): Promise<AnnotatedEV5Transaction[]>;
    protected updatePausableHook({ currentConfig, targetConfig, }: {
        currentConfig: PausableHookConfig;
        targetConfig: PausableHookConfig;
    }): Promise<AnnotatedEV5Transaction[]>;
    protected updateRateLimitedHook({ currentConfig, targetConfig, }: {
        currentConfig: RateLimitedHookConfig;
        targetConfig: RateLimitedHookConfig;
    }): Promise<AnnotatedEV5Transaction[]>;
    protected updateIgpHook({ currentConfig, targetConfig, }: {
        currentConfig: IgpHookConfig;
        targetConfig: IgpHookConfig;
    }): Promise<AnnotatedEV5Transaction[]>;
    protected updateIgpQuoteSigners({ currentSigners, targetSigners, }: {
        currentSigners: string[];
        targetSigners: string[];
    }): AnnotatedEV5Transaction[];
    protected updateIgpRemoteGasParams({ interchainGasPaymaster, gasOracle, currentOverheads, targetOverheads, }: {
        interchainGasPaymaster: Address;
        gasOracle: Address;
        currentOverheads?: IgpConfig['overhead'];
        targetOverheads: IgpConfig['overhead'];
    }): Promise<AnnotatedEV5Transaction[]>;
    protected updateStorageGasOracle({ gasOracle, currentOracleConfig, targetOracleConfig, targetOverhead, }: {
        gasOracle: Address;
        currentOracleConfig?: IgpConfig['oracleConfig'];
        targetOracleConfig: IgpConfig['oracleConfig'];
        targetOverhead: IgpConfig['overhead'];
    }): Promise<AnnotatedEV5Transaction[]>;
    protected updateProtocolFeeHook({ currentConfig, targetConfig, }: {
        currentConfig: ProtocolFeeHookConfig;
        targetConfig: ProtocolFeeHookConfig;
    }): Promise<AnnotatedEV5Transaction[]>;
    protected updateRoutingHook({ currentConfig, targetConfig, }: {
        currentConfig: DomainRoutingHookConfig | FallbackRoutingHookConfig;
        targetConfig: DomainRoutingHookConfig | FallbackRoutingHookConfig;
    }): Promise<AnnotatedEV5Transaction[]>;
    protected deploy({ config, }: {
        config: HookConfig;
    }): Promise<DeployedHook>;
    protected deployProtocolFeeHook({ config, }: {
        config: ProtocolFeeHookConfig;
    }): Promise<ProtocolFee>;
    protected deployPausableHook({ config, }: {
        config: PausableHookConfig;
    }): Promise<PausableHook>;
    protected deployRateLimitedHook({ config, }: {
        config: RateLimitedHookConfig;
    }): Promise<RateLimitedHook>;
    protected deployAggregationHook({ config, }: {
        config: AggregationHookConfig;
    }): Promise<StaticAggregationHook>;
    protected deployOpStackHook({ config, }: {
        config: OpStackHookConfig;
    }): Promise<OPStackHook>;
    protected deployArbL1ToL1Hook({ config, }: {
        config: ArbL2ToL1HookConfig;
    }): Promise<ArbL2ToL1Hook>;
    protected deployCCIPHook({ config, }: {
        config: CCIPHookConfig;
    }): Promise<CCIPHook>;
    protected deployRoutingHook({ config, }: {
        config: DomainRoutingHookConfig | FallbackRoutingHookConfig;
    }): Promise<DomainRoutingHook>;
    protected deployIgpHook({ config, }: {
        config: IgpHookConfig;
    }): Promise<InterchainGasPaymaster>;
    protected deployInterchainGasPaymaster({ storageGasOracle, config, }: {
        storageGasOracle: StorageGasOracle;
        config: IgpConfig;
    }): Promise<InterchainGasPaymaster>;
    protected deployAmountRoutingHook({ config, }: {
        config: AmountRoutingHookConfig;
    }): Promise<AmountRoutingHook>;
    protected deployStorageGasOracle({ config, }: {
        config: IgpConfig;
    }): Promise<StorageGasOracle>;
}
export {};
//# sourceMappingURL=EvmHookModule.d.ts.map