
Permit imzaları: işlem olmayan onay
Zincir üstü bir token onayı bir işlemdir: gas ödersiniz ve bir sözleşme tokenlerinizi taşıma hakkı kazanır. Token onayları, bu izinlerin siz onları unuttuktan çok sonra bile neden geçerli kaldığını anlatıyor.
Permit imzaları aynı türden izni hiçbir işlem olmadan verir. Gas yok, geçmişinizde iz yok — yalnızca bir "İmzala" düğmesi. Tam da bu yüzden cüzdan boşaltıcıların (drainer) en sevdiği tekniklerden biri hâline geldiler.
Permit nedir?
Permit, EIP-712 standardının tipli veri biçiminde hazırlanmış, zincir dışı bir mesajdır ve şunu söyler: "Bu adresin, bu tokenden bu miktara kadar, bu zamana kadar harcama yapmasına izin veriyorum." Onu imzalarsınız, göndermezsiniz. İmzaya sahip olan herkes daha sonra gas'ı kendisi ödeyerek onu zincire gönderebilir ve izin yürürlüğe girer.
İki yaygın biçimi vardır:
- EIP-2612 permit. Token sözleşmesinin içine yerleşiktir (birçok stablecoin ve yeni token destekler). Token imzayı doğrular ve sıradan bir harcama izni kaydeder — tıpkı bir
approveişlemi göndermişsiniz gibi. - Uniswap Permit2. Birçok uygulamanın herhangi bir ERC-20 için kullandığı ayrı bir sözleşme. Permit2'yi zincir üstünde bir kez, çoğu zaman sınırsız miktar için onaylarsınız; sonrasında uygulamalar imzalı Permit2 mesajlarıyla erişim alır ve bu izinler tokende değil, Permit2'nin içinde tutulur.
İkisi de bir işlemden tasarruf sağlar ve uygulamaların "onayla ve takas et" adımlarını tek adımda birleştirmesine izin verir. Sorun, bir imzanın nasıl hissettirdiğidir: işlem isteği para hareketi gibi görünür, imza isteği ise oturum açma gibi.
Drainer'lar neden bayılıyor?
Sahte bir airdrop, mint ya da "ödül talep et" sayfası cüzdanınızı bağlamanızı ister, ardından bir imza isteği gösterir. İmzalarsınız, hiçbir şey olmamış gibi görünür ve sekmeyi kapatırsınız. Dakikalar sonra saldırgan permit'inizi gönderir, kendi adresini spender yapar ve tokenleri almak için transferFrom çağırır. Hiç işlem göndermediniz, gas uyarısı da iptal edilecek bir şey de olmadı; yine de bakiyeniz gitti.
Önemli alanlar
Bir tipli veri isteği çıktığında message bölümünde şu alanlara bakın:
- spender — harcama hakkını kim alıyor. Bilinen bir uygulamanın sözleşmesi yerine tanımadığınız bir adresse, durun.
- value (veya amount) — ne kadar.
115792089237316195423570985008687907853269984665640564039457584007913129639935gibi devasa bir sayı sınırsız demektir. - deadline (veya expiration / sigDeadline) — imzanın ne zamana kadar kullanılabileceği. Yıllar sonrasına uzanan bir tarih tehlike işaretidir.
- nonce — her imzanın yalnızca bir kez çalışması için bir sayaç. Bir permit'i güvenli yapmaz.
domain.name ve verifyingContract iznin hangi tokene (veya Permit2'ye) ait olduğunu söyler; primaryType ise her şeyi ele verir: Permit, PermitSingle, PermitBatch ve PermitTransferFrom hepsi harcama izinleridir.
Tipli veri isteyen "giriş" sayfaları
Gerçek oturum açma istekleri genellikle siteyi, adresinizi ve bir nonce'u belirten düz metin mesajlarıdır; bir mesajı imzalamak bunların neyi kanıtladığını açıklıyor. Bir girişin token sözleşmesi, spender, miktar veya son tarih içermesi için hiçbir neden yoktur.
Yani bir sayfa "devam etmek için giriş yapın" ya da "cüzdanınızı doğrulayın" diyor ve istek Permit benzeri bir primaryType taşıyan yapılandırılmış tipli veriyse, onu giriş kılığına girmiş bir onay isteği olarak görün. Reddedin.
Bir permit'i iptal etmek
İmzanın kullanılıp kullanılmadığına bağlıdır:
- Kullanılmış EIP-2612 permit — artık tokendeki normal bir zincir üstü izindir. Her onay gibi, sıfıra çekerek iptal edin. SSP'den token onaylarını iptal etmek bunları nasıl kontrol edip kaldıracağınızı anlatıyor.
- Permit2 izinleri — Permit2 sözleşmesinde bulunur. Tokenin Permit2'ye verdiği onayı iptal etmek ona dayanan tüm uygulamaları keser; Permit2'yi anlayan iptal araçları tek tek spender'ları da kaldırabilir.
- İmzalanmış ama henüz kullanılmamış — imza son tarihine kadar ya da nonce'u tüketilene kadar geçerli kalır. Bu nonce'u önce zincir üstünde tüketerek iptal edilebilir (EIP-2612'de kendinize ait zararsız bir permit göndererek; Permit2'de nonce geçersiz kılma fonksiyonları vardır), ama bu, imzayı zaten elinde tutan biriyle yapılan bir yarıştır. Tokenleri güvenli bir adrese taşımak çoğu zaman daha hızlıdır. Güvenilir savunma, en baştan imzalamamaktır.
SSP tipli veriyi nasıl ele alıyor?
SSP'nin EVM hesapları, iki cihazla onaylanan ERC-4337 akıllı hesaplardır ve bu, tabloyu değiştirir.
Ne görürsünüz? SSP Wallet'ta bir tipli veri isteği (WalletConnect üzerinden) isteyen siteyi, adresinizi ve ağı, ayrıca tam EIP-712 verisini biçimlendirilmiş JSON olarak gösterir. Permit'e özel bir çözümleme yoktur — "bu, X'in sınırsız USDC harcamasına izin verir" gibi bir özet yok — bu yüzden yukarıdaki alanları kendiniz okuyun. Ardından SSP Key, alan adı ve primaryType ile tek satırlık bir özet gösterir (örneğin "Typed data signature for USD Coin (Permit)"); ham veri bir düğmenin arkasındadır. Herhangi bir şey imzalanmadan önce iki cihazın da onay vermesi gerekir.
Permit'ler geçerli mi? Çoğu EIP-2612 permit'i ecrecover ile doğrulanır; bu yalnızca tek anahtarlı sıradan bir adres için çalışır, dolayısıyla SSP'nin EVM kasaları gibi akıllı hesaplar bu kontrolü karşılayamaz. Akıllı hesaplardan gelen permit türü imzalara verilen destek uygulamadan uygulamaya değişir; bu yüzden her tipli veri isteğine işe yarayacakmış gibi yaklaşın.
Dürüst özet
Permit, imza olarak teslim edilen bir onaydır: ücretsiz, sessiz ve biri onu gönderdiği anda bakiyeyi boşaltmaya tamamen muktedir. İmzalamadan önce spender'ı, miktarı ve son tarihi okuyun, bunları taşıyan her "girişten" şüphelenin ve artık ihtiyacınız olmayan izinleri — tokende ya da Permit2'de — iptal edin.
SSP'nin iki cihazlı onayı size ikinci bir bakış sağlar ve SSP Key alan adını ve türü gösterir; ancak hiçbiri permit'i sizin yerinize çözümlemez — okumak hâlâ size düşer.


