முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
Change page

ERC-1155 மல்டி-டோக்கன் தரநிலை

பக்கம் கடைசியாகப் புதுப்பிக்கப்பட்டது: 22 அக்டோபர், 2025

அறிமுகம்

பல டோக்கன் வகைகளை நிர்வகிக்கும் ஒப்பந்தங்களுக்கான ஒரு நிலையான இடைமுகம். பயன்படுத்தப்பட்ட ஒரு ஒப்பந்தத்தில் ஃபஞ்சிபிள் டோக்கன்கள், நான்-ஃபஞ்சிபிள் டோக்கன்கள் அல்லது பிற உள்ளமைவுகளின் (எ.கா., செமி-ஃபஞ்சிபிள் டோக்கன்கள்) எந்தவொரு கலவையும் இருக்கலாம்.

மல்டி-டோக்கன் தரநிலை என்றால் என்ன?

இந்த யோசனை எளிமையானது மற்றும் எந்தவொரு எண்ணிக்கையிலான ஃபஞ்சிபிள் மற்றும் நான்-ஃபஞ்சிபிள் டோக்கன் வகைகளையும் பிரதிநிதித்துவப்படுத்தவும் கட்டுப்படுத்தவும் கூடிய ஒரு ஸ்மார்ட் ஒப்பந்த இடைமுகத்தை உருவாக்குவதை நோக்கமாகக் கொண்டுள்ளது. இதன் மூலம், 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 செயல்பாடுகள் மற்றும் அம்சங்கள்:

பேட்ச் பரிமாற்றங்கள் (Batch Transfers)

பேட்ச் பரிமாற்றம் வழக்கமான ERC-20 பரிமாற்றங்களைப் போலவே செயல்படுகிறது. வழக்கமான ERC-20 transferFrom செயல்பாட்டைப் பார்ப்போம்:

1// ஈஆர்சி-20
2function transferFrom(address from, address to, uint256 value) external returns (bool);
3
4// ஈஆர்சி-1155
5function safeBatchTransferFrom(
6 address _from,
7 address _to,
8 uint256[] calldata _ids,
9 uint256[] calldata _values,
10 bytes calldata _data
11) 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 பதிப்பு:

1// ஈஆர்சி-20
2function balanceOf(address owner) external view returns (uint256);
3
4// ஈஆர்சி-1155
5function balanceOfBatch(
6 address[] calldata _owners,
7 uint256[] calldata _ids
8) external view returns (uint256[] memory);

பேலன்ஸ் அழைப்பிற்கு இன்னும் எளிமையாக, ஒரே அழைப்பில் பல இருப்புகளைப் பெறலாம். உரிமையாளர்களின் வரிசையைத் தொடர்ந்து டோக்கன் ஐடிகளின் வரிசையை அனுப்புகிறோம்.

எடுத்துக்காட்டாக _ids=[3, 6, 13] மற்றும் _owners=[0xbeef..., 0x1337..., 0x1111...] என கொடுக்கப்பட்டால், திரும்பப் பெறும் மதிப்பு:

1[
2 balanceOf(0xbeef...),
3 balanceOf(0x1337...),
4 balanceOf(0x1111...)
5]

பேட்ச் அப்ரூவல் (Batch Approval)

1// ஈஆர்சி-1155
2function setApprovalForAll(
3 address _operator,
4 bool _approved
5) external;
6
7function isApprovedForAll(
8 address _owner,
9 address _operator
10) external view returns (bool);
அனைத்தையும் காட்டு

அங்கீகாரங்கள் ERC-20 ஐ விட சற்று வித்தியாசமானவை. குறிப்பிட்ட தொகைகளை அங்கீகரிப்பதற்குப் பதிலாக, setApprovalForAll மூலம் ஒரு ஆபரேட்டரை அங்கீகரிக்கப்பட்டதாகவோ அல்லது அங்கீகரிக்கப்படாததாகவோ அமைக்கிறீர்கள்.

தற்போதைய நிலையை isApprovedForAll மூலம் படிக்கலாம். நீங்கள் பார்ப்பது போல், இது ஒரு அனைத்தும்-அல்லது-எதுவுமில்லை (all-or-nothing) செயல்பாடாகும். எத்தனை டோக்கன்களை அங்கீகரிக்க வேண்டும் அல்லது எந்த டோக்கன் வகுப்பை அங்கீகரிக்க வேண்டும் என்பதை உங்களால் வரையறுக்க முடியாது.

இது எளிமையைக் கருத்தில் கொண்டு வேண்டுமென்றே வடிவமைக்கப்பட்டுள்ளது. ஒரு முகவரிக்கு எல்லாவற்றையும் மட்டுமே உங்களால் அங்கீகரிக்க முடியும்.

ரிசீவ் ஹூக் (Receive Hook)

1function onERC1155BatchReceived(
2 address _operator,
3 address _from,
4 uint256[] calldata _ids,
5 uint256[] calldata _values,
6 bytes calldata _data
7) external returns(bytes4);

EIP-165 (opens in a new tab) ஆதரவைக் கருத்தில் கொண்டு, ERC-1155 ஸ்மார்ட் ஒப்பந்தங்களுக்கு மட்டுமே ரிசீவ் ஹூக்குகளை ஆதரிக்கிறது. ஹூக் செயல்பாடு ஒரு மேஜிக் முன்வரையறுக்கப்பட்ட bytes4 மதிப்பை வழங்க வேண்டும், அது பின்வருமாறு கொடுக்கப்பட்டுள்ளது:

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

பெறும் ஒப்பந்தம் இந்த மதிப்பை வழங்கும்போது, ஒப்பந்தம் பரிமாற்றத்தை ஏற்றுக்கொள்கிறது மற்றும் ERC-1155 டோக்கன்களை எவ்வாறு கையாள்வது என்பது அதற்குத் தெரியும் என்று கருதப்படுகிறது. அருமை, இனி ஒப்பந்தத்தில் டோக்கன்கள் சிக்கிக்கொள்ளாது!

NFT ஆதரவு

சப்ளை ஒன்றாக இருக்கும்போது, டோக்கன் அடிப்படையில் ஒரு நான்-ஃபஞ்சிபிள் டோக்கன் (NFT) ஆகும். மேலும் ERC-721 க்கான தரநிலையைப் போலவே, நீங்கள் ஒரு மெட்டாடேட்டா URL ஐ வரையறுக்கலாம். URL ஐ கிளையண்டுகளால் படிக்கவும் மாற்றவும் முடியும், இங்கே (opens in a new tab) பார்க்கவும்.

பாதுகாப்பான பரிமாற்ற விதி

முந்தைய விளக்கங்களில் சில பாதுகாப்பான பரிமாற்ற விதிகளைப் பற்றி ஏற்கனவே பார்த்தோம். ஆனால் விதிகளில் மிக முக்கியமானவற்றைப் பார்ப்போம்:

  1. அழைப்பாளர் _from முகவரிக்கான டோக்கன்களைச் செலவிட அங்கீகரிக்கப்பட்டிருக்க வேண்டும் அல்லது அழைப்பாளர் _from க்கு சமமாக இருக்க வேண்டும்.
  2. பின்வரும் நிலைகளில் பரிமாற்ற அழைப்பு திரும்பப் பெறப்பட (revert) வேண்டும்:
    1. _to முகவரி 0 ஆக இருந்தால்.
    2. _ids இன் நீளம் _values இன் நீளத்திற்குச் சமமாக இல்லை என்றால்.
    3. _ids இல் உள்ள டோக்கன்(களுக்கான) வைத்திருப்பவர்(களின்) இருப்பு(கள்) பெறுநருக்கு அனுப்பப்பட்ட _values இல் உள்ள அந்தந்த தொகை(களை) விடக் குறைவாக இருந்தால்.
    4. வேறு ஏதேனும் பிழை ஏற்பட்டால்.

குறிப்பு: ஹூக் உட்பட அனைத்து பேட்ச் செயல்பாடுகளும் பேட்ச் இல்லாத பதிப்புகளாகவும் உள்ளன. ஒரே ஒரு சொத்தை மட்டும் மாற்றுவது இன்னும் பொதுவாகப் பயன்படுத்தப்படும் வழியாக இருக்கும் என்பதைக் கருத்தில் கொண்டு, எரிவாயு (gas) செயல்திறனுக்காக இது செய்யப்படுகிறது. பாதுகாப்பான பரிமாற்ற விதிகள் உட்பட, விளக்கங்களில் எளிமைக்காக அவற்றை நாங்கள் விட்டுவிட்டோம். பெயர்கள் ஒரே மாதிரியானவை, 'Batch' என்பதை மட்டும் நீக்கிவிடவும்.

மேலும் படிக்க

இந்தக் கட்டுரை பயனுள்ளதாக இருந்ததா?