mirror of https://github.com/kremalicious/blog.git
43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
import { parseEther, parseUnits } from 'viem'
|
|
import {
|
|
prepareSendTransaction,
|
|
prepareWriteContract,
|
|
type SendTransactionArgs,
|
|
type WriteContractPreparedArgs
|
|
} from 'wagmi/actions'
|
|
import { abiErc20Transfer } from './abiErc20Transfer'
|
|
import type { GetToken } from '../useFetchTokens'
|
|
|
|
export async function prepare(
|
|
selectedToken: GetToken | undefined,
|
|
amount: string | undefined,
|
|
to: `0x${string}` | null | undefined,
|
|
chainId: number | undefined
|
|
) {
|
|
if (
|
|
!chainId ||
|
|
!to ||
|
|
!amount ||
|
|
!selectedToken ||
|
|
!selectedToken?.address ||
|
|
!selectedToken?.decimals
|
|
)
|
|
return
|
|
|
|
const isNative = selectedToken.address === '0x0'
|
|
const requestNative = { chainId, to, value: parseEther(amount) }
|
|
const requestErc20 = {
|
|
chainId,
|
|
address: selectedToken.address,
|
|
abi: abiErc20Transfer,
|
|
functionName: 'transfer',
|
|
args: [to, parseUnits(amount, selectedToken.decimals)]
|
|
}
|
|
|
|
const config = isNative
|
|
? ((await prepareSendTransaction(requestNative)) as SendTransactionArgs)
|
|
: ((await prepareWriteContract(requestErc20)) as WriteContractPreparedArgs)
|
|
|
|
return config
|
|
}
|