|
1 | | -# Base Learn Solutions 🎓 |
| 1 | +# 🎓 Base Learn Solutions - Complete All 13 Exercises! |
2 | 2 |
|
3 | | -Complete, working smart contract solutions for all 13 Base Learn exercises. Earn your NFTs and unlock Guild.xyz roles! 🏆 |
| 3 | +<div align="center"> |
4 | 4 |
|
5 | | -## 🚀 Overview |
| 5 | + |
| 6 | + |
| 7 | + |
6 | 8 |
|
7 | | -This repository contains battle-tested smart contracts that successfully pass all Base Learn validations. Each contract has been deployed and verified to mint the corresponding NFT on Base Sepolia testnet. |
| 9 | +**Battle-tested smart contracts that successfully pass all Base Learn validations** |
8 | 10 |
|
9 | | -### What you'll earn: |
10 | | -- ✅ **13 Soulbound NFTs** - Proof of your smart contract mastery |
11 | | -- 🏅 **Guild.xyz Roles** - Newcomer, Acolyte, Consul, Prefect, Supreme |
12 | | -- 💎 **13 TalentProtocol Points** - Build your on-chain reputation |
| 11 | +[🚀 Deploy](#-deployment-guide) • [📚 Contracts](#-contract-solutions) • [🏆 Rewards](#-what-youll-earn) • [💡 Tips](#-pro-tips) |
13 | 12 |
|
14 | | -## 📋 Prerequisites |
| 13 | +</div> |
15 | 14 |
|
16 | | -- Node.js v18+ and npm |
17 | | -- MetaMask or Coinbase Wallet |
18 | | -- Base Sepolia ETH (get from [faucet](https://www.coinbase.com/faucets/base-ethereum-goerli-faucet)) |
19 | | -- Basic understanding of Solidity and smart contracts |
| 15 | +--- |
| 16 | + |
| 17 | +## ✨ What You'll Earn |
| 18 | + |
| 19 | +<table> |
| 20 | +<tr> |
| 21 | +<td width="33%" align="center"> |
| 22 | + |
| 23 | +### 🏅 13 NFTs |
| 24 | +**Soulbound Tokens** |
| 25 | +Permanent proof of your smart contract mastery |
| 26 | + |
| 27 | +</td> |
| 28 | +<td width="33%" align="center"> |
| 29 | + |
| 30 | +### 👑 Guild Roles |
| 31 | +**5 Achievement Tiers** |
| 32 | +Newcomer → Acolyte → Consul → Prefect → Supreme |
| 33 | + |
| 34 | +</td> |
| 35 | +<td width="33%" align="center"> |
| 36 | + |
| 37 | +### 💎 13 Points |
| 38 | +**TalentProtocol** |
| 39 | +Build your on-chain developer reputation |
| 40 | + |
| 41 | +</td> |
| 42 | +</tr> |
| 43 | +</table> |
| 44 | + |
| 45 | +## 🎯 Why This Repository? |
| 46 | + |
| 47 | +After hours of debugging and testing, I've compiled **working solutions** for all 13 Base Learn exercises. Each contract has been: |
20 | 48 |
|
21 | | -## 🛠 Installation |
| 49 | +- ✅ **Deployed and verified** on Base Sepolia |
| 50 | +- ✅ **Successfully minted** the corresponding NFT |
| 51 | +- ✅ **Optimized** for gas efficiency |
| 52 | +- ✅ **Documented** for learning |
| 53 | + |
| 54 | +> 💡 **Note:** These are meant for learning! Understand the code before deploying. |
| 55 | +
|
| 56 | +## 📁 Contract Solutions |
| 57 | + |
| 58 | +<details> |
| 59 | +<summary><b>Click to see all 13 exercises with direct links</b></summary> |
| 60 | + |
| 61 | +| # | Exercise | Contract | Quest Link | Key Concepts | |
| 62 | +|---|----------|----------|------------|--------------| |
| 63 | +| 01 | **Basic Math** | `BasicMath.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/contracts-and-basic-functions/basic-functions-exercise) | Overflow-safe arithmetic, error handling | |
| 64 | +| 02 | **Control Structures** | `ControlStructures.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/control-structures/control-structures-exercise) | FizzBuzz, time-based logic, custom errors | |
| 65 | +| 03 | **Storage** | `EmployeeStorage.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/storage/storage-exercise) | Storage optimization, packing, memory vs storage | |
| 66 | +| 04 | **Arrays** | `FavoriteRecords.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/arrays/arrays-exercise) | Dynamic arrays, array manipulation | |
| 67 | +| 05 | **Mappings** | `FavoriteRecords.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/mappings/mappings-exercise) | Mapping operations, nested mappings | |
| 68 | +| 06 | **Inheritance** | `InheritanceContracts.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/inheritance/inheritance-exercise) | Contract inheritance, virtual/override | |
| 69 | +| 07 | **Structs** | `GarageManager.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/structs/structs-exercise) | Custom data structures, struct arrays | |
| 70 | +| 08 | **Error Triage** | `ErrorTriageExercise.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/error-triage/error-triage-exercise) | Debugging, error patterns, assembly | |
| 71 | +| 09 | **New Keyword** | `AddressBookFactory.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/new-keyword/new-keyword-exercise) | Factory pattern, contract deployment | |
| 72 | +| 10 | **Imports** | `ImportsExercise.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/imports/imports-exercise) | Libraries, code reuse, using for | |
| 73 | +| 11 | **ERC-721** | `HaikuNFT.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/erc-721-token/erc-721-exercise) | NFT standard, OpenZeppelin, minting | |
| 74 | +| 12 | **Minimal Token** | `UnburnableToken.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/minimal-tokens/minimal-tokens-exercise) | Basic token mechanics, transfers | |
| 75 | +| 13 | **ERC-20** | `WeightedVoting.sol` | [🔗 Quest](https://docs.base.org/base-learn/docs/erc-20-token/erc-20-exercise) | Governance token, voting mechanics | |
| 76 | + |
| 77 | +</details> |
| 78 | + |
| 79 | +## 🚀 Deployment Guide |
| 80 | + |
| 81 | +### Prerequisites |
22 | 82 |
|
23 | 83 | ```bash |
24 | | -# Clone the repository |
| 84 | +# 1. Clone this repository |
25 | 85 | git clone https://github.com/YOUR_USERNAME/base-learn-solutions.git |
26 | 86 | cd base-learn-solutions |
27 | 87 |
|
28 | | -# Install dependencies |
| 88 | +# 2. Install dependencies |
29 | 89 | npm install |
30 | 90 |
|
31 | | -# Set up environment variables |
| 91 | +# 3. Set up your environment |
32 | 92 | cp .env.example .env |
33 | | -# Edit .env and add your private key (NEVER commit this!) |
34 | 93 | ``` |
35 | 94 |
|
36 | | -## 📁 Contract Solutions |
| 95 | +### Configure `.env` |
37 | 96 |
|
38 | | -Each exercise is in its own directory with the exact contract name Base Learn expects: |
39 | | - |
40 | | -| Exercise | Contract | Description | |
41 | | -|----------|----------|-------------| |
42 | | -| 01 | `BasicMath.sol` | Overflow-safe arithmetic operations | |
43 | | -| 02 | `ControlStructures.sol` | FizzBuzz and time-based logic | |
44 | | -| 03 | `EmployeeStorage.sol` | Optimized storage patterns | |
45 | | -| 04 | `FavoriteRecords.sol` | Array manipulation | |
46 | | -| 05 | `FavoriteRecords.sol` | Mapping operations | |
47 | | -| 06 | `InheritanceContracts.sol` | Contract inheritance patterns | |
48 | | -| 07 | `GarageManager.sol` | Struct management | |
49 | | -| 08 | `ErrorTriageExercise.sol` | Error handling and debugging | |
50 | | -| 09 | `AddressBookFactory.sol` | Factory pattern with `new` keyword | |
51 | | -| 10 | `ImportsExercise.sol` | Library imports and usage | |
52 | | -| 11 | `HaikuNFT.sol` | ERC-721 NFT implementation | |
53 | | -| 12 | `UnburnableToken.sol` | Minimal token implementation | |
54 | | -| 13 | `WeightedVoting.sol` | ERC-20 governance token | |
| 97 | +```env |
| 98 | +PRIVATE_KEY=your_private_key_here |
| 99 | +BASE_SEPOLIA_RPC=https://sepolia.base.org |
| 100 | +BASESCAN_API_KEY=your_basescan_api_key |
| 101 | +``` |
55 | 102 |
|
56 | | -## 🚀 Deployment Guide |
| 103 | +> ⚠️ **Security:** Never commit your `.env` file! |
| 104 | +
|
| 105 | +### Deploy Contracts |
57 | 106 |
|
58 | | -### Deploy All Contracts |
| 107 | +<details> |
| 108 | +<summary><b>Option 1: Deploy All Contracts</b></summary> |
59 | 109 |
|
60 | 110 | ```bash |
61 | | -# Compile all contracts |
62 | 111 | npx hardhat compile |
63 | | - |
64 | | -# Deploy to Base Sepolia |
65 | 112 | npx hardhat run scripts/deploy-all.ts --network baseSepolia |
66 | 113 | ``` |
67 | 114 |
|
68 | | -### Deploy Individual Contracts |
| 115 | +</details> |
| 116 | + |
| 117 | +<details> |
| 118 | +<summary><b>Option 2: Deploy Individual Contracts</b></summary> |
69 | 119 |
|
70 | 120 | ```bash |
71 | | -# Deploy specific exercise (replace XX with exercise number) |
72 | | -npx hardhat run scripts/deploy-XX.ts --network baseSepolia |
| 121 | +# Compile first |
| 122 | +npx hardhat compile |
| 123 | + |
| 124 | +# Then deploy specific contract |
| 125 | +npx hardhat run scripts/deploy-01-basicmath.ts --network baseSepolia |
73 | 126 | ``` |
74 | 127 |
|
75 | | -## ✅ Submission Process |
| 128 | +</details> |
| 129 | + |
| 130 | +## 📝 Submission Process |
76 | 131 |
|
77 | | -1. **Deploy your contracts** to Base Sepolia testnet |
78 | | -2. **Copy the deployed contract address** from the terminal |
79 | | -3. **Visit [Base Learn](https://docs.base.org/base-learn/docs/welcome)** |
80 | | -4. **Navigate to the exercise** you want to submit |
81 | | -5. **Paste your contract address** and click submit |
82 | | -6. **Mint your NFT** after successful validation |
| 132 | +```mermaid |
| 133 | +graph LR |
| 134 | + A[Deploy Contract] --> B[Copy Address] |
| 135 | + B --> C[Visit Base Learn] |
| 136 | + C --> D[Submit Address] |
| 137 | + D --> E[Mint NFT! 🎉] |
| 138 | +``` |
83 | 139 |
|
84 | | -## 🔑 Important Notes |
| 140 | +1. **Deploy** your contract to Base Sepolia |
| 141 | +2. **Copy** the contract address from terminal |
| 142 | +3. **Navigate** to [Base Learn](https://docs.base.org/base-learn/docs/welcome) |
| 143 | +4. **Paste** address and submit |
| 144 | +5. **Mint** your NFT! |
85 | 145 |
|
86 | | -### Security |
87 | | -- **NEVER** commit your `.env` file or private keys |
88 | | -- Use a dedicated wallet for testnet deployments |
89 | | -- Keep your private keys secure |
| 146 | +## 💡 Pro Tips |
90 | 147 |
|
91 | | -### Validation Tips |
92 | | -- Base Learn expects **exact** function signatures |
93 | | -- Don't modify function names or parameters |
94 | | -- Some exercises require specific Solidity versions |
95 | | -- If validation fails, check gas estimation errors |
| 148 | +### 🎯 Common Issues & Solutions |
96 | 149 |
|
97 | | -### Common Issues |
98 | | -- **"Unable to estimate network fee"** - Contract validation failed |
99 | | -- **"Transaction underpriced"** - Wait for pending transactions to clear |
100 | | -- **Validation failures** - Ensure exact function signatures match |
| 150 | +| Issue | Solution | |
| 151 | +|-------|----------| |
| 152 | +| **"Unable to estimate gas"** | Contract validation failed - check function signatures | |
| 153 | +| **"Transaction underpriced"** | Previous transaction pending - wait or increase gas | |
| 154 | +| **Contract not verifying** | Ensure exact function names and parameters match | |
| 155 | +| **Imports failing** | Deploy library contract first, then main contract | |
| 156 | + |
| 157 | +### 🔥 Speed Run Strategy |
| 158 | + |
| 159 | +1. **Batch Operations:** Deploy 3-4 contracts at once |
| 160 | +2. **Use Remix:** For quick testing before Hardhat deployment |
| 161 | +3. **Pre-fund Wallet:** Have enough Base Sepolia ETH ready |
| 162 | +4. **Keep Tab Open:** Stay logged into Base Learn platform |
| 163 | + |
| 164 | +### 🛡️ Security Best Practices |
| 165 | + |
| 166 | +- ✅ Use a **dedicated testnet wallet** |
| 167 | +- ✅ Store keys in `.env`, never hardcode |
| 168 | +- ✅ Verify contracts on BaseScan after deployment |
| 169 | +- ✅ Test locally with `npx hardhat test` first |
101 | 170 |
|
102 | 171 | ## 📚 Resources |
103 | 172 |
|
104 | | -- [Base Learn Platform](https://docs.base.org/base-learn/docs/welcome) |
105 | | -- [Base Documentation](https://docs.base.org/) |
106 | | -- [Base Sepolia Faucet](https://www.coinbase.com/faucets/base-ethereum-goerli-faucet) |
107 | | -- [Base Sepolia Explorer](https://sepolia.basescan.org) |
108 | | -- [Guild.xyz Base Learn](https://guild.xyz/base-learn) |
| 173 | +<table> |
| 174 | +<tr> |
| 175 | +<td width="50%"> |
| 176 | + |
| 177 | +### Official Links |
| 178 | +- 🌐 [Base Learn Platform](https://docs.base.org/base-learn/docs/welcome) |
| 179 | +- 🔗 [Base Documentation](https://docs.base.org/) |
| 180 | +- 💧 [Base Sepolia Faucet](https://www.coinbase.com/faucets/base-ethereum-goerli-faucet) |
| 181 | +- 🔍 [BaseScan Explorer](https://sepolia.basescan.org) |
| 182 | + |
| 183 | +</td> |
| 184 | +<td width="50%"> |
| 185 | + |
| 186 | +### Community |
| 187 | +- 🏰 [Guild.xyz Base Learn](https://guild.xyz/base-learn) |
| 188 | +- 💬 [Base Discord](https://discord.gg/base) |
| 189 | +- 🐦 [Base Twitter](https://twitter.com/base) |
| 190 | +- 📖 [OpenZeppelin Docs](https://docs.openzeppelin.com/) |
| 191 | + |
| 192 | +</td> |
| 193 | +</tr> |
| 194 | +</table> |
109 | 195 |
|
110 | 196 | ## 🤝 Contributing |
111 | 197 |
|
112 | | -Found an issue or have an improvement? Contributions are welcome! |
| 198 | +Found a better solution? Contributions are welcome! |
113 | 199 |
|
114 | | -1. Fork the repository |
115 | | -2. Create your feature branch (`git checkout -b feature/improvement`) |
116 | | -3. Commit your changes (`git commit -m 'Add improvement'`) |
117 | | -4. Push to the branch (`git push origin feature/improvement`) |
118 | | -5. Open a Pull Request |
| 200 | +```bash |
| 201 | +# 1. Fork the repository |
| 202 | +# 2. Create your feature branch |
| 203 | +git checkout -b feature/better-solution |
| 204 | + |
| 205 | +# 3. Commit your changes |
| 206 | +git commit -m '✨ Improve Exercise X solution' |
| 207 | + |
| 208 | +# 4. Push and create PR |
| 209 | +git push origin feature/better-solution |
| 210 | +``` |
119 | 211 |
|
120 | 212 | ## 📜 License |
121 | 213 |
|
122 | | -MIT License - feel free to use these solutions to complete Base Learn! |
| 214 | +MIT License - Use freely to complete Base Learn! |
123 | 215 |
|
124 | 216 | ## 🙏 Acknowledgments |
125 | 217 |
|
126 | | -- Base Learn team for creating this educational platform |
127 | | -- OpenZeppelin for secure contract libraries |
128 | | -- The Base ecosystem community |
| 218 | +<div align="center"> |
| 219 | + |
| 220 | +**Special thanks to:** |
| 221 | + |
| 222 | +Base Learn Team • OpenZeppelin • Hardhat • The Base Community |
129 | 223 |
|
130 | 224 | --- |
131 | 225 |
|
132 | | -**⚡ Ready to become a Base Learn graduate?** Deploy these contracts and earn your NFTs! |
| 226 | +### 🌟 Star this repo if it helped you earn your NFTs! |
| 227 | + |
| 228 | +Made with ❤️ by a Base Learn Graduate |
| 229 | + |
| 230 | +**[⬆ back to top](#-base-learn-solutions---complete-all-13-exercises)** |
133 | 231 |
|
134 | | -Remember: Learning by doing is the best way to master smart contracts. Use these solutions to understand the patterns, then try building your own variations! 🚀 |
| 232 | +</div> |
0 commit comments