Ana içeriğe atla

viem Kullanarak İşlem Gönderme

işlemler
viem
Alchemy
Başlangıç
Elan Halpern
4 Kasım 2020
9 dakikalık okuma

Bu, viem (yeni sekmede açılır) kütüphanesini 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 gelebilecek 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, MetaMask sağlayıcı API'sine (provider API) (yeni sekmede açılır) 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 için işlemleri imzalar. Bu eğitimde işlemimizi imzalamak için viem (yeni sekmede açılır) kullanacağız, ancak başka herhangi bir Web3 kütüphanesini de kullanabilirsiniz.
  • Ön uçta, sizin adınıza işlemleri imzalayacak ve gönderecek olan MetaMask (yeni sekmede açılır), bir imzalayıcıya iyi bir örnektir.

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.

viem kullanırken, eth_sendRawTransaction işlevine sendRawTransaction (yeni sekmede açılır) işlevi çağrılarak erişilir.

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

6. Web3 kütüphanesi nedir?

Pekala, bu sorulardan birkaçını aradan çıkardığımıza göre, eğitime geçelim. Alchemy Discord (yeni sekmede açılır) sunucusunda 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 veya diğer Sepolia musluklarından birini kullanın. Musluklar küçük miktarlar verir (Alchemy musluğu günde 0,1 ETH verir), bu da bu eğitim için fazlasıyla yeterlidir. 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. viem'i (veya herhangi bir Web3 kütüphanesini) kurun

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

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

npm init -y
npm install viem

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

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. Yalnızca test ağı ETH'si tutan bir hesap kullanın.
API_URL="your-api-url"
PRIVATE_KEY="your-private-key"
.env dosyasını işlemeyin (commit etmeyin)! Lütfen .env dosyanızı asla kimseyle paylaşmadığınızdan veya ifşa etmediğinizden emin olun, çünkü bunu yaparak sırlarınızı tehlikeye atarsınız. 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şlayalım. İşlem gönderme örneğimiz için, MetaMask'teki ikinci bir hesap gibi kontrol ettiğiniz başka bir adrese 0,001 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:

0xYourSecondAddress kısmını ETH göndermek istediğiniz adresle değiştirdiğinizden emin olun. Komut dosyası kendi (gönderen) adresinizi PRIVATE_KEY'den türetir, bu nedenle onu girmenize gerek yoktur.

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

  • account: privateKeyToAccount (yeni sekmede açılır) ile özel anahtarınızdan oluşturulan yerel bir hesap. İmzalama makinenizde gerçekleşir ve özel anahtar asla Alchemy'ye gönderilmez.
  • publicClient ve walletClient: Alchemy URL'nize JSON-RPC istekleri gönderen viem istemcileri. Genel istemci (public client) zincirden okuma yapar ve cüzdan istemcisi (wallet client) hesabınız için işlemleri hazırlar ve imzalar.
  • 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 (replay) saldırılarını ö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. viem bunu sizin için de doldurabilir, ancak nereden geldiğini göstermek için burada açıkça getiriyoruz.
  • transaction: İşlem nesnesinin belirtmemiz gereken birkaç yönü vardır. prepareTransactionRequest (yeni sekmede açılır), mevcut ağ koşullarına bağlı olarak chainId ve EIP-1559 ücret alanları maxFeePerGas ile maxPriorityFeePerGas dahil olmak üzere geri kalanını bizim için doldurur.
    • to: Bu, ETH göndermek istediğimiz adrestir.
    • value: Bu, 10^18 Wei = 1 ETH olacak şekilde Wei cinsinden belirtilen, göndermek istediğimiz miktardır. parseEther (yeni sekmede açılır), bir ETH miktarını bizim için Wei'ye dönüştürür. Hesabınızın bundan biraz daha fazlasına ihtiyacı vardır, çünkü aynı zamanda gaz için de ödeme yapar.
    • 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 üzere mevcut gaz koşullarını kontrol etmek iyi bir uygulamadır. Sıradan bir adrese yapılan düz bir ETH transferi her zaman tam olarak 21000 gaz kullanır, bu da herhangi bir işlem için minimum değerdir, bu yüzden buraya 21000 koyuyoruz. gas değerini dışarıda bırakırsanız, viem bunu sizin için tahmin eder.
    • 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, onu PRIVATE_KEY'imizden oluşturulan hesapla yerel olarak imzalayan signTransaction yöntemini kullanacağız.
  • sendRawTransaction: İmzalı bir işlemimiz olduğunda, eth_sendRawTransaction'ı çağıran sendRawTransaction'ı kullanarak onu sonraki bir bloğa dahil edilmek üzere gönderebiliriz.
  • waitForTransactionReceipt: İşlemin bir bloğa dahil edilmesini bekler ve makbuzunu döndürür.

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. Veri alanımız, viem'in toHex (yeni sekmede açılır) işlevini kullanarak data: toHex("IPFS hash") gibi görünmelidir. 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 bir blok gezgininde görün

Komut dosyası, düğüm işlemi kabul eder etmez işlem hash'ini yazdırır, ardından bir bloğa dahil edilene kadar bekler (genellikle birkaç saniye içinde) ve sonucu yazdırır. Ayrıntıları görmek için hash'i Sepolia Etherscan (yeni sekmede açılır) veya Blockscout (yeni sekmede açılır) gibi bir Sepolia blok gezginine yapıştırın. Orada işlemin beklemeden dahil edilmeye geçişini izleyebilir ve miktarını, ücretlerini ve indiği bloğu görebilirsiniz.

Bunun yerine bir insufficient funds (yetersiz bakiye) hatası görürseniz, hesabınızda değer artı gazı karşılayacak kadar Sepolia ETH'si yoktur. 2. adıma geri dönün ve bir musluktan daha fazlasını talep edin.

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) sunucusunda Elan'a mesaj gönderin!

İlk olarak Alchemy tarafından yayınlanmıştır.