Web3 Kullanarak İşlem Gönderme
Bu, Web3 kullanarak Ethereum işlemleri göndermek için başlangıç dostu bir rehberdir. Ethereum blokzincirine bir işlem göndermek için üç ana adım vardır: oluşturma, imzalama ve yayımlama. Üçünü de gözden geçirerek aklınızdaki soruları cevaplamayı umuyoruz! Bu öğreticide, 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 backend tarafında işlemlerinizi imzalamak içindir. İşlemlerinizi imzalamayı frontend'e entegre etmek istiyorsanız, Web3'ü bir tarayıcı sağlayıcısıyla entegre etme (opens in a new tab) konusuna göz atın.
Temel Bilgiler
Çoğu blokzincir geliştiricisi gibi, işe ilk başladığınızda, (oldukça basit olması gereken) bir işlemin nasıl gönderileceği üzerine araştırma yapmış ve her biri farklı şeyler söyleyen, sizi biraz bunaltıp kafanızı karıştıran çok sayıda rehberle karşılaşmış olabilirsiniz. Bu durumdaysanız merak etmeyin; hepimiz o yollardan geçtik! O zaman 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 asla özel anahtarınızı paylaşmanızı istemez ve özel anahtarınızı barındırılan bir düğümle (veya bu konuda herhangi biriyle) asla paylaşmamalısınız.
- Alchemy'nin çekirdek API'sini kullanarak blokzincirden okuma yapabilirsiniz, ancak blokzincire yazmak için işlemlerinizi Alchemy aracılığıyla göndermeden önce imzalamak için başka bir araç kullanmanız gerekir (bu durum diğer tüm düğüm hizmetleri için de geçerlidir).
2. “İmzalayıcı” nedir?
- İmzalayıcılar, özel anahtarınızı kullanarak işlemleri sizin için imzalar. Bu öğreticide, işlemimizi imzalamak için Alchemy web3 (opens in a new tab) kullanacağız, ancak başka bir web3 kütüphanesi de kullanabilirsiniz.
- Frontend'de iyi bir imzalayıcı örneği, sizin adınıza işlemleri imzalayıp gönderecek olan MetaMask (opens in a new tab)'tı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 çok önemlidir, çünkü erişime sahip olmak Ethereum hesabınız üzerinde tam kontrol sağlayarak sizin (veya erişimi olan herhangi birinin) sizin adınıza işlem gerçekleştirmesine izin verir.
4. Özel anahtarımı nasıl korurum?
- Özel anahtarınızı korumanın ve işlemleri göndermek için kullanmanın birçok yolu vardır. Bu öğreticide bir
.envdosyası kullanacağız. Ancak özel anahtarları saklayan ayrı bir sağlayıcı, bir keystore 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 fonksiyonlarıdır. İşlemlerin imzalanmasını ele alma biçimlerinde farklılık gösterirler.
eth_sendTransaction(opens in a new tab) imzasız işlemleri göndermek için kullanılır; bu da gönderim yaptığınız düğümün, işlemi zincire yayınlamadan önce imzalayabilmesi için özel anahtarınızı yönetmesi gerektiği anlamına gelir. Alchemy kullanıcıların özel anahtarlarını tutmadığı için bu yöntemi desteklemez.eth_sendRawTransaction(opens in a new tab), halihazırda imzalanmış olan işlemleri yayımlamak için kullanılır. Bu, öncesignTransaction(tx, private_key)(opens in a new tab) kullanmanız ve ardından sonucueth_sendRawTransaction'a iletmeniz gerektiği anlamına gelir.
web3 kullanırken eth_sendRawTransaction'a web3.eth.sendSignedTransaction (opens in a new tab) fonksiyonu çağrılarak erişilir.
Bu öğreticide bunu kullanacağız.
6. Web3 kütüphanesi nedir?
- Web3.js, Ethereum geliştirmede kullanımı oldukça yaygın olan standart JSON-RPC çağrıları etrafında bir paketleyici kütüphanedir.
- Farklı diller için birçok web3 kütüphanesi vardır. Bu öğreticide JavaScript ile yazılmış olan Alchemy Web3 (opens in a new tab) kullanacağız. ethers.js (opens in a new tab) gibi diğer seçeneklere buradan (opens in a new tab) göz atabilirsiniz.
Pekala, şimdi bu sorulardan birkaçını aradan çıkardığımıza göre, öğreticiye geçelim. Alchemy discord (opens in a new tab) kanalında dilediğiniz zaman soru sormaktan çekinmeyin!
7. Güvenli, gaz optimizasyonlu ve özel işlemler nasıl gönderilir?
- Alchemy'nin bir Transact API paketi vardır (opens in a new tab). Bunları güçlendirilmiş işlemler göndermek, işlemleri gerçekleşmeden önce simüle etmek, özel işlemler göndermek ve gaz optimizasyonlu işlemler göndermek için kullanabilirsiniz.
- Ayrıca işleminiz mempool'dan çekilip zincire eklendiğinde haberdar olmak için Notify API (opens in a new tab) kullanabilirsiniz.
NOT: Bu rehber için bir Alchemy hesabı, bir Ethereum adresi veya MetaMask cüzdanı, Node.js ve npm'in kurulu olması gerekir. Kurulu değilse şu adımları takip edin:
- Ücretsiz bir Alchemy hesabı oluşturun (opens in a new tab)
- MetaMask hesabı oluşturun (opens in a new tab) (veya bir Ethereum adresi alın)
- Node.js ve NPM'i yüklemek 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 Pano'nuza (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ğınkini değil, Sepolia Ethereum adresinizi (MetaMask'ten) girdiğinizden emin olun. Talimatları izledikten sonra cüzdanınıza ETH'nin geldiğini tekrar kontrol edin.
3. Yeni bir proje dizini oluşturun ve içine cd ile girin
Komut satırından (mac'ler için terminal) yeni bir proje dizini oluşturun ve içine gidin:
1mkdir sendtx-example2cd sendtx-example4. Alchemy Web3'ü (veya herhangi bir web3 kütüphanesini) yükleyin
Alchemy Web3 (opens in a new tab) yüklemek 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).
1npm install @alch/alchemy-web35. dotenv'i yükleyin
API anahtarımızı ve özel anahtarımızı güvenli bir şekilde saklamak için bir .env dosyası kullanacağız.
1npm install dotenv --save6. .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, panonuzda yeni oluşturduğunuz uygulamanın uygulama ayrıntıları sayfasına gidin, sağ üst köşedeki “View Key”'e 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.
1API_URL = "your-api-url"2PRIVATE_KEY = "your-private-key".env dosyasını commit'lemeyin! Lütfen .env dosyanızı asla kimseyle paylaşmadığınızdan veya ifşa etmediğinizden emin olun, çünkü bunu yaparken sırlarınızı tehlikeye atıyorsunuz. 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 ETH'yi Sepolia musluğuna geri göndereceğiz.
Örnek işlemimizi yapılandırıp göndereceğimiz bir sendTx.js dosyası oluşturun ve buna aşağıdaki kod satırlarını ekleyin:
1async function main() {2 require('dotenv').config();3 const { API_URL, PRIVATE_KEY } = process.env;4 const { createAlchemyWeb3 } = require("@alch/alchemy-web3");5 const web3 = createAlchemyWeb3(API_URL);6 const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: bu adresi kendi genel adresinizle değiştirin78 const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce 0'dan saymaya başlar910 const transaction = {11 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // eth'yi iade etmek için musluk adresi12 'value': 1000000000000000000, // 1 ETH13 'gas': 30000,14 'nonce': nonce,15 // mesaj göndermek veya akıllı sözleşme yürütmek için isteğe bağlı veri alanı16 };1718 const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);1920 web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) {21 if (!error) {22 console.log("🎉 İşleminizin hash'i: ", hash, "\n İşleminizin durumunu görüntülemek için Alchemy'nin Mempool'unu kontrol edin!");23 } else {24 console.log("❗İşleminizi gönderirken bir şeyler ters gitti:", error)25 }26 });27}2829main();Tümünü göster6. satırdaki adresi kendi genel adresinizle değiştirdiğinizden emin olun.
Şimdi, bu kodu çalıştırmaya geçmeden önce, burada bazı bileşenlerden bahsedelim.
nonce: Nonce özelliği, adresinizden gönderilen işlem sayısını takip etmek için kullanılır. Buna güvenlik amacıyla ve tekrar saldırılarını (opens in a new tab) önlemek için ihtiyacımız var. Adresinizden gönderilen işlem sayısını almak için getTransactionCount (opens in a new tab) kullanırız.transaction: İşlem nesnesinin belirtmemiz gereken birkaç özelliği vardırto: 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: Göndermek istediğimiz miktardır. Wei cinsinden belirtilir ve 10^18 Wei = 1 ETH'dir.gas: İşleminize dahil edilecek doğru gaz miktarını belirlemenin birçok yolu vardır. Hatta Alchemy'nin, gaz fiyatı belirli bir eşiğin altına düştüğünde sizi bilgilendiren bir gaz fiyatı webhook'u (opens in a new tab) bile vardır. Ana Ağ işlemleri için, eklenecek doğru gaz miktarını belirlemek amacıyla ETH Gas Station (opens in a new tab) gibi bir gaz tahmin ediciyi kontrol etmek iyi bir uygulamadır. 21000, Ethereum'da bir işlemin kullanacağı minimum gaz miktarıdır, bu nedenle işlemimizin gerçekleştirilmesini sağlamak için buraya 30000 koyduk.nonce: yukarıdaki nonce tanımına bakın. Nonce değeri, saymaya sıfırdan başlar.- [İSTEĞE BAĞLI] data: Aktarımınızla ek bilgi göndermek veya bir akıllı sözleşme çağırmak için kullanılır. Bakiye aktarımları için gerekli değildir, aşağıdaki nota göz atın.
signedTx: İşlem nesnemizi imzalamak içinPRIVATE_KEYimiz ilesignTransactionmetodunu kullanacağız.sendSignedTransaction: İmzalanmış bir işlemimiz olduğunda,sendSignedTransactionkullanarak sonraki bir bloğa dahil edilmesi için gönderebiliriz.
Veri Üzerine Bir Not Ethereum'da gönderilebilecek iki ana işlem türü vardır.
- Bakiye aktarımı: Bir adresten diğerine ETH gönderin. Veri alanı gerekli değildir, ancak işleminizle birlikte ek bilgi göndermek isterseniz, bu bilgiyi bu alana HEX formatında ekleyebilirsiniz.
- Örneğin, değişmez bir zaman damgası vermek için bir IPFS belgesinin hash değerini ethereum zincirine yazmak istediğimizi varsayalım. Veri alanımız bu durumda şöyle görünmelidir: data:
web3.utils.toHex('IPFS hash'). Artık herkes zinciri sorgulayabilir ve bu belgenin ne zaman eklendiğini görebilir.
- Örneğin, değişmez bir zaman damgası vermek için bir IPFS belgesinin hash değerini ethereum zincirine yazmak istediğimizi varsayalım. Veri alanımız bu durumda şöyle görünmelidir: data:
- Akıllı sözleşme işlemi: Zincir üzerinde akıllı sözleşme kodu yürütün. Bu durumda, veri alanı, yürütmek istediğiniz akıllı fonksiyonu ve tüm parametreleri içermelidir.
- Pratik bir örnek için bu Merhaba Dünya Öğreticisi'ndeki (opens in a new tab) Adım 8'e göz atın.
8. Kodu node sendTx.js kullanarak çalıştırın
Terminalinize veya komut satırınıza geri dönün ve şunu çalıştırın:
1node sendTx.js9. İşleminizi Mempool'da görün
Alchemy panonuzdaki Mempool sayfasını (opens in a new tab) açın ve işleminizi bulmak için oluşturduğunuz uygulamaya göre filtreleyin. İşleminizin bekleme durumundan kazılmış duruma (başarılıysa) veya düşürülmüş duruma (başarısızsa) geçişini buradan izleyebilirsiniz. “kazılmış”, “beklemede” ve “düşürülmüş” işlemleri yakalamak için “Tümü” (All) seçeneğinde kaldığından emin olun. 0x31b98d14007bdee637298086988a0bbd31184523 adresine gönderilen işlemleri arayarak da işleminizi bulabilirsiniz.
İşleminizi bulduktan sonra ayrıntılarını görüntülemek için, sizi aşağıdaki gibi bir görünüme götürecek olan tx hash'ini seçin:
Buradan, kırmızı daire içine alınmış simgeye tıklayarak işleminizi Etherscan'de görüntüleyebilirsiniz!
Oley! Alchemy kullanarak ilk Ethereum işleminizi gönderdiniz 🎉**
Bu rehber hakkındaki geri bildirim ve önerileriniz için lütfen Alchemy'nin Discord (opens in a new tab) kanalından Elan'a mesaj gönderin!
Orijinal olarak https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy (opens in a new tab) adresinde yayımlandı
Sayfanın son güncellenmesi: 18 Aralık 2025
