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';