ERC-1155 మల్టీ-టోకెన్ స్టాండర్డ్
పరిచయం
బహుళ టోకెన్ రకాలను నిర్వహించే కాంట్రాక్ట్ల కోసం ఒక ప్రామాణిక ఇంటర్ఫేస్. డిప్లాయ్ చేయబడిన ఒకే కాంట్రాక్ట్లో ఫంజిబుల్ టోకెన్లు, నాన్-ఫంజిబుల్ టోకెన్లు లేదా ఇతర కాన్ఫిగరేషన్ల (ఉదా., సెమీ-ఫంజిబుల్ టోకెన్లు) కలయిక ఉండవచ్చు.
మల్టీ-టోకెన్ స్టాండర్డ్ అంటే ఏమిటి?
ఈ ఆలోచన చాలా సులభమైనది మరియు ఎన్ని ఫంజిబుల్ మరియు నాన్-ఫంజిబుల్ టోకెన్ రకాలనైనా సూచించగల మరియు నియంత్రించగల స్మార్ట్ కాంట్రాక్ట్ ఇంటర్ఫేస్ను సృష్టించడానికి ప్రయత్నిస్తుంది. ఈ విధంగా, 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లో ఉన్న ఏకైక వ్యత్యాసం ఏమిటంటే, మనం విలువలను ఒక అర్రే (array)గా పంపుతాము మరియు ఐడిల అర్రేను కూడా పంపుతాము. ఉదాహరణకు 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 ద్వారా చదవవచ్చు. మీరు చూడగలిగినట్లుగా, ఇది అన్నీ-లేదా-ఏమీ-కాని (all-or-nothing) ఆపరేషన్. మీరు ఎన్ని టోకెన్లను ఆమోదించాలో లేదా ఏ టోకెన్ క్లాస్ని ఆమోదించాలో కూడా నిర్వచించలేరు.
ఇది ఉద్దేశపూర్వకంగా సరళతను దృష్టిలో ఉంచుకుని రూపొందించబడింది. మీరు ఒక చిరునామా కోసం ప్రతిదీ మాత్రమే ఆమోదించగలరు.
రిసీవ్ హుక్
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లోని సంబంధిత మొత్తం(ల) కంటే తక్కువగా ఉంటే.- మరేదైనా ఇతర లోపం సంభవిస్తే.
గమనిక: హుక్తో సహా అన్ని బ్యాచ్ ఫంక్షన్లు బ్యాచ్ లేని వెర్షన్లుగా కూడా ఉన్నాయి. కేవలం ఒక ఆస్తిని బదిలీ చేయడం ఇప్పటికీ అత్యంత సాధారణంగా ఉపయోగించే మార్గం అని పరిగణనలోకి తీసుకుని, గ్యాస్ సామర్థ్యం కోసం ఇది చేయబడింది. సురక్షిత బదిలీ నియమాలతో సహా వివరణలలో సరళత కోసం మేము వాటిని వదిలివేసాము. పేర్లు ఒకేలా ఉంటాయి, కేవలం 'Batch'ని తీసివేయండి.