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}
-
-
-
-
-
- ID |
- Worker |
- Amount |
- End Time |
- Assigned |
- Reclaimed |
- Actions |
-
-
-
- {availabilityStakes.filter((x) => !!x).map((s) => (
-
- {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}
+
+
+
+
+
+ ID |
+ Worker |
+ Amount |
+ End Time |
+ Assigned |
+ Reclaimed |
+ Actions |
+
+
+
+ {availabilityStakes?.filter((x) => !!x).map((s) => (
+
+ {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 && (
+ <>
+ {' '}
+
+ >
+ )}
+ |
+
+ ))}
+
+
+
>
);
}