import { Abi, ContractFunctionArgs, ContractFunctionName, TransactionReceipt } from 'viem'; import { ContractNames, TokenType } from '../exports'; export type TokenContractReadWriteArgs< A extends Abi, T extends ContractFunctionName | ContractFunctionName, R extends ContractFunctionArgs | ContractFunctionArgs, C extends ContractNames = ContractNames, > = (R extends readonly [] ? {} : { args: R }) & (C extends 'ERC20' | 'ERC1155' ? { tokenAddress: `0x${string}`; functionName: T; } : { functionName: T; }); export type TokenContractReadArgs< A extends Abi, T extends ContractFunctionName, R extends ContractFunctionArgs, C extends ContractNames = ContractNames, > = (R extends readonly [] ? {} : { args: R }) & { blockNumber?: bigint } & (C extends 'ERC20' | 'ERC1155' ? { tokenAddress: `0x${string}`; functionName: T; } : { functionName: T; }); export type WriteTransactionCallbacks = { debug?: (args: any) => void; onAllowanceSignatureRequest?: () => void; onAllowanceSigned?: () => void; onAllowanceSuccess?: (receipt: TransactionReceipt) => void; onSignatureRequest?: () => void; onSigned?: (tx: `0x${string}`) => void; onSuccess?: (receipt: TransactionReceipt) => void; onError?: (error: unknown) => void; }; export type ApproveParams = T extends 'ERC20' ? { allowanceAmount?: bigint; amountToSpend?: bigint; } : {}; export type CommonWriteParams = WriteTransactionCallbacks & { value?: bigint; }; export type GenericWriteParams< A extends Abi = Abi, T extends ContractFunctionName = ContractFunctionName, R extends ContractFunctionArgs = ContractFunctionArgs, C extends ContractNames = ContractNames, > = TokenContractReadWriteArgs & CommonWriteParams; export type CurveType = 'LINEAR' | 'EXPONENTIAL' | 'LOGARITHMIC' | 'FLAT'; export type TradeType = 'buy' | 'sell';