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 ఫంక్షన్లు మరియు ఫీచర్లు:
- బ్యాచ్ బదిలీ: ఒకే కాల్లో బహుళ ఆస్తులను బదిలీ చేయండి.
- బ్యాచ్ బ్యాలెన్స్: ఒకే కాల్లో బహుళ ఆస్తుల బ్యాలెన్స్లను పొందండి.
- బ్యాచ్ ఆమోదం: ఒక చిరునామాకు అన్ని టోకెన్లను ఆమోదించండి.
- హుక్స్: టోకెన్లను స్వీకరించే హుక్.
- NFT మద్దతు: సరఫరా 1 మాత్రమే అయితే, దాన్ని NFTగా పరిగణించండి.
- సురక్షిత బదిలీ నియమాలు: సురక్షిత బదిలీ కోసం నియమాల సమితి.
బ్యాచ్ బదిలీలు
బ్యాచ్ బదిలీ సాధారణ 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 స్మార్ట్ కాంట్రాక్ట్ల కోసం మాత్రమే రిసీవ్ హుక్స్కు మద్దతు ఇస్తుంది. హుక్ ఫంక్షన్ తప్పనిసరిగా ఒక మ్యాజిక్ ముందే నిర్వచించిన bytes4 విలువను తిరిగి ఇవ్వాలి, అది ఇలా ఇవ్వబడింది:
bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))
స్వీకరించే కాంట్రాక్టు ఈ విలువను తిరిగి ఇచ్చినప్పుడు, కాంట్రాక్టు బదిలీని అంగీకరిస్తుందని మరియు ERC-1155 టోకెన్లను ఎలా నిర్వహించాలో దానికి తెలుసు అని భావించబడుతుంది. అద్భుతం, ఇకపై కాంట్రాక్ట్లో టోకెన్లు చిక్కుకోవు!
NFT మద్దతు
సరఫరా కేవలం ఒకటి మాత్రమే అయినప్పుడు, ఆ టోకెన్ ముఖ్యంగా ఒక నాన్-ఫంగిబుల్ టోకెన్ (NFT). మరియు ERC-721కి ప్రమాణంగా ఉన్నట్లుగా, మీరు ఒక మెటాడేటా URLని నిర్వచించవచ్చు. URLను ఖాతాదారులు చదవవచ్చు మరియు సవరించవచ్చు, ఇక్కడ (opens in a new tab) చూడండి.
సురక్షిత బదిలీ నియమం
మేము మునుపటి వివరణలలో ఇప్పటికే కొన్ని సురక్షిత బదిలీ నియమాల గురించి ప్రస్తావించాము. అయితే, నియమాలలో అత్యంత ముఖ్యమైన వాటిని చూద్దాం:
_fromచిరునామా కోసం టోకెన్లను ఖర్చు చేయడానికి కాలర్ ఆమోదం పొంది ఉండాలి లేదా కాలర్_fromతో సమానంగా ఉండాలి.- బదిలీ కాల్ తప్పనిసరిగా రివర్ట్ అవ్వాలి, ఒకవేళ:
_toచిరునామా 0 అయితే._idsయొక్క పొడవు_valuesయొక్క పొడవుకు సమానంగా లేకపోతే._idsలోని టోకెన్(ల) కోసం హోల్డర్(ల) యొక్క ఏదైనా బ్యాలెన్స్(లు), గ్రహీతకు పంపబడిన_valuesలోని సంబంధిత మొత్తం(ల) కంటే తక్కువగా ఉంటే.- మరేదైనా లోపం సంభవిస్తే.
గమనిక: హుక్తో సహా అన్ని బ్యాచ్ ఫంక్షన్లు బ్యాచ్ లేని వెర్షన్లుగా కూడా ఉన్నాయి. కేవలం ఒక ఆస్తిని బదిలీ చేయడమే ఇప్పటికీ అత్యంత సాధారణంగా ఉపయోగించబడే మార్గం అని పరిగణనలోకి తీసుకుని, గ్యాస్ సామర్థ్యం కోసం ఇది చేయబడింది. వివరణలలో సరళత కోసం, సురక్షిత బదిలీ నియమాలతో సహా మేము వాటిని వదిలిపెట్టాము. పేర్లు ఒకేలా ఉంటాయి, కేవలం 'బ్యాచ్'ను తొలగించండి.