ERC-20 டோக்கன் தரநிலை
பக்கத்தின் கடைசி புதுப்பிப்பு: 15 பிப்ரவரி, 2026
அறிமுகம்
டோக்கன் என்றால் என்ன?
டோக்கன்கள் எத்தேரியத்தில் கிட்டத்தட்ட எதையும் குறிப்பிடலாம்:
- ஒரு ஆன்லைன் தளத்தில் உள்ள நற்பெயர் புள்ளிகள்
- ஒரு விளையாட்டில் ஒரு கதாபாத்திரத்தின் திறன்கள்
- ஒரு நிறுவனத்தில் உள்ள ஒரு பங்கு போன்ற நிதிச் சொத்துக்கள்
- USD போன்ற ஒரு ஃபியட் நாணயம்
- ஒரு அவுன்ஸ் தங்கம்
- மேலும் பல...
எத்தேரியத்தின் இத்தகைய சக்திவாய்ந்த அம்சம் ஒரு வலுவான தரநிலையால் கையாளப்பட வேண்டும், இல்லையா? சரியாக இங்குதான் ERC-20 அதன் பங்கை வகிக்கிறது! இந்தத் தரநிலை, மற்ற தயாரிப்புகள் மற்றும் சேவைகளுடன் ஊடாடக்கூடிய டோக்கன் பயன்பாடுகளை உருவாக்க உருவாக்குநர்களை (டெவலப்பர்களை) அனுமதிக்கிறது. கூடுதல் செயல்பாட்டை வழங்க ERC-20 தரநிலையும் பயன்படுத்தப்படுகிறது.
ERC-20 என்றால் என்ன?
ERC-20 மாற்றத்தக்க டோக்கன்களுக்கான ஒரு தரநிலையை அறிமுகப்படுத்துகிறது, வேறுவிதமாகக் கூறினால், அவை ஒவ்வொரு டோக்கனையும் மற்றொரு டோக்கனைப் போலவே (வகை மற்றும் மதிப்பில்) சரியாக ஒரே மாதிரியாக மாற்றும் ஒரு பண்பைக் கொண்டுள்ளன. உதாரணமாக, ஒரு ERC-20 டோக்கன் ETH போலவே செயல்படுகிறது, அதாவது 1 டோக்கன் மற்ற எல்லா டோக்கன்களுக்கும் சமமாக இருக்கிறது மற்றும் எப்போதும் சமமாகவே இருக்கும்.
முன்னேற்றக் கட்டுரை
உள்ளடக்கம்
நவம்பர் 2015 இல் ஃபேபியன் வோகல்ஸ்டெல்லரால் முன்மொழியப்பட்ட ERC-20 (Ethereum Request for Comments 20), என்பது ஸ்மார்ட் ஒப்பந்தங்களுக்குள் டோக்கன்களுக்கான ஒரு பயன்பாட்டு நிரலாக்க இடைமுகத்தை (API) செயல்படுத்தும் ஒரு டோக்கன் தரநிலையாகும்.
ERC-20 வழங்கும் உதாரண செயல்பாடுகள்:
- ஒரு கணக்கிலிருந்து மற்றொரு கணக்கிற்கு டோக்கன்களைப் பரிமாற்றுதல்
- ஒரு கணக்கின் தற்போதைய டோக்கன் இருப்பைப் பெறுதல்
- நெட்வொர்க்கில் கிடைக்கும் டோக்கனின் மொத்த விநியோகத்தைப் பெறுதல்
- ஒரு கணக்கிலிருந்து ஒரு குறிப்பிட்ட அளவு டோக்கனை ஒரு மூன்றாம் தரப்புக் கணக்கு செலவழிக்க முடியுமா என்பதை அங்கீகரித்தல்
ஒரு ஸ்மார்ட் ஒப்பந்தம் பின்வரும் முறைகளையும் நிகழ்வுகளையும் செயல்படுத்தினால், அதை ERC-20 டோக்கன் ஒப்பந்தம் என அழைக்கலாம், மேலும், வரிசைப்படுத்தப்பட்டவுடன், அது எத்தேரியத்தில் உருவாக்கப்பட்ட டோக்கன்களைக் கண்காணிக்கும் பொறுப்பை ஏற்கும்.
EIP-20opens in a new tab இலிருந்து:
முறைகள்
1function name() public view returns (string)2function symbol() public view returns (string)3function decimals() public view returns (uint8)4function totalSupply() public view returns (uint256)5function balanceOf(address _owner) public view returns (uint256 balance)6function transfer(address _to, uint256 _value) public returns (bool success)7function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)8function approve(address _spender, uint256 _value) public returns (bool success)9function allowance(address _owner, address _spender) public view returns (uint256 remaining)அனைத்தையும் காட்டுநிகழ்வுகள்
1event Transfer(address indexed _from, address indexed _to, uint256 _value)2event Approval(address indexed _owner, address indexed _spender, uint256 _value)உதாரணங்கள்
எத்தேரியத்தில் உள்ள எந்த ERC-20 டோக்கன் ஒப்பந்தத்தையும் ஆய்வு செய்வதை நமக்கு எளிதாக்குவதில் ஒரு தரநிலை எவ்வளவு முக்கியமானது என்பதைப் பார்ப்போம். எந்தவொரு ERC-20 டோக்கனுக்கும் ஒரு இடைமுகத்தை உருவாக்க, நமக்கு ஒப்பந்த பயன்பாட்டு பைனரி இடைமுகம் (ABI) மட்டுமே தேவை. நீங்கள் கீழே காண்பது போல், இதை ஒரு சிக்கலற்ற எடுத்துக்காட்டாக மாற்றுவதற்கு நாங்கள் ஒரு எளிமைப்படுத்தப்பட்ட ABI-ஐப் பயன்படுத்துவோம்.
Web3.py உதாரணம்
முதலில், நீங்கள் Web3.pyopens in a new tab பைத்தான் லைப்ரரியை நிறுவியுள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்:
1pip install web31from web3 import Web3234w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com"))56dai_token_addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F" # DAI7weth_token_addr = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # சுற்றப்பட்ட ஈதர் (WETH)89acc_address = "0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11" # Uniswap V2: DAI 21011# இது ஒரு ERC-20 டோக்கன் ஒப்பந்தத்தின் எளிமைப்படுத்தப்பட்ட ஒப்பந்த பயன்பாட்டு பைனரி இடைமுகம் (ABI) ஆகும்.12# இது balanceOf(address), decimals(), symbol() மற்றும் totalSupply() ஆகிய முறைகளை மட்டுமே வெளிப்படுத்தும்.13simplified_abi = [14 {15 'inputs': [{'internalType': 'address', 'name': 'account', 'type': 'address'}],16 'name': 'balanceOf',17 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],18 'stateMutability': 'view', 'type': 'function', 'constant': True19 },20 {21 'inputs': [],22 'name': 'decimals',23 'outputs': [{'internalType': 'uint8', 'name': '', 'type': 'uint8'}],24 'stateMutability': 'view', 'type': 'function', 'constant': True25 },26 {27 'inputs': [],28 'name': 'symbol',29 'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],30 'stateMutability': 'view', 'type': 'function', 'constant': True31 },32 {33 'inputs': [],34 'name': 'totalSupply',35 'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],36 'stateMutability': 'view', 'type': 'function', 'constant': True37 }38]3940dai_contract = w3.eth.contract(address=w3.to_checksum_address(dai_token_addr), abi=simplified_abi)41symbol = dai_contract.functions.symbol().call()42decimals = dai_contract.functions.decimals().call()43totalSupply = dai_contract.functions.totalSupply().call() / 10**decimals44addr_balance = dai_contract.functions.balanceOf(acc_address).call() / 10**decimals4546# DAI47print("===== %s =====" % symbol)48print("Total Supply:", totalSupply)49print("Addr Balance:", addr_balance)5051weth_contract = w3.eth.contract(address=w3.to_checksum_address(weth_token_addr), abi=simplified_abi)52symbol = weth_contract.functions.symbol().call()53decimals = weth_contract.functions.decimals().call()54totalSupply = weth_contract.functions.totalSupply().call() / 10**decimals55addr_balance = weth_contract.functions.balanceOf(acc_address).call() / 10**decimals5657# WETH58print("===== %s =====" % symbol)59print("Total Supply:", totalSupply)60print("Addr Balance:", addr_balance)அனைத்தையும் காட்டுஅறியப்பட்ட சிக்கல்கள்
ERC-20 டோக்கன் பெறும் சிக்கல்
**06/20/2024 நிலவரப்படி, இந்தச் சிக்கலால் குறைந்தபட்சம் $83,656,418 மதிப்புள்ள ERC-20 டோக்கன்கள் இழக்கப்பட்டன. கீழே பட்டியலிடப்பட்டுள்ளபடி, தரநிலையின் மேல் கூடுதல் கட்டுப்பாடுகளின் தொகுப்பைச் செயல்படுத்தாவிட்டால், ஒரு தூய ERC-20 செயலாக்கம் இந்தச் சிக்கலுக்கு ஆளாகக்கூடும் என்பதை நினைவில் கொள்க.
ERC-20 டோக்கன்களைக் கையாள வடிவமைக்கப்படாத ஒரு ஸ்மார்ட் ஒப்பந்தத்திற்கு அவை அனுப்பப்படும்போது, அந்த டோக்கன்கள் நிரந்தரமாக இழக்கப்படலாம். உள்வரும் டோக்கன்களை அங்கீகரிக்க அல்லது பதிலளிப்பதற்கான செயல்பாடு பெறும் ஒப்பந்தத்தில் இல்லாததாலும், உள்வரும் டோக்கன்களைப் பற்றி பெறும் ஒப்பந்தத்திற்கு அறிவிக்க ERC-20 தரநிலையில் எந்த வழிமுறையும் இல்லாததாலும் இது நிகழ்கிறது. இந்தச் சிக்கல் பின்வரும் முக்கிய வழிகளில் உருவாகிறது:
- டோக்கன் பரிமாற்ற வழிமுறை
- ERC-20 டோக்கன்கள் transfer அல்லது transferFrom செயல்பாடுகளைப் பயன்படுத்தி மாற்றப்படுகின்றன
- ஒரு பயனர் இந்த செயல்பாடுகளைப் பயன்படுத்தி ஒரு ஒப்பந்த முகவரிக்கு டோக்கன்களை அனுப்பும்போது, பெறும் ஒப்பந்தம் அவற்றை கையாள வடிவமைக்கப்பட்டுள்ளதா என்பதைப் பொருட்படுத்தாமல் டோக்கன்கள் மாற்றப்படுகின்றன
- அறிவிப்பு இல்லாமை
- டோக்கன்கள் தனக்கு அனுப்பப்பட்டதற்கான அறிவிப்பையோ அல்லது கால்பேக்கையோ பெறும் ஒப்பந்தம் பெறுவதில்லை.
- டோக்கன்களைக் கையாளும் ஒரு பொறிமுறை (எ.கா., ஒரு ஃபால்பேக் செயல்பாடு அல்லது டோக்கன் பெறுதலை நிர்வகிக்க ஒரு பிரத்யேக செயல்பாடு) பெறும் ஒப்பந்தத்தில் இல்லை என்றால், டோக்கன்கள் திறம்பட ஒப்பந்தத்தின் முகவரியில் சிக்கிக்கொள்கின்றன.
- உள்ளமைக்கப்பட்ட கையாளுதல் இல்லை
- ERC-20 தரநிலையானது பெறும் ஒப்பந்தங்கள் செயல்படுத்துவதற்கு ஒரு கட்டாயமான செயல்பாட்டை உள்ளடக்கவில்லை, இது பல ஒப்பந்தங்கள் உள்வரும் டோக்கன்களை முறையாக நிர்வகிக்க முடியாத சூழ்நிலைக்கு வழிவகுக்கிறது.
சாத்தியமான தீர்வுகள்
ERC-20 உடன் இந்தச் சிக்கலை முழுமையாகத் தடுக்க முடியாவிட்டாலும், இறுதிப் பயனருக்கான டோக்கன் இழப்புக்கான சாத்தியக்கூறுகளைக் கணிசமாகக் குறைக்க அனுமதிக்கும் முறைகள் உள்ளன:
- மிகவும் பொதுவான பிரச்சனை என்னவென்றால், ஒரு பயனர் டோக்கன்களை டோக்கன் ஒப்பந்த முகவரிக்கே அனுப்பும்போது (எ.கா., USDT டோக்கன் ஒப்பந்தத்தின் முகவரிக்கு USDT டெபாசிட் செய்யப்படுவது). அத்தகைய பரிமாற்ற முயற்சிகளைத் திரும்பப்பெற
transfer(..)செயல்பாட்டைக் கட்டுப்படுத்தப் பரிந்துரைக்கப்படுகிறது.transfer(..)செயல்பாட்டின் செயலாக்கத்திற்குள்require(_to != address(this));சரிபார்ப்பைச் சேர்ப்பதைக் கவனியுங்கள். - பொதுவாக
transfer(..)செயல்பாடானது ஒப்பந்தங்களுக்கு டோக்கன்களை டெபாசிட் செய்வதற்காக வடிவமைக்கப்படவில்லை.approve(..)& transferFrom(..)முறை அதற்குப் பதிலாக ERC-20 டோக்கன்களை ஒப்பந்தங்களில் டெபாசிட் செய்யப் பயன்படுகிறது. பரிமாற்றச் செயல்பாட்டை கட்டுப்படுத்துவதன் மூலம், அதனுடன் எந்த ஒப்பந்தங்களுக்கும் டோக்கன்களை டெபாசிட் செய்வதைத் தடுக்க முடியும், இருப்பினும் இதுtrasnfer(..)` செயல்பாட்டின் மூலம் ஒப்பந்தங்களில் டோக்கன்களை டெபாசிட் செய்யலாம் என்று கருதும் ஒப்பந்தங்களுடன் (எ.கா., யூனிஸ்வாப் நீர்மைப் பூல்கள்) பொருந்தக்கூடிய தன்மையை உடைக்கக்கூடும். - உங்கள் ஒப்பந்தம் எப்போதாவது எதையும் பெற வேண்டும் என்று கருதப்படாவிட்டாலும் கூட, ERC-20 டோக்கன்கள் உங்கள் ஒப்பந்தத்தில் முடிவடையக்கூடும் என எப்போதும் கருதுங்கள். பெறுநரின் தரப்பிலிருந்து தற்செயலான வைப்புகளைத் தடுக்கவோ அல்லது நிராகரிக்கவோ வழியில்லை. தற்செயலாக டெபாசிட் செய்யப்பட்ட ERC-20 டோக்கன்களை மீட்டெடுக்க அனுமதிக்கும் ஒரு செயல்பாட்டைச் செயல்படுத்தப் பரிந்துரைக்கப்படுகிறது.
- மாற்று டோக்கன் தரநிலைகளைப் பயன்படுத்துவதைக் கருத்தில் கொள்ளுங்கள்.
இந்த சிக்கலில் இருந்து ERC-223 அல்லது ERC-1363 போன்ற சில மாற்று தரநிலைகள் வந்துள்ளன.
மேலும் வாசிக்க
- EIP-20: ERC-20 டோக்கன் தரநிலைopens in a new tab
- OpenZeppelin - டோக்கன்கள்opens in a new tab
- OpenZeppelin - ERC-20 செயலாக்கம்opens in a new tab
- Alchemy - Solidity ERC20 டோக்கன்களுக்கான வழிகாட்டிopens in a new tab