ERC-20 టోకెన్ ప్రమాణం
పరిచయం
టోకెన్ అంటే ఏమిటి?
టోకెన్లు ఎథీరియంలో వాస్తవంగా దేనినైనా సూచించగలవు:
- ఆన్లైన్ ప్లాట్ఫారమ్లో కీర్తి పాయింట్లు
- గేమ్లోని పాత్ర యొక్క నైపుణ్యాలు
- కంపెనీలో వాటా వంటి ఆర్థిక ఆస్తులు
- 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-20 (opens in a new tab) నుండి:
పద్ధతులు
function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
ఈవెంట్లు
event Transfer(address indexed _from, address indexed _to, uint256 _value)
event Approval(address indexed _owner, address indexed _spender, uint256 _value)
ఉదాహరణలు
ఎథీరియంలో ఏదైనా ERC-20 టోకెన్ కాంట్రాక్ట్ను తనిఖీ చేయడాన్ని మనకు సులభతరం చేయడానికి ఒక ప్రమాణం ఎంత ముఖ్యమో చూద్దాం. ఏదైనా ERC-20 టోకెన్కు ఇంటర్ఫేస్ను సృష్టించడానికి మనకు కాంట్రాక్ట్ అప్లికేషన్ బైనరీ ఇంటర్ఫేస్ (ABI) మాత్రమే అవసరం. మీరు క్రింద చూడగలిగినట్లుగా, దీన్ని తక్కువ ఘర్షణ ఉదాహరణగా చేయడానికి మేము సరళీకృత ABIని ఉపయోగిస్తాము.
Web3.py ఉదాహరణ
ముందుగా, మీరు Web3.py (opens in a new tab) Python లైబ్రరీని ఇన్స్టాల్ చేశారని నిర్ధారించుకోండి:
pip install web3
from web3 import Web3
w3 = Web3(Web3.HTTPProvider("https://cloudflare-eth.com"))
dai_token_addr = "0x6B175474E89094C44Da98b954EedeAC495271d0F" # DAI
weth_token_addr = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" # ర్యాప్డ్ ఈథర్ (WETH)
acc_address = "0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11" # యూనిస్వాప్ V2: DAI 2
# ఇది ఒక ERC-20 టోకెన్ కాంట్రాక్ట్ యొక్క సరళీకృత కాంట్రాక్ట్ అప్లికేషన్ బైనరీ ఇంటర్ఫేస్ (ABI).
# ఇది ఈ పద్ధతులను మాత్రమే బహిర్గతం చేస్తుంది: balanceOf(address), decimals(), symbol() మరియు totalSupply()
simplified_abi = [
{
'inputs': [{'internalType': 'address', 'name': 'account', 'type': 'address'}],
'name': 'balanceOf',
'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
'stateMutability': 'view', 'type': 'function', 'constant': True
},
{
'inputs': [],
'name': 'decimals',
'outputs': [{'internalType': 'uint8', 'name': '', 'type': 'uint8'}],
'stateMutability': 'view', 'type': 'function', 'constant': True
},
{
'inputs': [],
'name': 'symbol',
'outputs': [{'internalType': 'string', 'name': '', 'type': 'string'}],
'stateMutability': 'view', 'type': 'function', 'constant': True
},
{
'inputs': [],
'name': 'totalSupply',
'outputs': [{'internalType': 'uint256', 'name': '', 'type': 'uint256'}],
'stateMutability': 'view', 'type': 'function', 'constant': True
}
]
dai_contract = w3.eth.contract(address=w3.to_checksum_address(dai_token_addr), abi=simplified_abi)
symbol = dai_contract.functions.symbol().call()
decimals = dai_contract.functions.decimals().call()
totalSupply = dai_contract.functions.totalSupply().call() / 10**decimals
addr_balance = dai_contract.functions.balanceOf(acc_address).call() / 10**decimals
# DAI
print("===== %s =====" % symbol)
print("Total Supply:", totalSupply)
print("Addr Balance:", addr_balance)
weth_contract = w3.eth.contract(address=w3.to_checksum_address(weth_token_addr), abi=simplified_abi)
symbol = weth_contract.functions.symbol().call()
decimals = weth_contract.functions.decimals().call()
totalSupply = weth_contract.functions.totalSupply().call() / 10**decimals
addr_balance = weth_contract.functions.balanceOf(acc_address).call() / 10**decimals
# WETH
print("===== %s =====" % symbol)
print("Total Supply:", totalSupply)
print("Addr Balance:", addr_balance)
తెలిసిన సమస్యలు
ERC-20 టోకెన్ స్వీకరణ సమస్య
06/20/2024 నాటికి ఈ సమస్య కారణంగా కనీసం $83,656,418 విలువైన ERC-20 టోకెన్లు కోల్పోయాయి. దిగువ జాబితా చేయబడిన విధంగా మీరు ప్రమాణం పైన అదనపు పరిమితుల సమితిని అమలు చేస్తే తప్ప, స్వచ్ఛమైన 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(..)ఫంక్షన్ కాంట్రాక్ట్లకు టోకెన్లను డిపాజిట్ చేయడానికి రూపొందించబడలేదు. బదులుగా ERC-20 టోకెన్లను కాంట్రాక్ట్లకు డిపాజిట్ చేయడానికిapprove(..) & transferFrom(..)ప్యాటర్న్ ఉపయోగించబడుతుంది. దానితో ఏవైనా కాంట్రాక్ట్లకు టోకెన్లను డిపాజిట్ చేయడాన్ని అనుమతించకుండా బదిలీ ఫంక్షన్ను పరిమితం చేయడం సాధ్యపడుతుంది, అయితే ఇదిtransfer(..)ఫంక్షన్తో కాంట్రాక్ట్లకు టోకెన్లను డిపాజిట్ చేయవచ్చని భావించే కాంట్రాక్ట్లతో (ఉదా., యూనిస్వాప్ ద్రవ్యత పూల్స్) అనుకూలతను విచ్ఛిన్నం చేయవచ్చు. - మీ కాంట్రాక్ట్ ఎప్పుడూ టోకెన్లను స్వీకరించకూడదని భావించినప్పటికీ, ERC-20 టోకెన్లు మీ కాంట్రాక్ట్లో చేరవచ్చని ఎల్లప్పుడూ ఊహించండి. గ్రహీతల వైపు ప్రమాదవశాత్తు జరిగే డిపాజిట్లను నిరోధించడానికి లేదా తిరస్కరించడానికి మార్గం లేదు. ప్రమాదవశాత్తు డిపాజిట్ చేయబడిన ERC-20 టోకెన్లను సంగ్రహించడానికి అనుమతించే ఫంక్షన్ను అమలు చేయాలని సిఫార్సు చేయబడింది.
- ప్రత్యామ్నాయ టోకెన్ ప్రమాణాలను ఉపయోగించడాన్ని పరిగణించండి.
ఈ సమస్య నుండి ERC-223 లేదా ERC-1363 వంటి కొన్ని ప్రత్యామ్నాయ ప్రమాణాలు వచ్చాయి.
తదుపరి పఠనం
- EIP-20: ERC-20 టోకెన్ ప్రమాణం (opens in a new tab)
- ఓపెన్జెప్పెలిన్ - టోకెన్లు (opens in a new tab)
- ఓపెన్జెప్పెలిన్ - ERC-20 అమలు (opens in a new tab)
- Alchemy - Solidity ERC20 టోకెన్లకు గైడ్ (opens in a new tab)
ఇతర ఫంజిబుల్ టోకెన్ ప్రమాణాలు
ట్యుటోరియల్స్: ఎథీరియంలో ERC-20తో నిర్మించండి
- ERC-20 కాంట్రాక్ట్ వాక్త్రూ – ఓపెన్జెప్పెలిన్ ERC-20 కాంట్రాక్ట్ అమలు యొక్క లైన్-బై-లైన్ ఉల్లేఖన వాక్త్రూ.
- సేఫ్టీ రైల్స్తో ERC-20 – వినియోగదారులు సాధారణ తప్పులను నివారించడంలో సహాయపడటానికి ERC-20 టోకెన్లకు రక్షణలను ఎలా జోడించాలి.
- Ethers.js ఉపయోగించి టోకెన్లను పంపడం – Ethers.js ఉపయోగించి ERC-20 టోకెన్లను బదిలీ చేయడానికి ప్రారంభకులకు అనుకూలమైన గైడ్.
- స్కామ్ టోకెన్లు ఉపయోగించే కొన్ని ఉపాయాలు మరియు వాటిని ఎలా గుర్తించాలి – స్కామ్ ERC-20 టోకెన్ ప్యాటర్న్లు మరియు వాటిని ఎలా గుర్తించాలో వివరణాత్మక అన్వేషణ.
పేజీ చివరి నవీకరణ: 24 ఏప్రిల్, 2026