-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathApp.js
More file actions
80 lines (67 loc) · 2.79 KB
/
App.js
File metadata and controls
80 lines (67 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import React, { useState, useEffect } from 'react';
import { ethers } from 'ethers';
import Web3Modal from 'web3modal';
const tuitionTokenABI = [...]; // Add the ABI for TuitionToken
const tokenizedTuitionPaymentsABI = [...]; // Add the ABI for TokenizedTuitionPayments
const tuitionTokenAddress = "YOUR_TUITION_TOKEN_ADDRESS";
const tokenizedTuitionPaymentsAddress = "YOUR_TOKENIZED_TUITION_PAYMENTS_ADDRESS";
function App() {
const [provider, setProvider] = useState(null);
const [signer, setSigner] = useState(null);
const [tuitionToken, setTuitionToken] = useState(null);
const [tokenizedTuitionPayments, setTokenizedTuitionPayments] = useState(null);
const [tuitionPlan, setTuitionPlan] = useState(null);
useEffect(() => {
initializeEthers();
}, []);
const initializeEthers = async () => {
const web3Modal = new Web3Modal();
const connection = await web3Modal.connect();
const provider = new ethers.providers.Web3Provider(connection);
const signer = provider.getSigner();
setProvider(provider);
setSigner(signer);
const tuitionToken = new ethers.Contract(tuitionTokenAddress, tuitionTokenABI, signer);
const tokenizedTuitionPayments = new ethers.Contract(tokenizedTuitionPaymentsAddress, tokenizedTuitionPaymentsABI, signer);
setTuitionToken(tuitionToken);
setTokenizedTuitionPayments(tokenizedTuitionPayments);
await loadTuitionPlan();
};
const loadTuitionPlan = async () => {
if (tokenizedTuitionPayments && signer) {
const address = await signer.getAddress();
const plan = await tokenizedTuitionPayments.getTuitionPlan(address);
setTuitionPlan(plan);
}
};
const payInstallment = async () => {
if (tokenizedTuitionPayments && tuitionToken) {
try {
const installmentAmount = tuitionPlan.installmentAmount;
await tuitionToken.approve(tokenizedTuitionPaymentsAddress, installmentAmount);
await tokenizedTuitionPayments.payInstallment();
await loadTuitionPlan();
} catch (error) {
console.error("Error paying installment:", error);
}
}
};
return (
<div>
<h1>Tokenized Tuition Payments</h1>
{tuitionPlan ? (
<div>
<p>Total Amount: {ethers.utils.formatEther(tuitionPlan.totalAmount)} TUT</p>
<p>Installment Amount: {ethers.utils.formatEther(tuitionPlan.installmentAmount)} TUT</p>
<p>Paid Installments: {tuitionPlan.paidInstallments.toString()}</p>
<p>Total Installments: {tuitionPlan.numberOfInstallments.toString()}</p>
<p>Next Payment Date: {new Date(tuitionPlan.nextPaymentDate.toNumber() * 1000).toLocaleString()}</p>
<button onClick={payInstallment}>Pay Installment</button>
</div>
) : (
<p>No active tuition plan</p>
)}
</div>
);
}
export default App;