export interface SendTransacrtionBase {
    blockOverrides?: {
        number: string;
        timestamp: string;
    };
    stateOverrides?: {
        nonce: number;
        code: string;
        balance: {
            value: number;
        };
        storage: Map<string, string>;
    };
}
export type SimulateTxBody = {
    network_id: string;
    from: string;
    to: string;
    input: string;
    gas?: number;
    block_number?: number;
    transaction_index?: number;
    gas_price?: string;
    estimate_gas?: boolean;
    value?: string;
    save?: boolean;
    save_if_fails?: boolean;
};
export type SimulateTxResponse = {
    transaction: {
        hash: string;
        block_hash: string;
        block_number: number;
        from: string;
        gas: number;
        gas_price: number;
        input: string;
        nonce: number;
        to: string;
        index: number;
        addresses: string[];
        contract_ids: string[];
        network_id: string;
        timestamp: string;
        transaction_info: {
            contract_address: string;
            method: 'approve';
            logs: any[] | null;
            balance_diff: any[] | null;
            nonce_diff: any[] | null;
            state_diff: any[] | null;
            asset_changes: any[] | null;
            exposure_changes: any[] | null;
            balance_changes: any[] | null;
        };
        call_trace: any[] | null;
        simulation: {
            id: string;
            project_id: string;
            network_id: string;
            blocknumber: number;
            transaction_index: number;
            block_header: object;
            nonce: number;
            contracts: any[];
        };
    };
    simulation: object;
};
export type RpcTransactionParams = {
    from: string;
    to: string;
    gas: string;
    gasPrice?: string;
    value: string | bigint;
    input: string;
    maxFeePerGas?: number;
    maxPriorityFeePerGas?: number;
};
export type RpcSimulateTransactionBody<T extends RpcTransactionParams | RpcTransactionParams[] = RpcTransactionParams> = {
    params: [
        T,
        string | 'latest' | 'earliest' | 'pending' | 'finalized' | 'safe',
        {
            [key in string]: {
                balance: string;
                nonce?: string;
            };
        }
    ];
};
export type StorageStateChange = {
    address: string;
    balance?: {
        previousValue: string;
        newValue: string;
    };
    nonce?: {
        previousValue: string;
        newValue: string;
    };
    storage?: {
        slot: string;
        previousValue: string;
        newValue: string;
        ERC20ChangeType?: 'balance' | 'allowance';
    }[];
};
export type RPCSimulationAssetChange = {
    rawAmount: string;
    amount: string | null;
    dollarValue?: string;
    from: string;
    to: string;
    type: string;
    id?: string;
    assetInfo: {
        standard: string;
        type: string;
        contractAddress?: string;
        symbol?: string;
        name?: string;
        logo?: string;
        decimals?: number;
        dollarValue?: string;
    };
};
export type RPCSimulationExposureChange = {
    assetInfo: {
        standard: string;
        type: string;
        contractAddress: string;
        symbol: string;
        name: string;
        logo: string;
        decimals: number;
        dollarValue: string;
    };
    type: string;
    owner: string;
    spender: string;
    rawAmount: string;
    amount: string;
    dollarValue: string;
};
export interface RpcTrace {
    type: string;
    from: string;
    to: string;
    gas: string;
    gasUsed: string;
    input: string;
    method?: string;
    output?: string;
    subtraces: number;
    traceAddress: string[];
    value?: string;
    error?: string;
    errorReason?: string;
}
export type RpcSimulateLog = {
    name: string;
    inputs: {
        value: string;
        type: string;
        name: string;
        indexed: boolean;
    }[];
    raw: {
        address: string;
        data: string;
        topics: string[];
    };
};
export type RpcSimulateResult = {
    assetChanges: RPCSimulationAssetChange[];
    status: boolean;
    gasUsed: string;
    cumulativeGasUsed: string;
    blockNumber: string;
    type: string;
    logsBloom: string;
    logs: RpcSimulateLog[];
    stateChanges: StorageStateChange[];
    trace?: RpcTrace[];
    exposureChanges: RPCSimulationExposureChange[];
};
export type RpcSimulateTransactionResponse<T extends RpcSimulateResult | RpcSimulateResult[] = RpcSimulateResult> = {
    jsonrpc: '2.0';
    id: 0;
    result: T;
    error?: {
        code: number;
        message: string;
    };
};
