import { Network } from '../../node_modules/@btc-vision/bitcoin/build/index.js';
import { Address, NetEvent } from '../../node_modules/@btc-vision/transaction/build/index.js';
import { BitcoinInterface } from '../abi/BitcoinInterface.js';
import { BaseContractProperties } from '../abi/interfaces/BaseContractProperties.js';
import { BitcoinInterfaceAbi } from '../abi/interfaces/BitcoinInterfaceAbi.js';
import { BlockGasParameters } from '../block/BlockGasParameters.js';
import { AbstractRpcProvider } from '../providers/AbstractRpcProvider.js';
import { ContractEvents } from '../transactions/interfaces/ITransactionReceipt.js';
import { CallResult } from './CallResult.js';
import { IAccessList } from './interfaces/IAccessList.js';
import { IContract } from './interfaces/IContract.js';
import { ParsedSimulatedTransaction } from './interfaces/SimulatedTransaction.js';
import { OPNetEvent } from './OPNetEvent.js';
import { ContractDecodedObjectResult } from './types/ContractTypes.js';
declare const internal: unique symbol;
export declare abstract class IBaseContract<T extends BaseContractProperties> implements IContract {
    readonly address: string | Address;
    readonly network: Network;
    readonly interface: BitcoinInterface;
    readonly provider: AbstractRpcProvider;
    from?: Address;
    readonly [internal]: keyof T | undefined;
    private events;
    private gasParameters;
    private readonly fetchGasParametersAfter;
    private currentTxDetails;
    private simulatedHeight;
    private accessList;
    private _rlAddress;
    protected constructor(address: string | Address, abi: BitcoinInterface | BitcoinInterfaceAbi, provider: AbstractRpcProvider, network: Network, from?: Address);
    get p2op(): string;
    get contractAddress(): Promise<Address>;
    setSender(sender: Address): void;
    decodeEvents(events: NetEvent[] | ContractEvents): OPNetEvent<ContractDecodedObjectResult>[];
    decodeEvent(event: NetEvent): OPNetEvent;
    encodeCalldata(functionName: string, args: unknown[]): Uint8Array;
    currentGasParameters(): Promise<BlockGasParameters>;
    setTransactionDetails(tx: ParsedSimulatedTransaction): void;
    setAccessList(accessList: IAccessList): void;
    setSimulatedHeight(height: bigint | undefined): void;
    protected getFunction(name: symbol | string): CallResult | undefined | string | number | symbol | Address | Network | (() => Promise<BlockGasParameters>) | ((functionName: string, args: unknown[]) => Uint8Array);
    private getAddressOrThrow;
    private defineInternalFunctions;
    private getSelector;
    private encodeFunctionData;
    private encodeArray;
    private encodeTuple;
    private encodeStruct;
    private encodeInput;
    private decodeOutput;
    private estimateGas;
    private max;
    private callFunction;
}
export declare class BaseContract<T extends BaseContractProperties> extends IBaseContract<T> {
    constructor(address: string | Address, abi: BitcoinInterface | BitcoinInterfaceAbi, provider: AbstractRpcProvider, network: Network, sender?: Address);
    private proxify;
}
export declare function getContract<T extends BaseContractProperties>(address: string | Address, abi: BitcoinInterface | BitcoinInterfaceAbi, provider: AbstractRpcProvider, network: Network, sender?: Address): BaseContract<T> & Omit<T, keyof BaseContract<T>>;
export {};
