---
title: "ERC-1155 मल्टी-टोकन मानक"
description: "ERC-1155 के बारे में जानें, जो एक मल्टी-टोकन मानक है और एक ही अनुबंध में विनिमेय और गैर-विनिमेय टोकन को जोड़ता है।"
lang: hi
---

## परिचय {#introduction}

कई टोकन प्रकारों को प्रबंधित करने वाले अनुबंधों के लिए एक मानक इंटरफ़ेस। एक ही डिप्लॉय किए गए अनुबंध में विनिमेय टोकन, गैर-विनिमेय टोकन या अन्य कॉन्फ़िगरेशन (जैसे, अर्ध-विनिमेय टोकन) का कोई भी संयोजन शामिल हो सकता है।

**मल्टी-टोकन मानक का क्या अर्थ है?**

यह विचार सरल है और एक ऐसा स्मार्ट अनुबंध इंटरफ़ेस बनाने का प्रयास करता है जो किसी भी संख्या में विनिमेय और गैर-विनिमेय टोकन प्रकारों का प्रतिनिधित्व और नियंत्रण कर सके। इस तरह, ERC-1155 टोकन [ERC-20](/developers/docs/standards/tokens/erc-20/) और [ERC-721](/developers/docs/standards/tokens/erc-721/) टोकन के समान कार्य कर सकता है, और यहां तक कि दोनों एक ही समय में भी। यह ERC-20 और ERC-721 दोनों मानकों की कार्यक्षमता में सुधार करता है, जिससे यह अधिक कुशल बन जाता है और स्पष्ट कार्यान्वयन त्रुटियों को ठीक करता है।

ERC-1155 टोकन का पूरी तरह से [EIP-1155](https://eips.ethereum.org/EIPS/eip-1155) में वर्णन किया गया है।

## पूर्वापेक्षाएँ {#prerequisites}

इस पृष्ठ को बेहतर ढंग से समझने के लिए, हम अनुशंसा करते हैं कि आप पहले [टोकन मानकों](/developers/docs/standards/tokens/), [ERC-20](/developers/docs/standards/tokens/erc-20/), और [ERC-721](/developers/docs/standards/tokens/erc-721/) के बारे में पढ़ें।

## ERC-1155 के कार्य और विशेषताएँ: {#body}

- [बैच ट्रांसफर](#batch-transfers): एक ही कॉल में कई संपत्तियों को ट्रांसफर करें।
- [बैच बैलेंस](#batch-balance): एक ही कॉल में कई संपत्तियों का बैलेंस प्राप्त करें।
- [बैच स्वीकृति](#batch-approval): किसी पते पर सभी टोकन को स्वीकृति दें।
- [हुक्स (Hooks)](#receive-hook): टोकन प्राप्त करने का हुक।
- [NFT समर्थन](#nft-support): यदि आपूर्ति केवल 1 है, तो इसे NFT के रूप में मानें।
- [सुरक्षित ट्रांसफर नियम](#safe-transfer-rule): सुरक्षित ट्रांसफर के लिए नियमों का सेट।

### बैच ट्रांसफर {#batch-transfers}

बैच ट्रांसफर नियमित ERC-20 ट्रांसफर के समान ही काम करता है। आइए नियमित ERC-20 `transferFrom` फ़ंक्शन को देखें:

```solidity
// 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 में एकमात्र अंतर यह है कि हम मानों को एक ऐरे (array) के रूप में पास करते हैं और हम आईडी (ids) का एक ऐरे भी पास करते हैं। उदाहरण के लिए `ids=[3, 6, 13]` और `values=[100, 200, 5]` दिए जाने पर, परिणामी ट्रांसफर होंगे:

1. `_from` से `_to` तक 3 आईडी वाले 100 टोकन ट्रांसफर करें।
2. `_from` से `_to` तक 6 आईडी वाले 200 टोकन ट्रांसफर करें।
3. `_from` से `_to` तक 13 आईडी वाले 5 टोकन ट्रांसफर करें।

ERC-1155 में हमारे पास केवल `transferFrom` है, कोई `transfer` नहीं है। इसे नियमित `transfer` की तरह उपयोग करने के लिए, बस from पते को उस पते पर सेट करें जो फ़ंक्शन को कॉल कर रहा है।

### बैच बैलेंस {#batch-balance}

संबंधित ERC-20 `balanceOf` कॉल में भी बैच समर्थन के साथ इसका पार्टनर फ़ंक्शन होता है। याद दिलाने के लिए, यह ERC-20 संस्करण है:

```solidity
// 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);
```

बैलेंस कॉल के लिए और भी सरल, हम एक ही कॉल में कई बैलेंस प्राप्त कर सकते हैं। हम मालिकों (owners) का ऐरे पास करते हैं, उसके बाद टोकन आईडी का ऐरे पास करते हैं।

उदाहरण के लिए `_ids=[3, 6, 13]` और `_owners=[0xbeef..., 0x1337..., 0x1111...]` दिए जाने पर, रिटर्न वैल्यू होगी:

```solidity
[
    balanceOf(0xbeef...),
    balanceOf(0x1337...),
    balanceOf(0x1111...)
]
```

### बैच स्वीकृति {#batch-approval}

```solidity
// ERC-1155
function setApprovalForAll(
    address _operator,
    bool _approved
) external;

function isApprovedForAll(
    address _owner,
    address _operator
) external view returns (bool);
```

स्वीकृतियां ERC-20 से थोड़ी अलग हैं। विशिष्ट मात्राओं को स्वीकृति देने के बजाय, आप `setApprovalForAll` के माध्यम से किसी ऑपरेटर को स्वीकृत या अस्वीकृत पर सेट करते हैं।

वर्तमान स्थिति को `isApprovedForAll` के माध्यम से पढ़ा जा सकता है। जैसा कि आप देख सकते हैं, यह एक 'सब कुछ या कुछ नहीं' (all-or-nothing) ऑपरेशन है। आप यह परिभाषित नहीं कर सकते कि कितने टोकन को स्वीकृति देनी है या कौन सा टोकन वर्ग है।

इसे जानबूझकर सरलता को ध्यान में रखकर डिज़ाइन किया गया है। आप केवल एक पते के लिए सब कुछ स्वीकृति दे सकते हैं।

### रिसीव हुक {#receive-hook}

```solidity
function onERC1155BatchReceived(
    address _operator,
    address _from,
    uint256[] calldata _ids,
    uint256[] calldata _values,
    bytes calldata _data
) external returns(bytes4);
```

[EIP-165](https://eips.ethereum.org/EIPS/eip-165) समर्थन को देखते हुए, ERC-1155 केवल स्मार्ट अनुबंधों के लिए रिसीव हुक का समर्थन करता है। हुक फ़ंक्शन को एक जादुई पूर्वनिर्धारित bytes4 मान वापस करना चाहिए जो इस प्रकार दिया गया है:

```solidity
bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))
```

जब प्राप्त करने वाला अनुबंध यह मान लौटाता है, तो यह माना जाता है कि अनुबंध ट्रांसफर को स्वीकार करता है और जानता है कि ERC-1155 टोकन को कैसे संभालना है। बहुत बढ़िया, अब किसी अनुबंध में कोई टोकन नहीं फँसेगा!

### NFT समर्थन {#nft-support}

जब आपूर्ति केवल एक होती है, तो टोकन अनिवार्य रूप से एक गैर-विनिमेय टोकन (NFT) होता है। और जैसा कि ERC-721 के लिए मानक है, आप एक मेटाडेटा URL परिभाषित कर सकते हैं। URL को क्लाइंट्स द्वारा पढ़ा और संशोधित किया जा सकता है, [यहाँ](https://eips.ethereum.org/EIPS/eip-1155#metadata) देखें।

### सुरक्षित ट्रांसफर नियम {#safe-transfer-rule}

हमने पिछले स्पष्टीकरणों में पहले ही कुछ सुरक्षित ट्रांसफर नियमों पर चर्चा की है। लेकिन आइए सबसे महत्वपूर्ण नियमों पर नज़र डालें:

1. कॉलर को `_from` पते के लिए टोकन खर्च करने की स्वीकृति होनी चाहिए या कॉलर `_from` के बराबर होना चाहिए।
2. ट्रांसफर कॉल को रिवर्ट करना चाहिए यदि
   1. `_to` पता 0 है।
   2. `_ids` की लंबाई `_values` की लंबाई के समान नहीं है।
   3. `_ids` में टोकन के लिए धारक(कों) का कोई भी बैलेंस प्राप्तकर्ता को भेजे गए `_values` में संबंधित राशि(यों) से कम है।
   4. कोई अन्य त्रुटि होती है।

_नोट_: हुक सहित सभी बैच फ़ंक्शन बिना बैच वाले संस्करणों के रूप में भी मौजूद हैं। यह गैस दक्षता के लिए किया गया है, यह देखते हुए कि केवल एक संपत्ति को ट्रांसफर करना संभवतः अभी भी सबसे अधिक उपयोग किया जाने वाला तरीका होगा। हमने स्पष्टीकरण में सरलता के लिए उन्हें छोड़ दिया है, जिसमें सुरक्षित ट्रांसफर नियम भी शामिल हैं। नाम समान हैं, बस 'Batch' हटा दें।

## आगे की पढ़ाई {#further-reading}

- [EIP-1155: मल्टी टोकन मानक](https://eips.ethereum.org/EIPS/eip-1155)
- [ERC-1155: ओपनजेपेलिन डॉक्स](https://docs.openzeppelin.com/contracts/5.x/erc1155)
- [ERC-1155: GitHub रेपो](https://github.com/enjin/erc-1155)
- [Alchemy NFT API](https://www.alchemy.com/docs/reference/nft-api-quickstart)