├── .github └── preview.png ├── LICENSE ├── README.md ├── client ├── .env ├── .gitignore ├── images │ ├── animated.svg │ ├── hello.svg │ └── logo.png ├── index.html ├── package-lock.json ├── package.json ├── postcss.config.js ├── src │ ├── App.css │ ├── App.jsx │ ├── components │ │ ├── Footer.jsx │ │ ├── Loader.jsx │ │ ├── Navbar.jsx │ │ ├── Services.jsx │ │ ├── Transactions.jsx │ │ ├── Welcome.jsx │ │ └── index.js │ ├── context │ │ └── TransactionContext.jsx │ ├── favicon.svg │ ├── hooks │ │ └── useFetch.jsx │ ├── index.css │ ├── logo.svg │ ├── main.jsx │ └── utils │ │ ├── Transactions.json │ │ ├── constants.js │ │ ├── dummyData.js │ │ └── shortenAddress.js ├── tailwind.config.js ├── vite.config.js ├── yarn-error.log └── yarn.lock ├── package.json └── smart_contract ├── .gitignore ├── README.md ├── contracts └── Transactions.sol ├── hardhat.config.js ├── package-lock.json ├── package.json ├── scripts └── deploy.js └── test └── sample-test.js /.github/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VictorRaynor/web3.0-project/c00c56c5e156c4c70f8491505b4d42e0229755ff/.github/preview.png -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Joao Pedro Vieira 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Gpt3 3 |

4 | 5 |

6 | GitHub language count 7 | 8 | Repository size 9 | 10 | 11 | 12 | GitHub last commit 13 | 14 | 15 | License 16 | 17 | 18 | 19 | 20 | Feito por João Pedro 21 | 22 | 23 | 24 | 25 |

26 | 27 | 28 |

29 | Gpt3 30 |

31 | 32 | 33 |
34 | 35 | ## 🧪 Tecnologias e recursos utilizados no projeto 36 | 37 | Esse projeto foi desenvolvido com as seguintes tecnologias e recursos: 38 | 39 | - [React](https://reactjs.org) 40 | - [Vite](https://vitejs.dev/) 41 | - [Tailwind](https://tailwindcss.com/) 42 | - [Solidity](https://docs.soliditylang.org/) 43 | - [Metamask](https://metamask.io/) 44 | - [Alchemy](https://www.alchemy.com/) 45 | - [Giphy](https://www.alchemy.com/) 46 | 47 | 48 | ## 🚀 Como executar 49 | 50 | Clone o projeto e acesse a pasta do mesmo. 51 | 52 | ```bash 53 | $ git clone https://github.com/DevJPVR/web3.0.git 54 | ``` 55 | 56 | Para iniciá-lo, siga os passos abaixo: 57 | ```bash 58 | # Instalar as dependências 59 | $ yarn 60 | # Iniciar o projeto 61 | $ yarn start 62 | ``` 63 | O app estará disponível no seu browser pelo endereço http://localhost:3000. 64 | 65 | 66 | ## 💻 Projeto 67 | 68 | Ao conectar a sua wallet com a aplicação, é possivel visualizar as ultimas transações efetuadas, e enviar valores através da rede Ethereum na blockchain. Ao enviar os valores, é possivel escrever uma palavra chave no campo Keyword (GIF), através da API da Giphy a palavra chave é associada a um gif semelhante , e entao é exebida no cartão de transações. é possivel tambem enviar uma mensagem com a descrição do envio. 69 | 70 | - [Link para testar a APP](https://dazzling-mcclintock-61dab6.netlify.app/) 71 | 72 | 73 | 74 | ## 📝 License 75 | 76 | Esse projeto está sob a licença MIT. Veja o arquivo [LICENSE](https://github.com/DevJPVR/web3.0/blob/main/LICENSE) para mais detalhes. 77 | 78 | --- 79 | 80 | Feito com 💜 by JoãoPedro 81 | -------------------------------------------------------------------------------- /client/.env: -------------------------------------------------------------------------------- 1 | VITE_GIPHY_API=gVyspcqxGKA8KIgdFDUk25VZ4bGmfm9P 2 | -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local -------------------------------------------------------------------------------- /client/images/animated.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/images/hello.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VictorRaynor/web3.0-project/c00c56c5e156c4c70f8491505b4d42e0229755ff/client/images/logo.png -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Krypto Transfer 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /client/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "krypto", 3 | "version": "0.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.16.7", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", 10 | "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.16.7" 14 | } 15 | }, 16 | "@babel/compat-data": { 17 | "version": "7.16.8", 18 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", 19 | "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", 20 | "dev": true 21 | }, 22 | "@babel/core": { 23 | "version": "7.16.7", 24 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz", 25 | "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/code-frame": "^7.16.7", 29 | "@babel/generator": "^7.16.7", 30 | "@babel/helper-compilation-targets": "^7.16.7", 31 | "@babel/helper-module-transforms": "^7.16.7", 32 | "@babel/helpers": "^7.16.7", 33 | "@babel/parser": "^7.16.7", 34 | "@babel/template": "^7.16.7", 35 | "@babel/traverse": "^7.16.7", 36 | "@babel/types": "^7.16.7", 37 | "convert-source-map": "^1.7.0", 38 | "debug": "^4.1.0", 39 | "gensync": "^1.0.0-beta.2", 40 | "json5": "^2.1.2", 41 | "semver": "^6.3.0", 42 | "source-map": "^0.5.0" 43 | } 44 | }, 45 | "@babel/generator": { 46 | "version": "7.16.8", 47 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", 48 | "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", 49 | "dev": true, 50 | "requires": { 51 | "@babel/types": "^7.16.8", 52 | "jsesc": "^2.5.1", 53 | "source-map": "^0.5.0" 54 | } 55 | }, 56 | "@babel/helper-annotate-as-pure": { 57 | "version": "7.16.7", 58 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", 59 | "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", 60 | "dev": true, 61 | "requires": { 62 | "@babel/types": "^7.16.7" 63 | } 64 | }, 65 | "@babel/helper-compilation-targets": { 66 | "version": "7.16.7", 67 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", 68 | "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", 69 | "dev": true, 70 | "requires": { 71 | "@babel/compat-data": "^7.16.4", 72 | "@babel/helper-validator-option": "^7.16.7", 73 | "browserslist": "^4.17.5", 74 | "semver": "^6.3.0" 75 | } 76 | }, 77 | "@babel/helper-environment-visitor": { 78 | "version": "7.16.7", 79 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", 80 | "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", 81 | "dev": true, 82 | "requires": { 83 | "@babel/types": "^7.16.7" 84 | } 85 | }, 86 | "@babel/helper-function-name": { 87 | "version": "7.16.7", 88 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", 89 | "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", 90 | "dev": true, 91 | "requires": { 92 | "@babel/helper-get-function-arity": "^7.16.7", 93 | "@babel/template": "^7.16.7", 94 | "@babel/types": "^7.16.7" 95 | } 96 | }, 97 | "@babel/helper-get-function-arity": { 98 | "version": "7.16.7", 99 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", 100 | "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", 101 | "dev": true, 102 | "requires": { 103 | "@babel/types": "^7.16.7" 104 | } 105 | }, 106 | "@babel/helper-hoist-variables": { 107 | "version": "7.16.7", 108 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", 109 | "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", 110 | "dev": true, 111 | "requires": { 112 | "@babel/types": "^7.16.7" 113 | } 114 | }, 115 | "@babel/helper-module-imports": { 116 | "version": "7.16.7", 117 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", 118 | "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", 119 | "dev": true, 120 | "requires": { 121 | "@babel/types": "^7.16.7" 122 | } 123 | }, 124 | "@babel/helper-module-transforms": { 125 | "version": "7.16.7", 126 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", 127 | "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", 128 | "dev": true, 129 | "requires": { 130 | "@babel/helper-environment-visitor": "^7.16.7", 131 | "@babel/helper-module-imports": "^7.16.7", 132 | "@babel/helper-simple-access": "^7.16.7", 133 | "@babel/helper-split-export-declaration": "^7.16.7", 134 | "@babel/helper-validator-identifier": "^7.16.7", 135 | "@babel/template": "^7.16.7", 136 | "@babel/traverse": "^7.16.7", 137 | "@babel/types": "^7.16.7" 138 | } 139 | }, 140 | "@babel/helper-plugin-utils": { 141 | "version": "7.16.7", 142 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", 143 | "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", 144 | "dev": true 145 | }, 146 | "@babel/helper-simple-access": { 147 | "version": "7.16.7", 148 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", 149 | "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", 150 | "dev": true, 151 | "requires": { 152 | "@babel/types": "^7.16.7" 153 | } 154 | }, 155 | "@babel/helper-split-export-declaration": { 156 | "version": "7.16.7", 157 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", 158 | "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", 159 | "dev": true, 160 | "requires": { 161 | "@babel/types": "^7.16.7" 162 | } 163 | }, 164 | "@babel/helper-validator-identifier": { 165 | "version": "7.16.7", 166 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", 167 | "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", 168 | "dev": true 169 | }, 170 | "@babel/helper-validator-option": { 171 | "version": "7.16.7", 172 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", 173 | "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", 174 | "dev": true 175 | }, 176 | "@babel/helpers": { 177 | "version": "7.16.7", 178 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", 179 | "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", 180 | "dev": true, 181 | "requires": { 182 | "@babel/template": "^7.16.7", 183 | "@babel/traverse": "^7.16.7", 184 | "@babel/types": "^7.16.7" 185 | } 186 | }, 187 | "@babel/highlight": { 188 | "version": "7.16.7", 189 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", 190 | "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", 191 | "dev": true, 192 | "requires": { 193 | "@babel/helper-validator-identifier": "^7.16.7", 194 | "chalk": "^2.0.0", 195 | "js-tokens": "^4.0.0" 196 | } 197 | }, 198 | "@babel/parser": { 199 | "version": "7.16.8", 200 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", 201 | "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", 202 | "dev": true 203 | }, 204 | "@babel/plugin-syntax-jsx": { 205 | "version": "7.16.7", 206 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", 207 | "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", 208 | "dev": true, 209 | "requires": { 210 | "@babel/helper-plugin-utils": "^7.16.7" 211 | } 212 | }, 213 | "@babel/plugin-transform-react-jsx": { 214 | "version": "7.16.7", 215 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.7.tgz", 216 | "integrity": "sha512-8D16ye66fxiE8m890w0BpPpngG9o9OVBBy0gH2E+2AR7qMR2ZpTYJEqLxAsoroenMId0p/wMW+Blc0meDgu0Ag==", 217 | "dev": true, 218 | "requires": { 219 | "@babel/helper-annotate-as-pure": "^7.16.7", 220 | "@babel/helper-module-imports": "^7.16.7", 221 | "@babel/helper-plugin-utils": "^7.16.7", 222 | "@babel/plugin-syntax-jsx": "^7.16.7", 223 | "@babel/types": "^7.16.7" 224 | } 225 | }, 226 | "@babel/plugin-transform-react-jsx-development": { 227 | "version": "7.16.7", 228 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", 229 | "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", 230 | "dev": true, 231 | "requires": { 232 | "@babel/plugin-transform-react-jsx": "^7.16.7" 233 | } 234 | }, 235 | "@babel/plugin-transform-react-jsx-self": { 236 | "version": "7.16.7", 237 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.16.7.tgz", 238 | "integrity": "sha512-oe5VuWs7J9ilH3BCCApGoYjHoSO48vkjX2CbA5bFVhIuO2HKxA3vyF7rleA4o6/4rTDbk6r8hBW7Ul8E+UZrpA==", 239 | "dev": true, 240 | "requires": { 241 | "@babel/helper-plugin-utils": "^7.16.7" 242 | } 243 | }, 244 | "@babel/plugin-transform-react-jsx-source": { 245 | "version": "7.16.7", 246 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.16.7.tgz", 247 | "integrity": "sha512-rONFiQz9vgbsnaMtQlZCjIRwhJvlrPET8TabIUK2hzlXw9B9s2Ieaxte1SCOOXMbWRHodbKixNf3BLcWVOQ8Bw==", 248 | "dev": true, 249 | "requires": { 250 | "@babel/helper-plugin-utils": "^7.16.7" 251 | } 252 | }, 253 | "@babel/template": { 254 | "version": "7.16.7", 255 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", 256 | "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", 257 | "dev": true, 258 | "requires": { 259 | "@babel/code-frame": "^7.16.7", 260 | "@babel/parser": "^7.16.7", 261 | "@babel/types": "^7.16.7" 262 | } 263 | }, 264 | "@babel/traverse": { 265 | "version": "7.16.8", 266 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", 267 | "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", 268 | "dev": true, 269 | "requires": { 270 | "@babel/code-frame": "^7.16.7", 271 | "@babel/generator": "^7.16.8", 272 | "@babel/helper-environment-visitor": "^7.16.7", 273 | "@babel/helper-function-name": "^7.16.7", 274 | "@babel/helper-hoist-variables": "^7.16.7", 275 | "@babel/helper-split-export-declaration": "^7.16.7", 276 | "@babel/parser": "^7.16.8", 277 | "@babel/types": "^7.16.8", 278 | "debug": "^4.1.0", 279 | "globals": "^11.1.0" 280 | } 281 | }, 282 | "@babel/types": { 283 | "version": "7.16.8", 284 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", 285 | "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", 286 | "dev": true, 287 | "requires": { 288 | "@babel/helper-validator-identifier": "^7.16.7", 289 | "to-fast-properties": "^2.0.0" 290 | } 291 | }, 292 | "@ethersproject/abi": { 293 | "version": "5.5.0", 294 | "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.5.0.tgz", 295 | "integrity": "sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w==", 296 | "requires": { 297 | "@ethersproject/address": "^5.5.0", 298 | "@ethersproject/bignumber": "^5.5.0", 299 | "@ethersproject/bytes": "^5.5.0", 300 | "@ethersproject/constants": "^5.5.0", 301 | "@ethersproject/hash": "^5.5.0", 302 | "@ethersproject/keccak256": "^5.5.0", 303 | "@ethersproject/logger": "^5.5.0", 304 | "@ethersproject/properties": "^5.5.0", 305 | "@ethersproject/strings": "^5.5.0" 306 | } 307 | }, 308 | "@ethersproject/abstract-provider": { 309 | "version": "5.5.1", 310 | "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz", 311 | "integrity": "sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg==", 312 | "requires": { 313 | "@ethersproject/bignumber": "^5.5.0", 314 | "@ethersproject/bytes": "^5.5.0", 315 | "@ethersproject/logger": "^5.5.0", 316 | "@ethersproject/networks": "^5.5.0", 317 | "@ethersproject/properties": "^5.5.0", 318 | "@ethersproject/transactions": "^5.5.0", 319 | "@ethersproject/web": "^5.5.0" 320 | } 321 | }, 322 | "@ethersproject/abstract-signer": { 323 | "version": "5.5.0", 324 | "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz", 325 | "integrity": "sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA==", 326 | "requires": { 327 | "@ethersproject/abstract-provider": "^5.5.0", 328 | "@ethersproject/bignumber": "^5.5.0", 329 | "@ethersproject/bytes": "^5.5.0", 330 | "@ethersproject/logger": "^5.5.0", 331 | "@ethersproject/properties": "^5.5.0" 332 | } 333 | }, 334 | "@ethersproject/address": { 335 | "version": "5.5.0", 336 | "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.5.0.tgz", 337 | "integrity": "sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw==", 338 | "requires": { 339 | "@ethersproject/bignumber": "^5.5.0", 340 | "@ethersproject/bytes": "^5.5.0", 341 | "@ethersproject/keccak256": "^5.5.0", 342 | "@ethersproject/logger": "^5.5.0", 343 | "@ethersproject/rlp": "^5.5.0" 344 | } 345 | }, 346 | "@ethersproject/base64": { 347 | "version": "5.5.0", 348 | "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.5.0.tgz", 349 | "integrity": "sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA==", 350 | "requires": { 351 | "@ethersproject/bytes": "^5.5.0" 352 | } 353 | }, 354 | "@ethersproject/basex": { 355 | "version": "5.5.0", 356 | "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.5.0.tgz", 357 | "integrity": "sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ==", 358 | "requires": { 359 | "@ethersproject/bytes": "^5.5.0", 360 | "@ethersproject/properties": "^5.5.0" 361 | } 362 | }, 363 | "@ethersproject/bignumber": { 364 | "version": "5.5.0", 365 | "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.5.0.tgz", 366 | "integrity": "sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg==", 367 | "requires": { 368 | "@ethersproject/bytes": "^5.5.0", 369 | "@ethersproject/logger": "^5.5.0", 370 | "bn.js": "^4.11.9" 371 | } 372 | }, 373 | "@ethersproject/bytes": { 374 | "version": "5.5.0", 375 | "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.5.0.tgz", 376 | "integrity": "sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==", 377 | "requires": { 378 | "@ethersproject/logger": "^5.5.0" 379 | } 380 | }, 381 | "@ethersproject/constants": { 382 | "version": "5.5.0", 383 | "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.5.0.tgz", 384 | "integrity": "sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ==", 385 | "requires": { 386 | "@ethersproject/bignumber": "^5.5.0" 387 | } 388 | }, 389 | "@ethersproject/contracts": { 390 | "version": "5.5.0", 391 | "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.5.0.tgz", 392 | "integrity": "sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg==", 393 | "requires": { 394 | "@ethersproject/abi": "^5.5.0", 395 | "@ethersproject/abstract-provider": "^5.5.0", 396 | "@ethersproject/abstract-signer": "^5.5.0", 397 | "@ethersproject/address": "^5.5.0", 398 | "@ethersproject/bignumber": "^5.5.0", 399 | "@ethersproject/bytes": "^5.5.0", 400 | "@ethersproject/constants": "^5.5.0", 401 | "@ethersproject/logger": "^5.5.0", 402 | "@ethersproject/properties": "^5.5.0", 403 | "@ethersproject/transactions": "^5.5.0" 404 | } 405 | }, 406 | "@ethersproject/hash": { 407 | "version": "5.5.0", 408 | "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.5.0.tgz", 409 | "integrity": "sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg==", 410 | "requires": { 411 | "@ethersproject/abstract-signer": "^5.5.0", 412 | "@ethersproject/address": "^5.5.0", 413 | "@ethersproject/bignumber": "^5.5.0", 414 | "@ethersproject/bytes": "^5.5.0", 415 | "@ethersproject/keccak256": "^5.5.0", 416 | "@ethersproject/logger": "^5.5.0", 417 | "@ethersproject/properties": "^5.5.0", 418 | "@ethersproject/strings": "^5.5.0" 419 | } 420 | }, 421 | "@ethersproject/hdnode": { 422 | "version": "5.5.0", 423 | "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.5.0.tgz", 424 | "integrity": "sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q==", 425 | "requires": { 426 | "@ethersproject/abstract-signer": "^5.5.0", 427 | "@ethersproject/basex": "^5.5.0", 428 | "@ethersproject/bignumber": "^5.5.0", 429 | "@ethersproject/bytes": "^5.5.0", 430 | "@ethersproject/logger": "^5.5.0", 431 | "@ethersproject/pbkdf2": "^5.5.0", 432 | "@ethersproject/properties": "^5.5.0", 433 | "@ethersproject/sha2": "^5.5.0", 434 | "@ethersproject/signing-key": "^5.5.0", 435 | "@ethersproject/strings": "^5.5.0", 436 | "@ethersproject/transactions": "^5.5.0", 437 | "@ethersproject/wordlists": "^5.5.0" 438 | } 439 | }, 440 | "@ethersproject/json-wallets": { 441 | "version": "5.5.0", 442 | "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz", 443 | "integrity": "sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ==", 444 | "requires": { 445 | "@ethersproject/abstract-signer": "^5.5.0", 446 | "@ethersproject/address": "^5.5.0", 447 | "@ethersproject/bytes": "^5.5.0", 448 | "@ethersproject/hdnode": "^5.5.0", 449 | "@ethersproject/keccak256": "^5.5.0", 450 | "@ethersproject/logger": "^5.5.0", 451 | "@ethersproject/pbkdf2": "^5.5.0", 452 | "@ethersproject/properties": "^5.5.0", 453 | "@ethersproject/random": "^5.5.0", 454 | "@ethersproject/strings": "^5.5.0", 455 | "@ethersproject/transactions": "^5.5.0", 456 | "aes-js": "3.0.0", 457 | "scrypt-js": "3.0.1" 458 | } 459 | }, 460 | "@ethersproject/keccak256": { 461 | "version": "5.5.0", 462 | "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.5.0.tgz", 463 | "integrity": "sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg==", 464 | "requires": { 465 | "@ethersproject/bytes": "^5.5.0", 466 | "js-sha3": "0.8.0" 467 | } 468 | }, 469 | "@ethersproject/logger": { 470 | "version": "5.5.0", 471 | "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.5.0.tgz", 472 | "integrity": "sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==" 473 | }, 474 | "@ethersproject/networks": { 475 | "version": "5.5.2", 476 | "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.5.2.tgz", 477 | "integrity": "sha512-NEqPxbGBfy6O3x4ZTISb90SjEDkWYDUbEeIFhJly0F7sZjoQMnj5KYzMSkMkLKZ+1fGpx00EDpHQCy6PrDupkQ==", 478 | "requires": { 479 | "@ethersproject/logger": "^5.5.0" 480 | } 481 | }, 482 | "@ethersproject/pbkdf2": { 483 | "version": "5.5.0", 484 | "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz", 485 | "integrity": "sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg==", 486 | "requires": { 487 | "@ethersproject/bytes": "^5.5.0", 488 | "@ethersproject/sha2": "^5.5.0" 489 | } 490 | }, 491 | "@ethersproject/properties": { 492 | "version": "5.5.0", 493 | "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.5.0.tgz", 494 | "integrity": "sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA==", 495 | "requires": { 496 | "@ethersproject/logger": "^5.5.0" 497 | } 498 | }, 499 | "@ethersproject/providers": { 500 | "version": "5.5.2", 501 | "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.5.2.tgz", 502 | "integrity": "sha512-hkbx7x/MKcRjyrO4StKXCzCpWer6s97xnm34xkfPiarhtEUVAN4TBBpamM+z66WcTt7H5B53YwbRj1n7i8pZoQ==", 503 | "requires": { 504 | "@ethersproject/abstract-provider": "^5.5.0", 505 | "@ethersproject/abstract-signer": "^5.5.0", 506 | "@ethersproject/address": "^5.5.0", 507 | "@ethersproject/basex": "^5.5.0", 508 | "@ethersproject/bignumber": "^5.5.0", 509 | "@ethersproject/bytes": "^5.5.0", 510 | "@ethersproject/constants": "^5.5.0", 511 | "@ethersproject/hash": "^5.5.0", 512 | "@ethersproject/logger": "^5.5.0", 513 | "@ethersproject/networks": "^5.5.0", 514 | "@ethersproject/properties": "^5.5.0", 515 | "@ethersproject/random": "^5.5.0", 516 | "@ethersproject/rlp": "^5.5.0", 517 | "@ethersproject/sha2": "^5.5.0", 518 | "@ethersproject/strings": "^5.5.0", 519 | "@ethersproject/transactions": "^5.5.0", 520 | "@ethersproject/web": "^5.5.0", 521 | "bech32": "1.1.4", 522 | "ws": "7.4.6" 523 | } 524 | }, 525 | "@ethersproject/random": { 526 | "version": "5.5.1", 527 | "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.5.1.tgz", 528 | "integrity": "sha512-YaU2dQ7DuhL5Au7KbcQLHxcRHfgyNgvFV4sQOo0HrtW3Zkrc9ctWNz8wXQ4uCSfSDsqX2vcjhroxU5RQRV0nqA==", 529 | "requires": { 530 | "@ethersproject/bytes": "^5.5.0", 531 | "@ethersproject/logger": "^5.5.0" 532 | } 533 | }, 534 | "@ethersproject/rlp": { 535 | "version": "5.5.0", 536 | "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.5.0.tgz", 537 | "integrity": "sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA==", 538 | "requires": { 539 | "@ethersproject/bytes": "^5.5.0", 540 | "@ethersproject/logger": "^5.5.0" 541 | } 542 | }, 543 | "@ethersproject/sha2": { 544 | "version": "5.5.0", 545 | "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.5.0.tgz", 546 | "integrity": "sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==", 547 | "requires": { 548 | "@ethersproject/bytes": "^5.5.0", 549 | "@ethersproject/logger": "^5.5.0", 550 | "hash.js": "1.1.7" 551 | } 552 | }, 553 | "@ethersproject/signing-key": { 554 | "version": "5.5.0", 555 | "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.5.0.tgz", 556 | "integrity": "sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng==", 557 | "requires": { 558 | "@ethersproject/bytes": "^5.5.0", 559 | "@ethersproject/logger": "^5.5.0", 560 | "@ethersproject/properties": "^5.5.0", 561 | "bn.js": "^4.11.9", 562 | "elliptic": "6.5.4", 563 | "hash.js": "1.1.7" 564 | } 565 | }, 566 | "@ethersproject/solidity": { 567 | "version": "5.5.0", 568 | "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.5.0.tgz", 569 | "integrity": "sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw==", 570 | "requires": { 571 | "@ethersproject/bignumber": "^5.5.0", 572 | "@ethersproject/bytes": "^5.5.0", 573 | "@ethersproject/keccak256": "^5.5.0", 574 | "@ethersproject/logger": "^5.5.0", 575 | "@ethersproject/sha2": "^5.5.0", 576 | "@ethersproject/strings": "^5.5.0" 577 | } 578 | }, 579 | "@ethersproject/strings": { 580 | "version": "5.5.0", 581 | "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.5.0.tgz", 582 | "integrity": "sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ==", 583 | "requires": { 584 | "@ethersproject/bytes": "^5.5.0", 585 | "@ethersproject/constants": "^5.5.0", 586 | "@ethersproject/logger": "^5.5.0" 587 | } 588 | }, 589 | "@ethersproject/transactions": { 590 | "version": "5.5.0", 591 | "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.5.0.tgz", 592 | "integrity": "sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA==", 593 | "requires": { 594 | "@ethersproject/address": "^5.5.0", 595 | "@ethersproject/bignumber": "^5.5.0", 596 | "@ethersproject/bytes": "^5.5.0", 597 | "@ethersproject/constants": "^5.5.0", 598 | "@ethersproject/keccak256": "^5.5.0", 599 | "@ethersproject/logger": "^5.5.0", 600 | "@ethersproject/properties": "^5.5.0", 601 | "@ethersproject/rlp": "^5.5.0", 602 | "@ethersproject/signing-key": "^5.5.0" 603 | } 604 | }, 605 | "@ethersproject/units": { 606 | "version": "5.5.0", 607 | "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.5.0.tgz", 608 | "integrity": "sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag==", 609 | "requires": { 610 | "@ethersproject/bignumber": "^5.5.0", 611 | "@ethersproject/constants": "^5.5.0", 612 | "@ethersproject/logger": "^5.5.0" 613 | } 614 | }, 615 | "@ethersproject/wallet": { 616 | "version": "5.5.0", 617 | "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.5.0.tgz", 618 | "integrity": "sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q==", 619 | "requires": { 620 | "@ethersproject/abstract-provider": "^5.5.0", 621 | "@ethersproject/abstract-signer": "^5.5.0", 622 | "@ethersproject/address": "^5.5.0", 623 | "@ethersproject/bignumber": "^5.5.0", 624 | "@ethersproject/bytes": "^5.5.0", 625 | "@ethersproject/hash": "^5.5.0", 626 | "@ethersproject/hdnode": "^5.5.0", 627 | "@ethersproject/json-wallets": "^5.5.0", 628 | "@ethersproject/keccak256": "^5.5.0", 629 | "@ethersproject/logger": "^5.5.0", 630 | "@ethersproject/properties": "^5.5.0", 631 | "@ethersproject/random": "^5.5.0", 632 | "@ethersproject/signing-key": "^5.5.0", 633 | "@ethersproject/transactions": "^5.5.0", 634 | "@ethersproject/wordlists": "^5.5.0" 635 | } 636 | }, 637 | "@ethersproject/web": { 638 | "version": "5.5.1", 639 | "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.5.1.tgz", 640 | "integrity": "sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg==", 641 | "requires": { 642 | "@ethersproject/base64": "^5.5.0", 643 | "@ethersproject/bytes": "^5.5.0", 644 | "@ethersproject/logger": "^5.5.0", 645 | "@ethersproject/properties": "^5.5.0", 646 | "@ethersproject/strings": "^5.5.0" 647 | } 648 | }, 649 | "@ethersproject/wordlists": { 650 | "version": "5.5.0", 651 | "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.5.0.tgz", 652 | "integrity": "sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q==", 653 | "requires": { 654 | "@ethersproject/bytes": "^5.5.0", 655 | "@ethersproject/hash": "^5.5.0", 656 | "@ethersproject/logger": "^5.5.0", 657 | "@ethersproject/properties": "^5.5.0", 658 | "@ethersproject/strings": "^5.5.0" 659 | } 660 | }, 661 | "@nodelib/fs.scandir": { 662 | "version": "2.1.5", 663 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 664 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 665 | "dev": true, 666 | "requires": { 667 | "@nodelib/fs.stat": "2.0.5", 668 | "run-parallel": "^1.1.9" 669 | } 670 | }, 671 | "@nodelib/fs.stat": { 672 | "version": "2.0.5", 673 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 674 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 675 | "dev": true 676 | }, 677 | "@nodelib/fs.walk": { 678 | "version": "1.2.8", 679 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 680 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 681 | "dev": true, 682 | "requires": { 683 | "@nodelib/fs.scandir": "2.1.5", 684 | "fastq": "^1.6.0" 685 | } 686 | }, 687 | "@rollup/pluginutils": { 688 | "version": "4.1.2", 689 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.2.tgz", 690 | "integrity": "sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ==", 691 | "dev": true, 692 | "requires": { 693 | "estree-walker": "^2.0.1", 694 | "picomatch": "^2.2.2" 695 | } 696 | }, 697 | "@tailwindcss/typography": { 698 | "version": "0.5.0", 699 | "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.0.tgz", 700 | "integrity": "sha512-1p/3C6C+JJziS/ghtG8ACYalbA2SyLJY27Pm33cVTlAoY6VQ7zfm2H64cPxUMBkVIlWXTtWHhZcZJPobMRmQAA==", 701 | "requires": { 702 | "lodash.castarray": "^4.4.0", 703 | "lodash.isplainobject": "^4.0.6", 704 | "lodash.merge": "^4.6.2", 705 | "lodash.uniq": "^4.5.0" 706 | } 707 | }, 708 | "@types/parse-json": { 709 | "version": "4.0.0", 710 | "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", 711 | "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", 712 | "dev": true 713 | }, 714 | "@vitejs/plugin-react": { 715 | "version": "1.1.4", 716 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-1.1.4.tgz", 717 | "integrity": "sha512-cMUBDonNY8PPeHWjIrYKbRn6bLSunh/Ixo2XLLBd3DM0uYBZft+c+04zkGhhN1lAwvoRKJ2FdtvhGhPgViHc6w==", 718 | "dev": true, 719 | "requires": { 720 | "@babel/core": "^7.16.5", 721 | "@babel/plugin-transform-react-jsx": "^7.16.5", 722 | "@babel/plugin-transform-react-jsx-development": "^7.16.5", 723 | "@babel/plugin-transform-react-jsx-self": "^7.16.5", 724 | "@babel/plugin-transform-react-jsx-source": "^7.16.5", 725 | "@rollup/pluginutils": "^4.1.2", 726 | "react-refresh": "^0.11.0", 727 | "resolve": "^1.20.0" 728 | } 729 | }, 730 | "acorn": { 731 | "version": "7.4.1", 732 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 733 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 734 | "dev": true 735 | }, 736 | "acorn-node": { 737 | "version": "1.8.2", 738 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 739 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 740 | "dev": true, 741 | "requires": { 742 | "acorn": "^7.0.0", 743 | "acorn-walk": "^7.0.0", 744 | "xtend": "^4.0.2" 745 | } 746 | }, 747 | "acorn-walk": { 748 | "version": "7.2.0", 749 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 750 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", 751 | "dev": true 752 | }, 753 | "aes-js": { 754 | "version": "3.0.0", 755 | "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", 756 | "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" 757 | }, 758 | "ansi-styles": { 759 | "version": "3.2.1", 760 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 761 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 762 | "dev": true, 763 | "requires": { 764 | "color-convert": "^1.9.0" 765 | } 766 | }, 767 | "anymatch": { 768 | "version": "3.1.2", 769 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 770 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 771 | "dev": true, 772 | "requires": { 773 | "normalize-path": "^3.0.0", 774 | "picomatch": "^2.0.4" 775 | } 776 | }, 777 | "arg": { 778 | "version": "5.0.1", 779 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", 780 | "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", 781 | "dev": true 782 | }, 783 | "autoprefixer": { 784 | "version": "10.4.2", 785 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", 786 | "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", 787 | "dev": true, 788 | "requires": { 789 | "browserslist": "^4.19.1", 790 | "caniuse-lite": "^1.0.30001297", 791 | "fraction.js": "^4.1.2", 792 | "normalize-range": "^0.1.2", 793 | "picocolors": "^1.0.0", 794 | "postcss-value-parser": "^4.2.0" 795 | } 796 | }, 797 | "bech32": { 798 | "version": "1.1.4", 799 | "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", 800 | "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" 801 | }, 802 | "binary-extensions": { 803 | "version": "2.2.0", 804 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 805 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 806 | "dev": true 807 | }, 808 | "bn.js": { 809 | "version": "4.12.0", 810 | "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", 811 | "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" 812 | }, 813 | "braces": { 814 | "version": "3.0.2", 815 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 816 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 817 | "dev": true, 818 | "requires": { 819 | "fill-range": "^7.0.1" 820 | } 821 | }, 822 | "brorand": { 823 | "version": "1.1.0", 824 | "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", 825 | "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" 826 | }, 827 | "browserslist": { 828 | "version": "4.19.1", 829 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", 830 | "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", 831 | "dev": true, 832 | "requires": { 833 | "caniuse-lite": "^1.0.30001286", 834 | "electron-to-chromium": "^1.4.17", 835 | "escalade": "^3.1.1", 836 | "node-releases": "^2.0.1", 837 | "picocolors": "^1.0.0" 838 | } 839 | }, 840 | "callsites": { 841 | "version": "3.1.0", 842 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 843 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 844 | "dev": true 845 | }, 846 | "camelcase-css": { 847 | "version": "2.0.1", 848 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 849 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 850 | "dev": true 851 | }, 852 | "caniuse-lite": { 853 | "version": "1.0.30001299", 854 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", 855 | "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", 856 | "dev": true 857 | }, 858 | "chalk": { 859 | "version": "2.4.2", 860 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 861 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 862 | "dev": true, 863 | "requires": { 864 | "ansi-styles": "^3.2.1", 865 | "escape-string-regexp": "^1.0.5", 866 | "supports-color": "^5.3.0" 867 | } 868 | }, 869 | "chokidar": { 870 | "version": "3.5.2", 871 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", 872 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", 873 | "dev": true, 874 | "requires": { 875 | "anymatch": "~3.1.2", 876 | "braces": "~3.0.2", 877 | "fsevents": "~2.3.2", 878 | "glob-parent": "~5.1.2", 879 | "is-binary-path": "~2.1.0", 880 | "is-glob": "~4.0.1", 881 | "normalize-path": "~3.0.0", 882 | "readdirp": "~3.6.0" 883 | }, 884 | "dependencies": { 885 | "glob-parent": { 886 | "version": "5.1.2", 887 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 888 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 889 | "dev": true, 890 | "requires": { 891 | "is-glob": "^4.0.1" 892 | } 893 | } 894 | } 895 | }, 896 | "color-convert": { 897 | "version": "1.9.3", 898 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 899 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 900 | "dev": true, 901 | "requires": { 902 | "color-name": "1.1.3" 903 | } 904 | }, 905 | "color-name": { 906 | "version": "1.1.3", 907 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 908 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 909 | "dev": true 910 | }, 911 | "convert-source-map": { 912 | "version": "1.8.0", 913 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", 914 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", 915 | "dev": true, 916 | "requires": { 917 | "safe-buffer": "~5.1.1" 918 | } 919 | }, 920 | "cosmiconfig": { 921 | "version": "7.0.1", 922 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", 923 | "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", 924 | "dev": true, 925 | "requires": { 926 | "@types/parse-json": "^4.0.0", 927 | "import-fresh": "^3.2.1", 928 | "parse-json": "^5.0.0", 929 | "path-type": "^4.0.0", 930 | "yaml": "^1.10.0" 931 | } 932 | }, 933 | "cssesc": { 934 | "version": "3.0.0", 935 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 936 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 937 | "dev": true 938 | }, 939 | "debug": { 940 | "version": "4.3.3", 941 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 942 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 943 | "dev": true, 944 | "requires": { 945 | "ms": "2.1.2" 946 | } 947 | }, 948 | "defined": { 949 | "version": "1.0.0", 950 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", 951 | "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", 952 | "dev": true 953 | }, 954 | "detective": { 955 | "version": "5.2.0", 956 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", 957 | "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", 958 | "dev": true, 959 | "requires": { 960 | "acorn-node": "^1.6.1", 961 | "defined": "^1.0.0", 962 | "minimist": "^1.1.1" 963 | } 964 | }, 965 | "didyoumean": { 966 | "version": "1.2.2", 967 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 968 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 969 | "dev": true 970 | }, 971 | "dlv": { 972 | "version": "1.1.3", 973 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 974 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 975 | "dev": true 976 | }, 977 | "electron-to-chromium": { 978 | "version": "1.4.46", 979 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.46.tgz", 980 | "integrity": "sha512-UtV0xUA/dibCKKP2JMxOpDtXR74zABevuUEH4K0tvduFSIoxRVcYmQsbB51kXsFTX8MmOyWMt8tuZAlmDOqkrQ==", 981 | "dev": true 982 | }, 983 | "elliptic": { 984 | "version": "6.5.4", 985 | "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", 986 | "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", 987 | "requires": { 988 | "bn.js": "^4.11.9", 989 | "brorand": "^1.1.0", 990 | "hash.js": "^1.0.0", 991 | "hmac-drbg": "^1.0.1", 992 | "inherits": "^2.0.4", 993 | "minimalistic-assert": "^1.0.1", 994 | "minimalistic-crypto-utils": "^1.0.1" 995 | } 996 | }, 997 | "error-ex": { 998 | "version": "1.3.2", 999 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 1000 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 1001 | "dev": true, 1002 | "requires": { 1003 | "is-arrayish": "^0.2.1" 1004 | } 1005 | }, 1006 | "esbuild": { 1007 | "version": "0.13.15", 1008 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.15.tgz", 1009 | "integrity": "sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw==", 1010 | "dev": true, 1011 | "requires": { 1012 | "esbuild-android-arm64": "0.13.15", 1013 | "esbuild-darwin-64": "0.13.15", 1014 | "esbuild-darwin-arm64": "0.13.15", 1015 | "esbuild-freebsd-64": "0.13.15", 1016 | "esbuild-freebsd-arm64": "0.13.15", 1017 | "esbuild-linux-32": "0.13.15", 1018 | "esbuild-linux-64": "0.13.15", 1019 | "esbuild-linux-arm": "0.13.15", 1020 | "esbuild-linux-arm64": "0.13.15", 1021 | "esbuild-linux-mips64le": "0.13.15", 1022 | "esbuild-linux-ppc64le": "0.13.15", 1023 | "esbuild-netbsd-64": "0.13.15", 1024 | "esbuild-openbsd-64": "0.13.15", 1025 | "esbuild-sunos-64": "0.13.15", 1026 | "esbuild-windows-32": "0.13.15", 1027 | "esbuild-windows-64": "0.13.15", 1028 | "esbuild-windows-arm64": "0.13.15" 1029 | } 1030 | }, 1031 | "esbuild-android-arm64": { 1032 | "version": "0.13.15", 1033 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz", 1034 | "integrity": "sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg==", 1035 | "dev": true, 1036 | "optional": true 1037 | }, 1038 | "esbuild-darwin-64": { 1039 | "version": "0.13.15", 1040 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz", 1041 | "integrity": "sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ==", 1042 | "dev": true, 1043 | "optional": true 1044 | }, 1045 | "esbuild-darwin-arm64": { 1046 | "version": "0.13.15", 1047 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz", 1048 | "integrity": "sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ==", 1049 | "dev": true, 1050 | "optional": true 1051 | }, 1052 | "esbuild-freebsd-64": { 1053 | "version": "0.13.15", 1054 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz", 1055 | "integrity": "sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA==", 1056 | "dev": true, 1057 | "optional": true 1058 | }, 1059 | "esbuild-freebsd-arm64": { 1060 | "version": "0.13.15", 1061 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz", 1062 | "integrity": "sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ==", 1063 | "dev": true, 1064 | "optional": true 1065 | }, 1066 | "esbuild-linux-32": { 1067 | "version": "0.13.15", 1068 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz", 1069 | "integrity": "sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g==", 1070 | "dev": true, 1071 | "optional": true 1072 | }, 1073 | "esbuild-linux-64": { 1074 | "version": "0.13.15", 1075 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz", 1076 | "integrity": "sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA==", 1077 | "dev": true, 1078 | "optional": true 1079 | }, 1080 | "esbuild-linux-arm": { 1081 | "version": "0.13.15", 1082 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz", 1083 | "integrity": "sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA==", 1084 | "dev": true, 1085 | "optional": true 1086 | }, 1087 | "esbuild-linux-arm64": { 1088 | "version": "0.13.15", 1089 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz", 1090 | "integrity": "sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA==", 1091 | "dev": true, 1092 | "optional": true 1093 | }, 1094 | "esbuild-linux-mips64le": { 1095 | "version": "0.13.15", 1096 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz", 1097 | "integrity": "sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg==", 1098 | "dev": true, 1099 | "optional": true 1100 | }, 1101 | "esbuild-linux-ppc64le": { 1102 | "version": "0.13.15", 1103 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz", 1104 | "integrity": "sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ==", 1105 | "dev": true, 1106 | "optional": true 1107 | }, 1108 | "esbuild-netbsd-64": { 1109 | "version": "0.13.15", 1110 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz", 1111 | "integrity": "sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w==", 1112 | "dev": true, 1113 | "optional": true 1114 | }, 1115 | "esbuild-openbsd-64": { 1116 | "version": "0.13.15", 1117 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz", 1118 | "integrity": "sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g==", 1119 | "dev": true, 1120 | "optional": true 1121 | }, 1122 | "esbuild-sunos-64": { 1123 | "version": "0.13.15", 1124 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz", 1125 | "integrity": "sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw==", 1126 | "dev": true, 1127 | "optional": true 1128 | }, 1129 | "esbuild-windows-32": { 1130 | "version": "0.13.15", 1131 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz", 1132 | "integrity": "sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw==", 1133 | "dev": true, 1134 | "optional": true 1135 | }, 1136 | "esbuild-windows-64": { 1137 | "version": "0.13.15", 1138 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz", 1139 | "integrity": "sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ==", 1140 | "dev": true, 1141 | "optional": true 1142 | }, 1143 | "esbuild-windows-arm64": { 1144 | "version": "0.13.15", 1145 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz", 1146 | "integrity": "sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA==", 1147 | "dev": true, 1148 | "optional": true 1149 | }, 1150 | "escalade": { 1151 | "version": "3.1.1", 1152 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1153 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1154 | "dev": true 1155 | }, 1156 | "escape-string-regexp": { 1157 | "version": "1.0.5", 1158 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1159 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1160 | "dev": true 1161 | }, 1162 | "estree-walker": { 1163 | "version": "2.0.2", 1164 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1165 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1166 | "dev": true 1167 | }, 1168 | "ethers": { 1169 | "version": "5.5.3", 1170 | "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.5.3.tgz", 1171 | "integrity": "sha512-fTT4WT8/hTe/BLwRUtl7I5zlpF3XC3P/Xwqxc5AIP2HGlH15qpmjs0Ou78az93b1rLITzXLFxoNX63B8ZbUd7g==", 1172 | "requires": { 1173 | "@ethersproject/abi": "5.5.0", 1174 | "@ethersproject/abstract-provider": "5.5.1", 1175 | "@ethersproject/abstract-signer": "5.5.0", 1176 | "@ethersproject/address": "5.5.0", 1177 | "@ethersproject/base64": "5.5.0", 1178 | "@ethersproject/basex": "5.5.0", 1179 | "@ethersproject/bignumber": "5.5.0", 1180 | "@ethersproject/bytes": "5.5.0", 1181 | "@ethersproject/constants": "5.5.0", 1182 | "@ethersproject/contracts": "5.5.0", 1183 | "@ethersproject/hash": "5.5.0", 1184 | "@ethersproject/hdnode": "5.5.0", 1185 | "@ethersproject/json-wallets": "5.5.0", 1186 | "@ethersproject/keccak256": "5.5.0", 1187 | "@ethersproject/logger": "5.5.0", 1188 | "@ethersproject/networks": "5.5.2", 1189 | "@ethersproject/pbkdf2": "5.5.0", 1190 | "@ethersproject/properties": "5.5.0", 1191 | "@ethersproject/providers": "5.5.2", 1192 | "@ethersproject/random": "5.5.1", 1193 | "@ethersproject/rlp": "5.5.0", 1194 | "@ethersproject/sha2": "5.5.0", 1195 | "@ethersproject/signing-key": "5.5.0", 1196 | "@ethersproject/solidity": "5.5.0", 1197 | "@ethersproject/strings": "5.5.0", 1198 | "@ethersproject/transactions": "5.5.0", 1199 | "@ethersproject/units": "5.5.0", 1200 | "@ethersproject/wallet": "5.5.0", 1201 | "@ethersproject/web": "5.5.1", 1202 | "@ethersproject/wordlists": "5.5.0" 1203 | } 1204 | }, 1205 | "fast-glob": { 1206 | "version": "3.2.11", 1207 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", 1208 | "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", 1209 | "dev": true, 1210 | "requires": { 1211 | "@nodelib/fs.stat": "^2.0.2", 1212 | "@nodelib/fs.walk": "^1.2.3", 1213 | "glob-parent": "^5.1.2", 1214 | "merge2": "^1.3.0", 1215 | "micromatch": "^4.0.4" 1216 | }, 1217 | "dependencies": { 1218 | "glob-parent": { 1219 | "version": "5.1.2", 1220 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1221 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1222 | "dev": true, 1223 | "requires": { 1224 | "is-glob": "^4.0.1" 1225 | } 1226 | } 1227 | } 1228 | }, 1229 | "fastq": { 1230 | "version": "1.13.0", 1231 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 1232 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 1233 | "dev": true, 1234 | "requires": { 1235 | "reusify": "^1.0.4" 1236 | } 1237 | }, 1238 | "fill-range": { 1239 | "version": "7.0.1", 1240 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1241 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1242 | "dev": true, 1243 | "requires": { 1244 | "to-regex-range": "^5.0.1" 1245 | } 1246 | }, 1247 | "fraction.js": { 1248 | "version": "4.1.2", 1249 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz", 1250 | "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==", 1251 | "dev": true 1252 | }, 1253 | "fsevents": { 1254 | "version": "2.3.2", 1255 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1256 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1257 | "dev": true, 1258 | "optional": true 1259 | }, 1260 | "function-bind": { 1261 | "version": "1.1.1", 1262 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1263 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1264 | "dev": true 1265 | }, 1266 | "gensync": { 1267 | "version": "1.0.0-beta.2", 1268 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1269 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1270 | "dev": true 1271 | }, 1272 | "glob-parent": { 1273 | "version": "6.0.2", 1274 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1275 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1276 | "dev": true, 1277 | "requires": { 1278 | "is-glob": "^4.0.3" 1279 | } 1280 | }, 1281 | "globals": { 1282 | "version": "11.12.0", 1283 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1284 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1285 | "dev": true 1286 | }, 1287 | "has": { 1288 | "version": "1.0.3", 1289 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1290 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1291 | "dev": true, 1292 | "requires": { 1293 | "function-bind": "^1.1.1" 1294 | } 1295 | }, 1296 | "has-flag": { 1297 | "version": "3.0.0", 1298 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1299 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1300 | "dev": true 1301 | }, 1302 | "hash.js": { 1303 | "version": "1.1.7", 1304 | "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", 1305 | "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", 1306 | "requires": { 1307 | "inherits": "^2.0.3", 1308 | "minimalistic-assert": "^1.0.1" 1309 | } 1310 | }, 1311 | "hmac-drbg": { 1312 | "version": "1.0.1", 1313 | "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", 1314 | "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", 1315 | "requires": { 1316 | "hash.js": "^1.0.3", 1317 | "minimalistic-assert": "^1.0.0", 1318 | "minimalistic-crypto-utils": "^1.0.1" 1319 | } 1320 | }, 1321 | "import-fresh": { 1322 | "version": "3.3.0", 1323 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1324 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1325 | "dev": true, 1326 | "requires": { 1327 | "parent-module": "^1.0.0", 1328 | "resolve-from": "^4.0.0" 1329 | } 1330 | }, 1331 | "inherits": { 1332 | "version": "2.0.4", 1333 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1334 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1335 | }, 1336 | "is-arrayish": { 1337 | "version": "0.2.1", 1338 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1339 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", 1340 | "dev": true 1341 | }, 1342 | "is-binary-path": { 1343 | "version": "2.1.0", 1344 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1345 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1346 | "dev": true, 1347 | "requires": { 1348 | "binary-extensions": "^2.0.0" 1349 | } 1350 | }, 1351 | "is-core-module": { 1352 | "version": "2.8.1", 1353 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", 1354 | "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", 1355 | "dev": true, 1356 | "requires": { 1357 | "has": "^1.0.3" 1358 | } 1359 | }, 1360 | "is-extglob": { 1361 | "version": "2.1.1", 1362 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1363 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1364 | "dev": true 1365 | }, 1366 | "is-glob": { 1367 | "version": "4.0.3", 1368 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1369 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1370 | "dev": true, 1371 | "requires": { 1372 | "is-extglob": "^2.1.1" 1373 | } 1374 | }, 1375 | "is-number": { 1376 | "version": "7.0.0", 1377 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1378 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1379 | "dev": true 1380 | }, 1381 | "js-sha3": { 1382 | "version": "0.8.0", 1383 | "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", 1384 | "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" 1385 | }, 1386 | "js-tokens": { 1387 | "version": "4.0.0", 1388 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1389 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 1390 | }, 1391 | "jsesc": { 1392 | "version": "2.5.2", 1393 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1394 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 1395 | "dev": true 1396 | }, 1397 | "json-parse-even-better-errors": { 1398 | "version": "2.3.1", 1399 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1400 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1401 | "dev": true 1402 | }, 1403 | "json5": { 1404 | "version": "2.2.0", 1405 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", 1406 | "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", 1407 | "dev": true, 1408 | "requires": { 1409 | "minimist": "^1.2.5" 1410 | } 1411 | }, 1412 | "lilconfig": { 1413 | "version": "2.0.4", 1414 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", 1415 | "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", 1416 | "dev": true 1417 | }, 1418 | "lines-and-columns": { 1419 | "version": "1.2.4", 1420 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1421 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 1422 | "dev": true 1423 | }, 1424 | "lodash.castarray": { 1425 | "version": "4.4.0", 1426 | "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", 1427 | "integrity": "sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=" 1428 | }, 1429 | "lodash.isplainobject": { 1430 | "version": "4.0.6", 1431 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 1432 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" 1433 | }, 1434 | "lodash.merge": { 1435 | "version": "4.6.2", 1436 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1437 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" 1438 | }, 1439 | "lodash.uniq": { 1440 | "version": "4.5.0", 1441 | "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", 1442 | "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" 1443 | }, 1444 | "loose-envify": { 1445 | "version": "1.4.0", 1446 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 1447 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 1448 | "requires": { 1449 | "js-tokens": "^3.0.0 || ^4.0.0" 1450 | } 1451 | }, 1452 | "merge2": { 1453 | "version": "1.4.1", 1454 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1455 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1456 | "dev": true 1457 | }, 1458 | "micromatch": { 1459 | "version": "4.0.4", 1460 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", 1461 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", 1462 | "dev": true, 1463 | "requires": { 1464 | "braces": "^3.0.1", 1465 | "picomatch": "^2.2.3" 1466 | } 1467 | }, 1468 | "minimalistic-assert": { 1469 | "version": "1.0.1", 1470 | "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", 1471 | "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" 1472 | }, 1473 | "minimalistic-crypto-utils": { 1474 | "version": "1.0.1", 1475 | "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", 1476 | "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" 1477 | }, 1478 | "minimist": { 1479 | "version": "1.2.5", 1480 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1481 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1482 | "dev": true 1483 | }, 1484 | "ms": { 1485 | "version": "2.1.2", 1486 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1487 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1488 | "dev": true 1489 | }, 1490 | "nanoid": { 1491 | "version": "3.1.32", 1492 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.32.tgz", 1493 | "integrity": "sha512-F8mf7R3iT9bvThBoW4tGXhXFHCctyCiUUPrWF8WaTqa3h96d9QybkSeba43XVOOE3oiLfkVDe4bT8MeGmkrTxw==", 1494 | "dev": true 1495 | }, 1496 | "node-releases": { 1497 | "version": "2.0.1", 1498 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", 1499 | "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", 1500 | "dev": true 1501 | }, 1502 | "normalize-path": { 1503 | "version": "3.0.0", 1504 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1505 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1506 | "dev": true 1507 | }, 1508 | "normalize-range": { 1509 | "version": "0.1.2", 1510 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 1511 | "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", 1512 | "dev": true 1513 | }, 1514 | "object-assign": { 1515 | "version": "4.1.1", 1516 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1517 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 1518 | }, 1519 | "object-hash": { 1520 | "version": "2.2.0", 1521 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", 1522 | "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", 1523 | "dev": true 1524 | }, 1525 | "parent-module": { 1526 | "version": "1.0.1", 1527 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1528 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1529 | "dev": true, 1530 | "requires": { 1531 | "callsites": "^3.0.0" 1532 | } 1533 | }, 1534 | "parse-json": { 1535 | "version": "5.2.0", 1536 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 1537 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 1538 | "dev": true, 1539 | "requires": { 1540 | "@babel/code-frame": "^7.0.0", 1541 | "error-ex": "^1.3.1", 1542 | "json-parse-even-better-errors": "^2.3.0", 1543 | "lines-and-columns": "^1.1.6" 1544 | } 1545 | }, 1546 | "path-parse": { 1547 | "version": "1.0.7", 1548 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1549 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1550 | "dev": true 1551 | }, 1552 | "path-type": { 1553 | "version": "4.0.0", 1554 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1555 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1556 | "dev": true 1557 | }, 1558 | "picocolors": { 1559 | "version": "1.0.0", 1560 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1561 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1562 | "dev": true 1563 | }, 1564 | "picomatch": { 1565 | "version": "2.3.1", 1566 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1567 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1568 | "dev": true 1569 | }, 1570 | "postcss": { 1571 | "version": "8.4.5", 1572 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", 1573 | "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", 1574 | "dev": true, 1575 | "requires": { 1576 | "nanoid": "^3.1.30", 1577 | "picocolors": "^1.0.0", 1578 | "source-map-js": "^1.0.1" 1579 | } 1580 | }, 1581 | "postcss-js": { 1582 | "version": "4.0.0", 1583 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", 1584 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", 1585 | "dev": true, 1586 | "requires": { 1587 | "camelcase-css": "^2.0.1" 1588 | } 1589 | }, 1590 | "postcss-load-config": { 1591 | "version": "3.1.1", 1592 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", 1593 | "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", 1594 | "dev": true, 1595 | "requires": { 1596 | "lilconfig": "^2.0.4", 1597 | "yaml": "^1.10.2" 1598 | } 1599 | }, 1600 | "postcss-nested": { 1601 | "version": "5.0.6", 1602 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", 1603 | "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", 1604 | "dev": true, 1605 | "requires": { 1606 | "postcss-selector-parser": "^6.0.6" 1607 | } 1608 | }, 1609 | "postcss-selector-parser": { 1610 | "version": "6.0.8", 1611 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", 1612 | "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", 1613 | "dev": true, 1614 | "requires": { 1615 | "cssesc": "^3.0.0", 1616 | "util-deprecate": "^1.0.2" 1617 | } 1618 | }, 1619 | "postcss-value-parser": { 1620 | "version": "4.2.0", 1621 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1622 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 1623 | "dev": true 1624 | }, 1625 | "queue-microtask": { 1626 | "version": "1.2.3", 1627 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1628 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1629 | "dev": true 1630 | }, 1631 | "quick-lru": { 1632 | "version": "5.1.1", 1633 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1634 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 1635 | "dev": true 1636 | }, 1637 | "react": { 1638 | "version": "17.0.2", 1639 | "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", 1640 | "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", 1641 | "requires": { 1642 | "loose-envify": "^1.1.0", 1643 | "object-assign": "^4.1.1" 1644 | } 1645 | }, 1646 | "react-dom": { 1647 | "version": "17.0.2", 1648 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", 1649 | "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", 1650 | "requires": { 1651 | "loose-envify": "^1.1.0", 1652 | "object-assign": "^4.1.1", 1653 | "scheduler": "^0.20.2" 1654 | } 1655 | }, 1656 | "react-icons": { 1657 | "version": "4.3.1", 1658 | "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.3.1.tgz", 1659 | "integrity": "sha512-cB10MXLTs3gVuXimblAdI71jrJx8njrJZmNMEMC+sQu5B/BIOmlsAjskdqpn81y8UBVEGuHODd7/ci5DvoSzTQ==" 1660 | }, 1661 | "react-refresh": { 1662 | "version": "0.11.0", 1663 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", 1664 | "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", 1665 | "dev": true 1666 | }, 1667 | "readdirp": { 1668 | "version": "3.6.0", 1669 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1670 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1671 | "dev": true, 1672 | "requires": { 1673 | "picomatch": "^2.2.1" 1674 | } 1675 | }, 1676 | "resolve": { 1677 | "version": "1.21.0", 1678 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", 1679 | "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", 1680 | "dev": true, 1681 | "requires": { 1682 | "is-core-module": "^2.8.0", 1683 | "path-parse": "^1.0.7", 1684 | "supports-preserve-symlinks-flag": "^1.0.0" 1685 | } 1686 | }, 1687 | "resolve-from": { 1688 | "version": "4.0.0", 1689 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1690 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1691 | "dev": true 1692 | }, 1693 | "reusify": { 1694 | "version": "1.0.4", 1695 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1696 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1697 | "dev": true 1698 | }, 1699 | "rollup": { 1700 | "version": "2.64.0", 1701 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.64.0.tgz", 1702 | "integrity": "sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==", 1703 | "dev": true, 1704 | "requires": { 1705 | "fsevents": "~2.3.2" 1706 | } 1707 | }, 1708 | "run-parallel": { 1709 | "version": "1.2.0", 1710 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1711 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1712 | "dev": true, 1713 | "requires": { 1714 | "queue-microtask": "^1.2.2" 1715 | } 1716 | }, 1717 | "safe-buffer": { 1718 | "version": "5.1.2", 1719 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1720 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1721 | "dev": true 1722 | }, 1723 | "scheduler": { 1724 | "version": "0.20.2", 1725 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", 1726 | "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", 1727 | "requires": { 1728 | "loose-envify": "^1.1.0", 1729 | "object-assign": "^4.1.1" 1730 | } 1731 | }, 1732 | "scrypt-js": { 1733 | "version": "3.0.1", 1734 | "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", 1735 | "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" 1736 | }, 1737 | "semver": { 1738 | "version": "6.3.0", 1739 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 1740 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 1741 | "dev": true 1742 | }, 1743 | "source-map": { 1744 | "version": "0.5.7", 1745 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1746 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 1747 | "dev": true 1748 | }, 1749 | "source-map-js": { 1750 | "version": "1.0.1", 1751 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", 1752 | "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", 1753 | "dev": true 1754 | }, 1755 | "supports-color": { 1756 | "version": "5.5.0", 1757 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1758 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1759 | "dev": true, 1760 | "requires": { 1761 | "has-flag": "^3.0.0" 1762 | } 1763 | }, 1764 | "supports-preserve-symlinks-flag": { 1765 | "version": "1.0.0", 1766 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1767 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1768 | "dev": true 1769 | }, 1770 | "tailwindcss": { 1771 | "version": "3.0.15", 1772 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.15.tgz", 1773 | "integrity": "sha512-bT2iy7FtjwgsXik4ZoJnHXR+SRCiGR1W95fVqpLZebr64m4ahwUwRbIAc5w5+2fzr1YF4Ct2eI7dojMRRl8sVQ==", 1774 | "dev": true, 1775 | "requires": { 1776 | "arg": "^5.0.1", 1777 | "chalk": "^4.1.2", 1778 | "chokidar": "^3.5.2", 1779 | "color-name": "^1.1.4", 1780 | "cosmiconfig": "^7.0.1", 1781 | "detective": "^5.2.0", 1782 | "didyoumean": "^1.2.2", 1783 | "dlv": "^1.1.3", 1784 | "fast-glob": "^3.2.7", 1785 | "glob-parent": "^6.0.2", 1786 | "is-glob": "^4.0.3", 1787 | "normalize-path": "^3.0.0", 1788 | "object-hash": "^2.2.0", 1789 | "postcss-js": "^4.0.0", 1790 | "postcss-load-config": "^3.1.0", 1791 | "postcss-nested": "5.0.6", 1792 | "postcss-selector-parser": "^6.0.8", 1793 | "postcss-value-parser": "^4.2.0", 1794 | "quick-lru": "^5.1.1", 1795 | "resolve": "^1.21.0" 1796 | }, 1797 | "dependencies": { 1798 | "ansi-styles": { 1799 | "version": "4.3.0", 1800 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1801 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1802 | "dev": true, 1803 | "requires": { 1804 | "color-convert": "^2.0.1" 1805 | } 1806 | }, 1807 | "chalk": { 1808 | "version": "4.1.2", 1809 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1810 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1811 | "dev": true, 1812 | "requires": { 1813 | "ansi-styles": "^4.1.0", 1814 | "supports-color": "^7.1.0" 1815 | } 1816 | }, 1817 | "color-convert": { 1818 | "version": "2.0.1", 1819 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1820 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1821 | "dev": true, 1822 | "requires": { 1823 | "color-name": "~1.1.4" 1824 | } 1825 | }, 1826 | "color-name": { 1827 | "version": "1.1.4", 1828 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1829 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1830 | "dev": true 1831 | }, 1832 | "has-flag": { 1833 | "version": "4.0.0", 1834 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1835 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1836 | "dev": true 1837 | }, 1838 | "supports-color": { 1839 | "version": "7.2.0", 1840 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1841 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1842 | "dev": true, 1843 | "requires": { 1844 | "has-flag": "^4.0.0" 1845 | } 1846 | } 1847 | } 1848 | }, 1849 | "to-fast-properties": { 1850 | "version": "2.0.0", 1851 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 1852 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 1853 | "dev": true 1854 | }, 1855 | "to-regex-range": { 1856 | "version": "5.0.1", 1857 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1858 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1859 | "dev": true, 1860 | "requires": { 1861 | "is-number": "^7.0.0" 1862 | } 1863 | }, 1864 | "util-deprecate": { 1865 | "version": "1.0.2", 1866 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1867 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1868 | "dev": true 1869 | }, 1870 | "vite": { 1871 | "version": "2.7.12", 1872 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.7.12.tgz", 1873 | "integrity": "sha512-KvPYToRQWhRfBeVkyhkZ5hASuHQkqZUUdUcE3xyYtq5oYEPIJ0h9LWiWTO6v990glmSac2cEPeYeXzpX5Z6qKQ==", 1874 | "dev": true, 1875 | "requires": { 1876 | "esbuild": "^0.13.12", 1877 | "fsevents": "~2.3.2", 1878 | "postcss": "^8.4.5", 1879 | "resolve": "^1.20.0", 1880 | "rollup": "^2.59.0" 1881 | } 1882 | }, 1883 | "ws": { 1884 | "version": "7.4.6", 1885 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", 1886 | "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" 1887 | }, 1888 | "xtend": { 1889 | "version": "4.0.2", 1890 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1891 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1892 | "dev": true 1893 | }, 1894 | "yaml": { 1895 | "version": "1.10.2", 1896 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 1897 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 1898 | "dev": true 1899 | } 1900 | } 1901 | } 1902 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "krypto", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vite build", 7 | "preview": "vite preview" 8 | }, 9 | "dependencies": { 10 | "@tailwindcss/forms": "^0.4.0", 11 | "@tailwindcss/typography": "^0.5.0", 12 | "esbuild": "^0.14.11", 13 | "ethers": "^5.5.3", 14 | "global": "^4.4.0", 15 | "install": "^0.13.0", 16 | "react": "^17.0.2", 17 | "react-dom": "^17.0.2", 18 | "react-icons": "^4.3.1", 19 | "yarn": "^1.22.17" 20 | }, 21 | "devDependencies": { 22 | "@vitejs/plugin-react": "^1.0.7", 23 | "autoprefixer": "^10.4.2", 24 | "postcss": "^8.4.5", 25 | "tailwindcss": "^3.0.15", 26 | "vite": "^2.7.2" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /client/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /client/src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | text-align: center; 3 | } 4 | 5 | .App-logo { 6 | height: 40vmin; 7 | pointer-events: none; 8 | } 9 | 10 | @media (prefers-reduced-motion: no-preference) { 11 | .App-logo { 12 | animation: App-logo-spin infinite 20s linear; 13 | } 14 | } 15 | 16 | .App-header { 17 | background-color: #282c34; 18 | min-height: 100vh; 19 | display: flex; 20 | flex-direction: column; 21 | align-items: center; 22 | justify-content: center; 23 | font-size: calc(10px + 2vmin); 24 | color: white; 25 | } 26 | 27 | .App-link { 28 | color: #61dafb; 29 | } 30 | 31 | @keyframes App-logo-spin { 32 | from { 33 | transform: rotate(0deg); 34 | } 35 | to { 36 | transform: rotate(360deg); 37 | } 38 | } 39 | 40 | button { 41 | font-size: calc(10px + 2vmin); 42 | } 43 | -------------------------------------------------------------------------------- /client/src/App.jsx: -------------------------------------------------------------------------------- 1 | import { Navbar, Welcome, Services, Transactions, Footer } from './components' 2 | 3 | export default function App() { 4 | 5 | return ( 6 |
7 |
8 | 9 | 10 |
11 | 12 | 13 |
15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /client/src/components/Footer.jsx: -------------------------------------------------------------------------------- 1 | import logo from '../../images/logo.png' 2 | 3 | export function Footer() { 4 | return( 5 |
6 |
7 |
8 | logo 9 |
10 |
11 |

Market

12 |

Exchange

13 |

Tutorials

14 |

Wallets

15 |
16 |
17 |
18 |

Come join us

19 |

info@devjoaopedro.com

20 |
21 |
22 |
23 |

@João Pedro

24 |

All rights reserved

25 |
26 |
27 | ) 28 | } -------------------------------------------------------------------------------- /client/src/components/Loader.jsx: -------------------------------------------------------------------------------- 1 | export function Loader() { 2 | return( 3 |
4 |
5 |
6 | ) 7 | } -------------------------------------------------------------------------------- /client/src/components/Navbar.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from 'react' 2 | 3 | import { HiMenuAlt4 } from 'react-icons/hi' 4 | import { AiOutlineClose } from 'react-icons/ai' 5 | 6 | import logo from '../../images/logo.png' 7 | 8 | const NavbarItem = ({ title, classProps }) => { 9 | return ( 10 |
  • 11 | {title} 12 |
  • 13 | ) 14 | } 15 | 16 | export function Navbar() { 17 | const [toggleMenu, setToggleMenu] = useState(false) 18 | 19 | return( 20 | 54 | ) 55 | } -------------------------------------------------------------------------------- /client/src/components/Services.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { BsShieldFillCheck } from "react-icons/bs"; 3 | import { BiSearchAlt } from "react-icons/bi"; 4 | import { RiHeart2Fill } from "react-icons/ri"; 5 | 6 | const ServiceCard = ({ color, title, subtitle, icon }) => ( 7 |
    8 |
    9 | {icon} 10 |
    11 |
    12 |

    {title}

    13 |

    {subtitle}

    14 |
    15 |
    16 | ) 17 | 18 | export function Services() { 19 | return( 20 |
    21 |
    22 |
    23 |

    24 | Services that we 25 |
    26 | continue to improve 27 |

    28 |
    29 |
    30 |
    31 | } 35 | subtitle="Security is guaranted. We always maintain privacy and mainting the quality of our products." 36 | /> 37 | } 41 | subtitle="Security is guaranted. We always maintain privacy and mainting the quality of our products." 42 | /> 43 | } 47 | subtitle="Security is guaranted. We always maintain privacy and mainting the quality of our products." 48 | /> 49 |
    50 |
    51 | ) 52 | } -------------------------------------------------------------------------------- /client/src/components/Transactions.jsx: -------------------------------------------------------------------------------- 1 | import React, { useContext } from 'react' 2 | 3 | import { TransactionContext } from '../context/TransactionContext' 4 | 5 | import dummyData from '../utils/dummyData' 6 | import { shortenAddress } from '../utils/shortenAddress' 7 | import useFetch from '../hooks/useFetch' 8 | 9 | const TransactionCard = ({ addressTo, addressFrom, timestamp, message, keyword, amount, url}) => { 10 | const gifUrl = useFetch({ keyword }) 11 | 12 | return ( 13 |
    20 |
    21 |
    22 | 23 |

    From: {shortenAddress(addressFrom)}

    24 |
    25 | 26 |

    To: {shortenAddress(addressTo)}

    27 |
    28 |

    Amount: {amount} ETH

    29 | {message && ( 30 | <> 31 |
    32 |

    Message: {message}

    33 | 34 | )} 35 | 36 | 37 |
    38 | gif 44 | 45 |
    46 |

    {timestamp}

    47 |
    48 |
    49 |
    50 | ) 51 | } 52 | 53 | export function Transactions() { 54 | const { currentAccount, transactions } = useContext(TransactionContext) 55 | 56 | return( 57 |
    58 |
    59 | {currentAccount ?( 60 |

    Latest Transactions

    61 | ): ( 62 |

    Connect your account to see the latest transactions

    63 | )} 64 | 65 |
    66 | {[transactions.reverse().map((transaction, i)=>( 67 | 68 | ))]} 69 |
    70 |
    71 |
    72 | ) 73 | } -------------------------------------------------------------------------------- /client/src/components/Welcome.jsx: -------------------------------------------------------------------------------- 1 | import React, { useContext } from 'react' 2 | import { AiFillPlayCircle } from 'react-icons/ai' 3 | import{ SiEthereum } from 'react-icons/si' 4 | import { BsInfoCircle } from 'react-icons/bs'; 5 | 6 | import { TransactionContext } from '../context/TransactionContext'; 7 | import { Loader } from './'; 8 | import { shortenAddress } from '../utils/shortenAddress'; 9 | 10 | const companyCommonStyles = "min-h-[70px] sm:px-0 px-2 sm:min-w-[120px] flex justify-center items-center border-[0.5px] border-gray-400 text-sm font-light text-white"; 11 | 12 | const Input = ({ placeholder, name, type, value, handleChange }) => ( 13 | handleChange(e, name)} 19 | className="my-2 w-full rounded-sm p-2 outline-none bg-transparent text-white border-none text-sm white-glassmorphism" 20 | /> 21 | ); 22 | 23 | 24 | export function Welcome() { 25 | const { connectWallet, currentAccount, formData, handleChange, sendTransaction, isLoading } = useContext(TransactionContext) 26 | 27 | const handleSubmit = (e) => { 28 | const { addressTo, amount, keyword, message } = formData 29 | 30 | e.preventDefault() 31 | 32 | if(!addressTo || !amount || !keyword || !message) return; 33 | 34 | sendTransaction() 35 | } 36 | 37 | return( 38 |
    39 |
    40 |
    41 |

    42 | Send Crypto
    across the world 43 |

    44 |

    45 | Explore the crypto world. Buy and sell cryptocurrencies easily on Krypto. 46 |

    47 | {!currentAccount && ( 48 | 55 | )} 56 | 57 |
    58 |
    59 | Reliability 60 |
    61 |
    Security
    62 |
    63 | Ethereum 64 |
    65 |
    66 | Web 3.0 67 |
    68 |
    Low Fees
    69 |
    70 | Blockchain 71 |
    72 |
    73 |
    74 | 75 |
    76 |
    77 |
    78 |
    79 |
    80 | 81 |
    82 | 83 |
    84 |
    85 |

    86 | {shortenAddress(currentAccount)} 87 |

    88 |

    89 | Ethereum 90 |

    91 |
    92 |
    93 |
    94 | 95 |
    96 | 97 | 98 | 99 | 100 | 101 |
    102 | 103 | {isLoading ? ( 104 | 105 | ): ( 106 | 113 | )} 114 |
    115 | 116 |
    117 |
    118 | 119 |
    120 | ) 121 | } -------------------------------------------------------------------------------- /client/src/components/index.js: -------------------------------------------------------------------------------- 1 | export { Loader } from './Loader'; 2 | export { Navbar } from './Navbar'; 3 | export { Services } from './Services'; 4 | export { Footer } from './Footer'; 5 | export { Transactions } from './Transactions'; 6 | export { Welcome } from './Welcome'; -------------------------------------------------------------------------------- /client/src/context/TransactionContext.jsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react"; 2 | import { ethers } from "ethers"; 3 | 4 | import { contractABI, contractAddress } from '../utils/constants' 5 | 6 | export const TransactionContext = React.createContext(); 7 | 8 | const { ethereum } = window; 9 | 10 | const createEthereumContract = () => { 11 | const provider = new ethers.providers.Web3Provider(ethereum); 12 | const signer = provider.getSigner(); 13 | const transactionsContract = new ethers.Contract(contractAddress, contractABI, signer); 14 | 15 | return transactionsContract; 16 | }; 17 | 18 | export const TransactionsProvider = ({ children }) => { 19 | const [formData, setformData] = useState({ addressTo: "", amount: "", keyword: "", message: "" }); 20 | const [currentAccount, setCurrentAccount] = useState(""); 21 | const [isLoading, setIsLoading] = useState(false); 22 | const [transactionCount, setTransactionCount] = useState(localStorage.getItem("transactionCount")); 23 | const [transactions, setTransactions] = useState([]); 24 | 25 | const handleChange = (e, name) => { 26 | setformData((prevState) => ({ ...prevState, [name]: e.target.value })); 27 | }; 28 | 29 | const getAllTransactions = async () => { 30 | try { 31 | if (ethereum) { 32 | const transactionsContract = createEthereumContract(); 33 | 34 | const availableTransactions = await transactionsContract.getAllTransactions(); 35 | 36 | const structuredTransactions = availableTransactions.map((transaction) => ({ 37 | addressTo: transaction.receiver, 38 | addressFrom: transaction.sender, 39 | timestamp: new Date(transaction.timestamp.toNumber() * 1000).toLocaleString(), 40 | message: transaction.message, 41 | keyword: transaction.keyword, 42 | amount: parseInt(transaction.amount._hex) / (10 ** 18) 43 | })); 44 | 45 | console.log(structuredTransactions); 46 | 47 | setTransactions(structuredTransactions); 48 | } else { 49 | console.log("Ethereum is not present"); 50 | } 51 | } catch (error) { 52 | console.log(error); 53 | } 54 | }; 55 | 56 | const checkIfWalletIsConnect = async () => { 57 | try { 58 | if (!ethereum) return alert("Please install MetaMask."); 59 | 60 | const accounts = await ethereum.request({ method: "eth_accounts" }); 61 | 62 | if (accounts.length) { 63 | setCurrentAccount(accounts[0]); 64 | 65 | getAllTransactions(); 66 | } else { 67 | console.log("No accounts found"); 68 | } 69 | } catch (error) { 70 | console.log(error); 71 | } 72 | }; 73 | 74 | const checkIfTransactionsExists = async () => { 75 | try { 76 | if (ethereum) { 77 | const transactionsContract = createEthereumContract(); 78 | const currentTransactionCount = await transactionsContract.getTransactionCount(); 79 | 80 | window.localStorage.setItem("transactionCount", currentTransactionCount); 81 | } 82 | } catch (error) { 83 | console.log(error); 84 | 85 | throw new Error("No ethereum object"); 86 | } 87 | }; 88 | 89 | const connectWallet = async () => { 90 | try { 91 | if (!ethereum) return alert("Please install MetaMask."); 92 | 93 | const accounts = await ethereum.request({ method: "eth_requestAccounts", }); 94 | 95 | setCurrentAccount(accounts[0]); 96 | } catch (error) { 97 | console.log(error); 98 | 99 | throw new Error("No ethereum object"); 100 | } 101 | }; 102 | 103 | const sendTransaction = async () => { 104 | try { 105 | if (ethereum) { 106 | const { addressTo, amount, keyword, message } = formData; 107 | const transactionsContract = createEthereumContract(); 108 | const parsedAmount = ethers.utils.parseEther(amount); 109 | 110 | await ethereum.request({ 111 | method: "eth_sendTransaction", 112 | params: [{ 113 | from: currentAccount, 114 | to: addressTo, 115 | gas: "0x5208", 116 | value: parsedAmount._hex, 117 | }], 118 | }); 119 | 120 | const transactionHash = await transactionsContract.addToBlockchain(addressTo, parsedAmount, message, keyword); 121 | 122 | setIsLoading(true); 123 | console.log(`Loading - ${transactionHash.hash}`); 124 | await transactionHash.wait(); 125 | console.log(`Success - ${transactionHash.hash}`); 126 | setIsLoading(false); 127 | 128 | const transactionsCount = await transactionsContract.getTransactionCount(); 129 | 130 | setTransactionCount(transactionsCount.toNumber()); 131 | } else { 132 | console.log("No ethereum object"); 133 | } 134 | } catch (error) { 135 | console.log(error); 136 | 137 | throw new Error("No ethereum object"); 138 | } 139 | }; 140 | 141 | useEffect(() => { 142 | checkIfWalletIsConnect(); 143 | checkIfTransactionsExists(); 144 | }, [transactionCount]); 145 | 146 | return ( 147 | 159 | {children} 160 | 161 | ); 162 | }; -------------------------------------------------------------------------------- /client/src/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /client/src/hooks/useFetch.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react' 2 | 3 | const APIKEY = import.meta.env.VITE_GIPHY_API 4 | 5 | const useFetch = ({ keyword }) => { 6 | const [gifUrl, setGifUrl] = useState(""); 7 | 8 | const fetchGifs = async () => { 9 | try { 10 | const response = await fetch(`https://api.giphy.com/v1/gifs/search?api_key=${APIKEY}&q=${keyword.split(" ").join("")}&limit=1`) 11 | const { data } = await response.json() 12 | 13 | setGifUrl(data[0]?.images?.downsized_medium?.url) 14 | } catch (error) { 15 | setGifUrl("https://metro.co.uk/wp-content/uploads/2015/05/pokemon_crying.gif?quality=90&strip=all&zoom=1&resize=500%2C284") 16 | } 17 | } 18 | useEffect(() => { 19 | if(keyword) fetchGifs() 20 | }, [keyword]); 21 | 22 | return gifUrl; 23 | 24 | } 25 | 26 | export default useFetch; -------------------------------------------------------------------------------- /client/src/index.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;500;600;700&display=swap"); 2 | 3 | * html { 4 | padding: 0; 5 | margin: 0; 6 | box-sizing: border-box; 7 | } 8 | 9 | body { 10 | margin: 0; 11 | font-family: "Open Sans", sans-serif; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | } 15 | 16 | .gradient-bg-welcome { 17 | background-color:#0f0e13; 18 | background-image: 19 | radial-gradient(at 0% 0%, hsla(253,16%,7%,1) 0, transparent 50%), 20 | radial-gradient(at 50% 0%, hsla(225,39%,30%,1) 0, transparent 50%), 21 | radial-gradient(at 100% 0%, hsla(339,49%,30%,1) 0, transparent 50%); 22 | } 23 | 24 | .gradient-bg-services { 25 | background-color:#0f0e13; 26 | background-image: 27 | radial-gradient(at 0% 0%, hsla(253,16%,7%,1) 0, transparent 50%), 28 | radial-gradient(at 50% 100%, hsla(225,39%,25%,1) 0, transparent 50%); 29 | } 30 | 31 | .gradient-bg-transactions { 32 | background-color: #0f0e13; 33 | background-image: 34 | radial-gradient(at 0% 100%, hsla(253,16%,7%,1) 0, transparent 50%), 35 | radial-gradient(at 50% 0%, hsla(225,39%,25%,1) 0, transparent 50%); 36 | } 37 | 38 | .gradient-bg-footer { 39 | background-color: #0f0e13; 40 | background-image: 41 | radial-gradient(at 0% 100%, hsla(253,16%,7%,1) 0, transparent 53%), 42 | radial-gradient(at 50% 150%, hsla(339,49%,30%,1) 0, transparent 50%); 43 | } 44 | 45 | .blue-glassmorphism { 46 | background: rgb(39, 51, 89, 0.4); 47 | border-radius: 16px; 48 | box-shadow: 0 4px 30px rgba(0, 0, 0, 0.2); 49 | backdrop-filter: blur(5px); 50 | -webkit-backdrop-filter: blur(5px); 51 | border: 1px solid rgba(0, 0, 0, 0.3); 52 | } 53 | 54 | /* white glassmorphism */ 55 | .white-glassmorphism { 56 | background: rgba(255, 255, 255, 0.05); 57 | border-radius: 16px; 58 | backdrop-filter: blur(5px); 59 | -webkit-backdrop-filter: blur(5px); 60 | border: 1px solid rgba(255, 255, 255, 0.3); 61 | } 62 | 63 | .eth-card { 64 | background-color:#a099ff; 65 | background-image: 66 | radial-gradient(at 83% 67%, rgb(152, 231, 156) 0, transparent 58%), 67 | radial-gradient(at 67% 20%, hsla(357,94%,71%,1) 0, transparent 59%), 68 | radial-gradient(at 88% 35%, hsla(222,81%,65%,1) 0, transparent 50%), 69 | radial-gradient(at 31% 91%, hsla(9,61%,61%,1) 0, transparent 52%), 70 | radial-gradient(at 27% 71%, hsla(336,91%,65%,1) 0, transparent 49%), 71 | radial-gradient(at 74% 89%, hsla(30,98%,65%,1) 0, transparent 51%), 72 | radial-gradient(at 53% 75%, hsla(174,94%,68%,1) 0, transparent 45%); 73 | } 74 | 75 | .text-gradient { 76 | background-color: #fff; 77 | background-image: radial-gradient(at 4% 36%, hsla(0,0%,100%,1) 0, transparent 53%), radial-gradient(at 100% 60%, rgb(0, 0, 0) 0, transparent 50%); 78 | -webkit-background-clip: text; 79 | -webkit-text-fill-color: transparent; 80 | } 81 | 82 | @tailwind base; 83 | @tailwind components; 84 | @tailwind utilities; -------------------------------------------------------------------------------- /client/src/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /client/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom' 3 | 4 | import './index.css' 5 | import App from './App' 6 | import { TransactionsProvider } from './context/TransactionContext' 7 | 8 | ReactDOM.render( 9 | 10 | 11 | 12 | 13 | , 14 | document.getElementById('root') 15 | ) 16 | -------------------------------------------------------------------------------- /client/src/utils/Transactions.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "Transactions", 4 | "sourceName": "contracts/Transactions.sol", 5 | "abi": [ 6 | { 7 | "anonymous": false, 8 | "inputs": [ 9 | { 10 | "indexed": false, 11 | "internalType": "address", 12 | "name": "from", 13 | "type": "address" 14 | }, 15 | { 16 | "indexed": false, 17 | "internalType": "address", 18 | "name": "receiver", 19 | "type": "address" 20 | }, 21 | { 22 | "indexed": false, 23 | "internalType": "uint256", 24 | "name": "amount", 25 | "type": "uint256" 26 | }, 27 | { 28 | "indexed": false, 29 | "internalType": "string", 30 | "name": "message", 31 | "type": "string" 32 | }, 33 | { 34 | "indexed": false, 35 | "internalType": "uint256", 36 | "name": "timestamp", 37 | "type": "uint256" 38 | }, 39 | { 40 | "indexed": false, 41 | "internalType": "string", 42 | "name": "keyword", 43 | "type": "string" 44 | } 45 | ], 46 | "name": "Transfer", 47 | "type": "event" 48 | }, 49 | { 50 | "inputs": [ 51 | { 52 | "internalType": "address payable", 53 | "name": "receiver", 54 | "type": "address" 55 | }, 56 | { 57 | "internalType": "uint256", 58 | "name": "amount", 59 | "type": "uint256" 60 | }, 61 | { 62 | "internalType": "string", 63 | "name": "message", 64 | "type": "string" 65 | }, 66 | { 67 | "internalType": "string", 68 | "name": "keyword", 69 | "type": "string" 70 | } 71 | ], 72 | "name": "addToBlockchain", 73 | "outputs": [], 74 | "stateMutability": "nonpayable", 75 | "type": "function" 76 | }, 77 | { 78 | "inputs": [], 79 | "name": "getAllTransactions", 80 | "outputs": [ 81 | { 82 | "components": [ 83 | { 84 | "internalType": "address", 85 | "name": "sender", 86 | "type": "address" 87 | }, 88 | { 89 | "internalType": "address", 90 | "name": "receiver", 91 | "type": "address" 92 | }, 93 | { 94 | "internalType": "uint256", 95 | "name": "amount", 96 | "type": "uint256" 97 | }, 98 | { 99 | "internalType": "string", 100 | "name": "message", 101 | "type": "string" 102 | }, 103 | { 104 | "internalType": "uint256", 105 | "name": "timestamp", 106 | "type": "uint256" 107 | }, 108 | { 109 | "internalType": "string", 110 | "name": "keyword", 111 | "type": "string" 112 | } 113 | ], 114 | "internalType": "struct Transactions.TransferStruct[]", 115 | "name": "", 116 | "type": "tuple[]" 117 | } 118 | ], 119 | "stateMutability": "view", 120 | "type": "function" 121 | }, 122 | { 123 | "inputs": [], 124 | "name": "getTransactionCount", 125 | "outputs": [ 126 | { 127 | "internalType": "uint256", 128 | "name": "", 129 | "type": "uint256" 130 | } 131 | ], 132 | "stateMutability": "view", 133 | "type": "function" 134 | } 135 | ], 136 | "bytecode": "0x608060405234801561001057600080fd5b50610c0d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806327506f53146100465780632e7700f014610064578063cc2d7ead14610082575b600080fd5b61004e61009e565b60405161005b91906108b9565b60405180910390f35b61006c6102e1565b60405161007991906108db565b60405180910390f35b61009c600480360381019061009791906105e1565b6102ea565b005b60606001805480602002602001604051908101604052809291908181526020016000905b828210156102d857838290600052602060002090600602016040518060c00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820180546101ab90610ad9565b80601f01602080910402602001604051908101604052809291908181526020018280546101d790610ad9565b80156102245780601f106101f957610100808354040283529160200191610224565b820191906000526020600020905b81548152906001019060200180831161020757829003601f168201915b505050505081526020016004820154815260200160058201805461024790610ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461027390610ad9565b80156102c05780601f10610295576101008083540402835291602001916102c0565b820191906000526020600020905b8154815290600101906020018083116102a357829003601f168201915b505050505081525050815260200190600101906100c2565b50505050905090565b60008054905090565b60016000808282546102fc91906109bd565b9250508190555060016040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200142815260200183815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301908051906020019061043b9291906104ac565b506080820151816004015560a08201518160050190805190602001906104629291906104ac565b5050507f416cfa4330a4565f45c2fd2dd4826a83a37443aba2ce6f79477c7355afac35fa33858585428660405161049e9695949392919061084a565b60405180910390a150505050565b8280546104b890610ad9565b90600052602060002090601f0160209004810192826104da5760008555610521565b82601f106104f357805160ff1916838001178555610521565b82800160010185558215610521579182015b82811115610520578251825591602001919060010190610505565b5b50905061052e9190610532565b5090565b5b8082111561054b576000816000905550600101610533565b5090565b600061056261055d84610927565b6108f6565b90508281526020810184848401111561057a57600080fd5b610585848285610a97565b509392505050565b60008135905061059c81610ba9565b92915050565b600082601f8301126105b357600080fd5b81356105c384826020860161054f565b91505092915050565b6000813590506105db81610bc0565b92915050565b600080600080608085870312156105f757600080fd5b60006106058782880161058d565b9450506020610616878288016105cc565b935050604085013567ffffffffffffffff81111561063357600080fd5b61063f878288016105a2565b925050606085013567ffffffffffffffff81111561065c57600080fd5b610668878288016105a2565b91505092959194509250565b6000610680838361079c565b905092915050565b61069181610a61565b82525050565b6106a081610a13565b82525050565b6106af81610a13565b82525050565b60006106c082610967565b6106ca818561098a565b9350836020820285016106dc85610957565b8060005b8581101561071857848403895281516106f98582610674565b94506107048361097d565b925060208a019950506001810190506106e0565b50829750879550505050505092915050565b600061073582610972565b61073f818561099b565b935061074f818560208601610aa6565b61075881610b98565b840191505092915050565b600061076e82610972565b61077881856109ac565b9350610788818560208601610aa6565b61079181610b98565b840191505092915050565b600060c0830160008301516107b46000860182610697565b5060208301516107c76020860182610697565b5060408301516107da604086018261082c565b50606083015184820360608601526107f2828261072a565b9150506080830151610807608086018261082c565b5060a083015184820360a086015261081f828261072a565b9150508091505092915050565b61083581610a57565b82525050565b61084481610a57565b82525050565b600060c08201905061085f60008301896106a6565b61086c6020830188610688565b610879604083018761083b565b818103606083015261088b8186610763565b905061089a608083018561083b565b81810360a08301526108ac8184610763565b9050979650505050505050565b600060208201905081810360008301526108d381846106b5565b905092915050565b60006020820190506108f0600083018461083b565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561091d5761091c610b69565b5b8060405250919050565b600067ffffffffffffffff82111561094257610941610b69565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109c882610a57565b91506109d383610a57565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610a0857610a07610b0b565b5b828201905092915050565b6000610a1e82610a37565b9050919050565b6000610a3082610a37565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610a6c82610a73565b9050919050565b6000610a7e82610a85565b9050919050565b6000610a9082610a37565b9050919050565b82818337600083830152505050565b60005b83811015610ac4578082015181840152602081019050610aa9565b83811115610ad3576000848401525b50505050565b60006002820490506001821680610af157607f821691505b60208210811415610b0557610b04610b3a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb281610a25565b8114610bbd57600080fd5b50565b610bc981610a57565b8114610bd457600080fd5b5056fea2646970667358221220b18a46d9cfa8af7df4b0c8506355a64cba7415077b4175184b924303dfd76ec664736f6c63430008000033", 137 | "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806327506f53146100465780632e7700f014610064578063cc2d7ead14610082575b600080fd5b61004e61009e565b60405161005b91906108b9565b60405180910390f35b61006c6102e1565b60405161007991906108db565b60405180910390f35b61009c600480360381019061009791906105e1565b6102ea565b005b60606001805480602002602001604051908101604052809291908181526020016000905b828210156102d857838290600052602060002090600602016040518060c00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282015481526020016003820180546101ab90610ad9565b80601f01602080910402602001604051908101604052809291908181526020018280546101d790610ad9565b80156102245780601f106101f957610100808354040283529160200191610224565b820191906000526020600020905b81548152906001019060200180831161020757829003601f168201915b505050505081526020016004820154815260200160058201805461024790610ad9565b80601f016020809104026020016040519081016040528092919081815260200182805461027390610ad9565b80156102c05780601f10610295576101008083540402835291602001916102c0565b820191906000526020600020905b8154815290600101906020018083116102a357829003601f168201915b505050505081525050815260200190600101906100c2565b50505050905090565b60008054905090565b60016000808282546102fc91906109bd565b9250508190555060016040518060c001604052803373ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184815260200142815260200183815250908060018154018082558091505060019003906000526020600020906006020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020155606082015181600301908051906020019061043b9291906104ac565b506080820151816004015560a08201518160050190805190602001906104629291906104ac565b5050507f416cfa4330a4565f45c2fd2dd4826a83a37443aba2ce6f79477c7355afac35fa33858585428660405161049e9695949392919061084a565b60405180910390a150505050565b8280546104b890610ad9565b90600052602060002090601f0160209004810192826104da5760008555610521565b82601f106104f357805160ff1916838001178555610521565b82800160010185558215610521579182015b82811115610520578251825591602001919060010190610505565b5b50905061052e9190610532565b5090565b5b8082111561054b576000816000905550600101610533565b5090565b600061056261055d84610927565b6108f6565b90508281526020810184848401111561057a57600080fd5b610585848285610a97565b509392505050565b60008135905061059c81610ba9565b92915050565b600082601f8301126105b357600080fd5b81356105c384826020860161054f565b91505092915050565b6000813590506105db81610bc0565b92915050565b600080600080608085870312156105f757600080fd5b60006106058782880161058d565b9450506020610616878288016105cc565b935050604085013567ffffffffffffffff81111561063357600080fd5b61063f878288016105a2565b925050606085013567ffffffffffffffff81111561065c57600080fd5b610668878288016105a2565b91505092959194509250565b6000610680838361079c565b905092915050565b61069181610a61565b82525050565b6106a081610a13565b82525050565b6106af81610a13565b82525050565b60006106c082610967565b6106ca818561098a565b9350836020820285016106dc85610957565b8060005b8581101561071857848403895281516106f98582610674565b94506107048361097d565b925060208a019950506001810190506106e0565b50829750879550505050505092915050565b600061073582610972565b61073f818561099b565b935061074f818560208601610aa6565b61075881610b98565b840191505092915050565b600061076e82610972565b61077881856109ac565b9350610788818560208601610aa6565b61079181610b98565b840191505092915050565b600060c0830160008301516107b46000860182610697565b5060208301516107c76020860182610697565b5060408301516107da604086018261082c565b50606083015184820360608601526107f2828261072a565b9150506080830151610807608086018261082c565b5060a083015184820360a086015261081f828261072a565b9150508091505092915050565b61083581610a57565b82525050565b61084481610a57565b82525050565b600060c08201905061085f60008301896106a6565b61086c6020830188610688565b610879604083018761083b565b818103606083015261088b8186610763565b905061089a608083018561083b565b81810360a08301526108ac8184610763565b9050979650505050505050565b600060208201905081810360008301526108d381846106b5565b905092915050565b60006020820190506108f0600083018461083b565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561091d5761091c610b69565b5b8060405250919050565b600067ffffffffffffffff82111561094257610941610b69565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109c882610a57565b91506109d383610a57565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610a0857610a07610b0b565b5b828201905092915050565b6000610a1e82610a37565b9050919050565b6000610a3082610a37565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610a6c82610a73565b9050919050565b6000610a7e82610a85565b9050919050565b6000610a9082610a37565b9050919050565b82818337600083830152505050565b60005b83811015610ac4578082015181840152602081019050610aa9565b83811115610ad3576000848401525b50505050565b60006002820490506001821680610af157607f821691505b60208210811415610b0557610b04610b3a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b610bb281610a25565b8114610bbd57600080fd5b50565b610bc981610a57565b8114610bd457600080fd5b5056fea2646970667358221220b18a46d9cfa8af7df4b0c8506355a64cba7415077b4175184b924303dfd76ec664736f6c63430008000033", 138 | "linkReferences": {}, 139 | "deployedLinkReferences": {} 140 | } 141 | -------------------------------------------------------------------------------- /client/src/utils/constants.js: -------------------------------------------------------------------------------- 1 | import abi from './Transactions.json' 2 | 3 | export const contractABI = abi.abi 4 | export const contractAddress = '0xCa7B8EAA14112D0349956ce0fDDAc4c231887ec4' -------------------------------------------------------------------------------- /client/src/utils/dummyData.js: -------------------------------------------------------------------------------- 1 | export default [ 2 | { 3 | id: 1, 4 | url: "https://metro.co.uk/wp-content/uploads/2015/05/pokemon_crying.gif?quality=90&strip=all&zoom=1&resize=500%2C284", 5 | message: "", 6 | timestamp: "12/21/2021, 4:33:21 PM", 7 | addressFrom: "0xCF8e569A97C423952DdFf902375C7C76549A6A90", 8 | amount: "0.01", 9 | addressTo: "0x8aa395Ab97837576aF9cd6946C79024ef1acfdbE", 10 | }, 11 | { 12 | id: 2, 13 | url: "https://media4.popsugar-assets.com/files/2013/11/07/832/n/1922398/eb7a69a76543358d_28.gif", 14 | message: "", 15 | timestamp: "12/21/2021, 4:33:21 PM", 16 | addressFrom: "0xCF8e569A97C423952DdFf902375C7C76549A6A90", 17 | amount: "0.01", 18 | addressTo: "0x8aa395Ab97837576aF9cd6946C79024ef1acfdbE", 19 | }, 20 | { 21 | id: 3, 22 | url: "https://acegif.com/wp-content/uploads/gif-shaking-head-38.gif", 23 | message: "", 24 | timestamp: "12/21/2021, 4:33:21 PM", 25 | addressFrom: "0xCF8e569A97C423952DdFf902375C7C76549A6A90", 26 | amount: "0.01", 27 | addressTo: "0x8aa395Ab97837576aF9cd6946C79024ef1acfdbE", 28 | }, 29 | { 30 | id: 4, 31 | url: "https://i.pinimg.com/originals/68/a0/9e/68a09e774e98242871c2db0f99307420.gif", 32 | message: "", 33 | timestamp: "12/21/2021, 4:33:21 PM", 34 | addressFrom: "0xCF8e569A97C423952DdFf902375C7C76549A6A90", 35 | amount: "0.01", 36 | addressTo: "0x8aa395Ab97837576aF9cd6946C79024ef1acfdbE", 37 | }, 38 | { 39 | id: 5, 40 | url: "https://i.pinimg.com/originals/73/d3/a1/73d3a14d212314ab1f7268b71d639c15.gif", 41 | message: "", 42 | timestamp: "12/21/2021, 4:33:21 PM", 43 | addressFrom: "0xCF8e569A97C423952DdFf902375C7C76549A6A90", 44 | amount: "0.01", 45 | addressTo: "0x8aa395Ab97837576aF9cd6946C79024ef1acfdbE", 46 | }, 47 | { 48 | id: 6, 49 | url: "https://www.omnisend.com/blog/wp-content/uploads/2016/09/funny-gifs-9.gif", 50 | message: "", 51 | timestamp: "12/21/2021, 4:33:21 PM", 52 | addressFrom: "0xCF8e569A97C423952DdFf902375C7C76549A6A90", 53 | amount: "0.01", 54 | addressTo: "0x8aa395Ab97837576aF9cd6946C79024ef1acfdbE", 55 | }, 56 | ]; -------------------------------------------------------------------------------- /client/src/utils/shortenAddress.js: -------------------------------------------------------------------------------- 1 | export const shortenAddress = (address) => `${address.slice(0, 5)}...${address.slice(address.length - 4)}` -------------------------------------------------------------------------------- /client/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | purge: ["./src/**/*.{js,jsx,ts,tsx}", "./public/index.html"], 3 | mode: "jit", 4 | darkMode: false, // or 'media' or 'class' 5 | theme: { 6 | fontFamily: { 7 | display: ["Open Sans", "sans-serif"], 8 | body: ["Open Sans", "sans-serif"], 9 | }, 10 | extend: { 11 | screens: { 12 | mf: "990px", 13 | }, 14 | keyframes: { 15 | "slide-in": { 16 | "0%": { 17 | "-webkit-transform": "translateX(120%)", 18 | transform: "translateX(120%)", 19 | }, 20 | "100%": { 21 | "-webkit-transform": "translateX(0%)", 22 | transform: "translateX(0%)", 23 | }, 24 | }, 25 | }, 26 | animation: { 27 | "slide-in": "slide-in 0.5s ease-out", 28 | }, 29 | }, 30 | }, 31 | variants: { 32 | extend: {}, 33 | }, 34 | plugins: [require("@tailwindcss/forms")], 35 | }; -------------------------------------------------------------------------------- /client/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()] 7 | }) 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "my-app", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@testing-library/jest-dom": "^5.17.0", 7 | "@testing-library/react": "^13.4.0", 8 | "@testing-library/user-event": "^13.5.0", 9 | "react": "^18.3.1", 10 | "react-dom": "^18.3.1", 11 | "react-scripts": "5.0.1", 12 | "web-vitals": "^2.1.4" 13 | }, 14 | "scripts": { 15 | "start": "react-scripts start", 16 | "build": "react-scripts build", 17 | "test": "react-scripts test", 18 | "eject": "react-scripts eject" 19 | }, 20 | "eslintConfig": { 21 | "extends": [ 22 | "react-app", 23 | "react-app/jest" 24 | ] 25 | }, 26 | "browserslist": { 27 | "production": [ 28 | ">0.2%", 29 | "not dead", 30 | "not op_mini all" 31 | ], 32 | "development": [ 33 | "last 1 chrome version", 34 | "last 1 firefox version", 35 | "last 1 safari version" 36 | ] 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /smart_contract/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | coverage 4 | coverage.json 5 | typechain 6 | 7 | #Hardhat files 8 | cache 9 | artifacts 10 | -------------------------------------------------------------------------------- /smart_contract/README.md: -------------------------------------------------------------------------------- 1 | # Basic Sample Hardhat Project 2 | 3 | This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, a sample script that deploys that contract, and an example of a task implementation, which simply lists the available accounts. 4 | 5 | Try running some of the following tasks: 6 | 7 | ```shell 8 | npx hardhat accounts 9 | npx hardhat compile 10 | npx hardhat clean 11 | npx hardhat test 12 | npx hardhat node 13 | node scripts/sample-script.js 14 | npx hardhat help 15 | ``` 16 | -------------------------------------------------------------------------------- /smart_contract/contracts/Transactions.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | 3 | pragma solidity ^0.8.0; 4 | 5 | contract Transactions { 6 | uint256 transactionCount; 7 | 8 | event Transfer(address from, address receiver, uint amount, string message, uint256 timestamp, string keyword); 9 | 10 | struct TransferStruct { 11 | address sender; 12 | address receiver; 13 | uint amount; 14 | string message; 15 | uint256 timestamp; 16 | string keyword; 17 | } 18 | 19 | TransferStruct[] transactions; 20 | 21 | function addToBlockchain(address payable receiver, uint amount, string memory message, string memory keyword) public { 22 | transactionCount += 1; 23 | transactions.push(TransferStruct(msg.sender, receiver, amount, message, block.timestamp, keyword)); 24 | 25 | emit Transfer(msg.sender, receiver, amount, message, block.timestamp, keyword); 26 | } 27 | 28 | function getAllTransactions() public view returns (TransferStruct[] memory) { 29 | return transactions; 30 | } 31 | 32 | function getTransactionCount() public view returns (uint256) { 33 | return transactionCount; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /smart_contract/hardhat.config.js: -------------------------------------------------------------------------------- 1 | // https://eth-ropsten.alchemyapi.io/v2/8acZqKS_YebUPsHmYZ5Hrz_nZ3W9HRaa 2 | 3 | require('@nomiclabs/hardhat-waffle') 4 | 5 | module.exports = { 6 | solidity: '0.8.0', 7 | networks: { 8 | ropsten: { 9 | url: 'https://eth-ropsten.alchemyapi.io/v2/8acZqKS_YebUPsHmYZ5Hrz_nZ3W9HRaa', 10 | accounts: [ '9e368efa22330b47b48d96a9fe1426bac7653b2bd8b20250b7000cac1e7b41ed' ] 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /smart_contract/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "smart_contract", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "@nomiclabs/hardhat-ethers": "^2.0.4", 14 | "@nomiclabs/hardhat-waffle": "^2.0.2", 15 | "chai": "^4.3.4", 16 | "ethereum-waffle": "^3.4.0", 17 | "ethers": "^5.5.3", 18 | "hardhat": "^2.8.3" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /smart_contract/scripts/deploy.js: -------------------------------------------------------------------------------- 1 | const main = async () => { 2 | const Transactions = await hre.ethers.getContractFactory("Transactions"); 3 | const transactions = await Transactions.deploy(); 4 | 5 | await transactions.deployed(); 6 | 7 | console.log("Transactions deployed to:", transactions.address); 8 | } 9 | 10 | const runMain = async () => { 11 | try { 12 | await main(); 13 | process.exit(0); 14 | } catch (error) { 15 | console.error(error); 16 | process.exit(1); 17 | } 18 | } 19 | 20 | runMain(); -------------------------------------------------------------------------------- /smart_contract/test/sample-test.js: -------------------------------------------------------------------------------- 1 | const { expect } = require("chai"); 2 | const { ethers } = require("hardhat"); 3 | 4 | describe("Greeter", function () { 5 | it("Should return the new greeting once it's changed", async function () { 6 | const Greeter = await ethers.getContractFactory("Greeter"); 7 | const greeter = await Greeter.deploy("Hello, world!"); 8 | await greeter.deployed(); 9 | 10 | expect(await greeter.greet()).to.equal("Hello, world!"); 11 | 12 | const setGreetingTx = await greeter.setGreeting("Hola, mundo!"); 13 | 14 | // wait until the transaction is mined 15 | await setGreetingTx.wait(); 16 | 17 | expect(await greeter.greet()).to.equal("Hola, mundo!"); 18 | }); 19 | }); 20 | --------------------------------------------------------------------------------