## Day 1 ### Preliminary Checks - Using very old frameworks. Migrate to using new ones like Foundry or Hardhat. [Recommendation: Foundry] - Checks, effects and interaction isn't followed. [Understand Reentrancy attacks](https://owasp.org/www-project-smart-contract-top-10/2023/en/src/SC01-reentrancy-attacks.html#:~:text=A%20reentrancy%20attack%20happens%20when,before%20it%20resolves%20its%20state.) [How does it work](https://hackernoon.com/hack-solidity-reentrancy-attack) - No tests for smart contracts - Need to understand data types and how they work. Why mapping `userNFTs` when user is only allowed to mint one NFT. [here](https://github.com/soderlinds/DSP/blob/main/contracts/contracts/NFTMembershipToken.sol#L15) - Need to understand logs and events. How they work and why they are needed. Challenge: - Optimization: [Find alternative to this state and remove `hasMinted` mapping somehow](https://github.com/soderlinds/DSP/blob/main/contracts/contracts/NFTMembershipToken.sol#L20) - https://docs.soliditylang.org/en/v0.8.24/contracts.html#events - https://cryptozombies.io/ ## Day 2 - Implemented events very well. - Tests are missing. (To be taken care of after few days) Challenge: - Learn from cryptozombies, as well as apply them. If already applied, document them explaining why you have used them and how they work. - Start using Remix for till next few calls. - Find out why you need to follow `checks-effects-interactions`. >$1 Billion - Add new features to NFTMembershipToken - Deploy the contracts on testnet - Deploy the contract on Polygon/Optimism/Arbitrum mainnet. ## Day 3 - Added good comments, can be improved by using [NatSpec](https://docs.soliditylang.org/en/latest/natspec-format.html) - Tried Remix, but gave up too early. - Understood basic `checks-effects-interactions`, need to understand more. - Focus on using Remix this whole week. Challenge: - Deploy more and more contract to testnet - Deploy a contract on mainnet Polygon/Optimism/Arbitrum. - Only use Remix - Learn from cryptozombies, as well as apply them. If already applied, document them explaining why you have used them and how they work. ## Day 5 Challenge: - Create a basic NFT contract, use ERC721A - Public mint of NFTs at 0.01 ETH based on a boolean value, `isMintingActive`. If false, no mint allowed. - Owner can set isMintingActive - Owner can mint any arbitrary token ID (between 1 - 1000) - Maximum tokens the contract can have is 1000. - Start token ID should not be a default but 1 ## Day 6 Challenge: - Understand Signatures, and how other dApps leverages signatures. - Explore 10 dApps (Safe, GMX, 1inch, Uniswap (USDC->ETH)) and compile your research (Fluid, focus on how frontend is implemented and how the interaction is happening). - Casually read about RPC (non-web3). - Casually read about RPC methods (https://docs.metamask.io/wallet/reference/json-rpc-api/) ## Day 7 Challenge: - Study Safe Web repository: https://github.com/safe-global/safe-wallet-web/ - Study Uniswap Web Interface repository: https://github.com/Uniswap/interface/tree/main/apps/web - Create a demo app that does EIP712 signature