Bir ERC-20 token onayı, akıllı bir kontrata cüzdanınızdaki tokenleri harcaması için verdiğiniz bir izindir ve bu onayları iptal etmek tek seferlik bir iş değil, rutin bir güvenlik görevidir. Uzun süredir kullanılmayan ya da 'sınırsız' onaylar, kullanıcı bir kontratı unuttuktan aylar sonra cüzdanların boşaltılmasının başlıca yoludur; bu nedenle aylık bir temizlik, kendi varlıklarını kendi saklayan (self-custody) bir kullanıcının geliştirebileceği en yüksek getirili alışkanlıktır.
Öne çıkanlar
- Bir 'sınırsız' ERC-20 onayı, siz o token türünü elinizde tuttuğunuz sürece ve siz iptal edene kadar, ilgili kontratın sizin sahip olduğunuz o türdeki tüm tokenleri harcamasına izin verir.
- 2023 ve 2024'teki çoğu DeFi varlık kaybı yeni kimlik avı imzalarını değil, eski onayları istismar etti; çünkü kurbanlar kontratın varlığını çoktan unutmuştu.
- Revoke.cash, Etherscan token-onay aracı ve Rabby'nin yerleşik onay yöneticisi hep aynı zincir üstü veriyi okur; birini seçin ve her ay kullanın.
- Onayı iptal etmek geçmişteki bir hırsızlığı geri almaz. Yalnızca daha önce onayladığınız bir kontratın gelecekte token taşımasını durdurur.
- Ethereum ana ağında tek bir iptal işlemi birkaç dolarlık gas ücretine mal olabilir; Base veya Arbitrum gibi bir L2 üzerinde aynı çağrı genellikle birkaç sent tutar.
Token onayı gerçekte nedir ve neden işlemin ötesinde yaşar
Bir merkeziyetsiz borsada token takas ettiğinizde, bir para piyasasında varlık ödünç verdiğinizde ya da bir DeFi paneli üzerinden stake ettiğinizde, tokenlarınızı bir kişiye teslim etmezsiniz. Token'ın akıllı kontratına, farklı bir akıllı kontratın sizin adınıza belirli sayıda tokeninizi taşımasına izin vermesini isteyen bir mesaj imzalarsınız. İmzaladığınız bu mesaj onaydır ve siz ya da biri açıkça iptal edene kadar zincir üzerinde süresiz olarak yaşar.
Yeni başlayanların yanlış anladığı kısım burasıdır. Onay tek bir işleme bağlı değildir. Süregelen bir izindir. 2023'te etkileşimde bulunduğunuz DEX veya borç verme protokolü, ilke olarak bugün de cüzdanınızdan token taşıyabilir; çünkü token kontratının kendisi buna izin verildiğini kayıt altına almıştır.
Etherscan gibi bir araçta göreceğiniz iki çeşit vardır. 'Sınırlı' bir onay bir tavan belirler, örneğin 100 USDC; bu tavana ulaşıldıktan sonra kontratın sizden yeniden imza istemesi gerekir. 'Sınırsız' onay (teknik olarak bir uint256'da, yani 256 bitlik işaretsiz tam sayıda temsil edilebilecek maksimum değer, ya da o kadar büyük bir sayı ki sınırsız sayılabilir) herhangi bir tavan koymaz. Çoğu DeFi arayüzü varsayılan olarak sınırsız onay kullanır; çünkü bu, kullanıcıyı her sonraki işlemde fazladan bir imzadan kurtarır ve aynı dapp için iki kez gas ödemek gereksiz hissettirir.
Takas gerçek bir dengeyle gelir: sınırsız onay sizin için de pratiktir ve o kontratın kontrolünü daha sonra ele geçirecek biri için de pratiktir.
Risk: unutulmuş bir onay nasıl bir varlık kaybına dönüşür
Başarısızlık biçimi nadiren yeni bir zeki hacktir. Neredeyse her zaman üç eski kalıptan biridir ve üçü de aylardır zincir üzerinde bekleyen onaylar yüzünden daha da kötüleşir.
1. Kontratın kendisi ele geçirilir. Bir geliştirici anahtarı kimlik avıyla alınır, bir çoklu imza cüzdanı ele geçirilir ya da protokol, saldırganların kontratları kötü niyetli bir sürüme yükselten bir teklif geçirdiği bir yönetişim saldırısına uğrar. Kontrat bir kez düşmanca hale geldiğinde, elinde tuttuğu hâlâ aktif her onay, kullanıcının cüzdanına doğrultulmuş dolu bir silah haline gelir. Kullanıcının yeni hiçbir şeyle etkileşimde bulunması gerekmez. Kontrat kendi başına transferFrom çağrısı yapar.
2. Protokol terk edilir ama kontrat duraklatılmaz. Pek çok DeFi projesi yayınlar, para toplar, ilgiyi kaybeder ve sessizce faaliyetine son verir. Kontratlar çalışmaya devam eder. Daha sonra bir açık bulunursa ve yamayacak bir ekip yoksa, saldırganlar o adresi bir zamanlar onaylamış her cüzdanı boşaltabilir. Bu durum 2020-2021 döngüsündeki eski stake ve getiri toplayıcı kontratlarla defalarca yaşanmıştır.
3. Gerçek bir dapp gibi görünen bir kimlik avı sitesini onayladınız. Sahte bir Uniswap veya Aave arayüzü, saldırganın kontrol ettiği bir kontrata onay imzalatır. Kullanıcı işlem yaptığını sanır ama aslında bir yabancıya belirli bir tokeni boşaltma izni vermiştir. Bu durumda onayı iptal etmek acildir ve tek çözümdür; çünkü imzalanan onay zaten zincir üzerindedir.
Bu listede eksik olana dikkat edin: varlık kaybının gerçekleşmesi için 'yeniden hacklenmeniz' gerekmez. Açık, blockchain'in soğuk hafızasında oturan ve gelecekte onu tetikleyecek bir olayı bekleyen onayın ta kendisidir.
Önceden onayladıklarınızı nasıl görürsünüz
İlk adım envanter çıkarmaktır. Cüzdanınızı, aynı zincir üstü verileri okuyan ve bunu birbirinden biraz farklı şekillerde sunan üç araçtan birine bağlayın.
Revoke.cash yeni başlayanlar için en uygun olanıdır. Siteye girersiniz, cüzdanınızı bağlarsınız ve bugün Ethereum, Arbitrum, Optimism, Base, Polygon, BNB Chain ve diğer büyük EVM (Ethereum Sanal Makinesi) ağlarını kapsayan desteklenen zincirlerde imzaladığınız tüm onayları listeler. Her satırda token, harcama yapan taraf (tokeni taşıyabilen sözleşme), izin miktarı (ne kadar taşıyabileceği) ve bir 'Revoke' (İptal Et) düğmesi yer alır. Ayrıca uzun süredir kullanılmamış sözleşmeleri potansiyel olarak atıl olarak işaretler.
Etherscan token-onay aracı etherscan.io/tokenapprovalchecker adresinde bulunur. Revoke.cash'e kıyasla biraz daha kaba bir arayüze sahiptir, ancak uzun süredir kamusal geçmişi olan bir ekip tarafından işletilir ve bazen Revoke.cash'in kaçırdığı uç durumları yakalar. İş akışı aynıdır: bağlan, gözden geçir, iptal et.
Rabby'nin yerleşik onay yöneticisi üçüncü taraf bir siteyi ziyaret etmeyi gerektirmeyen tek zincir üstü seçenektir. Rabby bir cüzdandır (tarayıcı eklentisi ve mobil uygulama) ve kendisi onaylarınızı okuyarak cüzdan arayüzünün içinde bir 'tehlikeli onaylar' listesi sunar. Rabby kullanıyorsanız bu en düşük sürtünmeli yoldur. Veri aynı veridir; arayüz yalnızca zaten güvendiğiniz bir yerde bulunur.
Hangi aracı seçerseniz seçin, oturum başına yalnızca bir tane kullanın. Birden çok onay-kontrol sekmesini aynı anda açmanın riski, cüzdanınızın hangi siteye bağlı olduğunu takip etmeyi zorlaştırmasıdır; bu da başlı başına hafif bir kimlik avı riski oluşturur.
Hangi onayların gerçekten tehlikeli olduğunu nasıl anlarsınız
Listeyi elde ettiğinizde her şeyi iptal etmenize gerek yoktur. İyi bir ilk geçiş, en riskli kalemlere öncelik verir.
Sonsuz onaylar ilk sırada gelir. Listeyi, çoğu zaman 1.15792e+59 gibi bilimsel gösterimle görüntülenen, maksimum uint256'nın kodlanmış biçimi olan büyük bir sayı içeren satırlara göre sıralayın ya da filtreleyin. Bunlar en yüksek kaldıraçlı temizliklerdir. Her biri, sözleşme yeniden sormadan cüzdanınızdaki o tokenin yüzde 100'ünü taşıyabilen bir sözleşmedir.
Artık kullanmadığınız sözleşmelere verilmiş sınırlı onaylar ikinci sıradadır. İki yıl önce bir stake sözleşmesine tam olarak 500 token için onay verdiyseniz ve artık o sözleşmeyi kullanmıyorsanız, o onay hâlâ geçerlidir. Sonsuz onaydan daha küçük bir etki alanına sahiptir, ancak hâlâ izleme yapmadığınız bir sözleşmeye doğrultulmuş dolu bir silah gibidir.
Atıl duran sözleşmeler incelenmeyi hak eder. Çoğu onay aracı bir 'son kullanım' zaman damgası gösterir ya da bir yıldan uzun süredir işlem yapmamış sözleşmeleri işaretler. Bunlar, büyük olasılıkla terk edilmiş projelere ait olan onaylardır ve terk edilmiş projeler, ileride istismar edilme olasılığı en yüksek onaylardır. Bunları iptal edin.
Hâlâ kullandığınız etkin sözleşmeler bekleyebilir. Uniswap üzerinde etkin şekilde işlem yapıyorsanız ve Aave'de borç veriyorsanız, bu onayları açık tutabilirsiniz. Her işlemde onayı iptal edip yeniden vermek gaz israfına yol açar ve başlı başına bir güvenlik riski olan imza yorgunluğuna neden olur. Aylık temizliğin amacı sıfır onay değildir; amaç sıfır eski onaydır.
İptal etmenin mekaniği ve gerçekte ne kadara mal olduğu
İptal etmenin kendisi de zincir üstü bir işlemdir. Token sözleşmesindeki approve fonksiyonunu çağırarak o harcama yapan taraf için izin miktarınızı sıfırlarsınız. Token sözleşmesi yeni izin miktarını kaydeder ve o bloktan itibaren harcama yapan taraf artık tokenlarınızı taşıyamaz.
Ethereum ana ağında, tek bir iptal işlemi, ağın yoğunluğuna bağlı olarak genellikle bir ila beş dolar arasında bir gaz maliyetine sahiptir. Yirmi eski onayınız varsa, bu küçümsenecek bir tutar değildir. Base, Arbitrum veya Optimism gibi katman-2 ağlarında (L2'ler) aynı çağrı birkaç sent, bazen bir centin kesri kadar sürer; çünkü L2'ler işlemleri toplar, Ethereum'dan güvenlik alır ve çok daha düşük ücret uygular. Aylık temizliğinizi nereye yapacağınızı seçiyorsanız, fiilen kullandığınız L2'de yapmak neredeyse her zaman doğru karardır.
Burada küçük ama gerçek bir tuzak vardır. Bir iptal işlemi gönderdiğinizde, cüzdanın yine de gaz ödemesi gerekir ve bu gaz, o zincirin yerli varlığından gelmelidir; yani Ethereum ve Arbitrum'da ETH, Polygon'da MATIC, BNB Chain'de BNB. Cüzdanınızda yalnızca stablecoin varsa ve yerli varlık bakiyeniz sıfırsa, iptal işlemi başarısız olur. Temizlemeyi düşündüğünüz her cüzdanda, birkaç dolar değerinde küçük bir miktarda yerli token bulundurun.
Başka bir tuzak: iptal etmek, gazı geri alamayacağınız anlamında geri alınamaz, ancak ertesi gün aynı sözleşmeye yeniden onay verebileceğiniz anlamında önemsiz şekilde geri alınabilir. Daha sonra tekrar kullanmaya karar verdiğiniz bir sözleşmeyi iptal etmenin herhangi bir cezası yoktur; yalnızca yeni bir onay imzalamanız, bunun için gaz ödemeniz ve yolunuza devam etmeniz gerekir.
İptal etmenin yapmadıkları
İptal etmek, iptal ettiğiniz sözleşmeden kaynaklanacak gelecekteki tükenmeleri engeller. Zaten gerçekleşmiş bir tükenmeyi geri alamaz, alamaz. Cüzdanınız Mart ayında boşaltıldıysa ve siz Mayıs ayında iptal ettiyseniz, Mart ayındaki tokenlar gitmiştir ve iptal işlemi, yasal, adli veya kurtarılabilir anlamda hırsızlıkla ilgisizdir.
İptal etmek, yarın imzalayacağınız yeni bir onaydan da sizi korumaz. Bir kimlik avı sitesini ziyaret eder, kötü niyetli bir sözleşmeye onay verir ve ardından temizlik yapmaya çalışırsanız, sorun yeni onaydır; eski Uniswap izninizi iptal etmek bunu çözmeye yetmez.
İptal etmek tokenlarınızı taşımaz. Bir takas, üçüncü bir taraftan imza ya da harcama yapan sözleşmeyle herhangi bir etkileşim gerektirmez. Token sözleşmesinin kendisine, izin defterindeki bir satırı sıfırlamasını söyleyen tek bir fonksiyon çağrısıdır.
Sürdürebileceğiniz aylık bir rutin
İnsanların onayları hiç iptal etmemesinin tek ve en büyük nedeni, bunun tek seferlik bir iş gibi hissettirmesidir; bu da yapılmamasını garanti eder. En güvenilir çözüm, onu bir takvim etkinliğine bağlamaktır. Ayın ilk pazar günü popüler bir tercihtir çünkü hafta sonları sakindir ve işlemin tam ortasında olma ihtimaliniz düşüktür; bazı insanlar kredi kartı ekstresinin kapandığı günü aynı nedenden dolayı seçer. Belirli gün önemli değildir. Önemli olan tekrardır.
Temizlik gününde iş akışı kısadır. Revoke.cash, Etherscan veya Rabby onay yöneticinizi açın. Aktif olarak kullandığınız cüzdanı bağlayın. Önce süresiz onayları sıralayın ve bunları iptal edin. Ardından, aracın genellikle işaretlediği uyku halindeki sözleşmeleri tarayın ve onları iptal edin. Hâlâ kullandığınız aktif sözleşmelere dokunmayın. Her işlemi onaylayın, yerleşmesini bekleyin ve sekmeyi kapatın.
L2 üzerindeki zaman maliyeti: yaklaşık beş ila on dakika. Ana ağdaki zaman maliyeti: benzer, artı birkaç dolarlık gas. Alışkanlık bir kez yerleştiğinde, banka ekstrenizi kontrol etmekten daha az zaman alır ve ilk bir drenajı engellediğinde kendini amorti eder.
Cüzdan güvenliği haberlerini akıllıca takip etme yöntemi
Cüzdan güvenliği olayları hızlı ilerler ve 'yönetilebilir bir hack' ile 'toplam kayıp' arasındaki fark, neredeyse her zaman kullanıcının savunmasız bir sözleşmeden ne kadar çabuk haberdar olduğu ve bir saldırgan süpürmeden önce onayını iptal edip etmediğidir. Her protokolün yönetim forumunu, denetim raporlarını ve olay sonrası incelemelerini elle takip etmek kaybedilen bir oyundur. Zippfeed, cüzdan güvenliği ve DeFi istismar manşetlerini duygu puanlaması (bullish, neutral veya bearish) ve bir önem derecelendirmesi ile öne çıkarır; böylece bir sonraki drenajdan sonra değil, önce doğru onayları iptal edebilirsiniz.