I thought I was being careful. I'd audited the contract. Read the code. Checked for common vulnerabilities. But I missed one line. One tiny, critical line. And it cost me $500.
This is the story of how I got rekt by a smart contract — and the lessons that might save you from the same fate.
The Opportunity
It was a new DeFi protocol. High yields. Audited by a reputable firm. The code was open source. The community was excited.
I put in $500 to test it. Small amount, I told myself. If it works, I'd add more. Classic "degen but careful" strategy.
The Bug I Missed
The contract had a function to deposit funds. I read it carefully. Looked for reentrancy attacks. Checked for integer overflow. Standard stuff.
What I didn't check: the withdrawal function.
Here's the bug (simplified):
function withdraw(uint256 amount) external {
require(balances[msg.sender] >= amount);
// Update balance AFTER transfer (WRONG!)
(bool success, ) = msg.sender.call{value: amount}("");
balances[msg.sender] -= amount;
}
See the problem? The balance is updated AFTER the transfer. This is a classic reentrancy vulnerability.
I knew about reentrancy. I'd read about The DAO hack. But I didn't look at the withdrawal function because I was in a hurry. The audit said it was safe.
What Happened
Within 2 hours of my deposit, someone exploited the bug. They used a contract that called withdraw() recursively before the balance was updated. Drained the entire pool.
My $500? Gone. Not stolen directly — just the pool was empty when I tried to withdraw.
The "Audit" Lie
Here's the kicker: the contract WAS audited. The audit report said "No critical vulnerabilities found."
But audits aren't guarantees. They're snapshots. And this bug was apparently added AFTER the audit — or the auditors missed it. Either way, the "audited" label gave me false confidence.
Lessons Learned (The Hard Way)
1. Read ALL the code, not just the parts you think matter
I checked deposit. Didn't check withdraw. That's like checking your front door lock but leaving the back door open.
2. Audits aren't magic
"Audited by [Big Name Firm]" sounds good. It's not a guarantee. Bugs slip through. Code changes after audit. Auditors are human.
3. Test with tiny amounts
I did this right. $500 was my "test" amount. I was prepared to lose it. I did. But I didn't lose my life savings.
4. If it looks too good to be true...
20% APY with no clear revenue source? That's not yield, that's someone else's deposit. Ponzi economics.
What I Do Now
- Only use protocols that have been live for 6+ months
- Check if the team is doxxed and has reputation
- Look for bug bounty programs (they attract white hats)
- Read the code myself — all of it
- Assume I'll lose whatever I put in
The Bottom Line
DeFi is the wild west. Smart contracts are immutable code with money attached. One bug, and it's gone forever.
My $500 was expensive tuition. But I'd rather learn this lesson with $500 than $50,000.
If you're playing in DeFi, assume you'll get burned eventually. Plan for it. Size accordingly. Don't bet more than you can afford to lose.