diff --git a/README.md b/README.md deleted file mode 100644 index 9ff56aaa0..000000000 --- a/README.md +++ /dev/null @@ -1,195 +0,0 @@ -

- - Kleros - -

- -

- Kleros v2 -

- -

- OpenSSF Scorecard - Security Rating - Quality Gate Status - Bugs - Reliability Rating - Maintainability Rating -
- Unit testing - Conventional Commits - Commitizen Friendly - Styled with Prettier -
- GitPoap badge -

- ---- - -## Deployments - -##### โ›“๏ธ [Contracts addresses](contracts/README.md#deployments) - -##### ๐Ÿ—ƒ๏ธ [Subgraph endpoints](subgraph/README.md#deployments) - -##### โš–๏ธ [Web frontend](web/README.md#court-deployments) - -## Content - -| Package | Description | -| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **[bots](/bots)** | Automation of the on-chain upkeep of the smart contracts. Anyone willing to spend some gas may run these bots and contribute to the upkeep operations. | -| **[contracts](/contracts)** | Smart contracts of the arbitration protocol. | -| **[kleros-app](/kleros-app)** | Library of React hooks and utilities shared by the Kleros frontend apps. | -| **[kleros-sdk](/kleros-sdk)** | SDK which facilitates the creation of arbitrable applications, the interactions with the arbitrator, the rendering of the dispute and evidence information. | -| **[subgraph](/subgraph)** | The indexing layer. | -| **[web](/web)** | The court frontend intended for the jurors and parties in a dispute. | - -## Contributing - -### Prerequisites - -- Install NodeJS 16: - - on Red Hat Linux: `sudo dnf module install nodejs:16` - - on Ubuntu Linux: `sudo snap install node --classic` - - on MacOS via [brew](https://brew.sh/): `brew install node` -- Install Yarn v1.22: `npm install -g yarn` - - Then [upgrade](https://yarnpkg.com/getting-started/install#updating-to-the-latest-versions) Yarn to v3: `yarn set version berry` -- Install Volta.sh: `curl https://get.volta.sh | bash` -- Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) to run the local graph node. -- Shell utilities: [jq](https://stedolan.github.io/jq/), [yq](https://mikefarah.gitbook.io/yq/) - - on Red Hat Linux: `sudo dnf install jq yq` - - on Ubuntu Linux: `sudo snap install jq yq` - - on MacOS via [brew](https://brew.sh/): `brew install jq yq` - -### Install the dependencies - -```bash -$ yarn install - -# Foundry libraries -$ git submodule update --init --recursive -j 4 -``` - -### [Hardhat CLI auto-completion](https://hardhat.org/guides/shorthand.html) (optional) - -```bash -$ npm i -g hardhat-shorthand - -$ hardhat-completion install -โœ” Which Shell do you use ? ยท bash -โœ” We will install completion to ~/.bashrc, is it ok ? (y/N) ยท true - -$ exec bash -``` - -### Full Stack Local Deployment - -Run the commands below from the top-level folder. Alternatively, it is possible to `cd` into the relevant package first and then call yarn without `workspace @kleros/xxxx`. - -#### Shortcut using tmux - -If you have **[tmux](https://github.com/tmux/tmux/wiki)** installed, you can get started quickly with a single command. - -```bash -$ yarn local-stack -``` - -![terminal](/docs/local-stack-2.png) - -#### Shell 1 - Local RPC with Contracts Deployed - -```bash -$ yarn workspace @kleros/kleros-v2-contracts start-local -... -Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/ - -``` - -โณ Wait until deployment is complete. - -#### Shell 2 - Local Graph Node - -```bash -$ yarn workspace @kleros/kleros-v2-subgraph start-local-indexer -... -graph-node-graph-node-1 | INFO Successfully connected to IPFS node at: http://ipfs:5001/ -graph-node-graph-node-1 | INFO Pool successfully connected to Postgres, pool: main, shard: primary, component: Store -... -graph-node-graph-node-1 | INFO Connected to Ethereum, capabilities: archive, traces, network_version: 31337, provider: mainnet-rpc-0 -``` - -โณ Wait until the graph service is ready. - -#### Shell 3 - Subgraph Rebuild and Local Deploy - -:warning: This step modifies `subgraph.yaml` and creates a backup file. See further down on how to restore it. - -```bash -$ yarn workspace @kleros/kleros-v2-subgraph rebuild-deploy:local -... -โœ” Upload subgraph to IPFS - -Build completed: QmZVaZQ9qcXPia9YnFEKk7D1dEDHbfyDiJi1sqJ6E1NydB - -Deployed to http://localhost:8000/subgraphs/name/kleros/kleros-v2-core-local/graphql - -Subgraph endpoints: -Queries (HTTP): http://localhost:8000/subgraphs/name/kleros/kleros-v2-core-local -``` - -#### Shell 4 - Frontend Pointing to the Local Subgraph - -```bash -yarn workspace @kleros/kleros-v2-web generate -โœ” Parse Configuration -โœ” Generate outputs -โœ” Validating plugins -โœ” Resolving contracts -โœ” Running plugins -โœ” Writing to src/hooks/contracts/generated.ts - -$ yarn workspace @kleros/kleros-v2-web start-local -Server running at http://localhost:1234 -โœจ Built in 2.35s -``` - -### Redeploying - -```bash -# Contracts -$ yarn workspace @kleros/kleros-v2-contracts deploy-local - -# Subgraph -$ yarn workspace @kleros/kleros-v2-subgraph rebuild-deploy:local - -``` - -### Simulating Arbitration Activity - -```bash -$ yarn workspace @kleros/kleros-v2-contracts simulate-local - -``` - -### Stopping - -Just press `Ctrl + c` in each terminal. - -#### Docker containers and data removal - -`yarn workspace @kleros/kleros-v2-subgraph stop-local-indexer` - -#### Restoring subgraph.yaml - -##### From a backup file - -Every versions were saved as `subgraph.yaml.bak.`. - -##### Based on the ArbitrumGoerli deployment artifacts - -`yarn workspace @kleros/kleros-v2-subgraph update` - -##### Based on the last commit - -`git restore subgraph.yaml` diff --git a/web/src/hooks/useCoinPrice.tsx b/web/src/hooks/useCoinPrice.tsx index 1fc6aff61..b769c6dc0 100644 --- a/web/src/hooks/useCoinPrice.tsx +++ b/web/src/hooks/useCoinPrice.tsx @@ -13,7 +13,12 @@ export type Prices = { export const useCoinPrice = (coinIds: string[]) => { const isEnabled = coinIds !== undefined; - const { data: prices, isError } = useQuery({ + const { + data: prices, + isError, + isLoading, + error, + } = useQuery({ queryKey: [`coinPrice${coinIds}`], enabled: isEnabled, queryFn: async () => fetchCoinPrices(coinIds), @@ -21,5 +26,7 @@ export const useCoinPrice = (coinIds: string[]) => { return { prices, isError, + isLoading, + error, }; }; diff --git a/web/src/pages/Courts/CourtDetails/Stats/index.tsx b/web/src/pages/Courts/CourtDetails/Stats/index.tsx index 0ae92d7f2..b621d4f62 100644 --- a/web/src/pages/Courts/CourtDetails/Stats/index.tsx +++ b/web/src/pages/Courts/CourtDetails/Stats/index.tsx @@ -14,6 +14,7 @@ import { useCourtDetails } from "queries/useCourtDetails"; import { landscapeStyle } from "styles/landscapeStyle"; import StatsContent from "./StatsContent"; +import Spinner from "components/Spinner"; const Container = styled.div` padding: 0 24px 12px 24px; @@ -50,13 +51,31 @@ const StyledAccordion = styled(Accordion)` )} `; +const ErrorMessage = styled.div` + display: flex; + align-items: center; + justify-content: center; + padding: 24px; + color: ${({ theme }) => theme.error}; + font-size: 16px; + font-weight: 500; +`; + const Stats = () => { const { id } = useParams(); - const { data } = useCourtDetails(id); + const { data, isLoading: isLoadingCourt, error: courtError } = useCourtDetails(id); const coinIds = [CoinIds.PNK, CoinIds.ETH]; - const { prices: pricesData } = useCoinPrice(coinIds); + const { prices: pricesData, isLoading: isLoadingPrices, error: pricesError } = useCoinPrice(coinIds); const isDesktop = useIsDesktop(); + if (isLoadingCourt || isLoadingPrices) { + return ; + } + + if (courtError || pricesError) { + return Failed to load statistics; + } + return isDesktop ? (
Statistics