import { Hex, Address, Hash } from 'viem';
export declare enum RPCChannelStatus {
    Open = "open",
    Closed = "closed",
    Resizing = "resizing",
    Challenged = "challenged"
}
export declare enum RPCTxType {
    Transfer = "transfer",
    Deposit = "deposit",
    Withdrawal = "withdrawal",
    AppDeposit = "app_deposit",
    AppWithdrawal = "app_withdrawal",
    EscrowLock = "escrow_lock",
    EscrowUnlock = "escrow_unlock"
}
export declare enum RPCProtocolVersion {
    NitroRPC_0_2 = "NitroRPC/0.2",
    NitroRPC_0_4 = "NitroRPC/0.4"
}
export interface RPCAppDefinition {
    application: string;
    protocol: RPCProtocolVersion;
    participants: Hex[];
    weights: number[];
    quorum: number;
    challenge: number;
    nonce?: number;
}
export interface RPCChannelUpdate {
    channelId: Hex;
    participant: Address;
    status: RPCChannelStatus;
    token: Address;
    amount: BigInt;
    chainId: number;
    adjudicator: Address;
    challenge: number;
    nonce: number;
    version: number;
    createdAt: Date;
    updatedAt: Date;
}
export interface RPCChannelUpdateWithWallet extends RPCChannelUpdate {
    wallet: Address;
}
export interface RPCNetworkInfo {
    chainId: number;
    name: string;
    custodyAddress: Address;
    adjudicatorAddress: Address;
}
export declare enum RPCAppStateIntent {
    Operate = "operate",
    Deposit = "deposit",
    Withdraw = "withdraw"
}
export interface RPCAppSession {
    appSessionId: Hex;
    application: string;
    status: RPCChannelStatus;
    participants: Address[];
    protocol: RPCProtocolVersion;
    challenge: number;
    weights: number[];
    quorum: number;
    version: number;
    nonce: number;
    createdAt: Date;
    updatedAt: Date;
    sessionData?: string;
}
export interface RPCHistoryEntry {
    id: number;
    sender: Address;
    reqId: number;
    method: string;
    params: string;
    timestamp: number;
    reqSig: Hex[];
    resSig: Hex[];
    response: string;
}
export interface RPCAsset {
    token: Address;
    chainId: number;
    symbol: string;
    decimals: number;
}
export interface RPCBalance {
    asset: string;
    amount: string;
}
export type LedgerAccountType = Address | Hash;
export interface RPCLedgerEntry {
    id: number;
    accountId: LedgerAccountType;
    accountType: number;
    asset: string;
    participant: Address;
    credit: string;
    debit: string;
    createdAt: Date;
}
export interface RPCTransaction {
    id: number;
    txType: RPCTxType;
    fromAccount: LedgerAccountType;
    fromAccountTag?: string;
    toAccount: LedgerAccountType;
    toAccountTag?: string;
    asset: string;
    amount: string;
    createdAt: Date;
}
export interface RPCAllowance {
    asset: string;
    amount: string;
}
export interface RPCAllowanceUsage {
    asset: string;
    allowance: string;
    used: string;
}
export interface RPCSessionKey {
    id: number;
    sessionKey: Address;
    application: string;
    allowances: RPCAllowanceUsage[];
    scope?: string;
    expiresAt: Date;
    createdAt: Date;
}
export interface RPCAppSessionAllocation {
    asset: string;
    amount: string;
    participant: Address;
}
export interface RPCChannelAllocation {
    destination: Address;
    token: Address;
    amount: bigint;
}
export interface RPCTransferAllocation {
    asset: string;
    amount: string;
}
export interface RPCChannelOperationState {
    intent: number;
    version: number;
    stateData: Hex;
    allocations: RPCChannelAllocation[];
}
export interface RPCChannelOperation {
    channelId: Hex;
    state: RPCChannelOperationState;
    serverSignature: Hex;
}
export interface RPCChannel {
    participants: Address[];
    adjudicator: Address;
    challenge: number;
    nonce: number;
}
