Skip to content

Commit

Permalink
feat: applied protocol-contracts to credit page
Browse files Browse the repository at this point in the history
  • Loading branch information
bojan07 committed Oct 4, 2023
1 parent 9ad50ee commit 8af549c
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 37 deletions.
17 changes: 8 additions & 9 deletions packages/dapp/components/redeem/debt-coupon-deposit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ import { useState } from "react";
import { ensureERC20Allowance } from "@/lib/contracts-shortcuts";
import { formatEther } from "@/lib/format";
import { safeParseEther } from "@/lib/utils";
import useDeployedContracts from "../lib/hooks/contracts/use-deployed-contracts";
import useManagerManaged from "../lib/hooks/contracts/use-manager-managed";
import useProtocolContracts from "@/components/lib/hooks/contracts/use-protocol-contracts";
import useBalances from "../lib/hooks/use-balances";
import useSigner from "../lib/hooks/use-signer";
import useTransactionLogger from "../lib/hooks/use-transaction-logger";
Expand All @@ -18,8 +17,7 @@ const UcrNftGenerator = () => {
const signer = useSigner();
const [balances, refreshBalances] = useBalances();
const [, doTransaction, doingTransaction] = useTransactionLogger();
const deployedContracts = useDeployedContracts();
const managedContracts = useManagerManaged();
const protocolContracts = useProtocolContracts();

const [inputVal, setInputVal] = useState("");
const [expectedDebtCoupon, setExpectedDebtCoupon] = useState<BigNumber | null>(null);
Expand All @@ -28,15 +26,15 @@ const UcrNftGenerator = () => {
return <span>Connect wallet</span>;
}

if (!balances || !managedContracts || !deployedContracts) {
if (!balances || !protocolContracts) {
return <span>· · ·</span>;
}

const depositDollarForDebtCoupons = async (amount: BigNumber) => {
const { debtCouponManager } = deployedContracts;
const contracts = await protocolContracts;
// cspell: disable-next-line
await ensureERC20Allowance("uAD -> DebtCouponManager", managedContracts.dollarToken, amount, signer, debtCouponManager.address);
await (await debtCouponManager.connect(signer).exchangeDollarsForCreditNft(amount)).wait();
await ensureERC20Allowance("uCR -> CreditNftManagerFacet", contracts.dollarToken, amount, signer, contracts.creditNftManagerFacet!.address);
await (await contracts.creditNftManagerFacet!.connect(signer).exchangeDollarsForCreditNft(amount)).wait();
refreshBalances();
};

Expand All @@ -52,11 +50,12 @@ const UcrNftGenerator = () => {
};

const handleInput = async (val: string) => {
const contracts = await protocolContracts;
setInputVal(val);
const amount = extractValidAmount(val);
if (amount) {
setExpectedDebtCoupon(null);
setExpectedDebtCoupon(await managedContracts.creditNftCalculator.connect(signer).getCreditNftAmount(amount));
setExpectedDebtCoupon(await contracts.creditNftRedemptionCalculatorFacet!.connect(signer).getCreditNftAmount(amount));
}
};

Expand Down
28 changes: 14 additions & 14 deletions packages/dapp/components/redeem/ucr-nft-redeem.tsx
Original file line number Diff line number Diff line change
@@ -1,25 +1,24 @@
import { BigNumber, ethers, Contract } from "ethers";
import { useEffect, useState } from "react";
import { useState } from "react";

import { ensureERC1155Allowance } from "@/lib/contracts-shortcuts";
import { formatEther } from "@/lib/format";
import { safeParseEther } from "@/lib/utils";
import useDeployedContracts from "../lib/hooks/contracts/use-deployed-contracts";
import useManagerManaged from "../lib/hooks/contracts/use-manager-managed";
import useProtocolContracts from "@/components/lib/hooks/contracts/use-protocol-contracts";
import useBalances from "../lib/hooks/use-balances";
import useSigner from "../lib/hooks/use-signer";
import useTransactionLogger from "../lib/hooks/use-transaction-logger";
import useWalletAddress from "../lib/hooks/use-wallet-address";
import Button from "../ui/button";
import PositiveNumberInput from "../ui/positive-number-input";
import useEffectAsync from "../lib/hooks/use-effect-async";

const UcrNftRedeem = () => {
const [walletAddress] = useWalletAddress();
const signer = useSigner();
const [, refreshBalances] = useBalances();
const [, doTransaction, doingTransaction] = useTransactionLogger();
const deployedContracts = useDeployedContracts();
const managedContracts = useManagerManaged();
const protocolContracts = useProtocolContracts();

const [inputVal, setInputVal] = useState("");
const [debtIds, setDebtIds] = useState<BigNumber[] | null>(null);
Expand All @@ -32,14 +31,15 @@ const UcrNftRedeem = () => {
}
};

useEffect(() => {
if (managedContracts && walletAddress) {
fetchDebts(walletAddress, managedContracts.creditNft);
useEffectAsync(async () => {
const contracts = await protocolContracts;
if (walletAddress) {
fetchDebts(walletAddress, contracts.creditNft!);
}
}, [managedContracts, walletAddress]);
}, [protocolContracts, walletAddress]);

if (!walletAddress || !signer) return <span>Connect wallet</span>;
if (!deployedContracts || !managedContracts || !debtIds) return <span>· · ·</span>;
if (!protocolContracts || !debtIds) return <span>· · ·</span>;
if (debtIds.length === 0) return <span>No uCR-NFT coupons</span>;

async function fetchDebts(address: string, contract: Contract) {
Expand Down Expand Up @@ -67,12 +67,12 @@ const UcrNftRedeem = () => {
};

const redeemUcrNftForUad = async (amount: BigNumber) => {
const { debtCouponManager } = deployedContracts;
const contracts = await protocolContracts;
const debtId = debtIds[selectedDebtId];
if (debtId && (await ensureERC1155Allowance("uCR-NFT -> DebtCouponManager", managedContracts.creditNft, signer, debtCouponManager.address))) {
await (await debtCouponManager.connect(signer).redeemCreditNft(debtId, amount)).wait();
if (debtId && (await ensureERC1155Allowance("uCR-NFT -> CreditNftManagerFacet", contracts.creditNft, signer, contracts.creditNftManagerFacet!.address))) {
await (await contracts.creditNftManagerFacet!.connect(signer).redeemCreditNft(debtId, amount)).wait();
refreshBalances();
fetchDebts(walletAddress, managedContracts.creditNft);
fetchDebts(walletAddress, contracts.creditNft!);
}
};

Expand Down
16 changes: 7 additions & 9 deletions packages/dapp/components/redeem/ucr-redeem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { useState } from "react";
import { SwapWidget } from "@uniswap/widgets";
import { ensureERC20Allowance } from "@/lib/contracts-shortcuts";
import { safeParseEther } from "@/lib/utils";
import useDeployedContracts from "../lib/hooks/contracts/use-deployed-contracts";
import useManagerManaged from "../lib/hooks/contracts/use-manager-managed";
import useProtocolContracts from "@/components/lib/hooks/contracts/use-protocol-contracts";
import useBalances from "../lib/hooks/use-balances";
import useSigner from "../lib/hooks/use-signer";
import useTransactionLogger from "../lib/hooks/use-transaction-logger";
Expand All @@ -21,8 +20,7 @@ const UcrRedeem = ({ twapInteger }: { twapInteger: number }) => {
const signer = useSigner();
const [balances, refreshBalances] = useBalances();
const [, doTransaction, doingTransaction] = useTransactionLogger();
const deployedContracts = useDeployedContracts();
const managedContracts = useManagerManaged();
const protocolContracts = useProtocolContracts();

const [inputVal, setInputVal] = useState("0");
// cspell: disable-next-line
Expand All @@ -34,20 +32,20 @@ const UcrRedeem = ({ twapInteger }: { twapInteger: number }) => {
return <span>Connect wallet</span>;
}

if (!managedContracts || !deployedContracts || !balances) {
if (!protocolContracts || !balances) {
return <span>· · ·</span>;
}

const redeemUcr = async (amount: BigNumber) => {
const { debtCouponManager } = deployedContracts;
const contracts = await protocolContracts;
// cspell: disable-next-line
await ensureERC20Allowance("uCR -> DebtCouponManager", managedContracts.creditToken, amount, signer, debtCouponManager.address);
await (await debtCouponManager.connect(signer).burnCreditTokensForDollars(amount)).wait();
await ensureERC20Allowance("uCR -> CreditNftManagerFacet", contracts.creditToken, amount, signer, contracts.creditNftManagerFacet!.address);
await (await contracts.creditNftManagerFacet!.connect(signer).burnCreditTokensForDollars(amount)).wait();
refreshBalances();
// cspell: disable-next-line
if (provider && quoteAmount && selectedRedeemToken !== "uAD") {
const routerContract = getUniswapV3RouterContract(V3_ROUTER_ADDRESS, provider);
await (await routerContract.connect(signer).approveMax(managedContracts.dollarToken.address)).wait();
await (await routerContract.connect(signer).approveMax(contracts.dollarToken!.address)).wait();
await useTrade(selectedRedeemToken, quoteAmount);
refreshBalances();
}
Expand Down
12 changes: 7 additions & 5 deletions packages/dapp/pages/credits.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,27 @@ import DollarPrice from "@/components/redeem/dollar-price";
import UcrRedeem from "@/components/redeem/ucr-redeem";
import UcrNftGenerator from "@/components/redeem/debt-coupon-deposit";
import UcrNftRedeem from "@/components/redeem/ucr-nft-redeem";
import useManagerManaged from "@/components/lib/hooks/contracts/use-manager-managed";
import useProtocolContracts from "@/components/lib/hooks/contracts/use-protocol-contracts";
import useEffectAsync from "@/components/lib/hooks/use-effect-async";
// import DisabledBlurredMessage from "@/components/ui/DisabledBlurredMessage";
import dynamic from "next/dynamic";
const WalletConnectionWall = dynamic(() => import("@/components/ui/wallet-connection-wall"), { ssr: false }); //@note Fix: (Hydration Error)

const PriceStabilization: FC = (): JSX.Element => {
const [twapInteger, setTwapInteger] = useState<number>(0);
const managedContracts = useManagerManaged();
const protocolContracts = useProtocolContracts();

useEffectAsync(async () => {
if (managedContracts) {
const twapPrice = await managedContracts.dollarTwapOracle.consult(managedContracts.dollarToken.address);
const contracts = await protocolContracts;
if (contracts) {
const dollarTokenAddress = await contracts.managerFacet!.dollarTokenAddress();
const twapPrice = await contracts.twapOracleDollar3poolFacet!.consult(dollarTokenAddress);
if (twapPrice) {
const twapPriceInteger = (twapPrice as unknown as number) / 1e18;
setTwapInteger(twapPriceInteger);
}
}
}, [managedContracts]);
}, [protocolContracts]);

return (
<WalletConnectionWall>
Expand Down

0 comments on commit 8af549c

Please sign in to comment.