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

ERC-721 பூஞ்சையற்ற டோக்கன் (Non-Fungible Token) தரநிலை

பக்கம் கடைசியாகப் புதுப்பிக்கப்பட்டது: 25 பிப்ரவரி, 2026

அறிமுகம்

பூஞ்சையற்ற டோக்கன் (Non-Fungible Token) என்றால் என்ன?

ஒரு பூஞ்சையற்ற டோக்கன் (NFT) என்பது ஏதேனும் ஒன்றையோ அல்லது யாரையாவது தனித்துவமான முறையில் அடையாளம் காணப் பயன்படுகிறது. சேகரிக்கக்கூடிய பொருட்கள், அணுகல் திறவுகோல்கள் (access keys), லாட்டரி சீட்டுகள், கச்சேரிகள் மற்றும் விளையாட்டுப் போட்டிகளுக்கான எண்ணிடப்பட்ட இருக்கைகள் போன்றவற்றை வழங்கும் தளங்களில் பயன்படுத்த இந்த வகையான டோக்கன் சரியானது. இந்த சிறப்பு வகை டோக்கன் அற்புதமான சாத்தியக்கூறுகளைக் கொண்டுள்ளது, எனவே இதற்கு சரியான தரநிலை தேவை, அதைத் தீர்க்கவே ERC-721 வந்தது!

ERC-721 என்றால் என்ன?

ERC-721 ஆனது NFT க்கான ஒரு தரநிலையை அறிமுகப்படுத்துகிறது, வேறுவிதமாகக் கூறினால், இந்த வகையான டோக்கன் தனித்துவமானது மற்றும் அதே ஸ்மார்ட் ஒப்பந்தத்தில் (Smart Contract) உள்ள மற்றொரு டோக்கனை விட வேறுபட்ட மதிப்பைக் கொண்டிருக்கலாம், ஒருவேளை அதன் வயது, அரிதான தன்மை அல்லது அதன் காட்சி (visual) போன்ற வேறு ஏதேனும் காரணமாக இருக்கலாம். காத்திருங்கள், காட்சியா?

ஆம்! அனைத்து NFTகளும் tokenId எனப்படும் uint256 மாறியைக் கொண்டுள்ளன, எனவே எந்தவொரு ERC-721 ஒப்பந்தத்திற்கும், contract address, uint256 tokenId என்ற இணை உலகளவில் தனித்துவமாக இருக்க வேண்டும். அதன்படி, ஒரு dapp ஆனது tokenId ஐ உள்ளீடாகப் பயன்படுத்தி, ஜோம்பிஸ், ஆயுதங்கள், திறன்கள் அல்லது அற்புதமான பூனைகள் போன்ற அருமையான ஒன்றின் படத்தை வெளியீடாக வழங்கும் "மாற்றியை (converter)" கொண்டிருக்கலாம்!

முன்நிபந்தனைகள்

முக்கிய பகுதி

ஜனவரி 2018 இல் William Entriken, Dieter Shirley, Jacob Evans, Nastassia Sachs ஆகியோரால் முன்மொழியப்பட்ட ERC-721 (Ethereum Request for Comments 721), ஸ்மார்ட் ஒப்பந்தங்களுக்குள் டோக்கன்களுக்கான API ஐச் செயல்படுத்தும் ஒரு பூஞ்சையற்ற டோக்கன் தரநிலையாகும்.

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

ஒரு ஸ்மார்ட் ஒப்பந்தம் பின்வரும் முறைகள் மற்றும் நிகழ்வுகளைச் செயல்படுத்தினால், அதை ERC-721 பூஞ்சையற்ற டோக்கன் ஒப்பந்தம் என்று அழைக்கலாம், மேலும் அது பயன்படுத்தப்பட்டவுடன் (deployed), Ethereum இல் உருவாக்கப்பட்ட டோக்கன்களைக் கண்காணிக்கும் பொறுப்பை அது ஏற்கும்.

EIP-721 (opens in a new tab) இலிருந்து:

முறைகள்

1 function balanceOf(address _owner) external view returns (uint256);
2 function ownerOf(uint256 _tokenId) external view returns (address);
3 function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
4 function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
5 function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
6 function approve(address _approved, uint256 _tokenId) external payable;
7 function setApprovalForAll(address _operator, bool _approved) external;
8 function getApproved(uint256 _tokenId) external view returns (address);
9 function isApprovedForAll(address _owner, address _operator) external view returns (bool);
அனைத்தையும் காட்டு

நிகழ்வுகள்

1 event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
2 event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
3 event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

எடுத்துக்காட்டுகள்

Ethereum இல் உள்ள எந்தவொரு ERC-721 டோக்கன் ஒப்பந்தத்தையும் ஆய்வு செய்வதை எளிதாக்குவதற்கு ஒரு தரநிலை எவ்வளவு முக்கியமானது என்பதைப் பார்ப்போம். எந்தவொரு ERC-721 டோக்கனுக்கும் ஒரு இடைமுகத்தை (interface) உருவாக்க, ஒப்பந்த பயன்பாட்டு பைனரி இடைமுகம் (Contract Application Binary Interface - ABI) மட்டுமே நமக்குத் தேவை. கீழே நீங்கள் பார்ப்பது போல், குறைந்த உராய்வு (low friction) கொண்ட எடுத்துக்காட்டாக மாற்ற, எளிமைப்படுத்தப்பட்ட ABI ஐப் பயன்படுத்துவோம்.

Web3.py எடுத்துக்காட்டு

முதலில், நீங்கள் Web3.py (opens in a new tab) பைதான் நூலகத்தை (Python library) நிறுவியுள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்:

1pip install web3
1from web3 import Web3
2from web3._utils.events import get_event_data
3
4
5w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com"))
6
7ck_token_addr = "0x06012c8cf97BEaD5deAe237070F9587f8E7A266d" # கிரிப்டோகிட்டிஸ் ஒப்பந்தம்
8
9acc_address = "0xb1690C08E213a35Ed9bAb7B318DE14420FB57d8C" # கிரிப்டோகிட்டிஸ் விற்பனை ஏலம்
10
11# இது ஒரு ERC-721 NFT ஒப்பந்தத்தின் எளிமையாக்கப்பட்ட Contract Application Binary Interface (ABI) ஆகும்.
12# இது இந்த முறைகளை மட்டுமே வெளிப்படுத்தும்: balanceOf(address), name(), ownerOf(tokenId), symbol(), totalSupply()
13simplified_abi = [
14 {
15 'inputs': [{'internalType': 'address', 'name': 'owner', 'type': 'address'}],
16 'name': 'balanceOf',
17 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
18 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True
19 },
20 {
21 'inputs': [],
22 'name': 'name',
23 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],
24 'stateMutability': 'view', 'type': 'function', 'constant': True
25 },
26 {
27 'inputs': [{'internalType': 'uint256', 'name': 'tokenId', 'type': 'uint256'}],
28 'name': 'ownerOf',
29 'outputs': [{'internalType': 'address', 'name': '', 'type': 'address'}],
30 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True
31 },
32 {
33 'inputs': [],
34 'name': 'symbol',
35 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],
36 'stateMutability': 'view', 'type': 'function', 'constant': True
37 },
38 {
39 'inputs': [],
40 'name': 'totalSupply',
41 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
42 'stateMutability': 'view', 'type': 'function', 'constant': True
43 },
44]
45
46ck_extra_abi = [
47 {
48 'inputs': [],
49 'name': 'pregnantKitties',
50 'outputs': [{'name': '', 'type': 'uint256'}],
51 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True
52 },
53 {
54 'inputs': [{'name': '_kittyId', 'type': 'uint256'}],
55 'name': 'isPregnant',
56 'outputs': [{'name': '', 'type': 'bool'}],
57 'payable': False, 'stateMutability': 'view', 'type': 'function', 'constant': True
58 }
59]
60
61ck_contract = w3.eth.contract(address=w3.to_checksum_address(ck_token_addr), abi=simplified_abi+ck_extra_abi)
62name = ck_contract.functions.name().call()
63symbol = ck_contract.functions.symbol().call()
64kitties_auctions = ck_contract.functions.balanceOf(acc_address).call()
65print(f"{name} [{symbol}] NFTs in Auctions: {kitties_auctions}")
66
67pregnant_kitties = ck_contract.functions.pregnantKitties().call()
68print(f"{name} [{symbol}] NFTs Pregnants: {pregnant_kitties}")
69
70# பரிமாற்றம் செய்யப்பட்ட கிட்டிகள் (Kitties) பற்றிய தகவல்களைப் பெற Transfer Event ABI பயன்படுத்தப்படுகிறது.
71tx_event_abi = {
72 'anonymous': False,
73 'inputs': [
74 {'indexed': False, 'name': 'from', 'type': 'address'},
75 {'indexed': False, 'name': 'to', 'type': 'address'},
76 {'indexed': False, 'name': 'tokenId', 'type': 'uint256'}],
77 'name': 'Transfer',
78 'type': 'event'
79}
80
81# பதிவுகளை (logs) வடிகட்ட நிகழ்வின் கையொப்பம் (signature) எங்களுக்குத் தேவை
82event_signature = w3.keccak(text="Transfer(address,address,uint256)").hex()
83
84logs = w3.eth.get_logs({
85 "fromBlock": w3.eth.block_number - 120,
86 "address": w3.to_checksum_address(ck_token_addr),
87 "topics": [event_signature]
88})
89
90# குறிப்புகள்:
91# - எந்தவொரு Transfer நிகழ்வும் கிடைக்கவில்லை என்றால், பிளாக்குகளின் (blocks) எண்ணிக்கையை 120-லிருந்து அதிகரிக்கவும்.
92# - நீங்கள் எந்த Transfer நிகழ்வையும் கண்டுபிடிக்கவில்லை என்றால், இதிலிருந்து ஒரு tokenId-ஐப் பெற முயற்சி செய்யலாம்:
93# https://etherscan.io/address/0x06012c8cf97BEaD5deAe237070F9587f8E7A266d#events
94# நிகழ்வின் பதிவுகளை (logs) விரிவுபடுத்த கிளிக் செய்து, அதன் "tokenId" வாதத்தை (argument) நகலெடுக்கவும்
95recent_tx = [get_event_data(w3.codec, tx_event_abi, log)["args"] for log in logs]
96
97if recent_tx:
98 kitty_id = recent_tx[0]['tokenId'] # மேலே உள்ள இணைப்பிலிருந்து "tokenId"-ஐ இங்கே ஒட்டவும்
99 is_pregnant = ck_contract.functions.isPregnant(kitty_id).call()
100 print(f"{name} [{symbol}] NFTs {kitty_id} is pregnant: {is_pregnant}")
அனைத்தையும் காட்டு

CryptoKitties ஒப்பந்தத்தில் நிலையான நிகழ்வுகளைத் தவிர வேறு சில சுவாரஸ்யமான நிகழ்வுகளும் உள்ளன.

அவற்றில் இரண்டை சரிபார்ப்போம், Pregnant மற்றும் Birth.

1# புதிய கிட்டிகள் (Kitties) பற்றிய தகவல்களைப் பெற Pregnant மற்றும் Birth Events ABI பயன்படுத்தப்படுகிறது.
2ck_extra_events_abi = [
3 {
4 'anonymous': False,
5 'inputs': [
6 {'indexed': False, 'name': 'owner', 'type': 'address'},
7 {'indexed': False, 'name': 'matronId', 'type': 'uint256'},
8 {'indexed': False, 'name': 'sireId', 'type': 'uint256'},
9 {'indexed': False, 'name': 'cooldownEndBlock', 'type': 'uint256'}],
10 'name': 'Pregnant',
11 'type': 'event'
12 },
13 {
14 'anonymous': False,
15 'inputs': [
16 {'indexed': False, 'name': 'owner', 'type': 'address'},
17 {'indexed': False, 'name': 'kittyId', 'type': 'uint256'},
18 {'indexed': False, 'name': 'matronId', 'type': 'uint256'},
19 {'indexed': False, 'name': 'sireId', 'type': 'uint256'},
20 {'indexed': False, 'name': 'genes', 'type': 'uint256'}],
21 'name': 'Birth',
22 'type': 'event'
23 }]
24
25# பதிவுகளை (logs) வடிகட்ட நிகழ்வின் கையொப்பம் (signature) எங்களுக்குத் தேவை
26ck_event_signatures = [
27 w3.keccak(text="Pregnant(address,uint256,uint256,uint256)").hex(),
28 w3.keccak(text="Birth(address,uint256,uint256,uint256,uint256)").hex(),
29]
30
31# இங்கே ஒரு Pregnant நிகழ்வு உள்ளது:
32# - https://etherscan.io/tx/0xc97eb514a41004acc447ac9d0d6a27ea6da305ac8b877dff37e49db42e1f8cef#eventlog
33pregnant_logs = w3.eth.get_logs({
34 "fromBlock": w3.eth.block_number - 120,
35 "address": w3.to_checksum_address(ck_token_addr),
36 "topics": [ck_event_signatures[0]]
37})
38
39recent_pregnants = [get_event_data(w3.codec, ck_extra_events_abi[0], log)["args"] for log in pregnant_logs]
40
41# இங்கே ஒரு Birth நிகழ்வு உள்ளது:
42# - https://etherscan.io/tx/0x3978028e08a25bb4c44f7877eb3573b9644309c044bf087e335397f16356340a
43birth_logs = w3.eth.get_logs({
44 "fromBlock": w3.eth.block_number - 120,
45 "address": w3.to_checksum_address(ck_token_addr),
46 "topics": [ck_event_signatures[1]]
47})
48
49recent_births = [get_event_data(w3.codec, ck_extra_events_abi[1], log)["args"] for log in birth_logs]
அனைத்தையும் காட்டு
  • Etherscan NFT Tracker (opens in a new tab) பரிமாற்ற அளவின் அடிப்படையில் Ethereum இல் உள்ள சிறந்த NFTகளைப் பட்டியலிடுகிறது.
  • CryptoKitties (opens in a new tab) என்பது நாம் CryptoKitties என்று அழைக்கும் இனப்பெருக்கம் செய்யக்கூடிய, சேகரிக்கக்கூடிய மற்றும் மிகவும் அபிமான உயிரினங்களை மையமாகக் கொண்ட ஒரு விளையாட்டாகும்.
  • Sorare (opens in a new tab) என்பது உலகளாவிய கற்பனை கால்பந்து (fantasy football) விளையாட்டாகும், இதில் நீங்கள் வரையறுக்கப்பட்ட பதிப்பு சேகரிப்புகளைச் சேகரிக்கலாம், உங்கள் அணிகளை நிர்வகிக்கலாம் மற்றும் பரிசுகளைப் பெறப் போட்டியிடலாம்.
  • The Ethereum Name Service (ENS) (opens in a new tab) ஆனது எளிய, மனிதர்கள் படிக்கக்கூடிய பெயர்களைப் பயன்படுத்தி பிளாக்செயினிலும் அதற்கு வெளியேயும் வளங்களை முகவரியிடுவதற்கான பாதுகாப்பான மற்றும் பரவலாக்கப்பட்ட வழியை வழங்குகிறது.
  • POAP (opens in a new tab) நிகழ்வுகளில் கலந்துகொள்ளும் அல்லது குறிப்பிட்ட செயல்களை முடிக்கும் நபர்களுக்கு இலவச NFTகளை வழங்குகிறது. POAPகளை உருவாக்கவும் விநியோகிக்கவும் இலவசம்.
  • Unstoppable Domains (opens in a new tab) என்பது சான் பிரான்சிஸ்கோவை தளமாகக் கொண்ட ஒரு நிறுவனமாகும், இது பிளாக்செயின்களில் டொமைன்களை உருவாக்குகிறது. பிளாக்செயின் டொமைன்கள் கிரிப்டோகரன்சி முகவரிகளை மனிதர்கள் படிக்கக்கூடிய பெயர்களுடன் மாற்றுகின்றன, மேலும் தணிக்கை-எதிர்ப்பு வலைத்தளங்களை இயக்கப் பயன்படுத்தலாம்.
  • Gods Unchained Cards (opens in a new tab) என்பது Ethereum பிளாக்செயினில் உள்ள ஒரு TCG ஆகும், இது விளையாட்டு சொத்துக்களுக்கு உண்மையான உரிமையைக் கொண்டுவர NFTகளைப் பயன்படுத்துகிறது.
  • Bored Ape Yacht Club (opens in a new tab) என்பது 10,000 தனித்துவமான NFTகளின் தொகுப்பாகும், இது நிரூபிக்கக்கூடிய-அரிதான கலைப் படைப்பாக இருப்பதுடன், கிளப்பிற்கான உறுப்பினர் டோக்கனாகவும் செயல்படுகிறது, சமூக முயற்சிகளின் விளைவாக காலப்போக்கில் அதிகரிக்கும் உறுப்பினர் சலுகைகள் மற்றும் நன்மைகளை வழங்குகிறது.

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

பயிற்சிகள்: Ethereum இல் பூஞ்சையற்ற டோக்கன்களுடன் (ERC-721) உருவாக்குதல்

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