ERC-1155 मल्टी-टोकन मानक
पेज का अंतिम अपडेट: 3 अप्रैल 2026
परिचय
उन अनुबंधों के लिए एक मानक इंटरफ़ेस जो कई टोकन प्रकारों का प्रबंधन करते हैं। एक एकल डिप्लॉयड अनुबंध में फंजिबल टोकन, नॉन-फंजिबल टोकन या अन्य कॉन्फ़िगरेशन (जैसे, सेमी-फंजिबल टोकन) का कोई भी संयोजन शामिल हो सकता है।
मल्टी-टोकन मानक से क्या मतलब है?
यह विचार सरल है और एक ऐसा स्मार्ट अनुबंध इंटरफ़ेस बनाने का प्रयास करता है जो किसी भी संख्या में फंजिबल और नॉन-फंजिबल टोकन प्रकारों का प्रतिनिधित्व और नियंत्रण कर सके। इस तरह, ERC-1155 टोकन ERC-20 और ERC-721 टोकन के समान कार्य कर सकता है, और यहां तक कि दोनों एक ही समय में कर सकता है। यह ERC-20 और ERC-721 दोनों मानकों की कार्यक्षमता में सुधार करता है, जिससे यह अधिक कुशल हो जाता है और स्पष्ट कार्यान्वयन त्रुटियों को ठीक करता है।
ERC-1155 टोकन का पूरी तरह से वर्णन EIP-1155 (opens in a new tab) में किया गया है।
पूर्वापेक्षाएं
इस पेज को बेहतर ढंग से समझने के लिए, हमारा सुझाव है कि आप पहले टोकन मानकों, ERC-20, और ERC-721 के बारे में पढ़ें।
ERC-1155 के कार्य और सुविधाएँ:
- बैच ट्रांसफर: एक ही कॉल में कई संपत्तियों को ट्रांसफर करें।
- बैच बैलेंस: एक ही कॉल में कई संपत्तियों का बैलेंस प्राप्त करें।
- बैच अप्रूवल: किसी पते के लिए सभी टोकन को मंजूरी दें।
- हुक: टोकन प्राप्त करने वाला हुक।
- एनएफटी सपोर्ट: यदि आपूर्ति केवल 1 है, तो इसे एनएफटी मानें।
- सुरक्षित ट्रांसफर नियम: सुरक्षित ट्रांसफर के लिए नियमों का सेट।
बैच ट्रांसफर
बैच ट्रांसफर नियमित ERC-20 ट्रांसफर के समान ही काम करता है। आइए नियमित ERC-20 transferFrom फ़ंक्शन देखें:
// ERC-20
function transferFrom(address from, address to, uint256 value) external returns (bool);
// ERC-1155
function safeBatchTransferFrom(
address _from,
address _to,
uint256[] calldata _ids,
uint256[] calldata _values,
bytes calldata _data
) external;
ERC-1155 में एकमात्र अंतर यह है कि हम वैल्यू को एक ऐरे के रूप में पास करते हैं और हम आईडी का एक ऐरे भी पास करते हैं। उदाहरण के लिए, ids=[3, 6, 13] और values=[100, 200, 5] दिए जाने पर, परिणामी ट्रांसफर होंगे
_fromसे_toमें आईडी 3 के साथ 100 टोकन ट्रांसफर करें।_fromसे_toमें आईडी 6 के साथ 200 टोकन ट्रांसफर करें।_fromसे_toमें आईडी 13 के साथ 5 टोकन ट्रांसफर करें।
ERC-1155 में हमारे पास केवल transferFrom है, transfer नहीं। इसे नियमित transfer की तरह उपयोग करने के लिए, बस from पते को उस पते पर सेट करें जो फ़ंक्शन को कॉल कर रहा है।
बैच बैलेंस
संबंधित ERC-20 balanceOf कॉल में भी बैच सपोर्ट वाला अपना पार्टनर फ़ंक्शन होता है। एक रिमाइंडर के तौर पर, यह ERC-20 संस्करण है:
// ERC-20
function balanceOf(address owner) external view returns (uint256);
// ERC-1155
function balanceOfBatch(
address[] calldata _owners,
uint256[] calldata _ids
) external view returns (uint256[] memory);
बैलेंस कॉल के लिए और भी आसान, हम एक ही कॉल में कई बैलेंस प्राप्त कर सकते हैं। हम मालिकों का ऐरे पास करते हैं, जिसके बाद टोकन आईडी का ऐरे होता है।
उदाहरण के लिए, _ids=[3, 6, 13] और _owners=[0xbeef..., 0x1337..., 0x1111...] को देखते हुए, रिटर्न वैल्यू होगी
[
balanceOf(0xbeef...),
balanceOf(0x1337...),
balanceOf(0x1111...)
]
बैच अप्रूवल
// ERC-1155
function setApprovalForAll(
address _operator,
bool _approved
) external;
function isApprovedForAll(
address _owner,
address _operator
) external view returns (bool);
अप्रूवल ERC-20 से थोड़ा अलग हैं। विशिष्ट राशियों को मंजूरी देने के बजाय, आप setApprovalForAll के माध्यम से एक ऑपरेटर को स्वीकृत या अस्वीकृत के रूप में सेट करते हैं।
वर्तमान स्थिति को isApprovedForAll के माध्यम से पढ़ा जा सकता है। जैसा कि आप देख सकते हैं, यह एक ऑल-ऑर-नथिंग ऑपरेशन है। आप यह परिभाषित नहीं कर सकते कि कितने टोकन को मंजूरी देनी है या कौन सी टोकन क्लास।
इसे सरलता को ध्यान में रखकर जानबूझकर डिजाइन किया गया है। आप केवल एक पते के लिए सब कुछ मंजूर कर सकते हैं।
रिसीव हुक
function onERC1155BatchReceived(
address _operator,
address _from,
uint256[] calldata _ids,
uint256[] calldata _values,
bytes calldata _data
) external returns(bytes4);
EIP-165 (opens in a new tab) सपोर्ट को देखते हुए, ERC-1155 केवल स्मार्ट अनुबंधों के लिए रिसीव हुक का समर्थन करता है। हुक फ़ंक्शन को एक मैजिक पूर्वनिर्धारित बाइट्स4 वैल्यू लौटानी होगी जो इस प्रकार है:
bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))
जब प्राप्त करने वाला अनुबंध यह वैल्यू लौटाता है, तो यह माना जाता है कि अनुबंध ट्रांसफर स्वीकार करता है और जानता है कि ERC-1155 टोकन को कैसे संभालना है। बहुत बढ़िया, अब किसी अनुबंध में कोई टोकन नहीं फँसेगा!
एनएफटी सपोर्ट
जब आपूर्ति केवल एक होती है, तो टोकन अनिवार्य रूप से एक नॉन-फंजिबल टोकन (एनएफटी) होता है। और जैसा कि ERC-721 के लिए मानक है, आप एक मेटाडेटा URL परिभाषित कर सकते हैं। URL को क्लाइंट द्वारा पढ़ा और संशोधित किया जा सकता है, यहां (opens in a new tab) देखें।
सुरक्षित ट्रांसफर नियम
हमने पिछली व्याख्याओं में कुछ सुरक्षित ट्रांसफर नियमों पर पहले ही बात की है। लेकिन आइए सबसे महत्वपूर्ण नियमों को देखें:
- कॉलर को
_fromपते के लिए टोकन खर्च करने की मंजूरी मिली होनी चाहिए या कॉलर_fromके बराबर होना चाहिए। - ट्रांसफर कॉल रिवर्ट हो जानी चाहिए यदि
_toपता 0 है।_idsकी लंबाई_valuesकी लंबाई के समान नहीं है।_idsमें टोकन (टोकनों) के लिए धारक (धारकों) का कोई भी बैलेंस, प्राप्तकर्ता को भेजी गई_valuesमें संबंधित राशि (राशियों) से कम है।- कोई अन्य त्रुटि होती है।
नोट: हुक सहित सभी बैच फ़ंक्शन बिना बैच वाले संस्करणों के रूप में भी मौजूद हैं। यह गैस दक्षता के लिए किया जाता है, यह देखते हुए कि केवल एक संपत्ति को ट्रांसफर करना संभवतः अभी भी सबसे अधिक इस्तेमाल किया जाने वाला तरीका होगा। हमने सुरक्षित ट्रांसफर नियमों सहित, स्पष्टीकरण में सरलता के लिए उन्हें छोड़ दिया है। नाम समान हैं, बस 'बैच' हटा दें।