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 (opens in a new tab) kullanacağız. Buradan ücretsiz bir Alchemy hesabı oluşturabilirsiniz (opens in a new tab).

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 (opens in a new tab) 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ı" nedir?

  • İmzalayıcılar, özel anahtarınızı kullanarak sizin için işlemleri imzalayacaktır. Bu eğitimde işlemimizi imzalamak için Alchemy Web3 (opens in a new tab) kullanacağız, ancak başka herhangi bir Web3 kütüphanesi de kullanabilirsiniz.
  • Ön uçta, sizin adınıza işlemleri imzalayacak ve gönderecek olan MetaMask (opens in a new tab), bir imzalayıcı için iyi bir örnek olacaktır.

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 (opens in a new tab) ç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 (opens in a new tab) kanalında istediğiniz zaman soru sormaktan çekinmeyin!

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

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

  1. Ücretsiz bir Alchemy hesabı oluşturun (opens in a new tab)
  2. MetaMask hesabı oluşturun (opens in a new tab) (veya bir Ethereum adresi alın)
  3. NodeJs ve NPM'i kurmak için bu adımları izleyin (opens in a new tab)

İşleminizi Gönderme Adımları

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

Alchemy Kontrol Panelinize (opens in a new tab) 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 (opens in a new tab) 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 (opens in a new tab)'ü kurmak için proje dizininizde aşağıdaki komutu çalıştırın:

Not, Ethers.js kütüphanesini kullanmak isterseniz, buradaki talimatları izleyin (opens in a new tab).

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 (opens in a new tab) 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 geri ETH 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) (opens in a new tab) önlemek için ihtiyacımız var. Adresinizden gönderilen işlemlerin sayısını almak için getTransactionCount (opens in a new tab) 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 (opens in a new tab) 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'nin, gas fiyatı belirli bir eşiğin altına düştüğünde sizi bilgilendirmek için bir gas fiyatı web kancası (webhook) (opens in a new tab) bile vardır. Ana Ağ işlemleri için, dahil edilecek doğru gaz miktarını belirlemek amacıyla ETH Gas Station (opens in a new tab) gibi bir gaz tahmincisini 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 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. O zaman 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 görün

Alchemy kontrol panelinizdeki Bellek Havuzu (Mempool) sayfasını (opens in a new tab) açın ve işleminizi bulmak için oluşturduğunuz uygulamaya göre filtreleyin. Burası, işlemimizin bekleme durumundan (başarılıysa) çıkarıldı durumuna veya başarısızsa düştü durumuna geçişini izleyebileceğimiz yerdir. “Çıkarıldı” (mined), “bekliyor” (pending) ve “düştü” (dropped) işlemlerini yakalamak için “Tümü” (All) seçeneğinde 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:

Mempool watcher screenshot

Oradan, kırmızıyla 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 (opens in a new tab) kanalından Elan'a mesaj gönderin!

İlk olarak https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy (opens in a new tab) adresinde yayınlanmıştır