Web3 Kullanarak İşlem Gönderme
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
.envdosyası 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.
eth_sendTransaction(opens in a new tab), imzasız işlemleri göndermek için kullanılır; bu, gönderdiğiniz 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ış işlemleri yayınlamak için kullanılır. Bu, öncesignTransaction(tx, private_key)(opens in a new tab) kullanmanız, ardından sonucueth_sendRawTransactioniçine geçirmeniz gerektiği anlamına gelir.
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?
- Web3.js, Ethereum geliştirmede kullanımı oldukça yaygın olan standart JSON-RPC çağrılarının etrafındaki bir sarmalayıcı kütüphanedir.
- Farklı diller için birçok Web3 kütüphanesi vardır. Bu eğitimde 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.
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?
- Alchemy'nin bir dizi Transact API'si 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 için optimize edilmiş işlemler göndermek için kullanabilirsiniz.
- İşleminiz bellek havuzundan çekilip zincire eklendiğinde uyarılmak için Notify API (opens in a new tab)'yi de kullanabilirsiniz.
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:
- Ü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)
- 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:
async function main() {
require('dotenv').config();
const { API_URL, PRIVATE_KEY } = process.env;
const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
const web3 = createAlchemyWeb3(API_URL);
const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: bu adresi kendi genel adresinizle değiştirin
const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce 0'dan saymaya başlar
const transaction = {
'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // eth'yi iade etmek için musluk adresi
'value': 1000000000000000000, // 1 ETH
'gas': 30000,
'nonce': nonce,
// mesaj göndermek veya akıllı sözleşme yürütmek için isteğe bağlı veri alanı
};
const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);
web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) {
if (!error) {
console.log("🎉 İşleminizin hash'i: ", hash, "\n İşleminizin durumunu görüntülemek için Alchemy'nin Bellek Havuzunu kontrol edin!");
} else {
console.log("❗İşleminiz gönderilirken bir şeyler ters gitti:", error)
}
});
}
main();
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ırto: 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ırgas: İş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çinPRIVATE_KEYilesignTransactionyöntemini kullanacağızsendSignedTransaction: İmzalı bir işlemimiz olduğunda,sendSignedTransactionkullanarak 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.
- Ö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:
- 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.
- Pratik bir örnek için, bu Merhaba Dünya Eğitimindeki (opens in a new tab) 8. Adıma göz atın.
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:
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
