@descent-protocol/sdk
Version:
A Typescript library for interacting with the Descent Protocol
141 lines (106 loc) • 4.15 kB
text/typescript
/**
* @dev Fuction to set an error message
* @param message Error object
* @returns The error message
*/
import { Signer, ethers } from 'ethers';
import { Transaction } from './transactions';
import { Internal } from './internal';
import { getContractAddress } from '../contracts/getContractAddresses';
import { Currency__factory, USDC__factory } from '../generated';
import { Contract } from '../contracts';
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const createError = (message?: any) => {
const defaultMsg =
message && typeof message === 'string'
? message
: 'Something went wrong. Please try again later.';
const contractErrorMessage =
message?.error?.body && JSON.parse(message?.error?.body)?.error?.message;
const systemMessage = message?.errorArgs?.[0];
const contractRevertErrorMessage =
message?.error?.error?.body && JSON.parse(message?.error?.error?.body)?.error?.message;
return new Error(
contractErrorMessage || contractRevertErrorMessage || systemMessage || defaultMsg,
);
};
const approveUSDC = async (
spender: string,
amount: string,
signer: Signer,
transaction: Transaction,
internal: Internal,
) => {
const chainId = (await signer?.provider?.getNetwork())?.chainId.toString();
const owner = await signer.getAddress();
// build transaction object
const to: any = getContractAddress('USDC', chainId);
let iface = internal.getInterface(USDC__factory.abi);
const data = iface.encodeFunctionData('approve', [spender, amount]);
const txConfig = await internal.getTransactionConfig({
from: owner,
to,
data: data,
});
await transaction.send(txConfig, {});
await waitTime(50);
};
const waitTime = (seconds: number) => new Promise((resolve) => setTimeout(resolve, seconds * 1000));
// const updateTestPrice = async (signer: Signer) => {
// const chainId = (await signer?.provider?.getNetwork())?.chainId.toString();
// const collateralAddress: any = getContractAddress('USDC', chainId);
// const feedContractAddress: any = getContractAddress('Feed', chainId);
// const contract = new ContractManager(signer);
// await (await contract.getVaultContract()).updateFeedContract(feedContractAddress);
// await waitTime(50);
// const price = BigInt(1100) * BigInt(1e6);
// const priceUpdate = (await contract.getFeedContract()).mockUpdatePrice(collateralAddress, price);
// (await priceUpdate).wait();
// await waitTime(50);
// };
// const setMinterRole = async (signer: Signer, owner: string) => {
// const chainId = (await signer?.provider?.getNetwork())?.chainId.toString();
// const vaultContractAddress: any = getContractAddress('Vault', chainId);
// const contract = new ContractManager(signer);
// await (await contract.getCurrencyContract()).setMinterRole(vaultContractAddress);
// await waitTime(50);
// };
const getxNGNBalance = async (owner: any, signer?: Signer) => {
const chainId = (await signer?.provider?.getNetwork())?.chainId.toString();
const currencyContractAddress: any = getContractAddress('Currency', chainId);
const currencyContract = Contract(currencyContractAddress, Currency__factory.abi, signer);
const balance = await currencyContract.balanceOf(owner);
await waitTime(50);
return balance * BigInt(10e18);
};
const approvexNGN = async (
spender: string,
amount: string,
signer: Signer,
transaction: Transaction,
internal: Internal,
) => {
const chainId = (await signer?.provider?.getNetwork())?.chainId.toString();
const owner = await signer.getAddress();
const _amount = BigInt(amount) * BigInt(10e18);
// build transaction object
const to: any = getContractAddress('Currency', chainId);
let iface = internal.getInterface(Currency__factory.abi);
const data = iface.encodeFunctionData('approve', [spender, _amount]);
const txConfig = await internal.getTransactionConfig({
from: owner,
to,
data: data,
});
await transaction.send(txConfig, {});
await waitTime(50);
};
export {
createError,
approveUSDC,
waitTime,
// updateTestPrice,
getxNGNBalance,
// setMinterRole,
approvexNGN,
};