import { PublicKey, TransactionInstruction } from '@solana/web3.js';
import { Address, Domain } from '@hyperlane-xyz/utils';
import { BaseSealevelAdapter } from '../../app/MultiProtocolApp.js';
import type { MultiProviderAdapter } from '../../providers/MultiProviderAdapter.js';
import { ChainName } from '../../types.js';
export declare class SealevelMultisigAdapter extends BaseSealevelAdapter {
    readonly chainName: ChainName;
    readonly multiProvider: MultiProviderAdapter;
    readonly addresses: {
        multisigIsm: Address;
    };
    protected readonly multisigIsm: PublicKey;
    constructor(chainName: ChainName, multiProvider: MultiProviderAdapter, addresses: {
        multisigIsm: Address;
    });
    /**
     * Create a SetValidatorsAndThreshold instruction
     * @param multisigIsmProgramId - The MultisigIsm program ID
     * @param accessControlPda - The access control PDA account
     * @param domainDataPda - The domain data PDA account (will be created if doesn't exist)
     * @param owner - The current owner who can set validators
     * @param domain - The remote domain for which validators are being set
     * @param validators - Array of 20-byte validator addresses (Ethereum-style addresses)
     * @param threshold - The number of validator signatures required
     * @returns TransactionInstruction
     */
    createSetValidatorsAndThresholdInstruction(multisigIsmProgramId: PublicKey, accessControlPda: PublicKey, domainDataPda: PublicKey, owner: PublicKey, domain: Domain, validators: Uint8Array[], threshold: number): TransactionInstruction;
    /**
     * Create a TransferOwnership instruction
     * @param multisigIsmProgramId - The MultisigIsm program ID
     * @param accessControlPda - The access control PDA account
     * @param owner - The current owner
     * @param newOwner - The new owner (null to renounce ownership)
     * @returns TransactionInstruction
     */
    createTransferOwnershipInstruction(multisigIsmProgramId: PublicKey, accessControlPda: PublicKey, owner: PublicKey, newOwner: PublicKey | null): TransactionInstruction;
    /**
     * Helper method to convert hex string validators to Uint8Array format
     * @param hexValidators - Array of validator addresses as hex strings (with or without 0x prefix)
     * @returns Array of 20-byte Uint8Arrays
     */
    static hexValidatorsToUint8Array(hexValidators: string[]): Uint8Array[];
    /**
     * Derive the domain data PDA for a given domain
     * Matches: rust/sealevel/programs/ism/multisig-ism-message-id/src/processor.rs domain_data_pda_seeds!
     * @param multisigIsmProgramId - The MultisigIsm program ID
     * @param domain - The domain
     * @returns PublicKey for the domain data PDA
     */
    static deriveDomainDataPda(multisigIsmProgramId: string | PublicKey, domain: Domain): PublicKey;
    /**
     * Derive the access control PDA
     * Matches: rust/sealevel/programs/ism/multisig-ism-message-id/src/processor.rs access_control_pda_seeds!
     * @param multisigIsmProgramId - The MultisigIsm program ID
     * @returns PublicKey for the access control PDA
     */
    static deriveAccessControlPda(multisigIsmProgramId: string | PublicKey): PublicKey;
}
//# sourceMappingURL=SealevelMultisigAdapter.d.ts.map