Hey @atootdev – Congratulations, your Final Project passed! We'll be approving it on the course itself in a week or two, but here's your feedback in the meanwhile:
Frontend
- Always good to let the user know what network they should be on, a critical UX touch.
- Great illustrations for the shoes, fantastic
- I had to abandon the first minting transaction, but it looks like the frontend didn't pick up on the Metamask user rejection. Would be good to build in a way for your frontend to handle that error: catch it and return to a page, for example
- Metamask is saying there's an exception through with the minting of the NFT when I enter one of the confirmation codes -- eventually worked with the third, so I guess it actually proves the confirmation codes work (in a way) -- might be good to ping the contract to see if the confirmation code has been used before the user signs a transaction.
- I'm very happy with my
Air Jordan 1 Off-White Retro High OG Chicago NFT though! 😂 😂
- Frontend is very solid, the above mentioned UX stuff is relatively minor compared to what you built
Smart Contract Design and Security
- Smart contract code looks really good, @atootdev, appreciate the clear error messages for the require statements which you're catching in the modifiers
- Really interesting to separate each sneaker into its own ERC-721 with the extended functionality you added in with
sneakerList and other aspects for the frontend. Really like the thinking around extending standards to specific purposes.
- The inheritance works really well for the use case here, I think, because you're both inheriting the standards as well as your
ISneaker and ISneakerMetadata interfaces, making each sneaker (or future item) a standalone thing which also connects back to a larger project.
- Good coverage of the basic attack vectors. One thing: my understanding is that drops would be plagued by DDOS attacks, you might want to just double check the mapping option you're tagging onto the sneakers doesn't open a weakness point around iteration or gas costs. This might be nothing but thought I'd mention it.
Testing
- Had a small issue migrating to a local development network, npm told me I needed to install
pify module, might want to check if you need to add that to your package.json
- Like the use of
nike in your tests!
- Nice clear setup of variables at the top of the tests, helps set the stage for what's going to be happening next for folks just reading the code
- Nice testing, particularly around the confirmation codes. Again, probably not a now-issue (and you might have this in your roadmap) but you might want to hash confirmation codes when storing on-chain, so they're not leaked.
- Nice work overall on tests
Overall
Really timely project! Seems like you're right on the cusp of the wave with different companies wanting to do this for drops. (Really like the name as well!)
Appreciate the execution of an MVP while also delineating Short, Medium and Long-Term goals.
Overall, excellent job, @atootdev. It's a really great use of the technology to meet a real-world business solution. Hope you had fun working on this and can continue to build on it. You did a great job.
Hey @atootdev – Congratulations, your Final Project passed! We'll be approving it on the course itself in a week or two, but here's your feedback in the meanwhile:
Frontend
Air Jordan 1 Off-White Retro High OG ChicagoNFT though! 😂 😂Smart Contract Design and Security
sneakerListand other aspects for the frontend. Really like the thinking around extending standards to specific purposes.ISneakerandISneakerMetadatainterfaces, making each sneaker (or future item) a standalone thing which also connects back to a larger project.Testing
pifymodule, might want to check if you need to add that to your package.jsonnikein your tests!Overall
Really timely project! Seems like you're right on the cusp of the wave with different companies wanting to do this for drops. (Really like the name as well!)
Appreciate the execution of an MVP while also delineating Short, Medium and Long-Term goals.
Overall, excellent job, @atootdev. It's a really great use of the technology to meet a real-world business solution. Hope you had fun working on this and can continue to build on it. You did a great job.