मुफ़्त Ethereum ABI डिकोडर
ABI JSON का उपयोग करके Ethereum स्मार्ट कॉन्ट्रैक्ट कॉल डेटा को डिकोड करें। फ़ंक्शन सेलेक्टर पार्स करें और uint256, address, bool, string तथा bytes32 पैरामीटर डिकोड करें।
अपडेट किया गया
Ethereum ABI Decoder
Decode Ethereum transaction calldata using ABI definitions. Inspect function calls and parameter values.
ABI JSON
अक्सर पूछे जाने वाले प्रश्न
कौन-से पैरामीटर प्रकार डिकोड किए जा सकते हैं?
uint256, address, bool, string और bytes32। डायनामिक प्रकार (arrays, tuples) के लिए मैन्युअल निरीक्षण की आवश्यकता होती है।
फ़ंक्शन सेलेक्टर क्या है?
कॉल डेटा के पहले 4 बाइट, जो फ़ंक्शन सिग्नेचर के keccak256 हैश से प्राप्त होते हैं (उदाहरण के लिए, "transfer(address,uint256)")।
क्या यह मुफ़्त है?
हाँ, पूरी तरह मुफ़्त।
क्या इस टूल के साथ मेरा डेटा सुरक्षित है?
बिल्कुल। Ethereum ABI Decoder सब कुछ आपके ब्राउज़र में क्लाइंट-साइड प्रोसेस करता है। कोई भी डेटा किसी सर्वर पर अपलोड या संग्रहीत नहीं किया जाता। आपकी सामग्री हर समय आपके डिवाइस पर निजी रहती है।
क्या Ethereum ABI Decoder मोबाइल डिवाइस पर काम करता है?
हाँ, Ethereum ABI Decoder पूरी तरह रिस्पॉन्सिव है और स्मार्टफ़ोन व टैबलेट पर काम करता है। आप इसे किसी भी आधुनिक वेब ब्राउज़र वाले डिवाइस पर उपयोग कर सकते हैं, किसी ऐप डाउनलोड की आवश्यकता नहीं।
क्या इस टूल का उपयोग करने के लिए मुझे खाता बनाना होगा?
किसी खाते या पंजीकरण की आवश्यकता नहीं है। बस अपने ब्राउज़र में Ethereum ABI Decoder खोलें और तुरंत उपयोग शुरू करें। कोई साइन-अप बाधा या उपयोग प्रतिबंध नहीं है।
मैं Ethereum ABI Decoder का उपयोग कैसे करूँ?
बस दिए गए फ़ील्ड में अपना डेटा दर्ज करें, अपनी पसंद के अनुसार सेटिंग्स समायोजित करें, और टूल इसे तुरंत प्रोसेस कर देगा। फिर आप परिणाम को क्लिपबोर्ड पर कॉपी कर सकते हैं या डाउनलोड कर सकते हैं।
कौन-से ब्राउज़र समर्थित हैं?
Ethereum ABI Decoder सभी आधुनिक ब्राउज़रों में काम करता है, जिनमें Chrome, Firefox, Safari, Edge और Opera शामिल हैं। सर्वोत्तम अनुभव के लिए, अपने पसंदीदा ब्राउज़र का नवीनतम संस्करण उपयोग करें।
ERC-20 calldata से डिकोड की गई uint256 राशियों को मैं कैसे पढ़ूं?
calldata में uint256 एक raw इंटीजर होता है जिसमें कोई दशमलव बिंदु नहीं होता, इसलिए एक टोकन ट्रांसफर राशि टोकन की सबसे छोटी इकाई में एक बहुत बड़ी संख्या के रूप में सामने आती है। ज़्यादातर ERC-20 टोकन के लिए इसका मतलब है 18 दशमलव वाली wei-स्टाइल इकाइयां: वैल्यू 1000000000000000000 (0xde0b6b3a7640000) ठीक 1 टोकन के बराबर है। कन्वर्ट करने के लिए, डिकोड की गई इंटीजर को टोकन के दशमलव अंकों की घात तक बढ़ाए गए 10 से भाग दें। USDC और USDT 6 दशमलव इस्तेमाल करते हैं, इसलिए 1000000 का मतलब है 1.00, जबकि WBTC 8 इस्तेमाल करता है। यह डिकोडर 32-बाइट स्लॉट को big-endian तरीके से पढ़ता है और आपको सटीक इंटीजर के साथ-साथ वह raw hex भी दिखाता है जिससे वह आई है, ताकि आप खुद राशि को वेरिफाई कर सकें। किसी वॉलेट प्रॉम्प्ट पर भरोसा करने से पहले सटीक आंकड़ा देखने के लिए अपना ABI और calldata पेस्ट करें।
डिकोडर यह क्यों कहता है कि कोई मेल खाता फंक्शन नहीं मिला?
यह डिकोडर आपके ABI में मौजूद हर फंक्शन के लिए एक Keccak-256 सिलेक्टर कैलकुलेट करता है और उसकी तुलना आपके calldata के पहले 4 बाइट्स से करता है। जब कुछ भी मेल नहीं खाता, तो इसका मतलब है कि आपने जो ABI पेस्ट किया है उसमें वह फंक्शन शामिल ही नहीं है जो असल में कॉल किया गया था। इसके सामान्य कारण होते हैं: गलत कॉन्ट्रैक्ट का ABI इस्तेमाल करना, कोई proxy कॉन्ट्रैक्ट जो कॉल्स को किसी अलग implementation पर फॉरवर्ड करता है, या ऐसा ABI जिसमें वह खास फंक्शन मौजूद ही नहीं है। पैरामीटर टाइप में सिर्फ एक अक्षर का अंतर, जैसे uint बनाम uint256, भी सिलेक्टर को बदल देता है और मैच तोड़ देता है। इसका हल यह है कि किसी block explorer से उस सटीक कॉन्ट्रैक्ट का वेरिफाई किया गया ABI लोड करें, फिर दोबारा डिकोड करें। यह एरर खुद में एक उपयोगी संकेत है कि ट्रांजैक्शन वह नहीं है जो आपने सोचा था। सोर्स को दोबारा जांचें और सही ABI के साथ फिर से कोशिश करें।
फंक्शन सिलेक्टर और पूरे ABI में क्या फर्क है?
एक फंक्शन सिलेक्टर सिर्फ 4 बाइट्स का होता है, यह transfer(address,uint256) जैसे canonical सिग्नेचर के Keccak-256 हैश का शुरुआती हिस्सा है, जो यह पहचानता है कि कोई ट्रांजैक्शन किस फंक्शन को टारगेट कर रहा है। यह आपको बताता है कि कौन सा फंक्शन है, लेकिन पैरामीटर के नामों या उसके बाद आने वाले बाइट्स को कैसे समझें, इसके बारे में कुछ नहीं बताता। एक पूरा ABI किसी कॉन्ट्रैक्ट के फंक्शंस का संपूर्ण JSON विवरण होता है, जिसमें हर इनपुट का नाम, टाइप, और आउटपुट शामिल होते हैं। डिकोडर को सिर्फ सिलेक्टर नहीं बल्कि पूरे ABI की ज़रूरत होती है, क्योंकि 32-बाइट के आर्ग्युमेंट स्लॉट्स तब तक बेमानी हैं जब तक आपको पता न हो कि एक में address है और अगले में uint256। सिर्फ सिलेक्टर के साथ आप एक संभावित सिग्नेचर ढूंढ सकते हैं; ABI के साथ आपको नाम और टाइप वाली वैल्यूज़ मिलती हैं। कच्चे hex को नामांकित पैरामीटर ब्यौरे में बदलने के लिए यहां ABI array पेस्ट करें।
क्या यह टूल string, bytes, और arrays जैसे dynamic टाइप्स को डिकोड कर सकता है?
यह ABI एन्कोडिंग नियमों का पालन करते हुए string और bytes को हैंडल करता है: static स्लॉट में एक offset पॉइंटर होता है जो एक अलग रीजन की ओर इशारा करता है, जहां पहले लंबाई (length) स्टोर होती है, उसके बाद असली डेटा आता है। डिकोडर उस पॉइंटर को पढ़ता है, लंबाई तक जाता है, और टेक्स्ट या hex वैल्यू को दोबारा बनाता है। uint256, int, address, bool, और bytes32 जैसे फिक्स्ड-साइज़ static टाइप्स हर बार एक 32-बाइट स्लॉट में बैठते हैं और हमेशा साफ-सुथरे तरीके से डिकोड होते हैं। जहां यह पीछे रह जाता है वह हैं जटिल dynamic स्ट्रक्चर्स जैसे variable-length arrays और nested tuples, जो मल्टी-पार्ट एन्कोडिंग इस्तेमाल करते हैं और जिनके लिए एक साफ वैल्यू के बजाय मैनुअल जांच की ज़रूरत पड़ सकती है। रोज़मर्रा के कॉल्स जैसे ERC-20 ट्रांसफर, अप्रूवल्स, और साधारण सेटर्स के लिए, ऑटोमैटिक आउटपुट पूरी तरह से सही होता है। यह देखने के लिए कि कौन से पैरामीटर सीधे रिज़ॉल्व होते हैं, अपना calldata पेस्ट करें।
किसी सिग्नेचर से फंक्शन सिलेक्टर की गणना कैसे की जाती है?
canonical सिग्नेचर से शुरू करें: फंक्शन का नाम, उसके बाद कोष्ठक में उसके पैरामीटर टाइप्स, कॉमा से अलग किए हुए, बिना किसी स्पेस और बिना पैरामीटर के नामों के, उदाहरण के लिए transfer(address,uint256)। उस बिल्कुल सटीक स्ट्रिंग को Keccak-256 हैश फंक्शन से गुज़ारें और 32-बाइट के नतीजे में से पहले 4 बाइट्स लें। transfer के लिए यह 0xa9059cbb बनाता है। canonical फॉर्म इसलिए मायने रखता है क्योंकि uint को उसके पूरे उपनाम uint256 के रूप में और int को int256 के रूप में लिखा जाना चाहिए, वरना हैश और सिलेक्टर पूरी तरह बदल जाते हैं। यह टूल आपके ब्राउज़र में सीधे एक बिल्ट-इन Keccak-256 इम्प्लीमेंटेशन के साथ सिलेक्टर्स की गणना करता है, इसलिए किसी कॉल को मैच करने के लिए इसे कभी भी बड़े ऑनलाइन सिग्नेचर डेटाबेस की ज़रूरत नहीं पड़ती। एक असली सिग्नेचर को उसके सिलेक्टर में बदलते देखने के लिए ERC-20 transfer example लोड करें, फिर यह पुष्टि करने के लिए कि कोई ट्रांजैक्शन क्या कॉल करता है, अपना खुद का फंक्शन डालकर देखें।
संबंधित टूल
मुफ़्त सुरक्षित पासवर्ड जनरेटर
अनुकूलन योग्य विकल्पों के साथ सुरक्षित, यादृच्छिक पासवर्ड बनाएं। मुफ़्त, तेज़ और पूरी तरह आपके ब्राउज़र में काम करता है, बिना साइन-अप के।
मुफ़्त UUID/GUID जनरेटर
सार्वभौमिक रूप से अद्वितीय पहचानकर्ता (UUID/GUID) बनाएं। मुफ़्त, तेज़ और पूरी तरह आपके ब्राउज़र में काम करता है, बिना साइन-अप के।
मुफ़्त QR कोड जनरेटर ऑनलाइन
URL, टेक्स्ट, WiFi क्रेडेंशियल और बहुत कुछ के लिए QR कोड बनाएं। मुफ़्त, तेज़ और पूरी तरह आपके ब्राउज़र में काम करता है, बिना साइन-अप के।
मुफ़्त JSON फ़ॉर्मेटर और वैलिडेटर
सिंटैक्स हाइलाइटिंग और त्रुटि पहचान के साथ JSON डेटा को फ़ॉर्मेट, सत्यापित और सुंदर बनाएं। मुफ़्त, तेज़ और पूरी तरह आपके ब्राउज़र में काम करता है, बिना साइन-अप के।
Ethereum ABI डिकोडर के बारे में
Ethereum ABI डिकोडर कच्चे ट्रांजैक्शन calldata को इंसानों के पढ़ने लायक फंक्शन कॉल में बदल देता है। आप किसी कॉन्ट्रैक्ट का ABI JSON और एक hex calldata स्ट्रिंग पेस्ट करते हैं, और यह टूल बताता है कि कौन सा फंक्शन कॉल किया गया था, उसका 4-बाइट सिलेक्टर क्या है, और हर पैरामीटर की डिकोड की गई वैल्यू क्या है। यह Solidity डेवलपर्स, स्मार्ट-कॉन्ट्रैक्ट ऑडिटर्स, और उन सभी लोगों के लिए बनाया गया है जो साइन करने से पहले या बाद में यह ठीक-ठीक समझना चाहते हैं कि कोई पेंडिंग या पुराना ट्रांजैक्शन असल में क्या करता है।
सब कुछ आपके ब्राउज़र में ही लोकली होता है। ABI, calldata, और डिकोड किया गया आउटपुट कभी भी आपकी डिवाइस से बाहर नहीं जाता — न कोई API कॉल, न वॉलेट कनेक्शन, न कोई साइन-अप। यह तब बहुत मायने रखता है जब आप किसी अनजान dApp प्रॉम्प्ट या ऐसे ट्रांजैक्शन के calldata की जांच कर रहे हों जिस पर आपको अभी भरोसा नहीं है।
ABI डिकोडिंग असल में करती क्या है
Ethereum पर, एक कॉन्ट्रैक्ट कॉल सिर्फ बाइट्स का एक ब्लॉब होता है। पहले 4 बाइट्स फंक्शन सिलेक्टर होते हैं — यह canonical फंक्शन सिग्नेचर, जैसे transfer(address,uint256), के Keccak-256 हैश के शुरुआती 4 बाइट्स होते हैं, जो 0xa9059cbb बनाते हैं। इन 4 बाइट्स के बाद जो कुछ भी आता है वह एन्कोड किए गए आर्ग्युमेंट्स होते हैं, जिन्हें 32-बाइट (256-बिट) के स्लॉट्स में पैक किया जाता है।
यह डिकोडर एक बिल्ट-इन Keccak-256 इम्प्लीमेंटेशन का उपयोग करके आपके ABI से सिलेक्टर्स कैलकुलेट करता है, फिर आपके calldata की शुरुआत के सिलेक्टर को ABI में मौजूद हर फंक्शन से मैच करता है। जब कोई मैच मिल जाता है, तो यह बाकी बचे बाइट्स को 32-बाइट के शब्दों (words) में काटता है और हर एक को उसके पैरामीटर के घोषित टाइप के अनुसार पढ़ता है। नतीजे में फंक्शन का नाम, सिलेक्टर, और हर पैरामीटर का ब्यौरा दिखता है — नाम, टाइप, डिकोड की गई वैल्यू, और वह raw 32-बाइट स्लॉट जिससे वह आई है।
जिन पैरामीटर टाइप्स को आप डिकोड कर सकते हैं
यह डिकोडर आम static (फिक्स्ड-साइज़) Solidity टाइप्स को हैंडल करता है, जिनमें से हर एक ठीक एक 32-बाइट स्लॉट लेता है:
- uint256 / uint और int — इन्हें big-endian और राइट-अलाइंड तरीके से पढ़ा जाता है; signed
intवैल्यूज़ को two's complement का उपयोग करके सही तरीके से समझा जाता है। - address — स्लॉट के दाईं ओर से 20 महत्वपूर्ण बाइट्स ली जाती हैं, जिसके बाईं ओर ज़ीरो से पैडिंग होती है।
- bool — आखिरी बाइट से
trueयाfalseके रूप में डिकोड होता है। - bytes32 — पूरी 32-बाइट hex वैल्यू के रूप में दिखाया जाता है।
यह string और bytes को भी डिकोड करने की कोशिश करता है, जो dynamic टाइप्स हैं और एक ऐसे offset पॉइंटर के रूप में एन्कोड होते हैं जो लंबाई-प्रीफिक्स्ड डेटा रीजन की ओर इशारा करता है। चूंकि ये और अन्य dynamic स्ट्रक्चर्स (variable-length arrays और tuples) मल्टी-पार्ट एन्कोडिंग का उपयोग करते हैं, इसलिए जटिल नेस्टिंग के लिए एक साफ-सुथरी एक-लाइन वैल्यू के बजाय मैनुअल जांच की ज़रूरत पड़ सकती है।
एक व्यावहारिक वर्कफ़्लो
एक असली transfer कॉल को शुरू से आखिर तक डिकोड होते देखने के लिए Load ERC-20 Transfer Example पर क्लिक करें: सिलेक्टर 0xa9059cbb, एक प्राप्तकर्ता एड्रेस, और wei में एक राशि (उदाहरण के लिए 0xde0b6b3a7640000, जो 18 दशमलव के साथ ठीक 1 टोकन के बराबर है)। इसके बाद, आप अपना खुद का डेटा डालकर देख सकते हैं।
असली स्थितियां जहां यह समय बचाता है:
- वॉलेट प्रॉम्प्ट को वेरिफाई करना — किसी ट्रांजैक्शन को अप्रूव करने से पहले, फंक्शन और सही प्राप्तकर्ता व राशि की पुष्टि करें, न कि सिर्फ एक उलझा हुआ hex स्ट्रिंग देखकर भरोसा करें।
- किसी फेल या अनपेक्षित कॉल को डीबग करना — यह समझें कि कॉन्ट्रैक्ट को असल में कौन से आर्ग्युमेंट्स भेजे गए थे।
- ऑडिटिंग और रिवर्स-इंजीनियरिंग — जब आपके पास ABI तो हो लेकिन वेरिफाई किया गया सोर्स व्यू न हो, तब किसी block explorer से लिए गए calldata की जांच करें।
एक अलग ABI Encoding Guide टैब एन्कोडिंग के नियम समझाता है — सिलेक्टर्स, static स्लॉट्स, और dynamic-type पॉइंटर्स — ताकि आउटपुट समझ आए भले ही आप low-level EVM डेटा में बिल्कुल नए हों।
डिकोड करने के लिए, ABI को फंक्शन ऑब्जेक्ट्स की एक JSON array के रूप में पेस्ट करें (हर एक में name, type, और inputs हों), calldata को 0x प्रीफिक्स के साथ या बिना पेस्ट करें, और Decode दबाएं। अगर शुरुआती सिलेक्टर ABI में मौजूद किसी भी फंक्शन से मेल नहीं खाता, तो टूल आपको यह बता देता है — यह एक त्वरित संकेत है कि आप उस ट्रांजैक्शन के लिए गलत ABI का उपयोग कर रहे हैं।