import type { Address, Instruction, ReadonlyUint8Array, TransactionSigner } from '@solana/kit';
import { type GasOracleConfig, type GasOverheadConfig, type H256 } from '../codecs/shared.js';
export declare enum IgpInstructionKind {
    Init = 0,
    InitIgp = 1,
    InitOverheadIgp = 2,
    PayForGas = 3,
    QuoteGasPayment = 4,
    TransferIgpOwnership = 5,
    TransferOverheadIgpOwnership = 6,
    SetIgpBeneficiary = 7,
    SetDestinationGasOverheads = 8,
    SetGasOracleConfigs = 9,
    Claim = 10
}
export interface InitIgpData {
    salt: H256;
    owner: Address | null;
    beneficiary: Address;
}
export interface InitOverheadIgpData {
    salt: H256;
    owner: Address | null;
    inner: Address;
}
export interface QuoteGasPaymentData {
    destinationDomain: number;
    gasAmount: bigint;
}
export type IgpProgramInstructionData = {
    kind: 'init';
} | {
    kind: 'initIgp';
    value: InitIgpData;
} | {
    kind: 'initOverheadIgp';
    value: InitOverheadIgpData;
} | {
    kind: 'quoteGasPayment';
    value: QuoteGasPaymentData;
} | {
    kind: 'transferIgpOwnership';
    newOwner: Address | null;
} | {
    kind: 'transferOverheadIgpOwnership';
    newOwner: Address | null;
} | {
    kind: 'setIgpBeneficiary';
    beneficiary: Address;
} | {
    kind: 'setDestinationGasOverheads';
    configs: GasOverheadConfig[];
} | {
    kind: 'setGasOracleConfigs';
    configs: GasOracleConfig[];
} | {
    kind: 'claim';
};
export declare function encodeIgpProgramInstruction(instruction: IgpProgramInstructionData): ReadonlyUint8Array;
export declare function decodeIgpProgramInstruction(data: Uint8Array): IgpProgramInstructionData | null;
export declare function getInitIgpProgramInstruction(programAddress: Address, payer: TransactionSigner): Promise<Instruction>;
export declare function getInitIgpInstruction(programAddress: Address, payer: TransactionSigner, value: InitIgpData): Promise<Instruction>;
export declare function getInitOverheadIgpInstruction(programAddress: Address, payer: TransactionSigner, value: InitOverheadIgpData): Promise<Instruction>;
export declare function getSetGasOracleConfigsInstruction(programAddress: Address, owner: Address, igpAccount: Address, configs: GasOracleConfig[]): Promise<Instruction>;
export declare function getSetDestinationGasOverheadsInstruction(programAddress: Address, owner: Address, overheadIgpAccount: Address, configs: GasOverheadConfig[]): Promise<Instruction>;
//# sourceMappingURL=igp.d.ts.map