diff --git a/client/src/App.jsx b/client/src/App.jsx index f0a90e4..732fb09 100644 --- a/client/src/App.jsx +++ b/client/src/App.jsx @@ -1,5 +1,5 @@ import { - useCallback, useEffect, useReducer, useState, + useCallback, useEffect, useReducer, useState, createContext, useContext, useMemo, } from 'react'; import { useSDK } from '@metamask/sdk-react'; import { Web3 } from 'web3'; @@ -40,6 +40,8 @@ const updateList = (list, action) => { const useList = (initialValue) => useReducer(updateList, initialValue ?? []); +const Web3Context = createContext({}); + function App() { const { sdk, connected, provider, chainId, account, balance, @@ -336,30 +338,6 @@ function App() { }); }, [DAO, account]); - const stakeAvailability = useCallback(async (duration) => { - const target = contracts[chainId].Work1; - await DAO.methods.stakeAvailability(target, reputation, duration).send({ - from: account, - gas: 1000000, - }); - // Note that as with validation pool stakes, we should keep track locally of our reputation - setReputation(0); - }, [DAO, account, chainId, reputation, setReputation]); - - const reclaimAvailabilityStake = useCallback(async (stakeIndex) => { - await work1.methods.reclaimAvailability(stakeIndex).send({ - from: account, - gas: 1000000, - }); - }, [work1, account]); - - const extendAvailabilityStake = useCallback(async (stakeIndex, duration) => { - await work1.methods.extendAvailability(stakeIndex, duration).send({ - from: account, - gas: 1000000, - }); - }, [work1, account]); - const requestWork = useCallback(async () => { const web3 = new Web3(provider); const priceWei = BigInt(web3.utils.toWei(work1Price, 'ether')); @@ -395,8 +373,13 @@ function App() { /* --------------------------- END UI ACTIONS ------------------------------------- */ /* -------------------------------------------------------------------------------- */ + const web3ProviderValue = useMemo(() => ({ + DAO, work1, availabilityStakes, reputation, setReputation, account, chainId, + }), [ + DAO, work1, availabilityStakes, reputation, setReputation, account, chainId, + ]); return ( - <> + {!connected && } {connected && ( @@ -542,66 +525,15 @@ function App() {
{`Price: ${work1Price} ETH`}
-
- Stake Availability: - {' '} - {!reputation && <>No reputation available to stake} - {reputation > 0 && ( - <> - - {' '} - - - )} -
-
- Availability Stake Count: - {' '} - {availabilityStakes.length} -
-
- - - - - - - - - - - - - - {availabilityStakes.filter((x) => !!x).map((s) => ( - - - - - - - - - - ))} - -
IDWorkerAmountEnd TimeAssignedReclaimedActions
{s.id.toString()}{s.worker.toString()}{s.amount.toString()}{new Date(Number(s.endTime) * 1000).toLocaleString()}{s.assigned.toString()}{s.reclaimed.toString()} - {s.currentUserIsWorker() && ( - - )} - {s.currentUserIsWorker() && s.timeRemaining <= 0 - && !s.assigned && !s.reclaimed && ( - <> - {' '} - - - )} -
-
+
@@ -666,7 +598,19 @@ function App() { - TBD +

Work Contract 1

+
+ {`Price: ${work1Price} ETH`} +
+
TBD @@ -674,6 +618,99 @@ function App() { )} +
+ ); +} + +function AvailabilityStakes() { + const { + DAO, work1, availabilityStakes, reputation, setReputation, account, chainId, + } = useContext(Web3Context); + const stakeAvailability = useCallback(async (duration) => { + const target = contracts[chainId].Work1; + await DAO.methods.stakeAvailability(target, reputation, duration).send({ + from: account, + gas: 999999, + }); + // Note that as with validation pool stakes, we should keep track locally of our reputation + setReputation(0); + }, [DAO, account, chainId, reputation, setReputation]); + + const reclaimAvailabilityStake = useCallback(async (stakeIndex) => { + await work1.methods.reclaimAvailability(stakeIndex).send({ + from: account, + gas: 999999, + }); + }, [work1, account]); + + const extendAvailabilityStake = useCallback(async (stakeIndex, duration) => { + await work1.methods.extendAvailability(stakeIndex, duration).send({ + from: account, + gas: 999999, + }); + }, [work1, account]); + return ( + <> +
+ Stake Availability: + {' '} + {!reputation && <>No reputation available to stake} + {reputation > 0 && ( + <> + + {' '} + + + )} +
+
+ Availability Stake Count: + {' '} + {availabilityStakes?.length} +
+
+ + + + + + + + + + + + + + {availabilityStakes?.filter((x) => !!x).map((s) => ( + + + + + + + + + + ))} + +
IDWorkerAmountEnd TimeAssignedReclaimedActions
{s.id.toString()}{s.worker.toString()}{s.amount.toString()}{new Date(Number(s.endTime) * 1000).toLocaleString()}{s.assigned.toString()}{s.reclaimed.toString()} + {s.currentUserIsWorker() && ( + + )} + {s.currentUserIsWorker() && s.timeRemaining <= 0 + && !s.assigned && !s.reclaimed && ( + <> + {' '} + + + )} +
+
); }