ERC20 Approve işlemi, merkeziyetsiz finansın (DeFi) temel yapı taşıdır. Ancak, bu mekanizma büyük güvenlik risklerini de beraberinde getirir. Çoğu kullanıcı, bir dApp (merkeziyetsiz uygulama) kullanırken “Onayla” butonuna basar. Ne yazık ki, arka planda nelerin gerçekleştiğini çok az kişi bilir. Bu rehber, token onaylarının mantığını ve varlıklarınızı nasıl koruyacağınızı anlatır.
İçindekiler
## ERC20 Approve ve TransferFrom Mantığı
DeFi protokolleri tokenlarınızı doğrudan cüzdanınızdan alamaz. Öncelikle, akıllı sözleşmeye yetki vermeniz gerekir. ERC20 Approve fonksiyonu tam olarak bu işe yarar. Siz, sözleşmeye (harcayıcıya) belirli bir miktar tokenı kullanma hakkı tanırsınız.
Bununla birlikte, süreç şu şekilde işler:
-
Kullanıcı
approve(spender, amount)fonksiyonunu çağırır. -
Akıllı sözleşme,
transferFromfonksiyonunu kullanarak yetki sınırları dahilinde tokenları çeker. -
İşlem gerçekleşir.
Örneğin, Uniswap üzerinde bir takas yapacaksınız. Uniswap sözleşmesine tokenlarınızı çekme yetkisi verirsiniz. Ardından, Uniswap bu yetkiyi kullanır ve takası tamamlar.
## Sınırsız Onay (Infinite Approval) Riski Nedir?
Geliştiriciler, kullanıcı deneyimini iyileştirmek ister. Bu nedenle, dApp’ler genellikle “sınırsız onay” talep eder. Yani, sözleşmeye cüzdanınızdaki tüm tokenları harcama yetkisi verirsiniz.
Açıkçası, bu durum büyük bir kolaylık sağlar. Her işlemde tekrar tekrar onay vermeniz ve gas ücreti ödemeniz gerekmez. Fakat, bu durum devasa bir güvenlik açığı yaratır. Eğer o protokol hacklenirse, saldırganlar yetki verdiğiniz tüm bakiyeyi saniyeler içinde boşaltır.
İstatistikler bu tehlikeyi kanıtlar niteliktedir:
-
SHOPX Protokolü (2022): Sınırsız onay açığı nedeniyle 7 Milyon Dolar kaybetti.
-
Li.Fi Protokolü (2024): Benzer bir açık yüzünden 9.7 Milyon Dolar çaldırdı.
-
Phishing Saldırıları: Saldırganlar artık doğrudan transfer yerine, “Permit” imzaları ile onay çalıyor.
Kısacası, kolaylık güvenlikten ödün vermenize neden olur.
## Gerçek Bir Vaka: SushiSwap Saldırısı Analizi
Teori her zaman pratiğe uymaz. Gerçek dünya örnekleri riskin boyutunu netleştirir. 9 Nisan 2023 tarihinde SushiSwap büyük bir saldırıya uğradı.
Olayın detayları şöyledir:
-
Hackerlar,
RouterProcessor2kontratındaki bir “approve” hatasını istismar etti. -
Kontrat henüz dört günlüktü.
-
Saldırganlar, 3.3 Milyon Dolar değerinde varlığı çaldı.
-
Şans eseri, “White Hat” (beyaz şapkalı) hackerlar devreye girdi.
-
Lido ve diğer ekipler 1.000 ETH‘den fazlasını kurtardı.
Bu saldırı sadece SushiSwap kullanıcılarını değil, 14 farklı ağdaki (Arbitrum, Polygon, Ethereum vb.) kullanıcıları etkiledi. Özellikle Arbitrum ağında 2000’den fazla adres risk altındaydı. Sadece onay veren kullanıcılar zarar gördü. Onay vermeyenler güvende kaldı.
## Güvenli Çözümler: Permit2 ve EIP-2612
Teknoloji yerinde saymaz. Ethereum geliştiricileri bu riskleri azaltmak için yeni standartlar geliştiriyor. Bunlardan en önemlisi EIP-2612 ve Uniswap’ın Permit2 çözümüdür.
Bu sistemlerin avantajları şunlardır:
-
Gas Ücreti Yok: Onay işlemi zincir dışı (off-chain) imza ile gerçekleşir.
-
Süreli İzinler: Onaylar belirli bir süre sonra otomatik olarak sona erer.
-
Atomik İşlemler: Onay ve transfer tek bir adımda gerçekleşir.
Böylece, kullanıcılar “sınırsız onay” vermek zorunda kalmaz. Permit2, kullanıcı deneyimini bozmadan güvenliği artırır. Ancak, kullanıcılar imzaladıkları mesajları yine de dikkatle okumalıdır. Dolandırıcılar sahte Permit imzaları da kullanabilir.
## Geliştiriciler İçin: Race Condition ve Güvenli Kodlama
Geliştiriciler büyük bir sorumluluk taşır. Race Condition (Yarış Durumu), onay mekanizmasının en bilinen açığıdır.
Senaryo şöyledir:
-
Kullanıcı onayı 100’den 50’ye düşürmek ister.
-
Hacker (veya bot), bu işlemi fark eder.
-
Onay düşmeden önce 100 tokenı çeker.
-
Ardından işlem gerçekleşir ve 50 token daha çekme hakkı kazanır.
-
Toplamda 150 token çeker.
Bu sorunu çözmek için “Approve-to-Zero” (Sıfıra Onay) deseni kullanın:
// Önce onayı sıfırla, sonra yeni değeri ata
if (token.allowance(msg.sender, spender) != 0) {
token.approve(spender, 0);
}
token.approve(spender, newAmount);
Ayrıca, OpenZeppelin kütüphanelerini kullanın ve safeIncreaseAllowance fonksiyonlarını tercih edin.
## Kullanıcılar İçin Aksiyon Planı: Revoke İşlemi
Güvenliğinizi sağlamak sizin elinizdedir. Düzenli olarak “temizlik” yapmalısınız. Kullanmadığınız dApp’lerin yetkilerini mutlaka kaldırın.
Bunu şu şekilde yaparsınız:
-
Araç Kullanın: Revoke.cash veya Etherscan Token Approval aracını açın.
-
Cüzdanı Bağlayın: Cüzdanınızı güvenli bir şekilde bağlayın.
-
Filtreleyin: “Unlimited” (Sınırsız) onayları tespit edin.
-
İptal Edin (Revoke): Riskli gördüğünüz veya kullanmadığınız onayları iptal edin.
Unutmayın, cüzdan bağlantısını kesmek onayları iptal etmez. Mutlaka “Revoke” işlemi (zincir içi işlem) yapmanız gerekir.
Özetle: Sınırsız onaylardan kaçının. Güvendiğiniz protokolleri bile düzenli olarak denetleyin. Dijital varlıklarınızın kontrolü sadece sizde olmalıdır.



ERC20 approve konusunun bu kadar net ve örneklerle anlatılması gerçekten çok faydalı olmuş. Özellikle SushiSwap vakası ve sınırsız onay riskleri çoğu kullanıcının gözünden kaçıyor. DeFi kullanan herkesin mutlaka okuması gereken bir rehber.