From ceff82241ef8a77b7912da0dad92635786a70fd7 Mon Sep 17 00:00:00 2001 From: Luis Mastrangelo Date: Thu, 2 Dec 2021 03:38:30 +0100 Subject: [PATCH 01/49] Start with heavy refactor towards Svelte Kit --- .env.template | 4 +- .eslintrc.cjs | 20 + .eslintrc.js | 34 - .gitignore | 19 +- README.md | 76 + _redirects | 1 - jest.config.js | 23 - package.json | 100 +- postcss.config.cjs | 6 + public/favicon.ico | Bin 3870 -> 0 bytes public/index.html | 43 - public/logo192.png | Bin 5347 -> 0 bytes public/logo512.png | Bin 9664 -> 0 bytes public/manifest.json | 25 - src/App.tsx | 91 - src/app.css | 3 + src/app.html | 23 + src/components/Footer/index.tsx | 17 - src/components/Header/index.tsx | 21 - src/components/Instructions/index.tsx | 57 - src/components/NavLink/index.tsx | 28 - src/components/RenFaucet/index.tsx | 34 - src/components/Wallet/index.tsx | 47 - src/constants.ts | 74 - src/context/RenTokenProvider.tsx | 2 +- src/env.d.ts | 10 + src/global.d.ts | 1 + src/hooks/useActiveWeb3React.ts | 2 +- src/hooks/useContract.ts | 2 +- src/hooks/useEagerConnect.ts | 2 +- src/hooks/useInactiveListener.ts | 2 +- src/index.css | 47 - src/index.tsx | 53 - src/layouts/ScreenLayout.tsx | 15 - src/layouts/SectionLayout.tsx | 17 - src/lib/Addresses.svelte | 67 + src/lib/EtherscanLink.svelte | 9 + src/lib/Footer.svelte | 22 + src/lib/Header.svelte | 33 + src/lib/Logo.svelte | 3 + src/lib/Stats.svelte | 33 + src/lib/Wallet.svelte | 76 + src/lib/config.ts | 78 + src/{ => lib}/connectors.ts | 2 +- src/lib/howto/Howto.svelte | 26 + src/lib/howto/Step.svelte | 73 + src/{utils => lib}/shortAccount.ts | 0 src/logo.svg | 1 - src/react-app-env.d.ts | 1 - src/reportWebVitals.ts | 13 - src/routes/0x[address]/deposit.svelte | 23 + src/routes/0x[address]/withdraw.svelte | 5 + src/routes/__layout.svelte | 48 + src/routes/api/renpoolinfo.ts | 36 + src/routes/howto.svelte | 88 + src/routes/index.svelte | 3 + src/sections/AddressesSection/index.tsx | 33 - src/sections/StatsSection/index.tsx | 22 - src/setupTests.ts | 5 - src/theme.ts | 13 - src/types/button.ts | 5 - src/types/index.d.ts | 18 - src/types/rimble-ui.d.ts | 1 - src/utils/str2BN.ts | 2 +- static/favicon.png | Bin 0 -> 1571 bytes {public => static}/github.png | Bin {public => static}/robots.txt | 0 svelte.config.js | 23 + tailwind.config.cjs | 14 + tsconfig.json | 70 +- yarn.lock | 14385 ++++------------------ 71 files changed, 3340 insertions(+), 12790 deletions(-) create mode 100644 .eslintrc.cjs delete mode 100644 .eslintrc.js delete mode 100644 _redirects delete mode 100644 jest.config.js create mode 100644 postcss.config.cjs delete mode 100644 public/favicon.ico delete mode 100644 public/index.html delete mode 100644 public/logo192.png delete mode 100644 public/logo512.png delete mode 100644 public/manifest.json delete mode 100644 src/App.tsx create mode 100644 src/app.css create mode 100644 src/app.html delete mode 100644 src/components/Footer/index.tsx delete mode 100644 src/components/Header/index.tsx delete mode 100644 src/components/Instructions/index.tsx delete mode 100644 src/components/NavLink/index.tsx delete mode 100644 src/components/RenFaucet/index.tsx delete mode 100644 src/components/Wallet/index.tsx delete mode 100644 src/constants.ts create mode 100644 src/env.d.ts create mode 100644 src/global.d.ts delete mode 100644 src/index.css delete mode 100644 src/index.tsx delete mode 100644 src/layouts/ScreenLayout.tsx delete mode 100644 src/layouts/SectionLayout.tsx create mode 100644 src/lib/Addresses.svelte create mode 100644 src/lib/EtherscanLink.svelte create mode 100644 src/lib/Footer.svelte create mode 100644 src/lib/Header.svelte create mode 100644 src/lib/Logo.svelte create mode 100644 src/lib/Stats.svelte create mode 100644 src/lib/Wallet.svelte create mode 100644 src/lib/config.ts rename src/{ => lib}/connectors.ts (96%) create mode 100644 src/lib/howto/Howto.svelte create mode 100644 src/lib/howto/Step.svelte rename src/{utils => lib}/shortAccount.ts (100%) delete mode 100644 src/logo.svg delete mode 100644 src/react-app-env.d.ts delete mode 100644 src/reportWebVitals.ts create mode 100644 src/routes/0x[address]/deposit.svelte create mode 100644 src/routes/0x[address]/withdraw.svelte create mode 100644 src/routes/__layout.svelte create mode 100644 src/routes/api/renpoolinfo.ts create mode 100644 src/routes/howto.svelte create mode 100644 src/routes/index.svelte delete mode 100644 src/sections/AddressesSection/index.tsx delete mode 100644 src/sections/StatsSection/index.tsx delete mode 100644 src/setupTests.ts delete mode 100644 src/theme.ts delete mode 100644 src/types/button.ts delete mode 100644 src/types/index.d.ts delete mode 100644 src/types/rimble-ui.d.ts create mode 100644 static/favicon.png rename {public => static}/github.png (100%) rename {public => static}/robots.txt (100%) create mode 100644 svelte.config.js create mode 100644 tailwind.config.cjs diff --git a/.env.template b/.env.template index 13e664e..4eb23e5 100644 --- a/.env.template +++ b/.env.template @@ -1,2 +1,2 @@ -REACT_APP_CHAIN_ID=42 -REACT_APP_INFURA_PROJECT_ID=XXX +VITE_CHAIN_ID= +INFURA_PROJECT_ID= diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..fba3861 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,20 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], + plugins: ['svelte3', '@typescript-eslint'], + ignorePatterns: ['*.cjs'], + overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }], + settings: { + 'svelte3/typescript': () => require('typescript') + }, + parserOptions: { + sourceType: 'module', + ecmaVersion: 2019 + }, + env: { + browser: true, + es2017: true, + node: true + } +}; diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index fbd3148..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,34 +0,0 @@ -module.exports = { - parser: '@typescript-eslint/parser', // Specifies the ESLint parser - parserOptions: { - ecmaVersion: 2020, // Allows for the parsing of modern ECMAScript features - sourceType: 'module', // Allows for the use of imports - ecmaFeatures: { - jsx: true, // Allows for the parsing of JSX - }, - }, - settings: { - react: { - version: 'detect', // Tells eslint-plugin-react to automatically detect the version of React to use - }, - }, - extends: [ - 'plugin:react/recommended', // Uses the recommended rules from @eslint-plugin-react - 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from @typescript-eslint/eslint-plugin - ], - rules: { - // Place to specify ESLint rules. Can be used to overwrite rules specified from the extended configs - // e.g. '@typescript-eslint/explicit-function-return-type': 'off', - semi: ['error', 'never'], - indent: [2, 2, { SwitchCase: 1 }], - quotes: ['error', 'single'], - }, - overrides: [ - { - 'files': ['**/*.tsx'], - 'rules': { - 'react/prop-types': 'off' - } - } - ] -} diff --git a/.gitignore b/.gitignore index 7077367..0bd0a97 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,5 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js +/.svelte-kit +/node_modules/ # testing /coverage @@ -12,13 +8,8 @@ /build # misc -.DS_Store -.env -.env.kovan -.env.dev - -npm-debug.log* -yarn-debug.log* -yarn-error.log* +/.env +/.env.kovan +/.env.dev /.netlify diff --git a/README.md b/README.md index 970f9b5..f610030 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,78 @@ # renpool-app + RenPool's client app + +## Manually deploy client app + +[https://www.freecodecamp.org/news/how-to-deploy-a-react-application-to-netlify-363b8a98a985/](https://www.freecodecamp.org/news/how-to-deploy-a-react-application-to-netlify-363b8a98a985/) + +Install Netlify CLI: `npm install netlify-cli -g`. + +```bash +>> yarn run setEnv: +>> yarn run deploy +``` + +The app is deployed to [https://renpool.netlify.app/](https://renpool.netlify.app/) + +## Usage + +1. Open the Brownie console. Starting the console launches a fresh [Ganache](https://www.trufflesuite.com/ganache) instance in the background. + + ```bash + $ brownie console + Brownie v1.9.0 - Python development framework for Ethereum + + ReactMixProject is the active project. + Launching 'ganache-cli'... + Brownie environment is ready. + ``` + +2. Run the [deployment script](scripts/deploy.py) to deploy the project's smart contracts. + + ```python + >>> run("deploy") + Running 'scripts.deploy.main'... + Transaction sent: 0xd1000d04fe99a07db864bcd1095ddf5cb279b43be8e159f94dbff9d4e4809c70 + Gas price: 0.0 gwei Gas limit: 6721975 + SolidityStorage.constructor confirmed - Block: 1 Gas used: 110641 (1.65%) + SolidityStorage deployed at: 0xF104A50668c3b1026E8f9B0d9D404faF8E42e642 + + Transaction sent: 0xee112392522ed24ac6ab8cc8ba09bfe51c5d699d9d1b39294ba87e5d2a56212c + Gas price: 0.0 gwei Gas limit: 6721975 + VyperStorage.constructor confirmed - Block: 2 Gas used: 134750 (2.00%) + VyperStorage deployed at: 0xB8485421abC325D172652123dBd71D58b8117070 + ``` + +3. While Brownie is still running, start the React app in a different terminal. + + ```bash + # make sure to use a different terminal, not the brownie console + cd client + yarn start + ``` + +4. Connect Metamask to the local Ganache network. In the upper right corner, click the network dropdown menu. Select `Localhost 8545`, or: + + ```bash + New Custom RPC + http://localhost:8545 + ``` + +5. Interact with the smart contracts using the web interface or via the Brownie console. + + ```python + # get the newest vyper storage contract + >>> vyper_storage = VyperStorage[-1] + + # the default sender of the transaction is the contract creator + >>> vyper_storage.set(1337) + ``` + + Any changes to the contracts from the console should show on the website after a refresh, and vice versa. + +## Ending a Session + +When you close the Brownie console, the Ganache instance also terminates and the deployment artifacts are deleted. + +To retain your deployment artifacts (and their functionality) you can launch Ganache yourself prior to launching Brownie. Brownie automatically attaches to the ganache instance where you can deploy the contracts. After closing Brownie, the chain and deployment artifacts will persist. diff --git a/_redirects b/_redirects deleted file mode 100644 index 3ce9216..0000000 --- a/_redirects +++ /dev/null @@ -1 +0,0 @@ -/* /index.html 200 diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 3e92b2c..0000000 --- a/jest.config.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = { - // The root of your source code, typically /src - // `` is a token Jest substitutes - roots: ['/src'], - // Jest transformations -- this adds support for TypeScript - // using ts-jest - transform: { - '^.+\\.tsx?$': 'ts-jest' - }, - // Runs special logic, such as cleaning up components - // when using React Testing Library and adds special - // extended assertions to Jest - setupFilesAfterEnv: [ - '@testing-library/react/cleanup-after-each', - '@testing-library/jest-dom/extend-expect' - ], - // Test spec file resolution pattern - // Look for tests inside the `src` folder and filename - // should contain `test` or `spec`. - testRegex: '(/**/.*|(\\.|/)(test|spec))\\.tsx?$', - // Module file extensions for importing - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], -} diff --git a/package.json b/package.json index 12d070d..dccdbaa 100644 --- a/package.json +++ b/package.json @@ -1,82 +1,36 @@ { "name": "client", - "version": "0.1.0", + "version": "0.0.1", "private": true, "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "test:watch": "yarn run test --watch", - "eject": "react-scripts eject", - "lint": "eslint '*/**/*.{js,ts,tsx}' --quiet --fix", - "setEnv:dev": "cp .env.dev .env", - "setEnv:kovan": "cp .env.kovan .env", - "setEnv:rinkeby": "cp .env.rinkeby .env", - "deploy": "yarn run build && cp ./_redirects ./build && netlify deploy --dir build --prod" - }, - "dependencies": { - "renpool-contracts": "https://github.com/renpool/renpool-contracts", - "@ethersproject/address": "^5.4.0", - "@ethersproject/bignumber": "^5.4.0", - "@ethersproject/contracts": "^5.4.0", - "@ethersproject/providers": "^5.4.1", - "@ethersproject/strings": "^5.4.0", - "@ethersproject/units": "^5.4.0", - "@renproject/react-components": "^1.0.0-alpha.10", - "@testing-library/jest-dom": "^5.11.4", - "@testing-library/react": "^11.1.0", - "@testing-library/user-event": "^12.1.10", - "@types/bs58": "^4.0.1", - "@types/jest": "^26.0.15", - "@types/lodash": "^4.14.170", - "@types/node": "^12.0.0", - "@types/react": "^17.0.0", - "@types/react-dom": "^17.0.0", - "@types/styled-components": "^5.1.11", - "@web3-react/core": "^6.1.9", - "@web3-react/injected-connector": "^6.0.7", - "@web3-react/network-connector": "^6.1.9", - "bs58": "^4.0.1", - "lodash": "^4.17.21", - "react": "^17.0.2", - "react-device-detect": "^1.17.0", - "react-dom": "^17.0.2", - "react-scripts": "4.0.3", - "rimble-ui": "^0.14.0", - "styled-components": "^5.3.0", - "typescript": "^4.1.2", - "web-vitals": "^1.0.1" + "dev": "svelte-kit dev", + "build": "svelte-kit build", + "package": "svelte-kit package", + "preview": "svelte-kit preview", + "check": "svelte-check --tsconfig ./tsconfig.json", + "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch", + "lint": "prettier --ignore-path .gitignore --check --plugin-search-dir=. . && eslint --ignore-path .gitignore ." }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^4.27.0", - "@typescript-eslint/parser": "^4.27.0" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] + "@sveltejs/adapter-auto": "next", + "@sveltejs/kit": "next", + "@typescript-eslint/eslint-plugin": "^4.31.1", + "@typescript-eslint/parser": "^4.31.1", + "autoprefixer": "^10.4.0", + "eslint": "^7.32.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-svelte3": "^3.2.1", + "postcss": "^8.4.4", + "svelte": "^3.44.0", + "svelte-check": "^2.2.6", + "svelte-preprocess": "^4.9.4", + "tailwindcss": "^2.2.19", + "tslib": "^2.3.1", + "typescript": "^4.4.3" }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "jest": { - "testMatch": [ - "**/?(*.)(spec|test).ts?(x)" - ], - "coveragePathIgnorePatterns": [ - "/node_modules/", - "/Tests/Setup.js", - "/Tests/Mocks/*" - ] + "type": "module", + "dependencies": { + "ethers": "^5.5.1", + "renpool-contracts": "https://github.com/renpool/renpool-contracts" } } diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..f1c8dac --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + } +} diff --git a/public/favicon.ico b/public/favicon.ico deleted file mode 100644 index a11777cc471a4344702741ab1c8a588998b1311a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3870 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 baj7?x%VD!5Cxk2YbYLNVeiXvvpMCWYo=by@ diff --git a/public/index.html b/public/index.html deleted file mode 100644 index 399cdc8..0000000 --- a/public/index.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - RenPool - - - -
- - - diff --git a/public/logo192.png b/public/logo192.png deleted file mode 100644 index fc44b0a3796c0e0a64c3d858ca038bd4570465d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5347 zcmZWtbyO6NvR-oO24RV%BvuJ&=?+<7=`LvyB&A_#M7mSDYw1v6DJkiYl9XjT!%$dLEBTQ8R9|wd3008in6lFF3GV-6mLi?MoP_y~}QUnaDCHI#t z7w^m$@6DI)|C8_jrT?q=f8D?0AM?L)Z}xAo^e^W>t$*Y0KlT5=@bBjT9kxb%-KNdk zeOS1tKO#ChhG7%{ApNBzE2ZVNcxbrin#E1TiAw#BlUhXllzhN$qWez5l;h+t^q#Eav8PhR2|T}y5kkflaK`ba-eoE+Z2q@o6P$)=&` z+(8}+-McnNO>e#$Rr{32ngsZIAX>GH??tqgwUuUz6kjns|LjsB37zUEWd|(&O!)DY zQLrq%Y>)Y8G`yYbYCx&aVHi@-vZ3|ebG!f$sTQqMgi0hWRJ^Wc+Ibv!udh_r%2|U) zPi|E^PK?UE!>_4`f`1k4hqqj_$+d!EB_#IYt;f9)fBOumGNyglU(ofY`yHq4Y?B%- zp&G!MRY<~ajTgIHErMe(Z8JG*;D-PJhd@RX@QatggM7+G(Lz8eZ;73)72Hfx5KDOE zkT(m}i2;@X2AT5fW?qVp?@WgN$aT+f_6eo?IsLh;jscNRp|8H}Z9p_UBO^SJXpZew zEK8fz|0Th%(Wr|KZBGTM4yxkA5CFdAj8=QSrT$fKW#tweUFqr0TZ9D~a5lF{)%-tTGMK^2tz(y2v$i%V8XAxIywrZCp=)83p(zIk6@S5AWl|Oa2hF`~~^W zI;KeOSkw1O#TiQ8;U7OPXjZM|KrnN}9arP)m0v$c|L)lF`j_rpG(zW1Qjv$=^|p*f z>)Na{D&>n`jOWMwB^TM}slgTEcjxTlUby89j1)|6ydRfWERn3|7Zd2&e7?!K&5G$x z`5U3uFtn4~SZq|LjFVrz$3iln-+ucY4q$BC{CSm7Xe5c1J<=%Oagztj{ifpaZk_bQ z9Sb-LaQMKp-qJA*bP6DzgE3`}*i1o3GKmo2pn@dj0;He}F=BgINo};6gQF8!n0ULZ zL>kC0nPSFzlcB7p41doao2F7%6IUTi_+!L`MM4o*#Y#0v~WiO8uSeAUNp=vA2KaR&=jNR2iVwG>7t%sG2x_~yXzY)7K& zk3p+O0AFZ1eu^T3s};B%6TpJ6h-Y%B^*zT&SN7C=N;g|#dGIVMSOru3iv^SvO>h4M=t-N1GSLLDqVTcgurco6)3&XpU!FP6Hlrmj}f$ zp95;b)>M~`kxuZF3r~a!rMf4|&1=uMG$;h^g=Kl;H&Np-(pFT9FF@++MMEx3RBsK?AU0fPk-#mdR)Wdkj)`>ZMl#^<80kM87VvsI3r_c@_vX=fdQ`_9-d(xiI z4K;1y1TiPj_RPh*SpDI7U~^QQ?%0&!$Sh#?x_@;ag)P}ZkAik{_WPB4rHyW#%>|Gs zdbhyt=qQPA7`?h2_8T;-E6HI#im9K>au*(j4;kzwMSLgo6u*}-K`$_Gzgu&XE)udQ zmQ72^eZd|vzI)~!20JV-v-T|<4@7ruqrj|o4=JJPlybwMg;M$Ud7>h6g()CT@wXm` zbq=A(t;RJ^{Xxi*Ff~!|3!-l_PS{AyNAU~t{h;(N(PXMEf^R(B+ZVX3 z8y0;0A8hJYp@g+c*`>eTA|3Tgv9U8#BDTO9@a@gVMDxr(fVaEqL1tl?md{v^j8aUv zm&%PX4^|rX|?E4^CkplWWNv*OKM>DxPa z!RJ)U^0-WJMi)Ksc!^ixOtw^egoAZZ2Cg;X7(5xZG7yL_;UJ#yp*ZD-;I^Z9qkP`} zwCTs0*%rIVF1sgLervtnUo&brwz?6?PXRuOCS*JI-WL6GKy7-~yi0giTEMmDs_-UX zo=+nFrW_EfTg>oY72_4Z0*uG>MnXP=c0VpT&*|rvv1iStW;*^={rP1y?Hv+6R6bxFMkxpWkJ>m7Ba{>zc_q zEefC3jsXdyS5??Mz7IET$Kft|EMNJIv7Ny8ZOcKnzf`K5Cd)&`-fTY#W&jnV0l2vt z?Gqhic}l}mCv1yUEy$%DP}4AN;36$=7aNI^*AzV(eYGeJ(Px-j<^gSDp5dBAv2#?; zcMXv#aj>%;MiG^q^$0MSg-(uTl!xm49dH!{X0){Ew7ThWV~Gtj7h%ZD zVN-R-^7Cf0VH!8O)uUHPL2mO2tmE*cecwQv_5CzWeh)ykX8r5Hi`ehYo)d{Jnh&3p z9ndXT$OW51#H5cFKa76c<%nNkP~FU93b5h-|Cb}ScHs@4Q#|}byWg;KDMJ#|l zE=MKD*F@HDBcX@~QJH%56eh~jfPO-uKm}~t7VkHxHT;)4sd+?Wc4* z>CyR*{w@4(gnYRdFq=^(#-ytb^5ESD?x<0Skhb%Pt?npNW1m+Nv`tr9+qN<3H1f<% zZvNEqyK5FgPsQ`QIu9P0x_}wJR~^CotL|n zk?dn;tLRw9jJTur4uWoX6iMm914f0AJfB@C74a;_qRrAP4E7l890P&{v<}>_&GLrW z)klculcg`?zJO~4;BBAa=POU%aN|pmZJn2{hA!d!*lwO%YSIzv8bTJ}=nhC^n}g(ld^rn#kq9Z3)z`k9lvV>y#!F4e{5c$tnr9M{V)0m(Z< z#88vX6-AW7T2UUwW`g<;8I$Jb!R%z@rCcGT)-2k7&x9kZZT66}Ztid~6t0jKb&9mm zpa}LCb`bz`{MzpZR#E*QuBiZXI#<`5qxx=&LMr-UUf~@dRk}YI2hbMsAMWOmDzYtm zjof16D=mc`^B$+_bCG$$@R0t;e?~UkF?7<(vkb70*EQB1rfUWXh$j)R2)+dNAH5%R zEBs^?N;UMdy}V};59Gu#0$q53$}|+q7CIGg_w_WlvE}AdqoS<7DY1LWS9?TrfmcvT zaypmplwn=P4;a8-%l^e?f`OpGb}%(_mFsL&GywhyN(-VROj`4~V~9bGv%UhcA|YW% zs{;nh@aDX11y^HOFXB$a7#Sr3cEtNd4eLm@Y#fc&j)TGvbbMwze zXtekX_wJqxe4NhuW$r}cNy|L{V=t#$%SuWEW)YZTH|!iT79k#?632OFse{+BT_gau zJwQcbH{b}dzKO?^dV&3nTILYlGw{27UJ72ZN){BILd_HV_s$WfI2DC<9LIHFmtyw? zQ;?MuK7g%Ym+4e^W#5}WDLpko%jPOC=aN)3!=8)s#Rnercak&b3ESRX3z{xfKBF8L z5%CGkFmGO@x?_mPGlpEej!3!AMddChabyf~nJNZxx!D&{@xEb!TDyvqSj%Y5@A{}9 zRzoBn0?x}=krh{ok3Nn%e)#~uh;6jpezhA)ySb^b#E>73e*frBFu6IZ^D7Ii&rsiU z%jzygxT-n*joJpY4o&8UXr2s%j^Q{?e-voloX`4DQyEK+DmrZh8A$)iWL#NO9+Y@!sO2f@rI!@jN@>HOA< z?q2l{^%mY*PNx2FoX+A7X3N}(RV$B`g&N=e0uvAvEN1W^{*W?zT1i#fxuw10%~))J zjx#gxoVlXREWZf4hRkgdHx5V_S*;p-y%JtGgQ4}lnA~MBz-AFdxUxU1RIT$`sal|X zPB6sEVRjGbXIP0U+?rT|y5+ev&OMX*5C$n2SBPZr`jqzrmpVrNciR0e*Wm?fK6DY& zl(XQZ60yWXV-|Ps!A{EF;=_z(YAF=T(-MkJXUoX zI{UMQDAV2}Ya?EisdEW;@pE6dt;j0fg5oT2dxCi{wqWJ<)|SR6fxX~5CzblPGr8cb zUBVJ2CQd~3L?7yfTpLNbt)He1D>*KXI^GK%<`bq^cUq$Q@uJifG>p3LU(!H=C)aEL zenk7pVg}0{dKU}&l)Y2Y2eFMdS(JS0}oZUuVaf2+K*YFNGHB`^YGcIpnBlMhO7d4@vV zv(@N}(k#REdul8~fP+^F@ky*wt@~&|(&&meNO>rKDEnB{ykAZ}k>e@lad7to>Ao$B zz<1(L=#J*u4_LB=8w+*{KFK^u00NAmeNN7pr+Pf+N*Zl^dO{LM-hMHyP6N!~`24jd zXYP|Ze;dRXKdF2iJG$U{k=S86l@pytLx}$JFFs8e)*Vi?aVBtGJ3JZUj!~c{(rw5>vuRF$`^p!P8w1B=O!skwkO5yd4_XuG^QVF z`-r5K7(IPSiKQ2|U9+`@Js!g6sfJwAHVd|s?|mnC*q zp|B|z)(8+mxXyxQ{8Pg3F4|tdpgZZSoU4P&9I8)nHo1@)9_9u&NcT^FI)6|hsAZFk zZ+arl&@*>RXBf-OZxhZerOr&dN5LW9@gV=oGFbK*J+m#R-|e6(Loz(;g@T^*oO)0R zN`N=X46b{7yk5FZGr#5&n1!-@j@g02g|X>MOpF3#IjZ_4wg{dX+G9eqS+Es9@6nC7 zD9$NuVJI}6ZlwtUm5cCAiYv0(Yi{%eH+}t)!E^>^KxB5^L~a`4%1~5q6h>d;paC9c zTj0wTCKrhWf+F#5>EgX`sl%POl?oyCq0(w0xoL?L%)|Q7d|Hl92rUYAU#lc**I&^6p=4lNQPa0 znQ|A~i0ip@`B=FW-Q;zh?-wF;Wl5!+q3GXDu-x&}$gUO)NoO7^$BeEIrd~1Dh{Tr` z8s<(Bn@gZ(mkIGnmYh_ehXnq78QL$pNDi)|QcT*|GtS%nz1uKE+E{7jdEBp%h0}%r zD2|KmYGiPa4;md-t_m5YDz#c*oV_FqXd85d@eub?9N61QuYcb3CnVWpM(D-^|CmkL z(F}L&N7qhL2PCq)fRh}XO@U`Yn<?TNGR4L(mF7#4u29{i~@k;pLsgl({YW5`Mo+p=zZn3L*4{JU;++dG9 X@eDJUQo;Ye2mwlRs?y0|+_a0zY+Zo%Dkae}+MySoIppb75o?vUW_?)>@g{U2`ERQIXV zeY$JrWnMZ$QC<=ii4X|@0H8`si75jB(ElJb00HAB%>SlLR{!zO|C9P3zxw_U8?1d8uRZ=({Ga4shyN}3 zAK}WA(ds|``G4jA)9}Bt2Hy0+f3rV1E6b|@?hpGA=PI&r8)ah|)I2s(P5Ic*Ndhn^ z*T&j@gbCTv7+8rpYbR^Ty}1AY)YH;p!m948r#%7x^Z@_-w{pDl|1S4`EM3n_PaXvK z1JF)E3qy$qTj5Xs{jU9k=y%SQ0>8E$;x?p9ayU0bZZeo{5Z@&FKX>}s!0+^>C^D#z z>xsCPvxD3Z=dP}TTOSJhNTPyVt14VCQ9MQFN`rn!c&_p?&4<5_PGm4a;WS&1(!qKE z_H$;dDdiPQ!F_gsN`2>`X}$I=B;={R8%L~`>RyKcS$72ai$!2>d(YkciA^J0@X%G4 z4cu!%Ps~2JuJ8ex`&;Fa0NQOq_nDZ&X;^A=oc1&f#3P1(!5il>6?uK4QpEG8z0Rhu zvBJ+A9RV?z%v?!$=(vcH?*;vRs*+PPbOQ3cdPr5=tOcLqmfx@#hOqX0iN)wTTO21jH<>jpmwRIAGw7`a|sl?9y9zRBh>(_%| zF?h|P7}~RKj?HR+q|4U`CjRmV-$mLW>MScKnNXiv{vD3&2@*u)-6P@h0A`eeZ7}71 zK(w%@R<4lLt`O7fs1E)$5iGb~fPfJ?WxhY7c3Q>T-w#wT&zW522pH-B%r5v#5y^CF zcC30Se|`D2mY$hAlIULL%-PNXgbbpRHgn<&X3N9W!@BUk@9g*P5mz-YnZBb*-$zMM z7Qq}ic0mR8n{^L|=+diODdV}Q!gwr?y+2m=3HWwMq4z)DqYVg0J~^}-%7rMR@S1;9 z7GFj6K}i32X;3*$SmzB&HW{PJ55kT+EI#SsZf}bD7nW^Haf}_gXciYKX{QBxIPSx2Ma? zHQqgzZq!_{&zg{yxqv3xq8YV+`S}F6A>Gtl39_m;K4dA{pP$BW0oIXJ>jEQ!2V3A2 zdpoTxG&V=(?^q?ZTj2ZUpDUdMb)T?E$}CI>r@}PFPWD9@*%V6;4Ag>D#h>!s)=$0R zRXvdkZ%|c}ubej`jl?cS$onl9Tw52rBKT)kgyw~Xy%z62Lr%V6Y=f?2)J|bZJ5(Wx zmji`O;_B+*X@qe-#~`HFP<{8$w@z4@&`q^Q-Zk8JG3>WalhnW1cvnoVw>*R@c&|o8 zZ%w!{Z+MHeZ*OE4v*otkZqz11*s!#s^Gq>+o`8Z5 z^i-qzJLJh9!W-;SmFkR8HEZJWiXk$40i6)7 zZpr=k2lp}SasbM*Nbn3j$sn0;rUI;%EDbi7T1ZI4qL6PNNM2Y%6{LMIKW+FY_yF3) zSKQ2QSujzNMSL2r&bYs`|i2Dnn z=>}c0>a}>|uT!IiMOA~pVT~R@bGlm}Edf}Kq0?*Af6#mW9f9!}RjW7om0c9Qlp;yK z)=XQs(|6GCadQbWIhYF=rf{Y)sj%^Id-ARO0=O^Ad;Ph+ z0?$eE1xhH?{T$QI>0JP75`r)U_$#%K1^BQ8z#uciKf(C701&RyLQWBUp*Q7eyn76} z6JHpC9}R$J#(R0cDCkXoFSp;j6{x{b&0yE@P7{;pCEpKjS(+1RQy38`=&Yxo%F=3y zCPeefABp34U-s?WmU#JJw23dcC{sPPFc2#J$ZgEN%zod}J~8dLm*fx9f6SpO zn^Ww3bt9-r0XaT2a@Wpw;C23XM}7_14#%QpubrIw5aZtP+CqIFmsG4`Cm6rfxl9n5 z7=r2C-+lM2AB9X0T_`?EW&Byv&K?HS4QLoylJ|OAF z`8atBNTzJ&AQ!>sOo$?^0xj~D(;kS$`9zbEGd>f6r`NC3X`tX)sWgWUUOQ7w=$TO&*j;=u%25ay-%>3@81tGe^_z*C7pb9y*Ed^H3t$BIKH2o+olp#$q;)_ zfpjCb_^VFg5fU~K)nf*d*r@BCC>UZ!0&b?AGk_jTPXaSnCuW110wjHPPe^9R^;jo3 zwvzTl)C`Zl5}O2}3lec=hZ*$JnkW#7enKKc)(pM${_$9Hc=Sr_A9Biwe*Y=T?~1CK z6eZ9uPICjy-sMGbZl$yQmpB&`ouS8v{58__t0$JP%i3R&%QR3ianbZqDs<2#5FdN@n5bCn^ZtH992~5k(eA|8|@G9u`wdn7bnpg|@{m z^d6Y`*$Zf2Xr&|g%sai#5}Syvv(>Jnx&EM7-|Jr7!M~zdAyjt*xl;OLhvW-a%H1m0 z*x5*nb=R5u><7lyVpNAR?q@1U59 zO+)QWwL8t zyip?u_nI+K$uh{y)~}qj?(w0&=SE^8`_WMM zTybjG=999h38Yes7}-4*LJ7H)UE8{mE(6;8voE+TYY%33A>S6`G_95^5QHNTo_;Ao ztIQIZ_}49%{8|=O;isBZ?=7kfdF8_@azfoTd+hEJKWE!)$)N%HIe2cplaK`ry#=pV z0q{9w-`i0h@!R8K3GC{ivt{70IWG`EP|(1g7i_Q<>aEAT{5(yD z=!O?kq61VegV+st@XCw475j6vS)_z@efuqQgHQR1T4;|-#OLZNQJPV4k$AX1Uk8Lm z{N*b*ia=I+MB}kWpupJ~>!C@xEN#Wa7V+7{m4j8c?)ChV=D?o~sjT?0C_AQ7B-vxqX30s0I_`2$in86#`mAsT-w?j{&AL@B3$;P z31G4(lV|b}uSDCIrjk+M1R!X7s4Aabn<)zpgT}#gE|mIvV38^ODy@<&yflpCwS#fRf9ZX3lPV_?8@C5)A;T zqmouFLFk;qIs4rA=hh=GL~sCFsXHsqO6_y~*AFt939UYVBSx1s(=Kb&5;j7cSowdE;7()CC2|-i9Zz+_BIw8#ll~-tyH?F3{%`QCsYa*b#s*9iCc`1P1oC26?`g<9))EJ3%xz+O!B3 zZ7$j~To)C@PquR>a1+Dh>-a%IvH_Y7^ys|4o?E%3`I&ADXfC8++hAdZfzIT#%C+Jz z1lU~K_vAm0m8Qk}K$F>|>RPK%<1SI0(G+8q~H zAsjezyP+u!Se4q3GW)`h`NPSRlMoBjCzNPesWJwVTY!o@G8=(6I%4XHGaSiS3MEBK zhgGFv6Jc>L$4jVE!I?TQuwvz_%CyO!bLh94nqK11C2W$*aa2ueGopG8DnBICVUORP zgytv#)49fVXDaR$SukloYC3u7#5H)}1K21=?DKj^U)8G;MS)&Op)g^zR2($<>C*zW z;X7`hLxiIO#J`ANdyAOJle4V%ppa*(+0i3w;8i*BA_;u8gOO6)MY`ueq7stBMJTB; z-a0R>hT*}>z|Gg}@^zDL1MrH+2hsR8 zHc}*9IvuQC^Ju)^#Y{fOr(96rQNPNhxc;mH@W*m206>Lo<*SaaH?~8zg&f&%YiOEG zGiz?*CP>Bci}!WiS=zj#K5I}>DtpregpP_tfZtPa(N<%vo^#WCQ5BTv0vr%Z{)0q+ z)RbfHktUm|lg&U3YM%lMUM(fu}i#kjX9h>GYctkx9Mt_8{@s%!K_EI zScgwy6%_fR?CGJQtmgNAj^h9B#zmaMDWgH55pGuY1Gv7D z;8Psm(vEPiwn#MgJYu4Ty9D|h!?Rj0ddE|&L3S{IP%H4^N!m`60ZwZw^;eg4sk6K{ ziA^`Sbl_4~f&Oo%n;8Ye(tiAdlZKI!Z=|j$5hS|D$bDJ}p{gh$KN&JZYLUjv4h{NY zBJ>X9z!xfDGY z+oh_Z&_e#Q(-}>ssZfm=j$D&4W4FNy&-kAO1~#3Im;F)Nwe{(*75(p=P^VI?X0GFakfh+X-px4a%Uw@fSbmp9hM1_~R>?Z8+ ziy|e9>8V*`OP}4x5JjdWp}7eX;lVxp5qS}0YZek;SNmm7tEeSF*-dI)6U-A%m6YvCgM(}_=k#a6o^%-K4{`B1+}O4x zztDT%hVb;v#?j`lTvlFQ3aV#zkX=7;YFLS$uIzb0E3lozs5`Xy zi~vF+%{z9uLjKvKPhP%x5f~7-Gj+%5N`%^=yk*Qn{`> z;xj&ROY6g`iy2a@{O)V(jk&8#hHACVDXey5a+KDod_Z&}kHM}xt7}Md@pil{2x7E~ zL$k^d2@Ec2XskjrN+IILw;#7((abu;OJii&v3?60x>d_Ma(onIPtcVnX@ELF0aL?T zSmWiL3(dOFkt!x=1O!_0n(cAzZW+3nHJ{2S>tgSK?~cFha^y(l@-Mr2W$%MN{#af8J;V*>hdq!gx=d0h$T7l}>91Wh07)9CTX zh2_ZdQCyFOQ)l(}gft0UZG`Sh2`x-w`5vC2UD}lZs*5 zG76$akzn}Xi))L3oGJ75#pcN=cX3!=57$Ha=hQ2^lwdyU#a}4JJOz6ddR%zae%#4& za)bFj)z=YQela(F#Y|Q#dp}PJghITwXouVaMq$BM?K%cXn9^Y@g43$=O)F&ZlOUom zJiad#dea;-eywBA@e&D6Pdso1?2^(pXiN91?jvcaUyYoKUmvl5G9e$W!okWe*@a<^ z8cQQ6cNSf+UPDx%?_G4aIiybZHHagF{;IcD(dPO!#=u zWfqLcPc^+7Uu#l(Bpxft{*4lv#*u7X9AOzDO z1D9?^jIo}?%iz(_dwLa{ex#T}76ZfN_Z-hwpus9y+4xaUu9cX}&P{XrZVWE{1^0yw zO;YhLEW!pJcbCt3L8~a7>jsaN{V3>tz6_7`&pi%GxZ=V3?3K^U+*ryLSb)8^IblJ0 zSRLNDvIxt)S}g30?s_3NX>F?NKIGrG_zB9@Z>uSW3k2es_H2kU;Rnn%j5qP)!XHKE zPB2mHP~tLCg4K_vH$xv`HbRsJwbZMUV(t=ez;Ec(vyHH)FbfLg`c61I$W_uBB>i^r z&{_P;369-&>23R%qNIULe=1~T$(DA`ev*EWZ6j(B$(te}x1WvmIll21zvygkS%vwG zzkR6Z#RKA2!z!C%M!O>!=Gr0(J0FP=-MN=5t-Ir)of50y10W}j`GtRCsXBakrKtG& zazmITDJMA0C51&BnLY)SY9r)NVTMs);1<=oosS9g31l{4ztjD3#+2H7u_|66b|_*O z;Qk6nalpqdHOjx|K&vUS_6ITgGll;TdaN*ta=M_YtyC)I9Tmr~VaPrH2qb6sd~=AcIxV+%z{E&0@y=DPArw zdV7z(G1hBx7hd{>(cr43^WF%4Y@PXZ?wPpj{OQ#tvc$pABJbvPGvdR`cAtHn)cSEV zrpu}1tJwQ3y!mSmH*uz*x0o|CS<^w%&KJzsj~DU0cLQUxk5B!hWE>aBkjJle8z~;s z-!A=($+}Jq_BTK5^B!`R>!MulZN)F=iXXeUd0w5lUsE5VP*H*oCy(;?S$p*TVvTxwAeWFB$jHyb0593)$zqalVlDX=GcCN1gU0 zlgU)I$LcXZ8Oyc2TZYTPu@-;7<4YYB-``Qa;IDcvydIA$%kHhJKV^m*-zxcvU4viy&Kr5GVM{IT>WRywKQ9;>SEiQD*NqplK-KK4YR`p0@JW)n_{TU3bt0 zim%;(m1=#v2}zTps=?fU5w^(*y)xT%1vtQH&}50ZF!9YxW=&7*W($2kgKyz1mUgfs zfV<*XVVIFnohW=|j+@Kfo!#liQR^x>2yQdrG;2o8WZR+XzU_nG=Ed2rK?ntA;K5B{ z>M8+*A4!Jm^Bg}aW?R?6;@QG@uQ8&oJ{hFixcfEnJ4QH?A4>P=q29oDGW;L;= z9-a0;g%c`C+Ai!UmK$NC*4#;Jp<1=TioL=t^YM)<<%u#hnnfSS`nq63QKGO1L8RzX z@MFDqs1z ztYmxDl@LU)5acvHk)~Z`RW7=aJ_nGD!mOSYD>5Odjn@TK#LY{jf?+piB5AM-CAoT_ z?S-*q7}wyLJzK>N%eMPuFgN)Q_otKP;aqy=D5f!7<=n(lNkYRXVpkB{TAYLYg{|(jtRqYmg$xH zjmq?B(RE4 zQx^~Pt}gxC2~l=K$$-sYy_r$CO(d=+b3H1MB*y_5g6WLaWTXn+TKQ|hNY^>Mp6k*$ zwkovomhu776vQATqT4blf~g;TY(MWCrf^^yfWJvSAB$p5l;jm@o#=!lqw+Lqfq>X= z$6~kxfm7`3q4zUEB;u4qa#BdJxO!;xGm)wwuisj{0y2x{R(IGMrsIzDY9LW>m!Y`= z04sx3IjnYvL<4JqxQ8f7qYd0s2Ig%`ytYPEMKI)s(LD}D@EY>x`VFtqvnADNBdeao zC96X+MxnwKmjpg{U&gP3HE}1=s!lv&D{6(g_lzyF3A`7Jn*&d_kL<;dAFx!UZ>hB8 z5A*%LsAn;VLp>3${0>M?PSQ)9s3}|h2e?TG4_F{}{Cs>#3Q*t$(CUc}M)I}8cPF6% z=+h(Kh^8)}gj(0}#e7O^FQ6`~fd1#8#!}LMuo3A0bN`o}PYsm!Y}sdOz$+Tegc=qT z8x`PH$7lvnhJp{kHWb22l;@7B7|4yL4UOOVM0MP_>P%S1Lnid)+k9{+3D+JFa#Pyf zhVc#&df87APl4W9X)F3pGS>@etfl=_E5tBcVoOfrD4hmVeTY-cj((pkn%n@EgN{0f zwb_^Rk0I#iZuHK!l*lN`ceJn(sI{$Fq6nN& zE<-=0_2WN}m+*ivmIOxB@#~Q-cZ>l136w{#TIJe478`KE7@=a{>SzPHsKLzYAyBQO zAtuuF$-JSDy_S@6GW0MOE~R)b;+0f%_NMrW(+V#c_d&U8Z9+ec4=HmOHw?gdjF(Lu zzra83M_BoO-1b3;9`%&DHfuUY)6YDV21P$C!Rc?mv&{lx#f8oc6?0?x zK08{WP65?#>(vPfA-c=MCY|%*1_<3D4NX zeVTi-JGl2uP_2@0F{G({pxQOXt_d{g_CV6b?jNpfUG9;8yle-^4KHRvZs-_2siata zt+d_T@U$&t*xaD22(fH(W1r$Mo?3dc%Tncm=C6{V9y{v&VT#^1L04vDrLM9qBoZ4@ z6DBN#m57hX7$C(=#$Y5$bJmwA$T8jKD8+6A!-IJwA{WOfs%s}yxUw^?MRZjF$n_KN z6`_bGXcmE#5e4Ym)aQJ)xg3Pg0@k`iGuHe?f(5LtuzSq=nS^5z>vqU0EuZ&75V%Z{ zYyhRLN^)$c6Ds{f7*FBpE;n5iglx5PkHfWrj3`x^j^t z7ntuV`g!9Xg#^3!x)l*}IW=(Tz3>Y5l4uGaB&lz{GDjm2D5S$CExLT`I1#n^lBH7Y zDgpMag@`iETKAI=p<5E#LTkwzVR@=yY|uBVI1HG|8h+d;G-qfuj}-ZR6fN>EfCCW z9~wRQoAPEa#aO?3h?x{YvV*d+NtPkf&4V0k4|L=uj!U{L+oLa(z#&iuhJr3-PjO3R z5s?=nn_5^*^Rawr>>Nr@K(jwkB#JK-=+HqwfdO<+P5byeim)wvqGlP-P|~Nse8=XF zz`?RYB|D6SwS}C+YQv+;}k6$-%D(@+t14BL@vM z2q%q?f6D-A5s$_WY3{^G0F131bbh|g!}#BKw=HQ7mx;Dzg4Z*bTLQSfo{ed{4}NZW zfrRm^Ca$rlE{Ue~uYv>R9{3smwATcdM_6+yWIO z*ZRH~uXE@#p$XTbCt5j7j2=86e{9>HIB6xDzV+vAo&B?KUiMP|ttOElepnl%|DPqL b{|{}U^kRn2wo}j7|0ATu<;8xA7zX}7|B6mN diff --git a/public/manifest.json b/public/manifest.json deleted file mode 100644 index a4a7e45..0000000 --- a/public/manifest.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "short_name": "RenPool", - "name": "RenPool", - "icons": [ - { - "src": "favicon.ico", - "sizes": "64x64 32x32 24x24 16x16", - "type": "image/x-icon" - }, - { - "src": "logo192.png", - "type": "image/png", - "sizes": "192x192" - }, - { - "src": "logo512.png", - "type": "image/png", - "sizes": "512x512" - } - ], - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/src/App.tsx b/src/App.tsx deleted file mode 100644 index 330ea2b..0000000 --- a/src/App.tsx +++ /dev/null @@ -1,91 +0,0 @@ -import React, { useContext, useState } from 'react' -import { Flex, Box } from 'rimble-ui' -import { RenPoolContext } from './context/RenPoolProvider' -import { useActiveWeb3React } from './hooks/useActiveWeb3React' -import { DepositScreen } from './screens/DepositScreen' -import { WithdrawScreen } from './screens/WithdrawScreen' -import { AdminScreen } from './screens/AdminScreen' -import { StatsSection } from './sections/StatsSection' -import { AddressesSection } from './sections/AddressesSection' -import { Header } from './components/Header' -import { Banners } from './components/Banners' -import { NavLink } from './components/NavLink' -// import { Instructions } from './components/Instructions' -import { Footer } from './components/Footer' - -enum Views { - DEPOSIT = 'DEPOSIT', - WITHDRAW = 'WITHDRAW', - ADMIN = 'ADMIN', -} - -export const App = (): JSX.Element => { - const { account } = useActiveWeb3React() - const { owner, nodeOperator } = useContext(RenPoolContext) - const [view, setView] = useState(Views.DEPOSIT) - - // TODO: display darknodeUrl once registered - - return ( - <> -
- -
- - - - - - { setView(Views.DEPOSIT) }} - /> - | - { setView(Views.WITHDRAW) }} - /> - {account != null && [owner, nodeOperator].includes(account) && ( - <> - | - { setView(Views.ADMIN) }} - /> - - )} - - - - - {view === Views.DEPOSIT && ( - - )} - - {view === Views.WITHDRAW && ( - - )} - - {view === Views.ADMIN && ( - - )} - - {[Views.DEPOSIT, Views.WITHDRAW].includes(view) && ( - <> - - - - - - {/* */} - - )} - -
-
- - ) -} diff --git a/src/app.css b/src/app.css new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/src/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/src/app.html b/src/app.html new file mode 100644 index 0000000..f8b5ad7 --- /dev/null +++ b/src/app.html @@ -0,0 +1,23 @@ + + + + + + + + + + + + %svelte.head% + + + +
%svelte.body%
+ + + \ No newline at end of file diff --git a/src/components/Footer/index.tsx b/src/components/Footer/index.tsx deleted file mode 100644 index 218dde6..0000000 --- a/src/components/Footer/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React from 'react' -import { Flex, Image } from 'rimble-ui' - -export const Footer = (): JSX.Element => ( - -
- github logo - - -) - - diff --git a/src/components/Header/index.tsx b/src/components/Header/index.tsx deleted file mode 100644 index b427bcc..0000000 --- a/src/components/Header/index.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import React from 'react' -import { Flex, Heading } from 'rimble-ui' -import { Wallet } from '../Wallet' - -export const Header = (): JSX.Element => ( -
- - RenPool - - -
-) - - diff --git a/src/components/Instructions/index.tsx b/src/components/Instructions/index.tsx deleted file mode 100644 index f3aea42..0000000 --- a/src/components/Instructions/index.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import React, { FC } from 'react' -import { Text, Link } from 'rimble-ui' -import { formatUnits } from '@ethersproject/units' -import { NETWORKS, FAUCETS, FAUCET_AMOUNT, BOND, DECIMALS } from '../../constants' -import { linkTheme } from '../../theme' -import { RenFaucet } from '../RenFaucet' - -const CHAIN_ID = process.env.REACT_APP_CHAIN_ID -const REN_FAUCET_LINK = 'https://forum.renproject.io/t/is-there-any-ren-faucet-on-kovan/904/3' - -export interface Props { - disabled?: boolean -} - -export const Instructions: FC = ({ - disabled = false, -}): JSX.Element => { - const networkName = NETWORKS[CHAIN_ID] - const faucet = FAUCETS[CHAIN_ID] - - return ( - <> - - 1. Connect your MetaMask to the {networkName} network. - - - 2. Head over {faucet} -  and get some test ETH to pay for transactions. - - {CHAIN_ID === '1337' ? ( - <> - - 3. Get {parseInt(formatUnits(FAUCET_AMOUNT, DECIMALS), 10)} REN tokens by pressing the button below. - To verify that the tokens are in your wallet, switch to the Assets tab in your MetaMask and press the Add Tokens button. - Paste the address of the RenToken contract above. - - - - ) : ( - - 3. Request some REN test tokens from the ren protocol. See {REN_FAUCET_LINK}. - To verify that the tokens are in your wallet, switch to the Assets tab in your MetaMask and press the Add Tokens button. - Paste the address of the RenToken contract above. - - )} - - 4. Enter the amount of REN you would like to deposit in the form above and hit the Approve button (this is only required for the first time). - After the transaction is approved, you will be able to Deposit the desired amount of REN until the {parseInt(formatUnits(BOND, DECIMALS), 10)} target is reached. - Once the pool is full, we lock deposits and withdraws and transfer the tokens to the REN protocol to spin up a new Darknode instance. - {/* You can find more info on how the Dark node is setup in the following link TODO. */} - - - 5. You can withdraw all the funds at any time as long as the pool hasn't been locked. - 6. Claim rewards TODO - - ) -} diff --git a/src/components/NavLink/index.tsx b/src/components/NavLink/index.tsx deleted file mode 100644 index 1c839ed..0000000 --- a/src/components/NavLink/index.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import React, { FC } from 'react' -import { Link } from 'rimble-ui' -import { linkTheme } from '../../theme' - -export interface Props { - disabled?: boolean - onClick?: () => void - label?: string -} - -export const NavLink: FC = ({ - disabled = false, - onClick = () => null, - label = '', -}): JSX.Element => ( - ) => { - e.preventDefault() - onClick() - }} - > - {label} - -) - diff --git a/src/components/RenFaucet/index.tsx b/src/components/RenFaucet/index.tsx deleted file mode 100644 index f46b8a6..0000000 --- a/src/components/RenFaucet/index.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React, { FC, useContext } from 'react' -import { Button } from 'rimble-ui' -import { RenTokenContext } from '../../context/RenTokenProvider' - -export interface Props { - disabled?: boolean -} - -export const RenFaucet: FC = ({ - disabled = false, -}): JSX.Element => { - const { renToken } = useContext(RenTokenContext) - - const handleClick = async () => { - try { - const tx = await renToken.callFaucet({ gasLimit: 60000 }) - await tx.wait() // wait for mining - } catch (e) { - alert(`Could not get from faucet ${JSON.stringify(e, null, 2)}`) - } - } - - return ( - - ) -} - diff --git a/src/components/Wallet/index.tsx b/src/components/Wallet/index.tsx deleted file mode 100644 index 6feea83..0000000 --- a/src/components/Wallet/index.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React, { useContext, useEffect } from 'react' -import { useWeb3React } from '@web3-react/core' -import { Web3Provider } from '@ethersproject/providers' -import { formatUnits } from '@ethersproject/units' -import { Flex, MetaMaskButton, Text, Pill, Box } from 'rimble-ui' -import { DECIMALS } from '../../constants' -import { injected } from '../../connectors' -import { RenTokenContext } from '../../context/RenTokenProvider' -import { getErrorMessage } from '../../utils/getErrorMessage' -import { shortAccount } from '../../utils/shortAccount' - -export const Wallet = (): JSX.Element => { - const { active, error, account, activate } = useWeb3React() // MetaMask / injected - const { accountBalance } = useContext(RenTokenContext) - - useEffect(() => { - if (!!error) { - console.error(getErrorMessage(error)) - } - }, [error]) - - if (!!error) { - SOMETHING WENT WRONG - } - - if (!active) { - return ( - { activate(injected) }} - > - Connect wallet - - ) - } - - return ( - - {parseFloat(formatUnits(accountBalance, DECIMALS))} REN - - {shortAccount(account)} - - ) -} diff --git a/src/constants.ts b/src/constants.ts deleted file mode 100644 index cce7bf4..0000000 --- a/src/constants.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { BigNumber } from '@ethersproject/bignumber' -import { deployments } from 'renpool-contracts' - -export const NETWORK_CONTEXT_NAME = 'NETWORK' - -export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' - -export const DECIMALS = 18 - -export const TENS = BigNumber.from(10).pow(DECIMALS) - -export const BOND = BigNumber.from(100_000).mul(TENS) - -export const MAX_UINT256 = BigNumber.from(2).pow(256).sub(1) - -export const NETWORKS = { - 1: 'Mainnet', - 3: 'Ropsten', - 4: 'Rinkeby', - 5: 'Goerli', - 42: 'Kovan', - 1337: 'Localhost 8545', -} - -export const SUPPORTED_CHAIN_IDS = Object.keys(NETWORKS).map(key => parseInt(key, 10)) - -export enum ContractNames { - RenPool = 'RenPool', - RenToken = 'RenToken', - // ^ Implementation of the Ren Token used when network === '1337'. - // In live networks we use the IERC20 interface. - // See /context/RenTokenProvider.tsx -} - -export const FAUCETS = { - 1: 'Mainnet', - 3: 'Ropsten', - 4: 'https://faucet.rinkeby.io', - 5: 'Goerli', - 42: 'https://support.mycrypto.com/how-to/getting-started/where-to-get-testnet-ether', - 1337: 'https://faucet.rinkeby.io', -} - -export const FAUCET_AMOUNT = BigNumber.from(1000).mul(TENS) - -export const ETHERSCAN = { - 1: 'https://etherscan.io/address/', - 3: 'https://ropsten.etherscan.io/address/', - 4: 'https://rinkeby.etherscan.io/address/', - 5: 'https://goerli.etherscan.io/address/', - 42: 'https://kovan.etherscan.io/address/', - 1337: 'https://etherscan.io/address/', -} - -// Smart contract addresses for live networks only -export const CONTRACT_ADDRESSES = { - 1: { - REN_TOKEN: deployments.mainnet.renTokenAddr, - DARKNODE_REGISTRY: deployments.mainnet.darknodeRegistryAddr, - REN_POOL: '0x0000000000000000000000000000000000000000', - }, - 42: { - REN_TOKEN: deployments.kovan.renTokenAddr, - DARKNODE_REGISTRY: deployments.kovan.darknodeRegistryAddr, - REN_POOL: '0xf1e98770ab8ed1364371B8c7DBdA56633F7cB6a9', - }, - 1337: { - REN_TOKEN: '0x0000000000000000000000000000000000000000', - DARKNODE_REGISTRY: '0x0000000000000000000000000000000000000000', - REN_POOL: '0x0000000000000000000000000000000000000000', - }, -} - -export const DEFAULT_REQUEST_TIMEOUT = 60 * 1000 diff --git a/src/context/RenTokenProvider.tsx b/src/context/RenTokenProvider.tsx index 9a3b25f..66007ae 100644 --- a/src/context/RenTokenProvider.tsx +++ b/src/context/RenTokenProvider.tsx @@ -1,7 +1,7 @@ import React, { FC, useState, useEffect, createContext } from 'react' import { Contract } from '@ethersproject/contracts' import { BigNumber } from '@ethersproject/bignumber' -import { ContractNames, CONTRACT_ADDRESSES } from '../constants' +import { ContractNames, CONTRACT_ADDRESSES } from '../lib/config' import { IERC20Standard as artifact } from 'renpool-contracts' // import map from '../artifacts/deployments/map.json' import { useActiveWeb3React } from '../hooks/useActiveWeb3React' diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 0000000..947cc33 --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1,10 @@ +/// + +interface ImportMetaEnv { + readonly VITE_CHAIN_ID: keyof typeof import('$lib/config').NETWORKS; + readonly INFURA_PROJECT_ID: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv +} diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 0000000..63908c6 --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1 @@ +/// diff --git a/src/hooks/useActiveWeb3React.ts b/src/hooks/useActiveWeb3React.ts index 28d7ca5..70992de 100644 --- a/src/hooks/useActiveWeb3React.ts +++ b/src/hooks/useActiveWeb3React.ts @@ -1,7 +1,7 @@ import { useWeb3React } from '@web3-react/core' import { Web3ReactContextInterface } from '@web3-react/core/dist/types' import { Web3Provider } from '@ethersproject/providers' -import { NETWORK_CONTEXT_NAME } from '../constants' +import { NETWORK_CONTEXT_NAME } from '../lib/config' export const useActiveWeb3React = (): Web3ReactContextInterface => { const context = useWeb3React() diff --git a/src/hooks/useContract.ts b/src/hooks/useContract.ts index 4fab1b1..998c649 100644 --- a/src/hooks/useContract.ts +++ b/src/hooks/useContract.ts @@ -1,6 +1,6 @@ import { useState, useEffect } from 'react' import { Contract, ContractInterface } from '@ethersproject/contracts' -import { injected } from '../connectors' +import { injected } from '../lib/connectors' import { useActiveWeb3React } from './useActiveWeb3React' const CHAIN_ID = process.env.REACT_APP_CHAIN_ID diff --git a/src/hooks/useEagerConnect.ts b/src/hooks/useEagerConnect.ts index 39e4f68..3769a42 100644 --- a/src/hooks/useEagerConnect.ts +++ b/src/hooks/useEagerConnect.ts @@ -1,7 +1,7 @@ import { useWeb3React } from '@web3-react/core' import { useEffect, useState } from 'react' import { isMobile } from 'react-device-detect' -import { injected } from '../connectors' +import { injected } from '../lib/connectors' export const useEagerConnect = (): boolean => { const { activate, active } = useWeb3React() // specifically using useWeb3React because of what this hook does diff --git a/src/hooks/useInactiveListener.ts b/src/hooks/useInactiveListener.ts index f2c405b..4608fbb 100644 --- a/src/hooks/useInactiveListener.ts +++ b/src/hooks/useInactiveListener.ts @@ -1,6 +1,6 @@ import { useWeb3React } from '@web3-react/core' import { useEffect } from 'react' -import { injected } from '../connectors' +import { injected } from '../lib/connectors' /** * Use for network and injected - logs user in diff --git a/src/index.css b/src/index.css deleted file mode 100644 index 866a23e..0000000 --- a/src/index.css +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Building on the RNWeb reset: - * https://github.com/necolas/react-native-web/blob/master/packages/react-native-web/src/exports/StyleSheet/initialRules.js - */ -html, -body, -#root { - width: 100%; - /* To smooth any scrolling behavior */ - -webkit-overflow-scrolling: touch; - margin: 0px; - padding: 0px; - /* Custom rules */ - max-width: 600px; - margin: 0 auto; - font-family: Rajdhani; - font-weight: 400; -} - -html { - scroll-behavior: smooth; - /* Prevent text size change on orientation change https://gist.github.com/tfausak/2222823#file-ios-8-web-app-html-L138 */ - -webkit-text-size-adjust: 100%; - height: 100%; - background-color: rgba(0,0,0,.03); -} - -.App-header { - position: fixed; - top: 0; - left: 0; - right: 0; - z-index: 100; - background-color: #fff; - height: 78px; -} - -.App { - max-width: 600px; - width: 100%; - margin: 0 auto; - margin-top: 78px; - padding: 10px; - background-color: white; - border-left: 1px solid rgb(226, 219, 232); - border-right: 1px solid rgb(226, 219, 232); -} diff --git a/src/index.tsx b/src/index.tsx deleted file mode 100644 index b3aa13f..0000000 --- a/src/index.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react' -import ReactDOM from 'react-dom' -import { Web3ReactProvider } from '@web3-react/core' -import { Web3Provider } from '@ethersproject/providers' -import { ThemeProvider } from 'styled-components' -import { BaseStyles } from 'rimble-ui' -import { theme } from './theme' -import { Web3ProviderNetwork } from './context/Web3ProviderNetwork' -import { DarknodeRegistryProvider } from './context/DarknodeRegistryProvider' -import { RenTokenProvider } from './context/RenTokenProvider' -import { RenPoolProvider } from './context/RenPoolProvider' -import { Web3ReactManager } from './components/Web3ReactManager' -import './index.css' -import { App } from './App' -import { reportWebVitals } from './reportWebVitals' - -const getLibrary = (provider: any): Web3Provider => { - const library = new Web3Provider(provider) - library.pollingInterval = 12_000 - return library -} - -if (typeof window !== 'undefined' && !!window.ethereum) { - window.ethereum.autoRefreshOnNetworkChange = false -} - -ReactDOM.render( - - - - - - - - - - - - - - - - - - - , - document.getElementById('root') -) - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals() diff --git a/src/layouts/ScreenLayout.tsx b/src/layouts/ScreenLayout.tsx deleted file mode 100644 index ee8770b..0000000 --- a/src/layouts/ScreenLayout.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import React, { FC } from 'react' -import { Box, Heading } from 'rimble-ui' - -export interface Props { - title: string -} - -export const ScreenLayout: FC = ({ title, children }): JSX.Element => ( - - {title} - - {children} - - -) diff --git a/src/layouts/SectionLayout.tsx b/src/layouts/SectionLayout.tsx deleted file mode 100644 index 2a41442..0000000 --- a/src/layouts/SectionLayout.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import React, { FC } from 'react' -import { Box, Heading } from 'rimble-ui' - -export interface Props { - title: string -} - -export const SectionLayout: FC = ({ title, children }): JSX.Element => ( - - - {title} - - - {children} - - -) diff --git a/src/lib/Addresses.svelte b/src/lib/Addresses.svelte new file mode 100644 index 0000000..b0536f2 --- /dev/null +++ b/src/lib/Addresses.svelte @@ -0,0 +1,67 @@ + + +

Addresses

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Contract or Account
Address
RenToken
RenPool
Owner
Node Operator
+ + diff --git a/src/lib/EtherscanLink.svelte b/src/lib/EtherscanLink.svelte new file mode 100644 index 0000000..643964c --- /dev/null +++ b/src/lib/EtherscanLink.svelte @@ -0,0 +1,9 @@ + + + + {address} + diff --git a/src/lib/Footer.svelte b/src/lib/Footer.svelte new file mode 100644 index 0000000..e16661a --- /dev/null +++ b/src/lib/Footer.svelte @@ -0,0 +1,22 @@ + + + diff --git a/src/lib/Header.svelte b/src/lib/Header.svelte new file mode 100644 index 0000000..5704b80 --- /dev/null +++ b/src/lib/Header.svelte @@ -0,0 +1,33 @@ + + +
+ +
+ + diff --git a/src/lib/Logo.svelte b/src/lib/Logo.svelte new file mode 100644 index 0000000..923194d --- /dev/null +++ b/src/lib/Logo.svelte @@ -0,0 +1,3 @@ + + + diff --git a/src/lib/Stats.svelte b/src/lib/Stats.svelte new file mode 100644 index 0000000..588bdaf --- /dev/null +++ b/src/lib/Stats.svelte @@ -0,0 +1,33 @@ + + +

Stats

+ +
+

+ Total Pooled + {totalPooled} +

+

+ Pool is locked + {isLocked} +

+

+ You pool balance + {userBalance} +

+
+ + diff --git a/src/lib/Wallet.svelte b/src/lib/Wallet.svelte new file mode 100644 index 0000000..ae5d9fb --- /dev/null +++ b/src/lib/Wallet.svelte @@ -0,0 +1,76 @@ + + +{#if hasMetaMask === null} +
+{:else if !hasMetaMask} + Install MetaMask +{:else if selectedAddress === null} + +{:else} + {balance} REN + + + + {shortAccount(selectedAddress)} + +{/if} + + diff --git a/src/lib/config.ts b/src/lib/config.ts new file mode 100644 index 0000000..59d667e --- /dev/null +++ b/src/lib/config.ts @@ -0,0 +1,78 @@ +import { BigNumber } from '@ethersproject/bignumber' +import { deployments } from 'renpool-contracts' + +export const NETWORK_CONTEXT_NAME = 'NETWORK' + +export const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000' + +export const DECIMALS = 18 + +export const TENS = BigNumber.from(10).pow(DECIMALS) + +export const BOND = BigNumber.from(100_000).mul(TENS) + +export const MAX_UINT256 = BigNumber.from(2).pow(256).sub(1) + +export const NETWORKS = { + 1: { + name: 'Mainnet', + faucet: 'Mainnet', + etherscan: 'https://etherscan.io/address/', + contracts: { + REN_TOKEN: deployments.mainnet.renTokenAddr, + DARKNODE_REGISTRY: deployments.mainnet.darknodeRegistryAddr, + REN_POOL: '0x0000000000000000000000000000000000000000', + }, + }, + // 3: { + // name: 'Ropsten', + // faucet: 'Ropsten', + // etherscan: 'https://ropsten.etherscan.io/address/', + // }, + // 4: { + // name: 'Rinkeby', + // faucet: 'https://faucet.rinkeby.io', + // etherscan: 'https://rinkeby.etherscan.io/address/', + // }, + // 5: { + // name: 'Goerli', + // faucet: 'Goerli', + // etherscan: 'https://goerli.etherscan.io/address/', + // }, + 42: { + name: 'Kovan', + faucet: 'https://support.mycrypto.com/how-to/getting-started/where-to-get-testnet-ether', + etherscan: 'https://kovan.etherscan.io/address/', + contracts: { + REN_TOKEN: deployments.kovan.renTokenAddr, + DARKNODE_REGISTRY: deployments.kovan.darknodeRegistryAddr, + REN_POOL: '0xf1e98770ab8ed1364371B8c7DBdA56633F7cB6a9', + }, + }, + 1337: { + name: 'Localhost 8545', + faucet: 'https://faucet.rinkeby.io', + etherscan: 'https://etherscan.io/address/', + contracts: { + REN_TOKEN: '0x0000000000000000000000000000000000000000', + DARKNODE_REGISTRY: '0x0000000000000000000000000000000000000000', + REN_POOL: '0x0000000000000000000000000000000000000000', + }, + }, +} + +export const SUPPORTED_CHAIN_IDS = Object.keys(NETWORKS).map(key => parseInt(key, 10)) + +export const NETWORK = NETWORKS[import.meta.env.VITE_CHAIN_ID]; + +export enum ContractNames { + RenPool = 'RenPool', + RenToken = 'RenToken', + // ^ Implementation of the Ren Token used when network === '1337'. + // In live networks we use the IERC20 interface. + // See /context/RenTokenProvider.tsx +} + +export const FAUCET_AMOUNT = BigNumber.from(1000).mul(TENS) + +export const DEFAULT_REQUEST_TIMEOUT = 60 * 1000 diff --git a/src/connectors.ts b/src/lib/connectors.ts similarity index 96% rename from src/connectors.ts rename to src/lib/connectors.ts index 4867882..cba2929 100644 --- a/src/connectors.ts +++ b/src/lib/connectors.ts @@ -1,6 +1,6 @@ import { InjectedConnector } from '@web3-react/injected-connector' import { NetworkConnector } from '@web3-react/network-connector' -import { SUPPORTED_CHAIN_IDS } from './constants' +import { SUPPORTED_CHAIN_IDS } from './config' const INFURA_PROJECT_ID = process.env.REACT_APP_INFURA_PROJECT_ID const CHAIN_ID = process.env.REACT_APP_CHAIN_ID diff --git a/src/lib/howto/Howto.svelte b/src/lib/howto/Howto.svelte new file mode 100644 index 0000000..f3bfee3 --- /dev/null +++ b/src/lib/howto/Howto.svelte @@ -0,0 +1,26 @@ + + +

{title}

+
+ +
+
+ no steps were provided +
+
+ + diff --git a/src/lib/howto/Step.svelte b/src/lib/howto/Step.svelte new file mode 100644 index 0000000..5225bb6 --- /dev/null +++ b/src/lib/howto/Step.svelte @@ -0,0 +1,73 @@ + + +
+
+
+
+
{index}
+
+
+ + + +
+
+

{title}

+

+ + no description for this step was provided + +

+
+
+
+ + diff --git a/src/utils/shortAccount.ts b/src/lib/shortAccount.ts similarity index 100% rename from src/utils/shortAccount.ts rename to src/lib/shortAccount.ts diff --git a/src/logo.svg b/src/logo.svg deleted file mode 100644 index 9dfc1c0..0000000 --- a/src/logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/react-app-env.d.ts b/src/react-app-env.d.ts deleted file mode 100644 index 6431bc5..0000000 --- a/src/react-app-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/src/reportWebVitals.ts b/src/reportWebVitals.ts deleted file mode 100644 index d90fcb0..0000000 --- a/src/reportWebVitals.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ReportHandler } from 'web-vitals' - -export const reportWebVitals = (onPerfEntry?: ReportHandler) => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry) - getFID(onPerfEntry) - getFCP(onPerfEntry) - getLCP(onPerfEntry) - getTTFB(onPerfEntry) - }) - } -} diff --git a/src/routes/0x[address]/deposit.svelte b/src/routes/0x[address]/deposit.svelte new file mode 100644 index 0000000..046b504 --- /dev/null +++ b/src/routes/0x[address]/deposit.svelte @@ -0,0 +1,23 @@ + + + + + + Deposit | RenPool + + +

Deposit

+ +
Using address {address}
diff --git a/src/routes/0x[address]/withdraw.svelte b/src/routes/0x[address]/withdraw.svelte new file mode 100644 index 0000000..fad6d37 --- /dev/null +++ b/src/routes/0x[address]/withdraw.svelte @@ -0,0 +1,5 @@ + + How To | RenPool + + +Withdraw diff --git a/src/routes/__layout.svelte b/src/routes/__layout.svelte new file mode 100644 index 0000000..9d838b8 --- /dev/null +++ b/src/routes/__layout.svelte @@ -0,0 +1,48 @@ + + + + +
+ +
+ +
+ + +
+ + +
+
+ +