Untitled
user_4748127
plain_text
7 months ago
2.0 kB
5
Indexable
Never
import { useEffect, useState } from 'react'; import { useEthers, useContractFunction, useContractCall } from '@usedapp/core'; import { abi } from './ReferralProgram.json'; // Replace with the path to your ABI file const CONTRACT_ADDRESS = '0x1234...'; // Replace with your contract address function App() { const { activateBrowserWallet, account } = useEthers(); const [referrer, setReferrer] = useState(''); const [inviteCount, setInviteCount] = useState(0); const [totalRewards, setTotalRewards] = useState(0); const referralContract = new ethers.Contract(CONTRACT_ADDRESS, abi, getProvider()); const referrerCall = useContractCall({ abi: referralContract.interface, address: referralContract.address, method: 'referrers', args: [account], }); useEffect(() => { if (account) { updateReferralData(); } }, [account]); async function updateReferralData() { if (referrerCall && referrerCall.length > 0) { setReferrer(referrerCall[0]); } // Fetch invite count and total rewards from contract events // This assumes you have an event named 'ReferralRewards' in your smart contract const filter = referralContract.filters.ReferralRewards(account); const events = await referralContract.queryFilter(filter); let invites = 0; let rewards = ethers.BigNumber.from(0); events.forEach((event) => { invites++; rewards = rewards.add(event.args.amount); }); setInviteCount(invites); setTotalRewards(ethers.utils.formatEther(rewards)); } return ( <div> <h1>Referral Program</h1> <button onClick={() => activateBrowserWallet()}>Connect Wallet</button> {account && ( <div> <h2>Referral Data</h2> <p>Your referrer: {referrer}</p> <p>Number of people you invited: {inviteCount}</p> <p>Total rewards earned: {totalRewards} ETH</p> </div> )} </div> ); } export default App;