Ana içeriğe atla

Web3 Kullanarak İşlem Gönderme

işlemler
web3.js
Alchemy
Başlangıç
Elan Halpern
4 Kasım 2020
8 dakikalık okuma

Bu, Web3 kullanarak Ethereum işlemleri göndermeye yönelik başlangıç dostu bir rehberdir. Ethereum blokzincirine bir işlem göndermek için üç ana adım vardır: oluşturma, imzalama ve yayınlama. Aklınıza takılabilecek tüm soruları yanıtlamayı umarak bu üçünü de inceleyeceğiz! Bu eğitimde, işlemlerimizi Ethereum zincirine göndermek için Alchemy (yeni sekmede açılır) kullanacağız. Buradan ücretsiz bir Alchemy hesabı oluşturabilirsiniz (yeni sekmede açılır).

NOT: Bu rehber, uygulamanızın arka ucunda (backend) işlemlerinizi imzalamak içindir. İşlemlerinizi ön uçta (frontend) imzalamayı entegre etmek istiyorsanız, Web3'ü bir tarayıcı sağlayıcısıyla (yeni sekmede açılır) entegre etme konusuna göz atın.

Temeller

Çoğu blokzincir geliştiricisinin ilk başladığında yaptığı gibi, bir işlemin nasıl gönderileceği (oldukça basit olması gereken bir şey) hakkında biraz araştırma yapmış ve her biri farklı şeyler söyleyen, sizi biraz bunaltan ve kafanızı karıştıran çok sayıda rehberle karşılaşmış olabilirsiniz. Eğer bu durumdaysanız endişelenmeyin; hepimiz bir noktada aynı durumdaydık! Bu yüzden, başlamadan önce birkaç şeyi açıklığa kavuşturalım:

1. Alchemy özel anahtarlarınızı saklamaz

  • Bu, Alchemy'nin sizin adınıza işlemleri imzalayamayacağı ve gönderemeyeceği anlamına gelir. Bunun nedeni güvenlik amaçlıdır. Alchemy sizden asla özel anahtarınızı paylaşmanızı istemez ve özel anahtarınızı asla barındırılan bir düğümle (veya bu konuda herhangi biriyle) paylaşmamalısınız.
  • Alchemy'nin çekirdek API'sini kullanarak blokzincirden okuma yapabilirsiniz, ancak ona yazmak için işlemlerinizi Alchemy aracılığıyla göndermeden önce imzalamak üzere başka bir şey kullanmanız gerekecektir (bu, diğer herhangi bir düğüm hizmeti için de aynıdır).

2. "İmzalayıcı" (signer) nedir?

  • İmzalayıcılar, özel anahtarınızı kullanarak sizin adınıza işlemleri imzalar. Bu eğitimde işlemimizi imzalamak için Alchemy Web3 (yeni sekmede açılır) kullanacağız, ancak başka herhangi bir Web3 kütüphanesini de kullanabilirsiniz.
  • Ön uçta (frontend), sizin adınıza işlemleri imzalayacak ve gönderecek olan MetaMask (yeni sekmede açılır) iyi bir imzalayıcı örneğidir.

3. İşlemlerimi neden imzalamam gerekiyor?

  • Ethereum ağında bir işlem göndermek isteyen her kullanıcı, işlemin kaynağının iddia ettiği kişi olduğunu doğrulamak için işlemi (özel anahtarını kullanarak) imzalamalıdır.
  • Bu özel anahtarı korumak son derece önemlidir, çünkü ona erişim sağlamak Ethereum hesabınız üzerinde tam kontrol sağlayarak sizin (veya erişimi olan herhangi birinin) adınıza işlemler gerçekleştirmesine olanak tanır.

4. Özel anahtarımı nasıl korurum?

  • Özel anahtarınızı korumanın ve onu işlemler göndermek için kullanmanın birçok yolu vardır. Bu eğitimde bir .env dosyası kullanacağız. Ancak, özel anahtarları saklayan ayrı bir sağlayıcı kullanabilir, bir anahtar deposu dosyası veya başka seçenekler de kullanabilirsiniz.

5. eth_sendTransaction ve eth_sendRawTransaction arasındaki fark nedir?

eth_sendTransaction ve eth_sendRawTransaction, gelecekteki bir bloğa eklenmesi için Ethereum ağına bir işlem yayınlayan Ethereum API işlevleridir. İşlemlerin imzalanmasını nasıl ele aldıkları konusunda farklılık gösterirler.

Web3 kullanırken, eth_sendRawTransaction işlevine web3.eth.sendSignedTransaction (yeni sekmede açılır) çağrılarak erişilir.

Bu eğitimde kullanacağımız şey budur.

6. Web3 kütüphanesi nedir?

Tamam, bu sorulardan birkaçını aradan çıkardığımıza göre, eğitime geçebiliriz. Alchemy Discord (yeni sekmede açılır) kanalında istediğiniz zaman soru sormaktan çekinmeyin!

7. Güvenli, gaz için optimize edilmiş ve gizli işlemler nasıl gönderilir?

NOT: Bu rehber bir Alchemy hesabı, bir Ethereum adresi veya MetaMask cüzdanı, Node.js ve npm'in kurulu olmasını gerektirir. Eğer kurulu değilse, şu adımları izleyin:

  1. Ücretsiz bir Alchemy hesabı oluşturun (yeni sekmede açılır)
  2. MetaMask hesabı oluşturun (yeni sekmede açılır) (veya bir Ethereum adresi edinin)
  3. Node.js ve npm'i kurun (yeni sekmede açılır)

İşleminizi Gönderme Adımları

1. Sepolia test ağında bir Alchemy uygulaması oluşturun

Alchemy Kontrol Panelinize (yeni sekmede açılır) gidin ve ağınız için Sepolia'yı (veya başka bir test ağını) seçerek yeni bir uygulama oluşturun.

2. Sepolia musluğundan ETH talep edin

ETH almak için Alchemy Sepolia musluğundaki (yeni sekmede açılır) talimatları izleyin. Başka bir ağın değil, Sepolia Ethereum adresinizi (MetaMask'ten) eklediğinizden emin olun. Talimatları izledikten sonra, cüzdanınıza ETH'nin ulaştığını iki kez kontrol edin.

3. Yeni bir proje dizini oluşturun ve içine cd yapın

Komut satırından (Mac'ler için terminal) yeni bir proje dizini oluşturun ve içine gidin:

mkdir sendtx-example
cd sendtx-example

4. Alchemy Web3'ü (veya herhangi bir Web3 kütüphanesini) kurun

Alchemy Web3 (yeni sekmede açılır)'ü kurmak için proje dizininizde aşağıdaki komutu çalıştırın:

Not, Ethers.js kütüphanesini kullanmak isterseniz, buradaki talimatları izleyin (yeni sekmede açılır).

npm install @alch/alchemy-web3

5. dotenv'i kurun

API anahtarımızı ve özel anahtarımızı güvenli bir şekilde saklamak için bir .env dosyası kullanacağız.

npm install dotenv --save

6. .env dosyasını oluşturun

Proje dizininizde bir .env dosyası oluşturun ve aşağıdakileri ekleyin (“your-api-url" ve "your-private-key" kısımlarını değiştirerek)

  • Alchemy API URL'nizi bulmak için, kontrol panelinizde yeni oluşturduğunuz uygulamanın uygulama ayrıntıları sayfasına gidin, sağ üst köşedeki “View Key” (Anahtarı Görüntüle) seçeneğine tıklayın ve HTTP URL'sini alın.
  • MetaMask kullanarak özel anahtarınızı bulmak için bu rehbere (yeni sekmede açılır) göz atın.
API_URL = "your-api-url"
PRIVATE_KEY = "your-private-key"
.env dosyasını işlemeyin (commit)! Sırlarınızı tehlikeye atacağınız için .env dosyanızı asla kimseyle paylaşmadığınızdan veya ifşa etmediğinizden emin olun. Sürüm kontrolü kullanıyorsanız, .env dosyanızı bir gitignore dosyasına ekleyin.

7. sendTx.js dosyasını oluşturun

Harika, artık hassas verilerimizi bir .env dosyasında koruduğumuza göre kodlamaya başlayabiliriz. İşlem gönderme örneğimiz için, Sepolia musluğuna ETH'yi geri göndereceğiz.

Örnek işlemimizi yapılandıracağımız ve göndereceğimiz yer olan bir sendTx.js dosyası oluşturun ve içine aşağıdaki kod satırlarını ekleyin:

6. satırdaki adresi kendi genel adresinizle değiştirdiğinizden emin olun.

Şimdi, bu kodu çalıştırmaya geçmeden önce, buradaki bazı bileşenler hakkında konuşalım.

  • nonce : Nonce belirtimi, adresinizden gönderilen işlemlerin sayısını takip etmek için kullanılır. Buna güvenlik amacıyla ve tekrarlama saldırılarını (replay attacks) önlemek için ihtiyacımız var. Adresinizden gönderilen işlemlerin sayısını almak için getTransactionCount (yeni sekmede açılır) kullanırız.
  • transaction: İşlem nesnesinin belirtmemiz gereken birkaç yönü vardır
    • to: Bu, ETH göndermek istediğimiz adrestir. Bu durumda, ETH'yi başlangıçta talep ettiğimiz Sepolia musluğuna (yeni sekmede açılır) geri gönderiyoruz.
    • value: Bu, 10^18 Wei = 1 ETH olacak şekilde Wei cinsinden belirtilen, göndermek istediğimiz miktardır.
    • gas: İşleminize dahil edilecek doğru gaz miktarını belirlemenin birçok yolu vardır. Alchemy, zincir içi etkinlikler hakkında sizi bilgilendirebilecek web kancalarını (webhooks) (yeni sekmede açılır) destekler. Ana Ağ işlemleri için, dahil edilecek doğru gaz miktarını belirlemek amacıyla mevcut gaz koşullarını kontrol etmek iyi bir uygulamadır. 21000, Ethereum'daki bir işlemin kullanacağı minimum gaz miktarıdır, bu nedenle işlemimizin yürütüleceğinden emin olmak için buraya 30000 koyuyoruz.
    • nonce: yukarıdaki nonce tanımına bakın. Nonce sıfırdan saymaya başlar.
    • [İSTEĞE BAĞLI] data: Transferinizle birlikte ek bilgi göndermek veya bir akıllı sözleşmeyi çağırmak için kullanılır, bakiye transferleri için gerekli değildir, aşağıdaki nota göz atın.
  • signedTx: İşlem nesnemizi imzalamak için PRIVATE_KEY'imiz ile signTransaction yöntemini kullanacağız.
  • sendSignedTransaction: İmzalı bir işlemimiz olduğunda, sendSignedTransaction kullanarak onu sonraki bir bloğa dahil edilmesi için gönderebiliriz.

Veri (data) üzerine bir Not Ethereum'da gönderilebilecek iki ana işlem türü vardır.

  • Bakiye transferi: Bir adresten diğerine ETH gönderin. Veri alanı gerekmez, ancak işleminizle birlikte ek bilgi göndermek isterseniz, bu bilgiyi bu alana HEX formatında dahil edebilirsiniz.
    • Örneğin, değişmez bir zaman damgası vermek için bir IPFS belgesinin hash'ini Ethereum zincirine yazmak istediğimizi varsayalım. Bu durumda veri alanımız şu şekilde görünmelidir: data: web3.utils.toHex(‘IPFS hash‘). Ve artık herkes zinciri sorgulayabilir ve o belgenin ne zaman eklendiğini görebilir.
  • Akıllı sözleşme işlemi: Zincir üzerinde bir akıllı sözleşme kodu yürütün. Bu durumda, veri alanı, herhangi bir parametreyle birlikte yürütmek istediğiniz akıllı işlevi içermelidir.

8. node sendTx.js kullanarak kodu çalıştırın

Terminalinize veya komut satırınıza geri dönün ve şunu çalıştırın:

node sendTx.js

9. İşleminizi Bellek Havuzunda (Mempool) görün

Alchemy kontrol panelinizdeki Bellek Havuzu (Mempool) sayfasını (yeni sekmede açılır) açın ve işleminizi bulmak için oluşturduğunuz uygulamaya göre filtreleyin. Burası, işlemimizin beklemede (pending) durumundan kazılmış (mined) durumuna (başarılıysa) veya başarısızsa düşmüş (dropped) durumuna geçişini izleyebileceğimiz yerdir. "Kazılmış", "beklemede" ve "düşmüş" işlemleri yakalamak için bunu "Tümü" (All) olarak tuttuğunuzdan emin olun. Ayrıca 0x31b98d14007bdee637298086988a0bbd31184523 adresine gönderilen işlemleri arayarak da işleminizi arayabilirsiniz.

İşleminizi bulduktan sonra ayrıntılarını görüntülemek için, sizi şuna benzer bir görünüme götürecek olan işlem hash'ini seçin:

Bellek havuzu izleyici ekran görüntüsü

Oradan, kırmızı daire içine alınmış simgeye tıklayarak işleminizi Etherscan üzerinde görüntüleyebilirsiniz!

Yaşasıııın! Alchemy kullanarak ilk Ethereum işleminizi gönderdiniz 🎉

Bu rehber hakkındaki geri bildirimleriniz ve önerileriniz için lütfen Alchemy'nin Discord (yeni sekmede açılır) kanalından Elan'a mesaj gönderin!

Orijinal olarak Alchemy tarafından yayımlanmıştır.