UNPKG

@descent-protocol/sdk

Version:

A Typescript library for interacting with the Descent Protocol

121 lines (105 loc) 3.55 kB
import { AddressLike, BytesLike, Signer, ethers, formatEther, formatUnits, parseEther, parseUnits, } from 'ethers'; import { getContractAddress } from '../contracts/getContractAddresses'; import { Currency__factory, MultiStaticcall__factory, USDC__factory, VaultGetters__factory, Vault__factory, } from '../generated'; import { Internal } from '../libs/internal'; import { ICollateral, IContract, ISigner } from '../types'; import { Contract } from '../contracts'; import { Transaction } from '../libs/transactions'; export type StaticcallStruct = { target: AddressLike; callData: BytesLike }; const approveCollateralToken = async ( collateral: ICollateral, owner: string, amount: string, chainId: string, internal: Internal, transaction: Transaction, ) => { const collateralAddress: any = getContractAddress(collateral, chainId); const vaultAddress: any = getContractAddress('Vault', chainId); const _amount = parseUnits(amount, 6); // build transaction object let iface = internal.getInterface(USDC__factory.abi); const data = iface.encodeFunctionData('approve', [vaultAddress, _amount]); const txConfig = await internal.getTransactionConfig({ from: owner, to: collateralAddress, data: data, }); const result = await transaction.send(txConfig, {}); return result; }; const approveCurrencyToken = async ( owner: string, amount: string, chainId: string, internal: Internal, transaction: Transaction, ) => { const currnecyAddress: any = getContractAddress('Currency', chainId); const vaultAddress: any = getContractAddress('Vault', chainId); const _amount = parseEther(amount); // build transaction object let iface = internal.getInterface(Currency__factory.abi); const data = iface.encodeFunctionData('approve', [vaultAddress, _amount]); const txConfig = await internal.getTransactionConfig({ from: owner, to: currnecyAddress, data: data, }); const result = await transaction.send(txConfig, {}); return result; }; const getCurrencyTokenBalance = async (owner: string, chainId: string, signer: Signer) => { const currencyContractAddress: any = getContractAddress('Currency', chainId); const currencyContract = Contract(currencyContractAddress, Currency__factory.abi, signer); const balance = await currencyContract.balanceOf(owner); const formattedBalance = formatEther(balance); return formattedBalance; }; const getCollateralTokenBalance = async ( collateral: ICollateral, owner: string, chainId: string, signer: Signer, ) => { const collateralAddress: any = getContractAddress(collateral, chainId); const collateralContract = Contract(collateralAddress, USDC__factory.abi, signer); const balance = await collateralContract.balanceOf(owner); const formattedBalance = formatUnits(balance, 6); return formattedBalance; }; const getCollateralTokenAllowance = async ( collateral: ICollateral, owner: string, chainId: string, signer: Signer, ) => { const collateralAddress: any = getContractAddress(collateral, chainId); const vaultAddress: any = getContractAddress('Vault', chainId); const collateralContract = Contract(collateralAddress, USDC__factory.abi, signer); const allowance = await collateralContract.allowance(owner, vaultAddress); const formattedAllowance = formatUnits(allowance, 6); return formattedAllowance; }; export { getCollateralTokenBalance, getCurrencyTokenBalance, getCollateralTokenAllowance, approveCollateralToken, approveCurrencyToken, };