Viem का उपयोग करके लेन-देन भेजना
यह Viem (नए टैब में खुलता है) लाइब्रेरी का उपयोग करके इथेरियम लेन-देन भेजने के लिए शुरुआती लोगों के अनुकूल एक मार्गदर्शिका है। इथेरियम ब्लॉकचेन पर लेन-देन भेजने के लिए तीन मुख्य चरण हैं: बनाना, हस्ताक्षर करना और प्रसारित करना। हम इन तीनों के बारे में जानेंगे, और उम्मीद है कि आपके किसी भी प्रश्न का उत्तर देंगे! इस ट्यूटोरियल में, हम अपने लेन-देन को इथेरियम चेन पर भेजने के लिए Alchemy (नए टैब में खुलता है) का उपयोग करेंगे। आप यहां एक मुफ्त Alchemy खाता बना सकते हैं (नए टैब में खुलता है)।
नोट: यह मार्गदर्शिका आपके ऐप के बैकएंड पर आपके लेन-देन पर हस्ताक्षर करने के लिए है। यदि आप फ्रंटएंड पर अपने लेन-देन पर हस्ताक्षर करने को एकीकृत करना चाहते हैं, तो मेटामास्क प्रदाता API (नए टैब में खुलता है) देखें।
मूल बातें
जब अधिकांश ब्लॉकचेन डेवलपर्स पहली बार शुरुआत करते हैं, तो आपने भी लेन-देन भेजने के तरीके (जो काफी सरल होना चाहिए) पर कुछ शोध किया होगा और कई मार्गदर्शिकाओं का सामना किया होगा, जिनमें से प्रत्येक अलग-अलग बातें कह रही होगी और आपको थोड़ा अभिभूत और भ्रमित कर रही होगी। यदि आप भी उसी स्थिति में हैं, तो चिंता न करें; हम सभी किसी न किसी बिंदु पर वहीं थे! इसलिए, शुरू करने से पहले, आइए कुछ बातें स्पष्ट कर लें:
1. Alchemy आपकी निजी कुंजी संग्रहीत नहीं करता है
- इसका मतलब है कि Alchemy आपकी ओर से लेन-देन पर हस्ताक्षर करके उन्हें भेज नहीं सकता है। इसका कारण सुरक्षा उद्देश्य है। Alchemy आपसे कभी भी अपनी निजी कुंजी साझा करने के लिए नहीं कहेगा, और आपको कभी भी अपनी निजी कुंजी किसी होस्ट किए गए नोड (या किसी और के साथ) साझा नहीं करनी चाहिए।
- आप Alchemy के कोर API का उपयोग करके ब्लॉकचेन से पढ़ सकते हैं, लेकिन इस पर लिखने के लिए आपको Alchemy के माध्यम से भेजने से पहले अपने लेन-देन पर हस्ताक्षर करने के लिए किसी अन्य चीज़ का उपयोग करने की आवश्यकता होगी (यह किसी भी अन्य नोड सेवा के लिए समान है)।
2. "हस्ताक्षरकर्ता" (signer) क्या है?
- हस्ताक्षरकर्ता आपकी निजी कुंजी का उपयोग करके आपके लिए लेन-देन पर हस्ताक्षर करेंगे। इस ट्यूटोरियल में हम अपने लेन-देन पर हस्ताक्षर करने के लिए Viem (नए टैब में खुलता है) का उपयोग करेंगे, लेकिन आप किसी अन्य Web3 लाइब्रेरी का भी उपयोग कर सकते हैं।
- फ्रंटएंड पर, हस्ताक्षरकर्ता का एक अच्छा उदाहरण मेटामास्क (नए टैब में खुलता है) होगा, जो आपकी ओर से लेन-देन पर हस्ताक्षर करेगा और भेजेगा।
3. मुझे अपने लेन-देन पर हस्ताक्षर करने की आवश्यकता क्यों है?
- इथेरियम नेटवर्क पर लेन-देन भेजने के इच्छुक प्रत्येक उपयोगकर्ता को लेन-देन पर (अपनी निजी कुंजी का उपयोग करके) हस्ताक्षर करना होगा, ताकि यह मान्य किया जा सके कि लेन-देन का मूल वही है जो वह होने का दावा करता है।
- इस निजी कुंजी की सुरक्षा करना बहुत महत्वपूर्ण है, क्योंकि इस तक पहुंच होने से आपके इथेरियम खाते पर पूर्ण नियंत्रण मिल जाता है, जिससे आप (या पहुंच वाला कोई भी व्यक्ति) आपकी ओर से लेन-देन कर सकता है।
4. मैं अपनी निजी कुंजी की सुरक्षा कैसे करूं?
- अपनी निजी कुंजी की सुरक्षा करने और लेन-देन भेजने के लिए इसका उपयोग करने के कई तरीके हैं। इस ट्यूटोरियल में हम एक
.envफ़ाइल का उपयोग करेंगे। हालाँकि, आप एक अलग प्रदाता का भी उपयोग कर सकते हैं जो निजी कुंजियों को संग्रहीत करता है, कीस्टोर फ़ाइल का उपयोग कर सकते हैं, या अन्य विकल्पों का उपयोग कर सकते हैं।
5. eth_sendTransaction और eth_sendRawTransaction के बीच क्या अंतर है?
eth_sendTransaction और eth_sendRawTransaction दोनों इथेरियम एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस (API) फ़ंक्शन हैं जो इथेरियम नेटवर्क पर एक लेन-देन प्रसारित करते हैं ताकि इसे भविष्य के ब्लॉक में जोड़ा जा सके। वे लेन-देन पर हस्ताक्षर करने के तरीके में भिन्न होते हैं।
eth_sendTransactionका उपयोग बिना हस्ताक्षर वाले लेन-देन भेजने के लिए किया जाता है, जिसका अर्थ है कि जिस नोड को आप भेज रहे हैं उसे आपकी निजी कुंजी का प्रबंधन करना होगा ताकि वह चेन पर प्रसारित करने से पहले लेन-देन पर हस्ताक्षर कर सके। चूंकि Alchemy उपयोगकर्ता की निजी कुंजियों को नहीं रखता है, इसलिए वे इस पद्धति का समर्थन नहीं करते हैं।eth_sendRawTransaction(नए टैब में खुलता है) का उपयोग उन लेन-देन को प्रसारित करने के लिए किया जाता है जिन पर पहले ही हस्ताक्षर किए जा चुके हैं। इसका मतलब है कि आपको पहले अपनी निजी कुंजी के साथ लेन-देन पर हस्ताक्षर करना होगा (Viem में, स्थानीय खाते (नए टैब में खुलता है) के साथsignTransaction(नए टैब में खुलता है) का उपयोग करके), फिर परिणाम कोeth_sendRawTransactionमें पास करना होगा।
Viem का उपयोग करते समय, eth_sendRawTransaction को sendRawTransaction (नए टैब में खुलता है) फ़ंक्शन कॉल करके एक्सेस किया जाता है।
इस ट्यूटोरियल में हम इसी का उपयोग करेंगे।
6. Web3 लाइब्रेरी क्या है?
- एक Web3 लाइब्रेरी मानक जेसन-आरपीसी कॉल के चारों ओर एक रैपर है जिसका उपयोग इथेरियम विकास में काफी आम है।
- विभिन्न भाषाओं के लिए कई Web3 लाइब्रेरी हैं। इस ट्यूटोरियल में हम Viem (नए टैब में खुलता है) का उपयोग करेंगे, जो TypeScript में लिखा गया है और किसी भी JavaScript प्रोजेक्ट में काम करता है। आप यहां अन्य विकल्प देख सकते हैं जैसे Ethers.js (नए टैब में खुलता है)।
ठीक है, अब जब हमने इनमें से कुछ सवालों के जवाब दे दिए हैं, तो आइए ट्यूटोरियल पर आगे बढ़ते हैं। Alchemy डिस्कॉर्ड (नए टैब में खुलता है) में कभी भी प्रश्न पूछने के लिए स्वतंत्र महसूस करें!
7. सुरक्षित, गैस-अनुकूलित और निजी लेन-देन कैसे भेजें?
- Alchemy के पास लेन-देन संसाधनों का एक सेट है (नए टैब में खुलता है)। आप इनका उपयोग लेन-देन भेजने, लेन-देन होने से पहले उनका अनुकरण (simulate) करने, निजी लेन-देन भेजने और गैस-अनुकूलित लेन-देन भेजने के लिए कर सकते हैं।
- जब आपका लेन-देन मेमपूल से निकाला जाता है और चेन में जोड़ा जाता है, तो अलर्ट प्राप्त करने के लिए आप Alchemy वेबहुक (नए टैब में खुलता है) का भी उपयोग कर सकते हैं।
नोट: इस मार्गदर्शिका के लिए एक Alchemy खाता, एक इथेरियम पता या मेटामास्क वॉलेट, Node.js और npm स्थापित होना आवश्यक है। यदि नहीं, तो इन चरणों का पालन करें:
- एक मुफ्त Alchemy खाता बनाएं (नए टैब में खुलता है)
- मेटामास्क खाता बनाएं (नए टैब में खुलता है) (या एक इथेरियम पता प्राप्त करें)
- Node.js और npm स्थापित करें (नए टैब में खुलता है)
अपना लेन-देन भेजने के चरण
1. Sepolia टेस्टनेट पर एक Alchemy ऐप बनाएं
अपने Alchemy डैशबोर्ड (नए टैब में खुलता है) पर जाएं और अपने नेटवर्क के लिए Sepolia (या कोई अन्य टेस्टनेट) चुनकर एक नया ऐप बनाएं।
2. Sepolia फॉसेट से ETH का अनुरोध करें
ETH प्राप्त करने के लिए Alchemy Sepolia फॉसेट (नए टैब में खुलता है) पर दिए गए निर्देशों का पालन करें, या अन्य Sepolia फॉसेट में से किसी एक का उपयोग करें। फॉसेट छोटी मात्रा देते हैं (Alchemy फॉसेट प्रति दिन 0.1 ETH देता है), जो इस ट्यूटोरियल के लिए पर्याप्त है। सुनिश्चित करें कि आप अपना Sepolia इथेरियम पता (मेटामास्क से) शामिल करें न कि किसी अन्य नेटवर्क का। निर्देशों का पालन करने के बाद, दोबारा जांच लें कि आपको अपने वॉलेट में ETH प्राप्त हो गया है।
3. एक नई प्रोजेक्ट डायरेक्टरी बनाएं और उसमें cd करें
कमांड लाइन (Mac के लिए टर्मिनल) से एक नई प्रोजेक्ट डायरेक्टरी बनाएं और उसमें नेविगेट करें:
mkdir sendtx-example
cd sendtx-example
4. Viem (या कोई भी Web3 लाइब्रेरी) स्थापित करें
Viem (नए टैब में खुलता है) स्थापित करने के लिए अपनी प्रोजेक्ट डायरेक्टरी में निम्नलिखित कमांड चलाएँ:
ध्यान दें, यदि आप Ethers.js लाइब्रेरी का उपयोग करना चाहते हैं, तो यहां दिए गए निर्देशों का पालन करें (नए टैब में खुलता है)।
npm init -y
npm install viem
5. dotenv स्थापित करें
हम अपनी API कुंजी और निजी कुंजी को सुरक्षित रूप से संग्रहीत करने के लिए एक .env फ़ाइल का उपयोग करेंगे।
npm install dotenv
6. .env फ़ाइल बनाएं
अपनी प्रोजेक्ट डायरेक्टरी में एक .env फ़ाइल बनाएं और निम्नलिखित जोड़ें ("your-api-url" और "your-private-key" को बदलते हुए)
- अपना Alchemy API URL खोजने के लिए, अपने डैशबोर्ड पर अभी बनाए गए ऐप के ऐप विवरण पृष्ठ पर नेविगेट करें, ऊपरी दाएं कोने में "View Key" पर क्लिक करें, और HTTP URL लें।
- मेटामास्क का उपयोग करके अपनी निजी कुंजी खोजने के लिए, इस मार्गदर्शिका (नए टैब में खुलता है) को देखें। ऐसे खाते का उपयोग करें जिसमें केवल टेस्टनेट ETH हो।
API_URL="your-api-url"
PRIVATE_KEY="your-private-key"
.env को कमिट न करें! कृपया सुनिश्चित करें कि आप अपनी .env फ़ाइल को कभी भी किसी के साथ साझा या उजागर न करें, क्योंकि ऐसा करने से आप अपने रहस्यों से समझौता कर रहे हैं। यदि आप संस्करण नियंत्रण (version control) का उपयोग कर रहे हैं, तो अपनी .env को gitignore फ़ाइल में जोड़ें।7. sendTx.js फ़ाइल बनाएं
बहुत बढ़िया, अब जब हमारा संवेदनशील डेटा .env फ़ाइल में सुरक्षित है, तो आइए कोडिंग शुरू करें। हमारे लेन-देन भेजने के उदाहरण के लिए, हम आपके द्वारा नियंत्रित किसी अन्य पते पर 0.001 ETH भेजेंगे, जैसे कि मेटामास्क में दूसरा खाता।
एक sendTx.js फ़ाइल बनाएं, जहां हम अपने उदाहरण लेन-देन को कॉन्फ़िगर करेंगे और भेजेंगे, और इसमें कोड की निम्नलिखित पंक्तियां जोड़ें:
require("dotenv").config({ quiet: true })
const { createPublicClient, createWalletClient, http, parseEther } = require("viem")
const { privateKeyToAccount } = require("viem/accounts")
const { sepolia } = require("viem/chains")
async function main() {
const { API_URL, PRIVATE_KEY } = process.env
const account = privateKeyToAccount(
PRIVATE_KEY.startsWith("0x") ? PRIVATE_KEY : `0x${PRIVATE_KEY}`
)
const publicClient = createPublicClient({
chain: sepolia,
transport: http(API_URL),
})
const walletClient = createWalletClient({
account,
chain: sepolia,
transport: http(API_URL),
})
const nonce = await publicClient.getTransactionCount({
address: account.address,
blockTag: "pending",
}) // नॉन्स की गिनती 0 से शुरू होती है
const transaction = await walletClient.prepareTransactionRequest({
to: "0xYourSecondAddress", // TODO: उस पते से बदलें जिस पर आप ETH भेजना चाहते हैं
value: parseEther("0.001"), // 0.001 ETH
gas: 21000n,
nonce,
// संदेश भेजने या स्मार्ट अनुबंध निष्पादित करने के लिए वैकल्पिक डेटा फ़ील्ड
})
const signedTx = await walletClient.signTransaction(transaction)
try {
const hash = await walletClient.sendRawTransaction({
serializedTransaction: signedTx,
})
console.log("🎉 The hash of your transaction is:", hash)
const receipt = await publicClient.waitForTransactionReceipt({ hash })
console.log(`Transaction ${receipt.status} in block ${receipt.blockNumber}`)
} catch (error) {
console.log(
"❗Something went wrong while submitting your transaction:",
error.details ?? error.message
)
}
}
main()
सुनिश्चित करें कि आप 0xYourSecondAddress को उस पते से बदल दें जिस पर आप ETH भेजना चाहते हैं। स्क्रिप्ट PRIVATE_KEY से आपका अपना (भेजने वाला) पता प्राप्त करती है, इसलिए आपको इसे दर्ज करने की आवश्यकता नहीं है।
अब, इस कोड को चलाने से पहले, आइए यहां कुछ घटकों के बारे में बात करते हैं।
account:privateKeyToAccount(नए टैब में खुलता है) के साथ आपकी निजी कुंजी से बनाया गया एक स्थानीय खाता। हस्ताक्षर करना आपकी मशीन पर होता है, और निजी कुंजी कभी भी Alchemy को नहीं भेजी जाती है।publicClientऔरwalletClient: Viem क्लाइंट जो आपके Alchemy URL पर जेसन-आरपीसी अनुरोध भेजते हैं। सार्वजनिक क्लाइंट चेन से पढ़ता है, और वॉलेट क्लाइंट आपके खाते के लिए लेन-देन तैयार करता है और उन पर हस्ताक्षर करता है।nonce: नॉन्स विनिर्देश का उपयोग आपके पते से भेजे गए लेन-देन की संख्या पर नज़र रखने के लिए किया जाता है। हमें सुरक्षा उद्देश्यों और रीप्ले हमलों को रोकने के लिए इसकी आवश्यकता है। आपके पते से भेजे गए लेन-देन की संख्या प्राप्त करने के लिए हम getTransactionCount (नए टैब में खुलता है) का उपयोग करते हैं। Viem भी इसे आपके लिए भर देगा, लेकिन हम इसे स्पष्ट रूप से यहां लाते हैं ताकि यह दिखाया जा सके कि यह कहां से आता है।transaction: लेन-देन ऑब्जेक्ट के कुछ पहलू हैं जिन्हें हमें निर्दिष्ट करने की आवश्यकता है।prepareTransactionRequest(नए टैब में खुलता है) हमारे लिए बाकी भरता है, जिसमें वर्तमान नेटवर्क स्थितियों के आधार परchainIdऔर EIP-1559 शुल्क फ़ील्डmaxFeePerGasऔरmaxPriorityFeePerGasशामिल हैं।to: यह वह पता है जिस पर हम ETH भेजना चाहते हैं।value: यह वह राशि है जिसे हम भेजना चाहते हैं, जिसे Wei में निर्दिष्ट किया गया है जहां 10^18 Wei = 1 ETH।parseEther(नए टैब में खुलता है) हमारे लिए ETH राशि को Wei में परिवर्तित करता है। आपके खाते को इससे थोड़ा अधिक चाहिए, क्योंकि यह गैस के लिए भी भुगतान करता है।gas: आपके लेन-देन में शामिल करने के लिए गैस की सही मात्रा निर्धारित करने के कई तरीके हैं। Alchemy वेबहुक (नए टैब में खुलता है) का समर्थन करता है जो आपको ऑनचेन गतिविधि के बारे में सूचित कर सकता है। मेननेट लेन-देन के लिए, शामिल करने के लिए गैस की सही मात्रा निर्धारित करने के लिए वर्तमान गैस स्थितियों की जांच करना एक अच्छा अभ्यास है। एक साधारण पते पर एक सादा ETH ट्रांसफर हमेशा ठीक 21000 गैस का उपयोग करता है, जो किसी भी लेन-देन के लिए न्यूनतम है, इसलिए हम यहां 21000 डालते हैं। यदि आपgasको छोड़ देते हैं, तो Viem आपके लिए इसका अनुमान लगाता है।nonce: ऊपर नॉन्स परिभाषा देखें। नॉन्स शून्य से गिनना शुरू करता है।- [वैकल्पिक] data: आपके ट्रांसफर के साथ अतिरिक्त जानकारी भेजने, या स्मार्ट अनुबंध को कॉल करने के लिए उपयोग किया जाता है, बैलेंस ट्रांसफर के लिए आवश्यक नहीं है, नीचे दिया गया नोट देखें।
signedTx: हमारे लेन-देन ऑब्जेक्ट पर हस्ताक्षर करने के लिए हमsignTransactionविधि का उपयोग करेंगे, जो इसे हमारेPRIVATE_KEYसे बनाए गए खाते के साथ स्थानीय रूप से हस्ताक्षर करता है।sendRawTransaction: एक बार जब हमारे पास एक हस्ताक्षरित लेन-देन होता है, तो हम इसेsendRawTransactionका उपयोग करके बाद के ब्लॉक में शामिल करने के लिए भेज सकते हैं, जोeth_sendRawTransactionको कॉल करता है।waitForTransactionReceipt: लेन-देन के ब्लॉक में शामिल होने तक प्रतीक्षा करता है और इसकी रसीद देता है।
डेटा पर एक नोट इथेरियम में दो मुख्य प्रकार के लेन-देन भेजे जा सकते हैं।
- बैलेंस ट्रांसफर: एक पते से दूसरे पते पर ETH भेजें। किसी डेटा फ़ील्ड की आवश्यकता नहीं है, हालांकि, यदि आप अपने लेन-देन के साथ अतिरिक्त जानकारी भेजना चाहते हैं, तो आप इस फ़ील्ड में HEX प्रारूप में वह जानकारी शामिल कर सकते हैं।
- उदाहरण के लिए, मान लें कि हम एक IPFS दस्तावेज़ के हैश को इथेरियम चेन पर लिखना चाहते हैं ताकि इसे एक अपरिवर्तनीय टाइमस्टैम्प दिया जा सके। हमारा डेटा फ़ील्ड तब Viem के
toHex(नए टैब में खुलता है) का उपयोग करकेdata: toHex("IPFS hash")जैसा दिखना चाहिए। और अब कोई भी चेन से पूछताछ कर सकता है और देख सकता है कि वह दस्तावेज़ कब जोड़ा गया था।
- उदाहरण के लिए, मान लें कि हम एक IPFS दस्तावेज़ के हैश को इथेरियम चेन पर लिखना चाहते हैं ताकि इसे एक अपरिवर्तनीय टाइमस्टैम्प दिया जा सके। हमारा डेटा फ़ील्ड तब Viem के
- स्मार्ट अनुबंध लेन-देन: चेन पर कुछ स्मार्ट अनुबंध कोड निष्पादित करें। इस मामले में, डेटा फ़ील्ड में वह स्मार्ट फ़ंक्शन होना चाहिए जिसे आप निष्पादित करना चाहते हैं, साथ ही कोई भी पैरामीटर।
- एक व्यावहारिक उदाहरण के लिए, हैलो वर्ल्ड स्मार्ट अनुबंध ट्यूटोरियल देखें।
8. node sendTx.js का उपयोग करके कोड चलाएं
अपने टर्मिनल या कमांड लाइन पर वापस नेविगेट करें और चलाएं:
node sendTx.js
9. ब्लॉक एक्सप्लोरर पर अपना लेन-देन देखें
जैसे ही नोड लेन-देन स्वीकार करता है, स्क्रिप्ट लेनदेन हैश प्रिंट करती है, फिर इसके ब्लॉक में शामिल होने तक प्रतीक्षा करती है (आमतौर पर कुछ सेकंड के भीतर) और परिणाम प्रिंट करती है। विवरण देखने के लिए, हैश को Sepolia ब्लॉक एक्सप्लोरर जैसे Sepolia Etherscan (नए टैब में खुलता है) या Blockscout (नए टैब में खुलता है) में पेस्ट करें। वहां आप लेन-देन को लंबित से शामिल होने तक देख सकते हैं, और वह राशि, शुल्क और ब्लॉक देख सकते हैं जिसमें यह उतरा है।
यदि आप इसके बजाय insufficient funds त्रुटि देखते हैं, तो आपके खाते में मूल्य और गैस को कवर करने के लिए पर्याप्त Sepolia ETH नहीं है। चरण 2 पर वापस जाएं और फॉसेट से अधिक का अनुरोध करें।
वाह! आपने अभी Alchemy का उपयोग करके अपना पहला इथेरियम लेन-देन भेजा है 🎉
इस मार्गदर्शिका के बारे में प्रतिक्रिया और सुझावों के लिए, कृपया Alchemy के डिस्कॉर्ड (नए टैब में खुलता है) पर Elan को संदेश भेजें!
मूल रूप से Alchemy द्वारा प्रकाशित।