# Solidity में Gas-Efficient Loops कैसे लिखें
Ethereum पर हर operation की कीमत होती है। Loops को optimize करना production-grade smart contracts के लिए जरूरी है।
सबसे महंगी गलतियाँ
// ❌ महंगा — हर iteration में storage read
for (uint i = 0; i < array.length; i++) {
total += array[i];
}
समस्या: .length हर बार storage से पढ़ा जाता है। 100 items = 20,000+ extra gas।
Optimization #1: Cache Array Length
// ✅ बेहतर
uint len = array.length;
for (uint i = 0; i < len; i++) {
total += array[i];
}
बचत: ~200 gas प्रति iteration।
Optimization #2: Unchecked Arithmetic
Solidity 0.8+ में overflow checking automatic है, लेकिन loops में अक्सर जरूरी नहीं:
uint len = array.length;
for (uint i = 0; i < len;) {
total += array[i];
unchecked { ++i; }
}
बचत: ~30-40 gas प्रति iteration। 1000 iterations = 40,000 gas बचत।
Optimization #3: Pre-Increment vs Post-Increment
// ❌ i++ — temporary copy बनाता है
// ✅ ++i — direct increment
Gas difference छोटा है (~5 gas), लेकिन best practice है।
Optimization #4: Reverse Loops
जब order matter नहीं करता:
uint len = array.length;
for (uint i = len; i > 0;) {
unchecked { --i; }
// array[i] के साथ काम करें
}
फायदा: i > 0 check करना i < len से सस्ता है।
Optimization #5: Avoid Redundant Storage Writes
// ❌ महंगा
for (uint i = 0; i < 10; i++) {
stateVar += i; // 10 SSTORE operations
}
// ✅ बेहतर
uint temp = stateVar;
for (uint i = 0; i < 10; i++) {
temp += i;
}
stateVar = temp; // 1 SSTORE operation
बचत: ~20,000 gas प्रति avoided SSTORE।
Real-World Example: Token Distribution
function distributeTokens(address[] calldata recipients, uint amount) external {
uint len = recipients.length;
for (uint i = 0; i < len;) {
_transfer(msg.sender, recipients[i], amount);
unchecked { ++i; }
}
}
100 recipients के लिए: ~150,000 gas बचत optimized vs unoptimized।
जब Optimize न करें
- 10 से कम iterations वाले loops में marginal gains
- Readability sacrifice करके complex optimizations
- Premature optimization — पहले profile करें
Testing
Hardhat gas reporter से measure करें:
await contract.processArray(largeArray);
// Gas used: 450,234 (before optimization)
// Gas used: 287,156 (after optimization)
निष्कर्ष
Loop optimization में:
Production contracts में ये techniques 30-50% gas savings दे सकती हैं।