import { Account, Hex, PublicClient, WalletClient, Chain, Transport, ParseAccount, Address } from 'viem';
import { ContractAddresses } from '../abis';
export type ChannelId = Hex;
export type StateHash = Hex;
export interface Signature {
    v: number;
    r: Hex;
    s: Hex;
}
export interface Allocation {
    destination: Address;
    token: Address;
    amount: bigint;
}
export interface Channel {
    participants: Address[];
    adjudicator: Address;
    challenge: bigint;
    nonce: bigint;
}
export declare enum ChannelStatus {
    VOID = 0,
    INITIAL = 1,
    ACTIVE = 2,
    DISPUTE = 3,
    FINAL = 4
}
export declare enum StateIntent {
    OPERATE = 0,
    INITIALIZE = 1,
    RESIZE = 2,
    FINALIZE = 3
}
export interface ChannelData {
    channel: Channel;
    status: ChannelStatus;
    wallets: [Address, Address];
    challengeExpiry: bigint;
    lastValidState: State;
}
interface UnsignedState {
    intent: StateIntent;
    version: bigint;
    data: Hex;
    allocations: Allocation[];
}
export interface State extends UnsignedState {
    sigs: Signature[];
}
export interface FinalState extends UnsignedState {
    channelId: ChannelId;
    serverSignature: Signature;
}
export interface LegacyChannel {
    participants: [Address, Address];
    adjudicator: Address;
    challenge: bigint;
    nonce: bigint;
    chainId: number;
}
export interface LegacyState {
    intent: StateIntent;
    version: bigint;
    data: Hex;
    allocations: [Allocation, Allocation];
    sigs: Signature[];
}
export interface NitroliteClientConfig {
    publicClient: PublicClient;
    walletClient: WalletClient<Transport, Chain, ParseAccount<Account>>;
    stateWalletClient?: WalletClient<Transport, Chain, ParseAccount<Account>>;
    addresses: ContractAddresses;
    chainId: number;
    challengeDuration: bigint;
}
export interface CreateChannelParams {
    initialAllocationAmounts: [bigint, bigint];
    stateData?: Hex;
}
export interface CloseChannelParams {
    stateData?: Hex;
    finalState: FinalState;
}
export interface ChallengeChannelParams {
    channelId: ChannelId;
    candidateState: State;
    proofStates?: State[];
}
export interface ResizeChannelParams {
    resizeState: FinalState;
    proofStates: State[];
}
export interface CheckpointChannelParams {
    channelId: ChannelId;
    candidateState: State;
    proofStates?: State[];
}
export {};
