├── .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 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
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 |
14 |
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 |
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 |
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 |
21 |
22 |
23 |
24 |
25 | {["Market", "Exchange", "Tutorials", "Wallets"].map((item, index)=> (
26 |
27 | ))}
28 |
29 | Login
30 |
31 |
32 |
33 | {toggleMenu
34 | ?
setToggleMenu(false)} />
35 | : setToggleMenu(true)} />
36 | }
37 | {toggleMenu && (
38 |
43 |
44 | setToggleMenu(false)} />
45 |
46 | {["Market", "Exchange", "Tutorials", "Wallets"].map((item, index)=> (
47 |
48 | ))}
49 |
50 | )}
51 |
52 |
53 |
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 |
38 |
44 |
45 |
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 |
53 | Connect Wallet
54 |
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 |
84 |
85 |
86 | {shortenAddress(currentAccount)}
87 |
88 |
89 | Ethereum
90 |
91 |
92 |
93 |
94 |
95 |
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 |
--------------------------------------------------------------------------------