TON Virtual Machine (TVM, कभी‑कभी TON VM) — वर्चुअल मशीन जो ब्लॉकचेन TON में स्मार्ट‑कॉन्ट्रैक्ट्स को चलाती है। यह नेटवर्क की एग्जीक्यूशन लेयर है: प्रत्येक स्मार्ट‑कॉन्ट्रैक्ट TVM के लिए प्रोग्राम के रूप में संग्रहीत और चलाया जाता है। मशीन इनकमिंग मैसेजेज़ को प्रोसेस करती है, कॉन्ट्रैक्ट की स्थायी स्थिति को अपडेट करती है और अन्य कॉन्ट्रैक्ट्स के लिए आउटगोइंग मैसेजेज़ बनाती है।
TVM की आर्किटेक्चर तीन आवश्यकताओं के अधीन है: निष्पादन की पूर्ण डिटरमिनिस्टिकता (एक ही इनपुट सभी नोड्स पर एक ही परिणाम देता है), कोड की उच्च घनत्व (ब्लॉकचेन में न्यूनतम जगह) और इंस्ट्रक्शन सेट के विस्तार के दौरान बैकवर्ड कम्पैटिबिलिटी।
इतिहास#
TVM को 2018 में Telegram टीम ने पहला संस्करण के साथ TON प्रोटोकॉल के साथ विकसित किया। विकास चरण‑बद्ध रहा:
- 2018 — TVM का पहला संस्करण, TON टेस्टनेट के साथ रिलीज़। मुख्य फोकस — स्मार्ट‑कॉन्ट्रैक्ट फ़ंक्शनैलिटी और प्रोटोकॉल इंटीग्रेशन।
- मार्च 2020 — डेटा टाइप्स, ऑप्टिमाइज़ेशन और इंस्ट्रक्शन सेट का विवरण देने वाली विस्तृत तकनीकी डॉक्यूमेंटेशन प्रकाशित हुई।
- 2020 (mainnet लॉन्च) — TVM ने पूर्ण ऑपरेशन सेट को सपोर्ट किया और प्रोडक्शन नेटवर्क में डिटरमिनिस्टिक निष्पादन सुनिश्चित किया।
प्रोजेक्ट को समुदाय को ट्रांसफर करने के बाद TVM का विकास TEP‑प्रोसेस के माध्यम से जारी है — अपडेट्स इम्प्रूवमेंट प्रपोज़ल्स के रूप में पेश होते हैं और वैलिडेटर्स की सहमति से एक्टिवेट होते हैं।
मूल बातें#
TVM बिट‑स्ट्रिंग्स को डेटा का फंडामेंटल रिप्रेजेंटेशन मानता है। इन्हें दो नोटेशन्स में दर्शाया जाता है:
- हेक्साडेसिमल नोटेशन — स्ट्रिंग्स की लंबाई 4 बिट्स के मल्टिपल में होती है, प्रत्येक 4‑बिट ग्रुप एक हेक्साडेसिमल डाइट (0–F) से दर्शाया जाता है। यदि लंबाई 4 का मल्टिपल नहीं है, तो मॉडिफिकेशन को मार्क करने के लिए एक विशेष एन्ड‑टैग जोड़ा जाता है।
- ऑक्टेट्स में सीरियलाइज़ेशन — स्ट्रिंग को 8‑बिट ग्रुप्स में बाँटा जाता है और बाइट्स की सीरीज़ के रूप में लिखा जाता है; आवश्यकता पड़ने पर 8‑बिट तक पैडिंग की जाती है।
स्टैक मॉडल#
TVM एक स्टैक‑आधारित वर्चुअल मशीन है। इसका मतलब है कि डेटा “स्टैक” (last‑in‑first‑out) स्ट्रक्चर में रहता है, न कि नामित वेरिएबल्स या रजिस्टर में। अधिकांश ऑपरेशन्स (अंकगणित, तुलना, पैरामीटर पासिंग) स्टैक से आर्ग्यूमेंट्स लेते हैं और परिणाम वहीं पुश करते हैं। स्टैक मॉडल रजिस्टर‑आधारित अप्रोच से सरल है और इंस्ट्रक्शन कोडिंग को अधिक कॉम्पैक्ट बनाता है — ऑन‑चेन स्टोरेज को कम करने के लिए यह महत्वपूर्ण है।
वैल्यू टाइप्स
TVM स्टैक निम्नलिखित फिक्स्ड प्रिमिटिव टाइप्स को सपोर्ट करता है:
- Integer — 257‑बिट साइनड इंटीजर (यह बिट‑वाइड्थ 256‑बिट हैश + साइन को बिना लॉस के समेटने की अनुमति देता है)।
- Cell — ऑब्जेक्ट जो अधिकतम 1023 बिट डेटा और अधिकतम 4 लिंक अन्य सेल्स की ओर रखता है। TVM मेमोरी का मूलभूत बिल्डिंग ब्लॉक।
- Tuple — विभिन्न टाइप्स के वैल्यूज़ का ऑर्डर्ड कलेक्शन।
- Slice — सेल का “स्लाइस”: रीडिंग के दौरान डेटा और लिंक की बची हुई भाग का पॉइंटर।
- Builder — नई Cell को क्रमिक रूप से बनाने के लिए बफ़र।
- Continuation — निष्पादन पॉइंट का प्रतिनिधित्व; नीचे देखें।
- Null — वैल्यू का अभाव; अनइनिशियलाइज़्ड फ़ील्ड्स के लिए मार्कर।
इंस्ट्रक्शन कैटेगरीज
इंस्ट्रक्शन्स को उनके उद्देश्य के आधार पर समूहित किया जाता है:
- स्टैक और ट्यूपल — स्टैक रीऑर्डरिंग, ट्यूपल ऑपरेशन्स;
- कॉन्स्टेंट — प्री‑डिफाइंड वैल्यूज़ को स्टैक पर पुश करना;
- अंकगणित — ओवरफ़्लो चेक के साथ स्टैंडर्ड अरिथ्मेटिक ऑपरेशन्स;
- सेल ऑपरेशन्स — Slice पढ़ना, Builder लिखना, लिंक फ़ॉलो करना;
- फ्लो कंट्रोल — कंडीशनल ब्रांचेज़, लूप्स, कंटिन्यूएशन कॉल्स;
- एप्लिकेशन प्रिमिटिव्स — TON‑स्पेसिफिक ऑपरेशन्स जैसे एड्रेस, सिग्नेचर, मैसेज एक्ट्यूएटर।
सेल्स और उनके टाइप्स#
Cell — TVM और स्वयं TON ब्लॉकचेन में स्टोरेज की एटॉमिक यूनिट। प्रत्येक Cell में अधिकतम 1023 बिट डेटा और अधिकतम 4 लिंक अन्य Cell की ओर होते हैं। लिंक द्वारा बनता ग्राफ एक डायरेक्टेड एसीक्लिक ग्राफ (DAG) है: साइक्ल्स अनुमति नहीं हैं। सभी ब्लॉकचेन डेटा (स्मार्ट‑कॉन्ट्रैक्ट्स, स्टेट्स, मैसेजेज़, ब्लॉक्स) इस ग्राफ के रूप में संग्रहीत होते हैं।
सेल टाइप्स
- नॉर्मल (टाइप‑1) — डेटा और लिंक का स्टैंडर्ड कंटेनर।
- एक्ज़ोटिक (exotic cells) — टाइप 2‑255, जिनमें सीरियलाइज़ेशन और हैशिंग की विशेषताएँ होती हैं। लाइब्रेरी लिंक, ट्रंकेटेड ब्रांचेज़ और Merkle प्रूफ़्स के लिए उपयोग होते हैं।
एक्ज़ोटिक सेल्स उदाहरण के तौर पर ब्लॉकचेन का पार्टियल स्नैपशॉट क्रिप्टोग्राफिक प्रूफ़ के साथ ट्रांसमिट करने की सुविधा देती हैं — यह लाइट‑क्लाइंट्स के लिए बेसिक फीचर है।
कंटिन्यूएशन्स (Continuations)#
Continuation TVM में फ्लो कंट्रोल की मुख्य कंस्ट्रक्शन है। मूल रूप से यह “डिले्ड कंप्यूटेशन” है: कोड, वर्तमान स्टैक और कंट्रोल रजिस्टर की सेव्ड स्टेट को एन्कैप्सुलेट करने वाला मार्कर। Continuation को स्टैक पर पुश किया जा सकता है, पैरामीटर के रूप में पास किया जा सकता है, एक्टिवेट किया जा सकता है — और फिर सेव्ड पॉइंट से एक्सीक्यूशन जारी रखा जा सकता है।
Continuation‑आधारित कॉल्स, कंडीशनल ऑपरेशन्स, लूप्स और एक्सेप्शन हैंडलिंग सभी इस मैकेनिज़्म पर आधारित हैं। परिचित प्रोग्रामिंग लैंग्वेजेज़ में इसका समकक्ष first‑class functions है; TVM में continuation अधिक पावरफ़ुल है क्योंकि यह प्रोग्राम के अधूरे हिस्से को भी कवर करता है।
कंटिन्यूएशन टाइप्स
- नॉर्मल — कोड, स्टैक, सेव्ड रजिस्टर लिस्ट और कोड पेज (नीचे देखें) को रखता है।
- सिंपल — केवल कोड और कोड पेज, स्टैक डेटा नहीं।
- करंट (cc, current continuation) — वर्तमान में चल रहे कोड को दर्शाता है; मशीन की स्टेट का मुख्य भाग।
कंटिन्यूएशन्स के बीच स्विच JMP (जम्प) और RET (रिटर्न) इंस्ट्रक्शन्स द्वारा किया जाता है। एक्सेप्शन‑हैंडलर विशेष कंटिन्यूएशन्स होते हैं जो एरर पैरामीटर्स लेते हैं और आगे की बिहेवियर तय करते हैं। IF, WHILE, REPEAT जैसी कंडीशनल और इटरेटिव स्ट्रक्चर्स भी continuations के ऊपर इम्प्लीमेंटेड हैं।
कोड पेजेज़#
हर नॉर्मल continuation में 16‑बिट कोड पेज फ़ील्ड (cp) होता है, जो निर्धारित करता है कि उसकी इंस्ट्रक्शन्स कैसे डिकोड की जाएँ। यह बैकवर्ड कम्पैटिबिलिटी मैकेनिज़्म है: नेटवर्क में एक साथ विभिन्न TVM इंस्ट्रक्शन‑सेट वर्ज़न के तहत कंपाइल्ड कॉन्ट्रैक्ट्स मौजूद हो सकते हैं।
इंस्ट्रक्शन्स बाइनरी प्रीफ़िक्स कोड में एन्कोड होते हैं — यह यूनिक डिकोडिंग और कॉम्पैक्ट रिप्रेजेंटेशन देता है। यदि प्रीफ़िक्स वर्तमान कोड पेज पर वैध इंस्ट्रक्शन नहीं है, तो “invalid opcode” एक्सेप्शन थ्रो किया जाता है।
कोड पेजेज़ के बीच ऑटो‑स्विचिंग संभव है, जो ऑपरेशन के आधार पर स्विच होती है — यह अक्सर अक्सर उपयोग होने वाले ऑपरेशन्स (स्टैक मैनीपुलेशन, डेटा प्रोसेसिंग) के लिए स्पेशलाइज़्ड पेजेज़ बनाकर कोड साइज को कम करता है।
TVM बनाम Ethereum Virtual Machine#
TVM और EVM दोनों ही स्मार्ट‑कॉन्ट्रैक्ट्स के लिए स्टैक‑आधारित वर्चुअल मशीन हैं, लेकिन कई प्रमुख अंतर हैं।
| विशेषता | TVM | EVM |
|---|---|---|
| बेस डेटा मॉडल | सेल ग्राफ (Cell, ≤1023 बिट + 4 लिंक) | 256‑बिट शब्द + Merkle Patricia Trie |
| Integer साइज | 257 बिट | 256 बिट |
| ओवरफ़्लो चेक | ऑटोमैटिक | मैन्युअल (Solidity ≥0.8) |
| क्रिप्टोग्राफी | Curve25519, Weil pairings (zk‑SNARKs), sha256 | secp256k1, keccak256 |
| मुख्य कॉन्ट्रैक्ट लैंग्वेज | FunC (स्टैटिक टाइपिंग, ADT) | Solidity |
| स्टेट स्टोरेज | कॉन्ट्रैक्ट‑लेवल सेल्स में वितरित | ग्लोबल MPT |
सेल ग्राफ जटिल स्ट्रक्चर्स (ट्री, DAG) के साथ काम करना आसान बनाता है, मेमोरी और कंप्यूट रिसोर्सेज़ की खपत कम रखता है, जबकि MPT अधिक ओवरहेड देता है। ऑटो ओवरफ़्लो चेक सामान्य वल्नरेबिलिटीज़ को कम करता है। Curve25519 और Weil pairings जैसी प्रिमिटिव्स के सपोर्ट से TVM में EVM की तुलना में अधिक एडवांस्ड क्रिप्टो क्षमताएँ मिलती हैं।
संबंधित लेखसंबंधित लेख#
- The Open Network
- FunC
- स्मार्ट‑कॉन्ट्रैक्ट्स
- Toncoin