diff --git a/evaluations/agriDot_1_piewol.md b/evaluations/agriDot_1_piewol.md new file mode 100644 index 000000000..2c9dca996 --- /dev/null +++ b/evaluations/agriDot_1_piewol.md @@ -0,0 +1,167 @@ +# Evaluation + +- **Status:** in progress +- **Application Document:** [agridot](https://github.com/w3f/Grants-Program/blob/master/applications/AgriDot.md) +- **Milestone:** 1 +- **Previously successfully merged evaluation:** All by PieWol + +| Number | Deliverable | Accepted | Link | Evaluation Notes | +| ------ | ----------- | :------: | ---- |----------------- | +| 0a. | License | |[APP MIT](https://github.com/kacena123/AgriDot/blob/main/LICENSE), [BE MIT](https://github.com/kacena123/agridot-backend/blob/main/LICENSE), [DOCS MIT](https://github.com/kacena123/agridot-docs/blob/main/LICENSE)| MIT| +| 0b. | Documentation | |[AgriDot Mobile dAPP Readme](https://github.com/kacena123/AgriDot/blob/main/README.md), [AgriDot Backend readme](https://github.com/kacena123/agridot-backend/blob/main/README.md), [Official documentation link](https://kacena123.github.io/agridot-docs/)| detailed user documentation. very nice. | +| 0c. | Testing guide | | [BE Unit tests guide](https://github.com/kacena123/agridot-backend?tab=readme-ov-file#run-tests), [AgriDot dAPP Unit tests guide](https://github.com/kacena123/AgriDot?tab=readme-ov-file#other-commands) | App tests are throwing errors.| +| 0d. | Docker | | [Dockerfile AgriDot dAPP](https://github.com/kacena123/AgriDot/blob/main/Dockerfile), [Dockerfile Agridot BE](https://github.com/kacena123/agridot-backend/blob/main/Dockerfile) | not yet fully tested | +| 0e. | Article | | [AgriDot - Revolutionary Web3 mobile dApp for Farmers](https://medium.com/@valova.katarin/5e4a886c1604) | ok | +| 1.a | Fields as NFTs (Private) | | [Private fields feature commit](https://github.com/kacena123/AgriDot/commit/c54553b96181ed2a46c53c8c3073c5fe1c4c257a), [Fields final v2](https://github.com/kacena123/AgriDot/commit/ad6fe12ed44473a63f24389fbba4b58cf2709ae6)| ok | +| 1.b | Fields as NFTs (Public) | | [Public fields feature commit](https://github.com/kacena123/AgriDot/commit/c54553b96181ed2a46c53c8c3073c5fe1c4c257a), [Fields final v2](https://github.com/kacena123/AgriDot/commit/ad6fe12ed44473a63f24389fbba4b58cf2709ae6) | ok | +| 1.c | See the weather for your NFT fields | | [Weather field monitoring feature commit](https://github.com/kacena123/AgriDot/commit/ca482d19104931bc3c78b076a1053bb0cc7dce43), [Weather final](https://github.com/kacena123/AgriDot/commit/ad6fe12ed44473a63f24389fbba4b58cf2709ae6) | Every field is able to display weather in hourly intervals and daily intervals (One week in advance) | +| 2.a | Pests as NFTs | |[Pest final commit](https://github.com/kacena123/AgriDot/commit/b50725419536ac1cffcb0156b63dddf52cd065a5) | nice proximity feature. What about a stake based system for reporting to allow really decentralized pest reports? | +| 2.b | Donation system for Pest reporters | | [Donation feature commit v1](https://github.com/kacena123/AgriDot/commit/a929a7db63ad1d9b8992a878b3ea2cf334d230ce) | Farmers can incentivize other farmers by giving donations to the Farmers that report pests if their reports are useful. Reports like these can often save lots of crops. | +| 3.a | Guides as NFTs | | [Guides final commit](https://github.com/kacena123/AgriDot/commit/60943dde034af7a67cbe6c7e229f88d9963481ac) | Farmers can create useful guides for other farmers. These guides are also created in a shared collection owned by AgriDot so we can moderate false guides. | +| 3.b | Rating and donation system for Guides | | [Donation feature commit v1](https://github.com/kacena123/AgriDot/commit/a929a7db63ad1d9b8992a878b3ea2cf334d230ce) | nice | +| 4. | Crop origin proofs | | [Crops feature commit](https://github.com/kacena123/AgriDot/commit/c54553b96181ed2a46c53c8c3073c5fe1c4c257a), [Crops feature commit final](https://github.com/kacena123/AgriDot/commit/24793da52b46c70e247d96ac12b9920b90165c43) | I think without an instance that actually verifies all claimed data, this is not really a sound proof. | +| 5.a | Developer Guide | | [documentation section](https://kacena123.github.io/agridot-docs/dev-guide/introduction.html)| Ok, it would be nice to have some more details on why the pinata integration is needed. Also a default .env file would have been nice to simplify | +| 5.b | User Guide | | [documentation section](https://kacena123.github.io/agridot-docs/user-guide/intro.html), [Video guide](https://www.youtube.com/watch?v=3khnW3acfJk) | nice user guide. the video is a great feature walkthrough. | + + + +## General Notes +Thanks for submitting your delivery. I'm really happy with the project and you managed to deliver everything that was agreed upon. Well done! + +I was also happy to read in your article that you are planning on creating a dedicated parachain for AgriDot. Unless you really hit technical limitations without your own chain I would suggest to instead implement AgriDot on Plaza, once it has hit a more mature state. Anyways I'm happy that you are interested in continuing this project and I hope AgriDot will attract a lot of users. + +I do wonder why you chose to implement an encryption for the private fields that is based on a password and not encrypted to the account address itself. Maybe so that you can eventually share the password without compromising your keys? + + + +## Tests +Sadly installing and then running tests throws an error on a fresh machine. Saying jest is not installed. Would be nice to have this added to the dependencies. + +Backend Tests +```` +Test Suites: 2 passed, 2 total +Tests: 9 passed, 9 total +Snapshots: 0 total +Time: 6.908 s +Ran all test suites. +```` + +App Tests are throwing errors. +e.g. + +```` + services/secureStorage.spec.ts + ● Console + + console.error + Error storing secret phrase: Error: Storage error + at Object. (/home/ubuntu/AgriDot/services/secureStorage.spec.ts:31:67) + at Generator.next () + at asyncGeneratorStep (/home/ubuntu/AgriDot/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17) + at _next (/home/ubuntu/AgriDot/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9) + at /home/ubuntu/AgriDot/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7 + at new Promise () + at Object. (/home/ubuntu/AgriDot/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12) + at Promise.then.completed (/home/ubuntu/AgriDot/node_modules/jest-circus/build/utils.js:298:28) + at new Promise () + at callAsyncCircusFn (/home/ubuntu/AgriDot/node_modules/jest-circus/build/utils.js:231:10) + at _callCircusTest (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:316:40) + at processTicksAndRejections (node:internal/process/task_queues:95:5) + at _runTest (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:252:3) + at _runTestsForDescribeBlock (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:126:9) + at _runTestsForDescribeBlock (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:121:9) + at run (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:71:3) + at runAndTransformResultsToJestFormat (/home/ubuntu/AgriDot/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21) + at jestAdapter (/home/ubuntu/AgriDot/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19) + at runTestInternal (/home/ubuntu/AgriDot/node_modules/jest-runner/build/runTest.js:367:16) + at runTest (/home/ubuntu/AgriDot/node_modules/jest-runner/build/runTest.js:444:34) + at Object.worker (/home/ubuntu/AgriDot/node_modules/jest-runner/build/testWorker.js:106:12) + + 10 | return true; + 11 | } catch (error) { + > 12 | console.error('Error storing secret phrase:', error); + | ^ + 13 | return false; + 14 | } + 15 | }, + + at Object.error (services/secureStorage.ts:12:15) + at Generator.throw () + at asyncGeneratorStep (node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17) + at _throw (node_modules/@babel/runtime/helpers/asyncToGenerator.js:20:9) + + console.error + Error retrieving secret phrase: Error: Retrieval error + at Object. (/home/ubuntu/AgriDot/services/secureStorage.spec.ts:50:67) + at Generator.next () + at asyncGeneratorStep (/home/ubuntu/AgriDot/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17) + at _next (/home/ubuntu/AgriDot/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9) + at /home/ubuntu/AgriDot/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7 + at new Promise () + at Object. (/home/ubuntu/AgriDot/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12) + at Promise.then.completed (/home/ubuntu/AgriDot/node_modules/jest-circus/build/utils.js:298:28) + at new Promise () + at callAsyncCircusFn (/home/ubuntu/AgriDot/node_modules/jest-circus/build/utils.js:231:10) + at _callCircusTest (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:316:40) + at processTicksAndRejections (node:internal/process/task_queues:95:5) + at _runTest (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:252:3) + at _runTestsForDescribeBlock (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:126:9) + at _runTestsForDescribeBlock (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:121:9) + at run (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:71:3) + at runAndTransformResultsToJestFormat (/home/ubuntu/AgriDot/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21) + at jestAdapter (/home/ubuntu/AgriDot/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19) + at runTestInternal (/home/ubuntu/AgriDot/node_modules/jest-runner/build/runTest.js:367:16) + at runTest (/home/ubuntu/AgriDot/node_modules/jest-runner/build/runTest.js:444:34) + at Object.worker (/home/ubuntu/AgriDot/node_modules/jest-runner/build/testWorker.js:106:12) + + 20 | return phrase; + 21 | } catch (error) { + > 22 | console.error('Error retrieving secret phrase:', error); + | ^ + 23 | return null; + 24 | } + 25 | }, + + at Object.error (services/secureStorage.ts:22:15) + at Generator.throw () + at asyncGeneratorStep (node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17) + at _throw (node_modules/@babel/runtime/helpers/asyncToGenerator.js:20:9) + + console.error + Error removing secret phrase: Error: Deletion error + at Object. (/home/ubuntu/AgriDot/services/secureStorage.spec.ts:79:70) + at Generator.next () + at asyncGeneratorStep (/home/ubuntu/AgriDot/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17) + at _next (/home/ubuntu/AgriDot/node_modules/@babel/runtime/helpers/asyncToGenerator.js:17:9) + at /home/ubuntu/AgriDot/node_modules/@babel/runtime/helpers/asyncToGenerator.js:22:7 + at new Promise () + at Object. (/home/ubuntu/AgriDot/node_modules/@babel/runtime/helpers/asyncToGenerator.js:14:12) + at Promise.then.completed (/home/ubuntu/AgriDot/node_modules/jest-circus/build/utils.js:298:28) + at new Promise () + at callAsyncCircusFn (/home/ubuntu/AgriDot/node_modules/jest-circus/build/utils.js:231:10) + at _callCircusTest (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:316:40) + at processTicksAndRejections (node:internal/process/task_queues:95:5) + at _runTest (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:252:3) + at _runTestsForDescribeBlock (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:126:9) + at _runTestsForDescribeBlock (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:121:9) + at run (/home/ubuntu/AgriDot/node_modules/jest-circus/build/run.js:71:3) + at runAndTransformResultsToJestFormat (/home/ubuntu/AgriDot/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapterInit.js:122:21) + at jestAdapter (/home/ubuntu/AgriDot/node_modules/jest-circus/build/legacy-code-todo-rewrite/jestAdapter.js:79:19) + at runTestInternal (/home/ubuntu/AgriDot/node_modules/jest-runner/build/runTest.js:367:16) + at runTest (/home/ubuntu/AgriDot/node_modules/jest-runner/build/runTest.js:444:34) + at Object.worker (/home/ubuntu/AgriDot/node_modules/jest-runner/build/testWorker.js:106:12) + + 34 | return true; + 35 | } catch (error) { + > 36 | console.error('Error removing secret phrase:', error); + | ^ + 37 | return false; + 38 | } + 39 | }, + + at Object.error (services/secureStorage.ts:36:15) + at Generator.throw () + at asyncGeneratorStep (node_modules/@babel/runtime/helpers/asyncToGenerator.js:3:17) + at _throw (node_modules/@babel/runtime/helpers/asyncToGenerator.js:20:9) +```` +