
MetaMask gas API, Next.js ve ShadcnUI kullanarak basit bir gas takip uygulaması oluşturmayı öğrenin.

'Gas', işlem yapmak veya akıllı sözleşmeleri çalıştırmak gibi operasyonları gerçekleştirmek için gereken hesaplama çabasının miktarını ölçen bir birimdir. Tıpkı bir arabanın yakıtı gibi – ağın operasyonları işlemesi ve doğrulaması için gereklidir. Ethereum üzerindeki her işlem, karmaşıklığına göre belirlenen belirli bir miktarda gas gerektirir. Kullanıcılar, gas birimi başına ödemeye razı oldukları Ether miktarını temsil eden Gwei (1 Gwei = 1 Ether'in milyarda biri) cinsinden bir gas fiyatı belirler.
Gas fiyatlarını anlamak, kullanıcıların işlem maliyetlerini yönetmelerine yardımcı olduğundan blockchain ağlarında kritik öneme sahiptir. Güncel gas fiyatları hakkında bilgi sahibi olmak, kullanıcıların işlem başlatmak için en ekonomik zamanı seçmelerine ve işlem hızını belirlemelerine olanak tanır. Gas fiyatlarının farkında olmak; başarısız işlemleri önlemek, bütçe planlamak, ağ yoğunluğunu anlamak ve bilinçli yatırım kararları almak açısından da büyük önem taşır.
Infura aracılığıyla erişilebilen MetaMask Gas API'si, Ethereum Virtual Machine (EVM) uyumlu ağlar için gerçek zamanlı gas fiyatı bilgisi sağlamak amacıyla tasarlanmış özel bir araçtır. Bir oracle işlevi görerek bu ağlarda operasyon veya işlem gerçekleştirmek için gereken hesaplama maliyetlerine ilişkin güncel veriler sunar. API, geliştiricilerin gelişmiş gas tahmin özellikleri oluşturmasını sağlar; bu da arka uç işlem operasyonlarında maliyet tasarrufu sağlayabilir veya kullanıcılar için arayüzü iyileştirebilir.
Bu eğitimde, Gas API, Next.js ve ShadcnUI kullanarak bir Gas Tracker Uygulaması oluşturmayı öğreneceğiz. Bu uygulama, dapp kullanıcılarının işlem önceliklerine göre özelleştirilmiş önerilen gas fiyatlarına erişmesini sağlayacak ve bu işlemlerin bir blockchain bloğuna verimli şekilde dahil edilmesine yardımcı olacaktır.
Geçerli bir Web3 API anahtarı ve API anahtarı gizli bilgisi.
Node.js ve npm ya da yarn kurulu olmalıdır.
Next.js ve React konusunda temel bilgi.
Öncelikle makinenizde Node.js'in kurulu olduğundan emin olun. Node.js kurulumunu tamamladıktan sonra terminalinizi açarak aşağıdaki komutu çalıştırın ve yeni bir Next.js uygulaması başlatın:
npx create-next-app@latestKomutu çalıştırdıktan sonra birkaç istem görünecek ve belirlediğiniz proje adıyla – ben gastracker-app kullandım – yeni bir dizin oluşturulacaktır. Bu işlem, Next.js'in temel yapısını kurar ve gerekli bağımlılıkları yükler. Şimdi proje dizininize geçin:
Yeni proje dizininize girin ve aşağıdaki komutu kullanarak Next.js uygulamasını geliştirme modunda başlatın. Ardından tarayıcınızda http://localhost:3000 adresine giderek uygulamanızı inceleyebilirsiniz.
Uygulamamız için bir bileşen kütüphanesi kullanacağız. ShadcnUI'yi kurarak başlayalım:
npx shadcn-ui@latest initKurulum sırasında, aşağıdaki istemlerle components.json dosyasını yapılandırma konusunda yönlendirileceksiniz:
Bunu hallettikten sonra Shadcn UI'nin Card bileşenini de yükleyelim:
npx shadcn-ui@latest add cardBu eğitimde Shadcn UI'den Card bileşenini kullanmaya odaklanacağız. Bu bileşenler hakkında daha fazla bilgi edinmek için Shadcn UI web sitesini ziyaret edin. Ön uç kurulumumuz tamamlandığına göre Gas API ile çalışmaya başlamaya hazırız.
Kök dizinde, aşağıdaki kimlik bilgilerini depolayacağımız .env adlı bir dosya oluşturun:
API_KEY ve API_KEY_SECRET bilgilerini Infura panonuzdan aldığınızdan emin olun. API anahtarını GitHub'a göndermekten kaçınmak son derece önemlidir. Kök dizinde, gerekli satırların dahil edildiğini doğrulamak için .gitignore dosyasını kontrol edin.
Ayrıca axios ve dotenv paketlerine de ihtiyacımız olacak:
Şimdi gastracker-app'in kök dizininde 'index.js' adlı bir dosya oluşturun ve aşağıdaki kodu içine kopyalayın:
Başka bir terminal penceresinde aşağıdaki komutu çalıştırın.
node index.jsAşağıdakileri görmeniz gerekir:
Terminalde görüntülenen verileri gözlemlerseniz, API'den başarıyla yanıt aldığımızı gösterir. Bir sonraki adım, bu verileri ön uçta sunmaktır. index.js dosyasını artık silebilirsiniz.
Proje genelinde kullanılacak özel türler tanımlamak için kök dizinde 'index.d.ts' adlı bir dosya oluşturun ve aşağıdaki satırları ekleyin:
Global bir dosyadaki bu TypeScript arayüz bildirimleri, gas ücreti tahminleri ve API yanıtları için yapılar tanımlar. Bir blockchain ağında farklı işlem öncelik seviyeleri için ücret önerileri, bekleme süreleri, ağ yoğunluğu ve ücret trendleri gibi ayrıntıları kapsar.
'lib' klasöründe 'getData.ts' adlı bir dosya oluşturun ve aşağıdaki kodu ekleyin:
Bu kodlar, Gas API'sinden gas ücreti verilerini çeker:
Kimlik Doğrulama Kurulumu: Ortam değişkenleri olarak ayarlanan INFURA_API_KEY ve INFURA_API_KEY_SECRET'ten bir Buffer oluşturur. Bu Buffer, API isteklerinde temel kimlik doğrulama için base64 dizesine ('Auth' olarak adlandırılır) dönüştürülür.
Chain ID Belirleme: chainId değişkenini, blockchain bağlamında genellikle Ethereum mainnet'i temsil eden 1 olarak ayarlar.
getData Fonksiyonu: Gas ücreti verilerini çekmek için tasarlanmış asenkron bir fonksiyon:
Belirtilen chainId için önerilen gas ücretlerini almak amacıyla Infura API uç noktasına GET isteği yapmak için fetch kullanır.
İstekte daha önce oluşturulan Auth token'ını kullanarak Authorization başlığını ayarlar.
Başarılı olursa, yanıtı JSON olarak ayrıştırır ve önceden tanımlanmış arayüzle uyumlu şekilde GasFeesApiResponse olarak döndürür.
Ağ sorunları veya sunucu hataları gibi hataları konsola kaydeder.
Chain ID Değişkenliği: chainId, uygulamanın hangi ağ için oluşturulduğuna bağlı olarak ayarlanabilir. Infura'daki Gas API, başlıca EVM ağlarının çoğunu destekler. Desteklenen ağlar hakkında daha fazla bilgi için dokümantasyonu ziyaret edin.
Artık verileri görüntülemek için kullanıcı arayüzüne odaklanacağımız heyecan verici kısma geldik. Components klasörüne gidip 'GasCard.tsx' adlı bir bileşen oluşturalım.
Burada neler olduğuna bakalım:
İçe Aktarmalar ve Veri Çekme:
Bileşen, gas ücreti verilerini çekmek için getData fonksiyonunu ve daha önce kurduğumuz Shadcn UI'nin parçası olan Card, CardContent, CardHeader ve CardTitle gibi çeşitli UI bileşenlerini içe aktarır.
GasCard bileşeninin içinde, gas ücreti verilerini almak için getData fonksiyonu çağrılır.
Gas Ücreti Tahminlerinin Görüntülenmesi:
Belirli bir gas ücreti tahmini (GasFeeEstimate) ve başlık (title) için bir kart kullanıcı arayüzü oluşturan renderGasFeeEstimateCard adlı bir fonksiyon tanımlanır.
Bu fonksiyon, maksimum öncelik ücreti, gas başına maksimum ücret ve tahmini bekleme süreleri gibi ayrıntıları gösteren bir Card bileşeni oluşturur.
Bileşen Yapısı:
GasCard bileşeninin JSX yapısı, return ifadesinde özetlenmiştir. Veri kullanılabilirliğine bağlı olarak koşullu biçimde görüntülenen düşük, orta ve yüksek gas ücreti tahminleri için kartları sergilemek amacıyla bir grid düzeni kullanır.
Ek bir kart; tahmini temel ücret, ağ yoğunluğu, öncelik ücreti aralıkları (güncel ve geçmiş) ile öncelik ve temel ücretlerdeki trendler gibi daha fazla bilgiyi gösterir.
Geriye kalan tek adım, GasCard.tsx'i page.tsx dosyasına aktarmaktır. Bunun ardından tüm veriler ön uçta görünür hale gelecektir.
Infura'daki Gas API'sini kullanmak, EVM uyumlu ağlarla çalışan geliştiricilere önemli avantajlar sunar. Dalgalanan gas piyasasına ilişkin gerçek zamanlı içgörüler sağlayarak kullanıcıların işlem ücretleri hakkında bilinçli kararlar almasına olanak tanır. Bu durum, özellikle işlemlerin hem hızını hem de maliyet etkinliğini optimize etmek açısından faydalıdır.
Bu eğitim, GasAPI ile nasıl başlanacağını ve basit bir Gas Tracker Uygulamasının nasıl oluşturulacağını kapsamaktadır. Koda buradan ulaşabilirsiniz: GitHub'da GasAPI-Template.
Ancak bununla çok daha eğlenceli şeyler yapabiliriz; belirli aralıklarda geri sayım ile GasData'yı yenileme yöntemleri ekleyebilir ve GasAPI'yi mevcut herhangi bir uygulamaya entegre edebiliriz. Aşağıdaki kaynakları incelemenizi öneririm:
Gas API Belgeleri: Infura Gas API Dokümantasyonu
EventSea: GasAPI'yi yaratıcı biçimde kullanan tam yığın bir Events Dapp'i: GitHub'da EventSea
Keyifli Geliştirmeler! 🚀
Yapay zeka tarafından çevrildi. Hatalar içerebilir. Lütfen her zaman bilgileri doğrulayın.