Web3 Kullanarak İşlem Gönderme
Bu, Web3 kullanarak Ethereum işlemlerini göndermek için yeni başlayanlara uygun bir rehberdir. Ethereum blok zincirine bir işlem göndermek için üç ana adım vardır: oluşturma, imzalama ve yayınlama. Üçü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 kılavuz, uygulamanızın arka ucunda işlem imzalamak içindir. İşlemlerinizi imzalamayı ön uca entegre etmek istiyorsanız Web3'ü bir tarayıcı sağlayıcısı(opens in a new tab) ile entegre etmeye göz atın.
Temel Bilgiler
Çoğu blok zinciri geliştiricisi ilk başladıklarında olduğu gibi, bir işlemin nasıl gönderileceği konusunda (oldukça basit olması gereken bir şey) biraz araştırma yapmış ve her biri farklı şeyler söyleyen ve sizi biraz bunaltıp kafanızı karıştıran çok sayıda kılavuza rastlamış 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. Simya 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 biri ile) paylaşmamalısınız.
- Alchemy'nin çekirdek API'sini kullanarak blok zincirinden okuma yapabilirsiniz, ancak blok zincirine yazmak için işlemlerinizi Alchemy aracılığıyla göndermeden önce onları imzalamak için başka bir şey kullanmanız gerekir (bu, diğer tüm düğüm hizmetleri için aynıdır).
2. Bir "imzalayı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 herhangi bir web3 kitaplığını da kullanabilirsiniz.
- Ön uçta, sizin adınıza işlemleri imzalayıp gönderen MetaMask(opens in a new tab), imzalayıcılar için 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 ç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
.env
dosyası kullanıyor olacağız. Ancak, özel anahtarları depolayan, bir anahtar deposu dosyası kullanan veya diğer seçenekleri kullanan ayrı bir sağlayıcı da 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ı nasıl ele aldıkları konusunda farklılık gösterirler.
eth_sendTransaction
(opens in a new tab) imzasız işlemler göndermek için kullanılır, yani işlemi zincire yayınlamadan önce imzalayabili için gönderdiğiniz düğüm sizin özel anahtarınızı yönetmelidir. Alchemy, kullanıcının özel anahtarlarını tutmadığından bu yöntemi desteklemez.eth_sendRawTransaction
(opens in a new tab) hâlihazırda imzalanmış işlemleri yayınlamak için kullanılır. Yani ilk olaraksignTransaction(tx, private_key)
(opens in a new tab) kullanmanız, sonrasında sonucunueth_sendRawTransaction
içine geçirmeniz gerekir.
Web3 kullanırken, eth_sendRawTransaction
erişimi web3.eth.sendSignedTransaction(opens in a new tab) fonksiyonu çağrılarak sağlanır.
Bu öğreticide 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ı etrafında bir paketleyici kütüphanedir.
- Farklı diller için birçok web3 kütüphanesi bulunur vardır. Bu öğreticide JavaScript ile yazılmış olan Alchemy Web3(opens in a new tab)'ü kullanacağız. Diğer seçeneklere buradan(opens in a new tab) ulaşabilirsiniz.
Pekala, şimdi bu sorulardan birkaçını aradan çıkardığımıza göre, öğreticiye geçelim. Alchemy ile ilgili sorularınızı herhangi bir zaman discord(opens in a new tab)'umuzda sormaktan çekinmeyin!
NOT: Bu kılavuz bir Alchemy hesabı, bir Ethereum adresi veya MetaMask cüzdanı, NodeJ'ler ve npm'nin kurulu olmasını gerektirir. 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)
- NodeJ'leri ve NPM'yi yüklemek için bu adımları izleyin(opens in a new tab)
İşleminizi Göndermek için Adımlar
1. Rinkeby test ağında bir Alchemy uygulaması oluşturun
Alchemy Kontrol Panelinize(opens in a new tab) gidin ve ağınız için Rinkeby'yi (veya başka bir test ağını) seçerek yeni bir uygulama oluşturun.
2. Rinkeby musluğundan ETH isteyin
ETH almak için Alchemy Rinkeby musluğundaki(opens in a new tab) talimatları izleyin. Rinkeby Ethereum adresinizi (MetaMask'ten) eklediğinizden ve başka bir ağda olmadığından emin olun. Talimatları uyguladıktan sonra, cüzdanınıza ETH'yi alıp almadığınızı iki kez kontrol edin.
3. Yeni bir proje dizini ve bunun içine cd
ekleyin
Komut satırından (mac'ler için terminal) yeni bir proje dizini oluşturun ve içine gidin:
1mkdir sendtx-example2cd sendtx-example3
4. Alchemy Web3'ü kurun (veya herhangi bir web3 kütüphanesi)
Alchemy Web3(opens in a new tab) indirmek için proje klasörünüzde şu komutu çalıştırın:
1npm install @alch/alchemy-web32
5. Dotenv kurun
API anahtarımızı ve özel anahtarımızı güvenli bir şekilde saklamak için bir .env
dosyası kullanacağız.
1npm install dotenv --save2
6. .env
dosyası oluşturun
Proje dizininizde bir .env
dosyası oluşturun ve şunu ekleyin ("api-url
" ve "your-private-key
yerine" ")
- Alchemy API URL'nizi bulmak için, kontrol panelinizde az önce oluşturduğunuz uygulamanın uygulama ayrıntıları sayfasına gidin, sağ üst köşedeki "View Key"'e (Anahtarı Görüntüle) 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"3
.env
doyasını taahhüt etmeyin! 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(opens in a new tab) dosyasına ekleyin.7. sendTx.js
dosyası oluşturun
Harika, artık hassas verilerimizi bir .env
dosyasında koruduğumuza göre kodlamaya başlayalım. Gönderme işlemi örneğimiz için ETH'yi Rinkeby 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: replace this address with your own public address78 const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce starts counting from 0910 const transaction = {11 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // faucet address to return eth12 'value': 1000000000000000000, // 1 ETH13 'gas': 30000,14 'nonce': nonce,15 // optional data field to send message or execute smart contract16 };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("🎉 The hash of your transaction is: ", hash, "\n Check Alchemy's Mempool to view the status of your transaction!");23 } else {24 console.log("❗Something went wrong while submitting your transaction:", error)25 }26 });27}2829main();30Tümünü göster
6. 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 değeri şartnamesi, adresinizden gönderilen işlemlerin sayısını takip etmek için kullanılır. Güvenlik amaçlı ve tekrar saldırılarını(opens in a new tab) önlemek için buna ihtiyacımız var. Adresinizden gönderilmiş işlem sayısını almak için getTransactionCount(opens in a new tab) kullanırız.transaction
: İşlem nesnesinin belirtmemiz gereken birkaç yönü varto
: Bu, ETH göndermek istediğimiz adrestir. Bu durumda, ETH'yi başlangıçta talep ettiğimiz Rinkeby musluğuna(opens in a new tab) geri gönderiyoruz.value
: Bu, 10^18 Wei = 1 ETH olmak üzere Wei'de belirtilen, göndermek istediğimiz miktardırgas
: İşleminize dahil edilecek doğru gaz miktarını belirlemenin birçok yolu vardır. Alchemy, benzin fiyatı belirli bir eşiğe düştüğünde sizi bilgilendirmek için bir gaz fiyatı web kancasına(opens in a new tab) bile sahiptir. Mainnet işlemlerinde, dahil edilecek doğru gaz miktarını belirlemek için ETH Gas Station(opens in a new tab) gibi bir gaz tahmincisini 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.- [OPTIONAL] veri: Transferinizle birlikte ek bilgi göndermek veya akıllı sözleşme aramak için kullanılır, bakiye transferleri için gerekli değildir, aşağıdaki nota bakın.
SignedTx
: İşlem nesnemizi imzalamak içinPRIVATE_KEY
ilesignTransaction
yöntemini kullanacağızsendSignedTransaction
: İmzalanmış bir işlemimiz olduğunda,sendSignedTransaction
kullanarak sonraki bir bloğa dahil edilmesi için gönderebiliriz
Veriler hakkında bir not Ethereum'da gönderilebilecek iki ana işlem türü vardır.
- Bakiye transferi: ETH'i bir adresten diğerine gönderin. Herhangi bir veri alanı gerekli değildir, ancak işleminizin yanında ek bilgiler göndermek isterseniz, bu bilgileri 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 daha sonra veri gibi görünmelidir:
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 daha sonra veri gibi görünmelidir:
- Akıllı sözleşme işlemi: Zincirde bazı akıllı sözleşme kodlarını yürütün. Bu durumda veri alanı, herhangi bir parametrenin yanında yürütmek istediğiniz akıllı fonksiyonu içermelidir.
- Pratik bir örnek için, şu Merhaba Dünya Öğreticindeki(opens in a new tab) 8. Adıma bakı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:
1node sendTx.js2
9. İşleminizi Bellek Havuzunda görün
Alchemy panelinizde Mempool sayfasını(opens in a new tab) (Bellek Havuzu) açın ve işleminizi bulmak için oluşturduğunuz uygulama ile filtreleyin. Bekleme durumundan kazılmış (başarılıysa) veya başarısız olursa düşmüş duruma geçişimizi buradan izleyebiliriz. "mined" (kazılmış), "beklemede" (pending) ve "düşmüş" işlemleri yakalamak için "All" (Tümü) üzerinde tuttuğunuzdan emin olun. 0x31b98d14007bdee637298086988a0bbd31184523
adresine gönderilen işlemlere bakarak da işleminizi arayabilirsiniz.
İşleminizin ayrıntılarını bulduktan sonra görüntülemek için, sizi şuna benzeyen bir görünüme götürecek tx hash değerini 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 rehberle ilgili geri bildirim ve öneriler için lütfen Alchemy'nin Discord(opens in a new tab)'u üzerinden Elan'a mesaj gönderin!
Aslen https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy(opens in a new tab) adresinde yayınlandı