
Bu blog, Permissionless.js ve ERC-4337 özel paymaster akıllı sözleşmesi kullanarak gassız bir dapp oluşturmayı ele alıyor.

Bir blok zincirinde işlem yaptığımızda, arka planda pek çok süreç gerçekleşir. Bu süreçlerin her biri bir maliyetle birlikte gelir; biz buna "Gas Maliyeti" deriz. Peki Gas nedir?
Gas, Ethereum gibi bir blok zinciri ağında işlem gerçekleştirmek veya akıllı sözleşmeleri yürütmek için gereken hesaplama iş yükünü ölçen bir birimdir. Gas, ağ içindeki işlemleri düzenlediği ve önceliklendirdiği için kritik bir öneme sahiptir. Blok zinciri ağlarının sınırlı işlem kapasitesine sahip olması nedeniyle gas ücretleri iki temel amaca hizmet eder:
Doğrulayıcıları veya Madencileri Teşvik Etmek: Gas ücretleri, işlemleri işleyen ve onaylayan doğrulayıcıları ya da madencileri ödüllendirerek ağın güvenli ve işlevsel kalmasını sağlar.
Sistem İstismarını Önlemek: Her işleme bir maliyet yükleyerek spam saldırılarını ve hesaplama kaynaklarının kötüye kullanımını caydırır; ağı olası istismarlara karşı korur.
Gas'ın bir blok zincirinin çalışması için gereken "yakıt" olduğu düşünüldüğünde, gassız bir dapp fikri çelişkili görünebilir; tıpkı bir arabayı yakıtsız çalıştırmaya çalışmak gibi. Peki bir blok zinciri gas olmadan nasıl çalışabilir?
Gerçekte gas ortadan kalkmaz. Bunun yerine, gas ücretlerini ödeme sorumluluğu kullanıcıdan başka bir tarafa; hizmet sağlayıcıya veya dapp'in kendisine kayar. Bu yaklaşım, kullanıcıların gas maliyetlerine doğrudan katlanmadan dapp ile etkileşime girmesine olanak tanır ve kullanıcı deneyimini ile erişilebilirliği artırır.
Normalde kullanıcılar gas ücretlerini ödemekten sorumludur; bu ücretler, gas fiyatına bağlı olarak işlem maliyetlerini artırabilir. Ancak gassız bir dapp'te gas ücreti, işlemi kullanıcı adına imzalayan ve ödeyen bir üçüncü tarafça karşılanır. Bu üçüncü taraf çoğunlukla bir aktarıcıdır (relayer); ancak bazı durumlarda bunun yerine hesap soyutlama mekanizmaları kullanılır.
Gassız bir dapp'i mümkün kılan iki tür standart vardır: ERC-4337 ve ERC-2771. Bunlara daha yakından bakalım:
ERC-4337: Bu standart, Ethereum hesaplarının akıllı sözleşmeler gibi davranmasına olanak tanıyan hesap soyutlamayı hayata geçirir. Özellikle işlem başlatmayı geleneksel Harici Sahipli Hesaplardan (EOA) ayırarak işlemlerin nasıl başlatılacağı ve yetkilendirileceği konusunda daha fazla esneklik sağlar. Bu sayede birden fazla eylemi tek bir işlemde bir araya getirmek veya programlanabilir cüzdanlar oluşturmak gibi daha karmaşık işlem akışları mümkün hale gelir.
ERC-2771: Bu standart, kullanıcıların gas ücretlerini doğrudan ödemek için ETH'ye ihtiyaç duymadan dapp'lerle etkileşime girmesine olanak tanıyan bir meta-işlem çerçevesi sunar. Güvenilir bir yönlendirici (forwarder), işlemi kullanıcı adına yönetir ve dapp, yönlendiriciye gas maliyetlerini geri öder. Bu durum, cüzdanlarında ETH bulunmayan ancak dapp'lerle etkileşime geçmek isteyen yeni kullanıcıların sisteme dahil olmasını kolaylaştırır.
Bu örnekte, özel paymaster mantığıyla istemciler (public ve Pimlico paymaster istemcileri) oluşturmayı, bir akıllı hesap kurmayı ve paymaster için özel mantık tanımlamayı kapsayan bir yapı oluşturmak amacıyla permissionless.js ve ERC-4337 kullanacağız. Ancak önce paymaster'ın ne olduğunu anlayalım.
Paymaster, Ethereum'un hesap soyutlama sistemindeki (ERC-4337 gibi) özel bir akıllı sözleşmedir. İşlem gas ücretleri için bir sponsor görevi üstlenerek kullanıcıların ETH dışındaki token'larla ödeme yapmasına veya ücretlerin tamamen karşılanmasına olanak tanır. Paymaster, özel mantığa dayalı olarak gas maliyetini üstlenip üstlenmeyeceğine karar verir; bu da dapp'ler için daha fazla esneklik sağlar. İşlem maliyeti üçüncü bir tarafça karşılanabileceğinden, kullanıcıların ETH tutmasına gerek kalmadan süreç kolaylaşır.
Öncelikle kodlarımızı depolayacağımız bir utils/index.ts dosyası oluşturalım.
Public istemciyi oluşturun (isteğe bağlı): Bu, SimpleSmartAccount ile etkileşim kurmak için kullanılacak Pimlico paymaster istemcisidir:
Bir hesap oluşturun: Bu, permissionless.js tarafından desteklenen hesaplardan herhangi biri veya arayüze uygun özel hesaplar olabilir. Bu örnek için bir SimpleSmartAccount kullanacağız.
Özel paymaster mantığıyla Smart Account istemcisini oluşturun: smartAccountClient oluştururken, bir kullanıcı işlemi imzalanıp gönderilmeden önce çağrılacak bir sponsorUserOperation fonksiyonu ekleyebiliriz. Bu fonksiyon paymasterAndData, preVerificationGas, verificationGasLimit ve callGasLimit alanlarını döndürmelidir.
İşlem gönderin: Artık işlemleri normal şekilde gönderebilirsiniz. sponsorUserOperation fonksiyonu, her işlem imzalanıp gönderilmeden önce çağrılarak belirlediğiniz özel paymaster mantığını uygular.
permissionless.js ve Pimlico istemcisini kullanarak özel paymaster mantığıyla entegre edilmiş bir akıllı hesap kurduk. Bu yapı, paymaster aracılığıyla gas ücretlerini ve işlem yönetimini otomatikleştirirken blok zinciriyle kesintisiz etkileşim sağlar. Şimdi bunu deneme sırası sizde.
1. Güvenilir aktarıcılar ve paymasterlar: Gassız dapp'ler, işlemleri kullanıcılar adına yönetmek için üçüncü taraf aktarıcılara veya paymasterlara bağımlı olduğundan, bu varlıkların güvenilir ve güvenli olmasını sağlamak kritik önem taşır. Kötü niyetli veya ele geçirilmiş bir aktarıcı, işlemleri değiştirebilir ya da engelleyebilir. Saygın hizmetler kullanın ve aktarıcının başarısız olması durumuna karşı yedek mekanizmalar uygulayın.
2. İşlem bütünlüğü: Bir aktarıcı kullanıldığında, işlem kullanıcı adına aktarıcı tarafından imzalanabilir. Aktarıcının, işlemi blok zincirine göndermeden önce herhangi bir kötü niyetli şekilde değiştirmediğinden emin olun. Akıllı sözleşme veya mantığın, işlem ayrıntılarının (örneğin hedef adres, değer) kullanıcının niyetiyle örtüştüğünü doğruladığından emin olun.
3. Paymaster mantığı güvenliği: Paymaster, özel mantığa dayalı olarak gas ücretlerini üstlenip üstlenmeyeceğine karar verdiğinden, bu mantığın güvenli olduğundan ve istenmeyen tarafların ücretsiz işlemler gerçekleştirmek için paymasterı istismar etmesine izin vermediğinden emin olun. Kötüye kullanımı veya istenmeyen işlem sponsorluğunu önlemek için sağlam kurallar ve denetimler uygulayın.
4. Akıllı sözleşme denetimleri: Gassız dapp'ler, hesap soyutlama veya meta-işlemler için genellikle karmaşık akıllı sözleşmeler içerir. Bu sözleşmeler işlem akışını ve ücretleri yönettiğinden, güvenlik açıklarına karşı düzenli olarak denetleyin. Sözleşme açıkları, saldırganların işlem akışlarını manipüle ettiği potansiyel istismarlara yol açabilir.
5. Gas fiyatı manipülasyonu: Bir paymasterın gas ücretlerini karşıladığı gassız bir dapp'te, saldırganlar paymasterın üstlendiği maliyetleri artırmak amacıyla gas fiyatlarını manipüle etmeye çalışabilir. Gas ücretlerini sınırlandırmak ve aşırı maliyetli işlemleri reddetmek için paymaster mantığına güvenlik önlemleri ekleyin.
6. Özel anahtarların güvenli saklanması: permissionless.js veya Pimlico gibi çözümler kullanırken, işlemleri imzalamak için kullanılan özel anahtarların güvenli bir şekilde saklandığından emin olun. Özel anahtarları uygulamanıza asla sabit kodlamayın; anahtar yönetimi için donanım cüzdanları veya güvenli enklavlar gibi güvenli ortamlar kullanmayı değerlendirin.
Gassız dapp'ler, gas ücretlerini üçüncü bir tarafa devrederek dapp'lerdeki kullanıcı deneyimini geliştirmenin yenilikçi bir yoludur. ERC-4337 gibi standartlardan yararlanan geliştiriciler, yeni kullanıcılar için giriş engellerini düşüren daha esnek ve kullanıcı dostu uygulamalar oluşturabilir.
Sunulan kod parçacıkları, permissionless.js, Pimlico istemcileri ve özel paymaster mantığı kullanılarak gassız işlemlerin nasıl hayata geçirileceğini göstermektedir. Bu adımları izleyerek blok zinciri etkileşimini basitleştiren, daha geniş bir kitleye erişilebilir kılan dapp'ler inşa edebilirsiniz. Şimdi gassız dapp'lerin potansiyelini keşfetme ve inşa etme sırası sizde!
Yapay zeka tarafından çevrildi. Hatalar içerebilir. Lütfen her zaman bilgileri doğrulayın.