ERC-7730తో మీ ప్రోటోకాల్కు స్పష్టమైన సంతకం చేయడాన్ని జోడించండి
చాలా ప్రధాన ఎథీరియం దోపిడీలు ఒకే చివరి దశను కలిగి ఉన్నాయి: వినియోగదారుడు తమకు అర్థం కాని లావాదేవీని ఆమోదించడం. హార్డ్వేర్ వాలెట్లు ముడి హెక్స్ కాల్ డేటాను చూపుతాయి మరియు మరింత దారుణంగా బ్లైండ్ సైనింగ్ను ఆన్ చేయమని మిమ్మల్ని బలవంతం చేస్తాయి. సాఫ్ట్వేర్ వాలెట్లు డీకోడ్ చేయబడిన ఫీల్డ్లను చూపుతాయి, కానీ అవి కాంట్రాక్ట్ను గుర్తించినప్పుడు మాత్రమే. ప్రోటోకాల్ కొత్తది కావడం వల్ల, యాప్ రాజీ పడటం వల్ల లేదా పరికరం ఆఫ్లైన్లో ఉండటం వల్ల అవి గుర్తించలేనప్పుడు, వినియోగదారులు గుడ్డిగా సంతకం చేస్తారు.
ERC-7730 (opens in a new tab) మీ కాంట్రాక్ట్ యొక్క ఫంక్షన్ కాల్ల అర్థం ఏమిటో వివరించడానికి ఒక ప్రామాణిక JSON ఆకృతిని నిర్వచిస్తుంది.
ERC-7730కి మద్దతు ఇచ్చే వాలెట్ మీ డిస్క్రిప్టర్ను చదివి ఇలా చూపుతుంది:
మార్పిడి
పంపండి: 1,000 USDC
కనీసం స్వీకరించండి: 0.42 WETH
ప్రోటోకాల్: యూనిస్వాప్ V3
లేదా మానవులు మరియు ఏజెంట్లు ఇద్దరూ చదవగలిగే ఒకే నిర్మిత వాక్యం:
కనీసం 0.42 WETH కోసం 1,000 USDCని మార్పిడి చేయండి
ఫంక్షన్ సెలెక్టర్ మరియు ముడి పూర్ణాంక విలువల జాబితాకు బదులుగా.
ఇదే స్పష్టమైన సంతకం చేయడం (opens in a new tab) — "మీరు చూసేదే మీరు సంతకం చేసేది." ఈ ట్యుటోరియల్ మీ స్వంత కాంట్రాక్ట్ కోసం డిస్క్రిప్టర్ను వ్రాయడం, అధికారిక CLI సాధనంతో దాన్ని ధృవీకరించడం మరియు ఓపెన్ రిజిస్ట్రీకి సమర్పించడం ద్వారా మీకు మార్గనిర్దేశం చేస్తుంది.
ముందస్తు అవసరాలు
- Solidity మరియు స్మార్ట్ కాంట్రాక్ట్ ABIల గురించి అవగాహన
- ధృవీకరించబడిన ABIతో డిప్లాయ్ చేయబడిన స్మార్ట్ కాంట్రాక్ట్ (డిస్క్రిప్టర్ను రిజిస్ట్రీకి ఆమోదించడానికి ముందు Sourcify (opens in a new tab) ధృవీకరణ అవసరం)
- ధృవీకరణ CLI కోసం Python 3.12+
- ప్రాథమిక JSON పరిజ్ఞానం
ERC-7730 డిస్క్రిప్టర్ అంటే ఏమిటి?
డిస్క్రిప్టర్ అనేది మూడు విభాగాలతో కూడిన ఒకే JSON ఫైల్:
| విభాగం | ప్రయోజనం |
|---|---|
context | చైన్ ID మరియు చిరునామా ద్వారా నిర్దిష్ట కాంట్రాక్ట్ డిప్లాయ్మెంట్లకు డిస్క్రిప్టర్ను బంధిస్తుంది |
metadata | ప్రాజెక్ట్కు పేరు పెడుతుంది మరియు పునర్వినియోగ స్థిరాంకాలను నిర్వచిస్తుంది |
display | ప్రతి ఫంక్షన్ సంతకాన్ని మానవులు చదవగలిగే లేబుల్లు మరియు ఫీల్డ్ ఫార్మాట్లకు మ్యాప్ చేస్తుంది |
డిస్క్రిప్టర్ కాంట్రాక్ట్ నుండి వేరుగా ఉన్నందున, మీరు మళ్లీ డిప్లాయ్ చేయకుండానే ఇప్పటికే ఉన్న ఏదైనా ప్రోటోకాల్కు స్పష్టమైన సంతకం చేసే మద్దతును జోడించవచ్చు. వాలెట్లు రిజిస్ట్రీ నుండి డిస్క్రిప్టర్లను తిరిగి పొందుతాయి మరియు సంతకం చేసే సమయంలో వాటిని ఉపయోగిస్తాయి.
దశ 1: ఫైల్ స్కెలిటన్ను సృష్టించండి
calldata-<contractname>-<descriptorversion>.json పేరుతో ఒక ఫైల్ను సృష్టించండి. calldata- ఉపసర్గ ఈ డిస్క్రిప్టర్ కాంట్రాక్ట్ ఫంక్షన్ కాల్లను కవర్ చేస్తుందని రిజిస్ట్రీకి చెబుతుంది, టైప్ చేసిన-డేటా సందేశాల కోసం eip712-కి విరుద్ధంగా. descriptorversion రిజిస్ట్రీకి డిస్క్రిప్టర్ ఫైల్ యొక్క సంస్కరణను చెబుతుంది, ఏ సంస్కరణ అందించబడకపోతే అప్రమేయంగా 0 ఉంటుంది.
{
"$schema": "https://eips.ethereum.org/assets/eip-7730/erc7730-v2.schema.json",
"context": {},
"metadata": {},
"display": {
"formats": {}
}
}
దశ 2: కాంటెక్స్ట్ విభాగాన్ని వ్రాయండి
context విభాగం డిస్క్రిప్టర్ను ఒకటి లేదా అంతకంటే ఎక్కువ కాంట్రాక్ట్ డిప్లాయ్మెంట్లకు బంధిస్తుంది. ఇన్కమింగ్ లావాదేవీని సరైన డిస్క్రిప్టర్తో సరిపోల్చడానికి వాలెట్లు దీన్ని ఉపయోగిస్తాయి.
"context": {
"$id": "uniswap-v3-router-mainnet",
"contract": {
"deployments": [
{ "chainId": 1, "address": "0xYourContractAddressOnMainnet" },
{ "chainId": 137, "address": "0xYourContractAddressOnPolygon" }
]
}
}
కాంటెక్స్ట్ ఫీల్డ్లు
context.$id— ఈ డిస్క్రిప్టర్ పత్రం లేదా డిప్లాయ్మెంట్ కాన్ఫిగరేషన్ కోసం ఒక ప్రత్యేక ఐడెంటిఫైయర్.contract.deployments— ఈ డిస్క్రిప్టర్ వర్తించే డిప్లాయ్మెంట్ల సమితి.deployments[].chainId— డిప్లాయ్మెంట్ కోసం EVM చైన్ ID. మీ కాంట్రాక్ట్ డిప్లాయ్ చేయబడిన ప్రతి చైన్ను చేర్చండి.deployments[].address— వాలెట్లు ఈ డిస్క్రిప్టర్తో అనుబంధించాల్సిన కాంట్రాక్ట్ చిరునామా. ఎగ్జిక్యూషన్ లాజిక్ను కలిగి ఉన్న ఇంప్లిమెంటేషన్ చిరునామాను ఉపయోగించండి.
దశ 3: మెటాడేటా విభాగాన్ని వ్రాయండి
మెటాడేటా విభాగం ఈ ఫైల్ ద్వారా వివరించబడిన ప్రాజెక్ట్ మరియు కాంట్రాక్ట్ గురించి మానవులు చదవగలిగే సమాచారాన్ని అందిస్తుంది. సంతకం చేసే సమయంలో ప్రోటోకాల్ పేర్లు, లింక్లు మరియు ఇతర సందర్భోచిత వివరాలను ప్రదర్శించడానికి వాలెట్లు ఈ సమాచారాన్ని ఉపయోగించవచ్చు.
"metadata": {
"owner": "Example Swap Protocol",
"info": { "url": "https://example.xyz" },
"contractName": "SwapRouter"
}
మెటాడేటా ఫీల్డ్లు
owner— ఈ డిస్క్రిప్టర్కు బాధ్యత వహించే ప్రాజెక్ట్, ప్రోటోకాల్, సంస్థ లేదా నిర్వహించేవారు.info.url— అదనపు సందర్భం కోసం వాలెట్లు వినియోగదారులకు ప్రదర్శించగల కానానికల్ ప్రాజెక్ట్ లేదా డాక్యుమెంటేషన్ URL.contractName— ఈ ఫైల్ ద్వారా వివరించబడిన కాంట్రాక్ట్ లేదా ఇంప్లిమెంటేషన్ పేరు, సాధారణంగా ధృవీకరించబడిన సోర్స్ కోడ్ లేదా ABIతో సరిపోలుతుంది.
మీ ERC-7730 ఫైల్ ERC-20 కాంట్రాక్ట్ను వివరిస్తే, మీరు టోకెన్ ఆబ్జెక్ట్ను కూడా జోడించాలి.
దశ 4: ప్రదర్శన ఫార్మాట్ల విభాగాన్ని వ్రాయండి
display.formats ఆబ్జెక్ట్ ఫంక్షన్ సంతకాలను మానవులు చదవగలిగే సంతకం సూచనలకు మ్యాప్ చేస్తుంది. వినియోగదారులు లావాదేవీని ఆమోదించడానికి ముందు వాలెట్లు మీ ఫంక్షన్ను వారికి ఈ విధంగా చూపుతాయి!
ప్రతి కీ మానవులు చదవగలిగే ABI ఫ్రాగ్మెంట్ — మీ ABIలో కనిపించే విధంగానే పారామీటర్ పేర్లు మరియు పారామీటర్ రకాలు రెండింటినీ కలిగి ఉన్న ఫంక్షన్ సంతకం.
ఉదాహరణ: టోకెన్ మార్పిడిని వివరించడం
"display": {
"formats": {
"swapExactTokensForTokens(uint256 amountIn,uint256 amountOutMin,address[] path,address to,uint256 deadline)": {
"intent": "Swap",
"interpolatedIntent": "Swap {amountIn} for at least {amountOutMin}",
"fields": [
{
"path": "#.amountIn",
"label": "Send",
"format": "tokenAmount",
"params": {
"tokenPath": "#.path[0]"
}
},
{
"path": "#.amountOutMin",
"label": "Receive minimum",
"format": "tokenAmount",
"params": {
"tokenPath": "#.path[1]"
}
},
{
"path": "#.to",
"label": "Recipient",
"format": "addressName",
"params": {
"types": ["eoa", "contract"],
"sources": ["local", "ens"]
}
},
{
"path": "#.deadline",
"label": "Expires",
"format": "date",
"params": {
"encoding": "timestamp"
}
}
]
}
}
}
ప్రదర్శన ఫీల్డ్లు
intent— (అవసరం) "మార్పిడి" వంటి చర్య యొక్క చిన్న, వినియోగదారు-స్నేహపూర్వక వివరణ.interpolatedIntent— (సిఫార్సు చేయబడింది)"Swap {amountIn} for at least {amountOutMin}"వంటి ఫార్మాట్ చేయబడిన ఫీల్డ్ విలువలను పొందుపరిచే ధనిక వాక్య టెంప్లేట్. ఏవైనా ప్రదర్శన పరిమితులు ఉన్నప్పటికీ వాలెట్లు చూపించడానికి ఎంచుకోగల మరింత వినియోగదారు-స్నేహపూర్వక డిస్క్రిప్టర్ను అందించడానికి దీన్నిintentతో పాటు చేర్చండి.fields— (అవసరం) వాలెట్లు వినియోగదారులకు ప్రదర్శించాల్సిన లావాదేవీ ఫీల్డ్ల క్రమబద్ధీకరించబడిన జాబితా.-
path— (అవసరం) లావాదేవీ డేటాకు సూచన.#.fieldNameఅనేది ABIలోని పేరు ద్వారా డీకోడ్ చేయబడిన కాల్ డేటా పారామీటర్ను సూచిస్తుంది.@.valueఅనేది లావాదేవీతో పంపబడిన ETH విలువను సూచిస్తుంది. -
label— (అవసరం) విలువ పక్కన చూపబడే మానవులు చదవగలిగే లేబుల్. -
format— (సిఫార్సు చేయబడింది) విలువ ఎలా రెండర్ చేయబడాలో నియంత్రిస్తుంది. సాధారణ ఫార్మాట్లు ఇవి:tokenAmountaddressNamedate
అదనపు ఫార్మాటింగ్ అవసరం లేనప్పుడు
rawని ఉపయోగించండి. కొన్ని ఫార్మాట్లు అదనపుparamsకాన్ఫిగరేషన్ను అంగీకరిస్తాయి. ఉదాహరణకు:- ఏ టోకెన్ చిరునామా దశాంశాలు మరియు టిక్కర్ మెటాడేటాను అందిస్తుందో గుర్తించడానికి
tokenAmountఅనేదిtokenPathని ఉపయోగించవచ్చు. - టైమ్స్టాంప్ ఎలా ఎన్కోడ్ చేయబడిందో వివరించడానికి
dateఅనేదిencodingని ఉపయోగించవచ్చు.
ఎంచుకున్న ఫార్మాట్కు అదనపు సమాచారం అవసరం లేకపోతే,
paramsని వదిలివేయండి.
-
పూర్తి డిస్క్రిప్టర్
{
"$schema": "https://eips.ethereum.org/assets/eip-7730/erc7730-v2.schema.json",
"context": {
"$id": "uniswap-v3-router-mainnet",
"contract": {
"deployments": [
{
"chainId": 1,
"address": "0xYourContractAddressOnMainnet"
},
{
"chainId": 137,
"address": "0xYourContractAddressOnPolygon"
}
]
}
},
"metadata": {
"owner": "Example Swap Protocol",
"info": {
"url": "https://example.xyz"
},
"contractName": "SwapRouter"
},
"display": {
"formats": {
"swapExactTokensForTokens(uint256 amountIn,uint256 amountOutMin,address[] path,address to,uint256 deadline)": {
"intent": "Swap",
"interpolatedIntent": "Swap {amountIn} for at least {amountOutMin}",
"fields": [
{
"path": "#.amountIn",
"label": "Send",
"format": "tokenAmount",
"params": {
"tokenPath": "#.path[0]"
}
},
{
"path": "#.amountOutMin",
"label": "Receive minimum",
"format": "tokenAmount",
"params": {
"tokenPath": "#.path[1]"
}
},
{
"path": "#.to",
"label": "Recipient",
"format": "addressName",
"params": {
"types": ["eoa", "contract"],
"sources": ["local", "ens"]
}
},
{
"path": "#.deadline",
"label": "Expires",
"format": "date",
"params": {
"encoding": "timestamp"
}
}
]
}
}
}
}
దశ 5: రిజిస్ట్రీకి సమర్పించండి
ERC-7730 రిజిస్ట్రీ (opens in a new tab) అనేది తటస్థ నిర్వాహకుడిగా ఎథీరియం ఫౌండేషన్ ద్వారా హోస్ట్ చేయబడిన ఓపెన్ రిపోజిటరీ. ఎవరైనా దీన్ని క్లోన్ చేయడానికి మరియు స్వీయ-హోస్ట్ చేయడానికి స్వేచ్ఛ ఉంది — వాలెట్లు ఏ రిజిస్ట్రీ ఇన్స్టాన్స్లను విశ్వసించాలో స్వతంత్రంగా నిర్ణయిస్తాయి.
- GitHubలో రిపోజిటరీని ఫోర్క్ చేయండి
registry/<your-project-name>/వద్ద ఫోల్డర్ను సృష్టించండి- మీ ఫైల్ను దాని లోపల ఉంచండి:
registry/myproject/calldata-mycontract-0_0.json - రెపోలో ఉపయోగించిన సాపేక్ష మార్గానికి
$schemaఫీల్డ్ను నవీకరించండి:"../../specs/erc7730-v2.schema.json" - పుల్ రిక్వెస్ట్ను తెరవండి
మీరు PRని తెరిచినప్పుడు, CI స్వయంచాలకంగా స్కీమా ధృవీకరణను అమలు చేస్తుంది, ఫంక్షన్ సంతకాలు చెల్లుబాటు అయ్యే సెలెక్టర్లను ఉత్పత్తి చేస్తాయో లేదో తనిఖీ చేస్తుంది, కాంట్రాక్ట్ చిరునామా Sourcifyలో ధృవీకరించబడిందని నిర్ధారిస్తుంది మరియు ABI అసమానతలను ఫ్లాగ్ చేస్తుంది. తనిఖీ ఫలితాలు PRలో ఇన్లైన్లో కనిపిస్తాయి. రిజిస్ట్రీ నిర్వహించేవారు తప్పుగా రూపొందించబడిన లేదా హానికరమైన డిస్క్రిప్టర్ల కోసం సమర్పణలను పరిశీలిస్తారు. రిజిస్ట్రీలో చేర్చడం అనేది ఆడిట్ లేదా ఆమోదాన్ని సూచించదు.
విలీనం చేసిన తర్వాత ఏమి జరుగుతుంది?
రిజిస్ట్రీలోని అన్ని డిస్క్రిప్టర్లు ఆడిటర్లకు అందుబాటులో ఉంటాయి. మీ PR విలీనం చేయబడిన తర్వాత, ఏ ఆడిటర్ అయినా మీ డిస్క్రిప్టర్ను సమీక్షించవచ్చు మరియు దాని ఖచ్చితత్వాన్ని నిర్ధారిస్తూ క్రిప్టోగ్రాఫిక్ ధృవీకరణను (ERC-8176 (opens in a new tab) కింద) ప్రచురించవచ్చు.
ఈ ధృవీకరణ సంకేతాలు వాలెట్లు తమ స్వంత విశ్వాస విధానాలను వర్తింపజేయడానికి అనుమతిస్తాయి — బహుళ స్వతంత్ర ధృవీకరణలు ఉన్న డిస్క్రిప్టర్ లేని దానికంటే ఎక్కువ బరువును కలిగి ఉంటుంది. మీరు clearsigning.org (opens in a new tab) ద్వారా ఆడిటర్ కమ్యూనిటీని చేరుకోవచ్చు.
వాలెట్లు తాము ఏ రిజిస్ట్రీకి మద్దతు ఇస్తాయో ఎంచుకుంటాయి. మీ డిస్క్రిప్టర్ రిజిస్ట్రీలో ఉన్న తర్వాత, ERC-7730కి మద్దతు ఇచ్చే వాలెట్లు అది వాటి రిజిస్ట్రీలో ఉంటే దాన్ని పొందడం ప్రారంభిస్తాయి మరియు వినియోగదారులు మీ కాంట్రాక్ట్తో ఇంటరాక్ట్ అయినప్పుడు మానవులు చదవగలిగే డేటాను ప్రదర్శిస్తాయి.
మరింత చదవడానికి
- ERC-7730 స్పెసిఫికేషన్ (opens in a new tab)
- ERC-7730 రిజిస్ట్రీ (opens in a new tab)
- clearsigning.org (opens in a new tab) — టూలింగ్, ఎకోసిస్టమ్ స్థితి మరియు పరిపాలన
- Sourcify కాంట్రాక్ట్ ధృవీకరణ (opens in a new tab)
- ట్రిలియన్ డాలర్ సెక్యూరిటీ ఇనిషియేటివ్ (opens in a new tab)
పేజీ చివరి నవీకరణ: 12 మే, 2026