import { ethers } from 'ethers';
import { SignatureData } from './crypto.types';
import { FeeStructure, HinkalLogicArgs } from './hinkal.types';
export interface TypedData {
    domain: ethers.TypedDataDomain;
    types: Record<string, Array<ethers.TypedDataField>>;
    value: Record<string, any>;
}
export interface CircomDataType {
    rootHashHinkal: bigint | undefined;
    erc20TokenAddresses: string[];
    tokenIds: string[];
    amountChanges: bigint[];
    inputNullifiers: string[][];
    outCommitments: string[][];
    encryptedOutputs: string[][];
    timeStamp?: string;
    stealthAddressStructure: StealthAddressStructure;
    rootHashAccessToken: bigint | undefined;
    relay: string;
    externalAddress: string;
    externalActionMetadata: string;
    externalActionId: bigint;
    hookData: HookDataType;
    calldataHash: bigint;
    publicSignalCount: number;
    onChainCreation: boolean[];
    slippageValues: bigint[];
    hinkalLogicArgs: HinkalLogicArgs;
    feeStructure: FeeStructure;
    signatureData: SignatureData;
    originalSender: string;
}
export interface CircomDataJsonType {
    rootHashHinkal: bigint | undefined | string;
    erc20TokenAddresses: string[];
    tokenIds: string[];
    amountChanges: bigint[] | string[];
    inputNullifiers: string[][];
    outCommitments: string[][];
    encryptedOutputs: string[][];
    stealthAddressStructure: StealthAddressStructure<bigint | string>;
    timeStamp?: string;
    rootHashAccessToken: bigint | undefined | string;
    relay: string;
    externalAddress: string;
    externalActionMetadata: string;
    externalActionId: bigint | string;
    hookData: HookDataType;
    calldataHash: bigint | string;
    publicSignalCount: number;
    onChainCreation: boolean[];
    slippageValues: bigint[] | string[];
    hinkalLogicArgs: HinkalLogicArgs<bigint | string>;
    feeStructure: FeeStructure<bigint | string>;
    signatureData: SignatureData;
    originalSender: string;
}
export interface CommitmentValidationDataType {
    tokenAddresses: string[];
    inAmounts: string[][];
    inTimeStamps: string[][];
    inRandomizations: string[][];
    inCommitments: string[][];
    inNullifiers: string[][];
    proof: {
        a: [string, string];
        b: [[string, string], [string, string]];
        c: [string, string];
    };
}
export type DimDataType = {
    tokenNumber: number;
    nullifierAmount: number;
    outputAmount: number;
};
export type HookDataType = {
    hookContract: string;
    preHookContract: string;
    preHookMetadata: string;
    postHookMetadata: string;
};
export type StealthAddressStructure<T = bigint> = {
    extraRandomization: T;
    stealthAddress: T;
    H0: T;
    H1: T;
};
export type AnchorStealthAddressStructure = {
    extraRandomization: number[];
    stealthAddress: number[];
    h0: number[];
    h1: number[];
};
export declare const emptyStealthAddressStructure: {
    extraRandomization: string;
    stealthAddress: string;
    H0: string;
    H1: string;
};
export interface TransactParams<CircomType = CircomDataJsonType> {
    dimensions: DimDataType;
    circomData: CircomType;
}
export declare const defaultHookData: HookDataType;
export declare const defaultHookDataArray: string[];
export declare const defaultStealthAddressStructure: StealthAddressStructure;
