लेन-देन भेजने के लिए write ऑपरेशन का उपयोग
लक्षित दर्शक: अपना पहला स्थिति-परिवर्तनकारी ऑपरेशन करने के लिए तैयार डेवलपर्स।
पूर्वापेक्षाएँ: एक वित्तपोषित Sui devnet वॉलेट और एक बुनियादी Node.js वातावरण।
लक्ष्य: गैस और हस्ताक्षर की भूमिका को समझते हुए, किसी अन्य पते पर Sui टोकन ट्रांसफर करने के लिए एक स्क्रिप्ट लिखना।
परिचय
पिछले ट्यूटोरियल में, आपने बिना किसी नेटवर्क शुल्क के डेटा प्राप्त करने के लिए SuiClient से पूछताछ करके रीड ऑपरेशन किए थे।
अब, आप अपने वॉलेट से किसी अन्य पते पर Sui टोकन ट्रांसफर करने के लिए एक राइट ऑपरेशन करते हैं। चूंकि यह ऑन-चेन स्थिति को संशोधित करता है, दो आवश्यकताएं लागू होती हैं:
- हस्ताक्षर: फंड के स्वामित्व को साबित करने के लिए आपको अनुरोध पर क्रिप्टोग्राफ़िक रूप से हस्ताक्षर करने होंगे।
- गैस (डाक शुल्क): लेन-देन को संसाधित करने के लिए नेटवर्क की भरपाई हेतु आपको Sui टोकन में शुल्क का भुगतान करना होगा।
पूर्वापेक्षाएँ
इस ट्यूटोरियल को चलाने के लिए, आपको आवश्यकता है:
- एक वित्तपोषित वॉलेट: एक 12-शब्दों का रिकवरी फ़्रेज़ ऐसे वॉलेट के लिए जिसमें Sui
devnetटोकन हों। आप Sui Discord faucet के माध्यम से या संगत Sui वॉलेट के भीतर सीधे मुफ़्त टेस्ट टोकन का अनुरोध कर सकते हैं। - Ed25519 कीपेयर पैकेज: लेन-देन पर हस्ताक्षर करने के लिए
@mysten/sui।
आवश्यक पैकेज स्थापित करें (यदि आपने पहले से नहीं किया है):
npm install @mysten/sui
प्रोडक्शन ऐप्लिकेशन में, अपनी निजी कुंजी या रिकवरी फ़्रेज़ को कभी भी हार्डकोड न करें। हमेशा एनवायरनमेंट वेरिएबल्स का उपयोग करें (उदाहरण के लिए, .env)। यह ट्यूटोरियल प्रदर्शन के लिए इन-मेमोरी वेरिएबल का उपयोग करता है, लेकिन निजी रिकवरी फ़्रेज़ को कभी भी GitHub पर कमिट न करें।
1. निर्भरताएं आयात करें और क्लाइंट कॉन्फ़िगर करें
transfer.js नामक एक फ़ाइल बनाएं। नेटवर्क संचार के लिए SuiClient और लेन-देन पर हस्ताक्षर करने के लिए Ed25519Keypair आयात करें।
import { SuiClient, getFullnodeUrl } from '@mysten/sui/client';
import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
import { Transaction } from '@mysten/sui/transactions';
// 1. Devnet से कनेक्ट करें
const client = new SuiClient({ url: getFullnodeUrl('devnet') });
// 2. अपना वॉलेट लोड करें (प्रेषक)
// इसे अपने वास्तविक 12-शब्दों के स्मरणीय वाक्यांश से बदलें
const MNEMONIC = "word1 word2 word3 ... word12";
const keypair = Ed25519Keypair.deriveKeypair(MNEMONIC);
const senderAddress = keypair.getPublicKey().toSuiAddress();
console.log(`📦 प्रेषक का पता: ${senderAddress}`);
लेन-देन भेजने से पहले, आपके प्रेषक पते को गैस का भुगतान करने के लिए परीक्षण टोकन की आवश्यकता होती है। टर्मिनल में प्रिंट किया गया प्रेषक का पता कॉपी करें और Sui Discord में #devnet-faucet चैनल के माध्यम से टोकन का अनुरोध करें।
2. लेन-देन का निर्माण करें
Sui में, आप कच्चे कमांड भेजने के बजाय एक Transaction का निर्माण करते हैं। इसे शिपिंग लेबल भरने और सील करने से पहले बॉक्स में सामान पैक करने जैसा समझें।
अपने प्राथमिक गैस कॉइन से एक विशिष्ट राशि को विभाजित करने के लिए tx.splitCoins कमांड का उपयोग करें:
// 3. प्राप्तकर्ता को परिभाषित करें
const RECIPIENT = '0x9999...'; // किसी मित्र के पते या बर्न पते से बदलें
// 4. लेन-देन कंटेनर बनाएं
const tx = new Transaction();
// गैस कॉइन से 1000 MIST (SUI की सबसे छोटी इकाई) विभाजित करें
const [coinToSend] = tx.splitCoins(tx.gas, [1000]);
// विभाजित कॉइन को प्राप्तकर्ता को ट्रांसफर करें
tx.transferObjects([coinToSend], RECIPIENT);
3. लेन-देन पर हस्ताक्षर करें और सबमिट करें
यह चरण ऑन-चेन लेन-देन निष्पादित करने से पहले गैस की गणना और भुगतान करता है।
┌─────────────────────────┐ ┌─────────────────────────┐ ┌───────────────────────────┐
│ 1. लेन-देन बनाएं │ ──► │ 2. कीपेयर से साइन करें │ ──► │ 3. SuiClient द्वारा भेजें │
│ (splitCoins, transfer) │ │ (क्रिप्टोग्राफ़िक सबूत)│ │ (Devnet पर ब्रॉडकास्ट) │
└─────────────────────────┘ └─────────────────────────┘ └───────────────────────────┘
जब आप signAndExecuteTransaction को कॉल करते हैं, तो SuiClient:
- गैस का अनुमान लगाता है: गणना की जटिलता की गणना करता है और आवश्यक गैस बजट निर्धारित करता है।
- हस्ताक्षर करता है: स्थिति परिवर्तन को मंजूरी देने के लिए आपके
keypairहस्ताक्षर को लागू करता है। - सबमिट करता है: हस्ताक्षरित लेन-देन को RPC फुलनोड के माध्यम से नेटवर्क पर प्रसारित करता है।
async function sendTransaction() {
try {
console.log("📝 लेन-देन पर हस्ताक्षर और सबमिशन जारी...");
const result = await client.signAndExecuteTransaction({
signer: keypair,
transaction: tx,
});
console.log("✅ लेन-देन सबमिट हो गया!");
console.log(`Digest (ट्रैकिंग ID): ${result.digest}`);
} catch (error) {
console.error("❌ लेन-देन विफल रहा:", error);
}
}
sendTransaction();
इस लेन-देन में गैस को समझना
आपको गैस लागतों की मैन्युअल रूप से गणना करने की आवश्यकता नहीं है।
- स्वचालित बजट: डिफ़ॉल्ट रूप से, SDK आपके लिए गैस लागत का अनुमान लगाता है। यह अत्यधिक अधिक भुगतान के बिना निष्पादन के लिए पर्याप्त बजट निर्धारित करता है।
- भुगतान स्रोत: SDK इस शुल्क का भुगतान करने के लिए आपके वॉलेट से स्वचालित रूप से एक SUI कॉइन ऑब्जेक्ट का चयन करता है। इस वजह से, गैस को कवर करने के लिए हमेशा अपने वॉलेट में थोड़ी मात्रा में SUI आरक्षित रखें।
अपेक्षित आउटपुट
सफल होने पर, स्क्रिप्ट एक Transaction Digest (आपकी लेन-देन ट्रैकिंग ID) आउटपुट करती है:
📦 प्रेषक का पता: 0x123...
📝 लेन-देन पर हस्ताक्षर और सबमिशन जारी...
✅ लेन-देन सबमिट हो गया!
Digest (ट्रैकिंग ID): 5T7x...9B2a
इस डाइजेस्ट को कॉपी करें और इसे Suiscan पर खोजें। एक्सप्लोरर गैस खपत और निष्पादन स्थिति सहित स्थायी ऑन-चेन रिकॉर्ड प्रदर्शित करता है।
अगले कदम
अब जब आपने अपना पहला ऑन-चेन राइट लेन-देन निष्पादित कर लिया है:
- प्राप्तकर्ता के नए प्राप्त ऑब्जेक्ट का निरीक्षण करने के लिए ऑब्जेक्ट डेटा कैसे प्राप्त करें पढ़ें।
- Sui नोड्स और क्लर्कों के वैचारिक मॉडल के लिए SuiClient आर्किटेक्चर की समीक्षा करें।
- विस्तृत लेन-देन प्रभावों और ऑब्जेक्ट स्कीमा को क्वेरी करने के लिए
getObjectAPI संदर्भ का अन्वेषण करें।