---
title: "⁦ERC-7730⁩తో మీ ప్రోటోకాల్‌కు స్పష్టమైన సంతకం చేయడాన్ని జోడించండి"
description: "వినియోగదారులు సంతకం చేయడానికి ముందు వాలెట్‌లలో మానవులు చదవగలిగే వివరాలను ప్రదర్శించేలా మీ స్మార్ట్ కాంట్రాక్ట్ ఇంటరాక్షన్‌ల కోసం ⁦ERC-7730⁩ డిస్క్రిప్టర్‌ను ఎలా వ్రాయాలో తెలుసుకోండి."
author: "హెస్టర్ బ్రూక్‌మన్"
lang: te
tags: ["ERC-7730", "భద్రత", "సంతకం చేయడం", "స్మార్ట్ కాంట్రాక్ట్‌లు", "వాలెట్‌లు"]
skill: intermediate
breadcrumb: "స్పష్టమైన సంతకం చేయడం"
published: 2026-05-11
---

చాలా ప్రధాన ఎథీరియం దోపిడీలు ఒకే చివరి దశను కలిగి ఉన్నాయి: వినియోగదారుడు తమకు అర్థం కాని లావాదేవీని ఆమోదించడం. హార్డ్‌వేర్ వాలెట్‌లు ముడి హెక్స్ కాల్ డేటాను చూపుతాయి మరియు మరింత దారుణంగా బ్లైండ్ సైనింగ్‌ను ఆన్ చేయమని మిమ్మల్ని బలవంతం చేస్తాయి. సాఫ్ట్‌వేర్ వాలెట్‌లు డీకోడ్ చేయబడిన ఫీల్డ్‌లను చూపుతాయి, కానీ అవి కాంట్రాక్ట్‌ను గుర్తించినప్పుడు మాత్రమే. ప్రోటోకాల్ కొత్తది కావడం వల్ల, యాప్ రాజీ పడటం వల్ల లేదా పరికరం ఆఫ్‌లైన్‌లో ఉండటం వల్ల అవి గుర్తించలేనప్పుడు, వినియోగదారులు గుడ్డిగా సంతకం చేస్తారు.

[ERC-7730](https://eips.ethereum.org/EIPS/eip-7730) మీ కాంట్రాక్ట్ యొక్క ఫంక్షన్ కాల్‌ల *అర్థం* ఏమిటో వివరించడానికి ఒక ప్రామాణిక JSON ఆకృతిని నిర్వచిస్తుంది. 

ERC-7730కి మద్దతు ఇచ్చే వాలెట్ మీ డిస్క్రిప్టర్‌ను చదివి ఇలా చూపుతుంది:

> **మార్పిడి**  
> పంపండి: 1,000 USDC  
> కనీసం స్వీకరించండి: 0.42 WETH  
> ప్రోటోకాల్: యూనిస్వాప్ V3

లేదా మానవులు మరియు ఏజెంట్లు ఇద్దరూ చదవగలిగే ఒకే నిర్మిత వాక్యం:

> కనీసం 0.42 WETH కోసం 1,000 USDCని మార్పిడి చేయండి

ఫంక్షన్ సెలెక్టర్ మరియు ముడి పూర్ణాంక విలువల జాబితాకు బదులుగా.

ఇదే [స్పష్టమైన సంతకం చేయడం](https://clearsigning.org/) — "మీరు చూసేదే మీరు సంతకం చేసేది." ఈ ట్యుటోరియల్ మీ స్వంత కాంట్రాక్ట్ కోసం డిస్క్రిప్టర్‌ను వ్రాయడం, అధికారిక CLI సాధనంతో దాన్ని ధృవీకరించడం మరియు ఓపెన్ రిజిస్ట్రీకి సమర్పించడం ద్వారా మీకు మార్గనిర్దేశం చేస్తుంది.

## ముందస్తు అవసరాలు {#prerequisites}

- Solidity మరియు స్మార్ట్ కాంట్రాక్ట్ ABIల గురించి అవగాహన
- ధృవీకరించబడిన ABIతో డిప్లాయ్ చేయబడిన స్మార్ట్ కాంట్రాక్ట్ (డిస్క్రిప్టర్‌ను రిజిస్ట్రీకి ఆమోదించడానికి ముందు [Sourcify](https://sourcify.dev) ధృవీకరణ అవసరం) 
- ధృవీకరణ CLI కోసం Python 3.12+ 
- ప్రాథమిక JSON పరిజ్ఞానం

## ERC-7730 డిస్క్రిప్టర్ అంటే ఏమిటి? {#what-is-an-erc-7730-descriptor}

డిస్క్రిప్టర్ అనేది మూడు విభాగాలతో కూడిన ఒకే JSON ఫైల్:

| విభాగం | ప్రయోజనం |
| :---- | :---- |
| `context` | చైన్ ID మరియు చిరునామా ద్వారా నిర్దిష్ట కాంట్రాక్ట్ డిప్లాయ్‌మెంట్‌లకు డిస్క్రిప్టర్‌ను బంధిస్తుంది |
| `metadata` | ప్రాజెక్ట్‌కు పేరు పెడుతుంది మరియు పునర్వినియోగ స్థిరాంకాలను నిర్వచిస్తుంది |
| `display` | ప్రతి ఫంక్షన్ సంతకాన్ని మానవులు చదవగలిగే లేబుల్‌లు మరియు ఫీల్డ్ ఫార్మాట్‌లకు మ్యాప్ చేస్తుంది |

డిస్క్రిప్టర్ కాంట్రాక్ట్ నుండి వేరుగా ఉన్నందున, మీరు మళ్లీ డిప్లాయ్ చేయకుండానే ఇప్పటికే ఉన్న ఏదైనా ప్రోటోకాల్‌కు స్పష్టమైన సంతకం చేసే మద్దతును జోడించవచ్చు. వాలెట్‌లు రిజిస్ట్రీ నుండి డిస్క్రిప్టర్‌లను తిరిగి పొందుతాయి మరియు సంతకం చేసే సమయంలో వాటిని ఉపయోగిస్తాయి.

## దశ 1: ఫైల్ స్కెలిటన్‌ను సృష్టించండి {#step-1-create-the-file-skeleton}

`calldata-<contractname>-<descriptorversion>.json` పేరుతో ఒక ఫైల్‌ను సృష్టించండి. `calldata-` ఉపసర్గ ఈ డిస్క్రిప్టర్ కాంట్రాక్ట్ ఫంక్షన్ కాల్‌లను కవర్ చేస్తుందని రిజిస్ట్రీకి చెబుతుంది, టైప్ చేసిన-డేటా సందేశాల కోసం `eip712-`కి విరుద్ధంగా. `descriptorversion` రిజిస్ట్రీకి డిస్క్రిప్టర్ ఫైల్ యొక్క సంస్కరణను చెబుతుంది, ఏ సంస్కరణ అందించబడకపోతే అప్రమేయంగా 0 ఉంటుంది.


```json
{
  "$schema": "https://eips.ethereum.org/assets/eip-7730/erc7730-v2.schema.json",
  "context": {},
  "metadata": {},
  "display": {
    "formats": {}
  }
}
```

## దశ 2: కాంటెక్స్ట్ విభాగాన్ని వ్రాయండి {#step-2-write-the-context-section}

`context` విభాగం డిస్క్రిప్టర్‌ను ఒకటి లేదా అంతకంటే ఎక్కువ కాంట్రాక్ట్ డిప్లాయ్‌మెంట్‌లకు బంధిస్తుంది. ఇన్‌కమింగ్ లావాదేవీని సరైన డిస్క్రిప్టర్‌తో సరిపోల్చడానికి వాలెట్‌లు దీన్ని ఉపయోగిస్తాయి.

```json
"context": {
  "$id": "uniswap-v3-router-mainnet",
  "contract": {
    "deployments": [
      { "chainId": 1, "address": "0xYourContractAddressOnMainnet" },
      { "chainId": 137, "address": "0xYourContractAddressOnPolygon" }
    ]
  }
}
```

### కాంటెక్స్ట్ ఫీల్డ్‌లు {#context-fields}

- `context.$id` — ఈ డిస్క్రిప్టర్ పత్రం లేదా డిప్లాయ్‌మెంట్ కాన్ఫిగరేషన్ కోసం ఒక ప్రత్యేక ఐడెంటిఫైయర్.
- `contract.deployments` — ఈ డిస్క్రిప్టర్ వర్తించే డిప్లాయ్‌మెంట్‌ల సమితి.
- `deployments[].chainId` — డిప్లాయ్‌మెంట్ కోసం EVM చైన్ ID. మీ కాంట్రాక్ట్ డిప్లాయ్ చేయబడిన ప్రతి చైన్‌ను చేర్చండి.
- `deployments[].address` — వాలెట్‌లు ఈ డిస్క్రిప్టర్‌తో అనుబంధించాల్సిన కాంట్రాక్ట్ చిరునామా. ఎగ్జిక్యూషన్ లాజిక్‌ను కలిగి ఉన్న ఇంప్లిమెంటేషన్ చిరునామాను ఉపయోగించండి.

## దశ 3: మెటాడేటా విభాగాన్ని వ్రాయండి {#step-3-write-the-metadata-section}

మెటాడేటా విభాగం ఈ ఫైల్ ద్వారా వివరించబడిన ప్రాజెక్ట్ మరియు కాంట్రాక్ట్ గురించి మానవులు చదవగలిగే సమాచారాన్ని అందిస్తుంది. సంతకం చేసే సమయంలో ప్రోటోకాల్ పేర్లు, లింక్‌లు మరియు ఇతర సందర్భోచిత వివరాలను ప్రదర్శించడానికి వాలెట్‌లు ఈ సమాచారాన్ని ఉపయోగించవచ్చు.

```json
"metadata": {
  "owner": "Example Swap Protocol",
  "info": { "url": "https://example.xyz" },
  "contractName": "SwapRouter"
}
```

### మెటాడేటా ఫీల్డ్‌లు {#metadata-fields}

- `owner` — ఈ డిస్క్రిప్టర్‌కు బాధ్యత వహించే ప్రాజెక్ట్, ప్రోటోకాల్, సంస్థ లేదా నిర్వహించేవారు.
- `info.url` — అదనపు సందర్భం కోసం వాలెట్‌లు వినియోగదారులకు ప్రదర్శించగల కానానికల్ ప్రాజెక్ట్ లేదా డాక్యుమెంటేషన్ URL.
- `contractName` — ఈ ఫైల్ ద్వారా వివరించబడిన కాంట్రాక్ట్ లేదా ఇంప్లిమెంటేషన్ పేరు, సాధారణంగా ధృవీకరించబడిన సోర్స్ కోడ్ లేదా ABIతో సరిపోలుతుంది.

మీ ERC-7730 ఫైల్ ERC-20 కాంట్రాక్ట్‌ను వివరిస్తే, మీరు టోకెన్ ఆబ్జెక్ట్‌ను కూడా జోడించాలి. 

## దశ 4: ప్రదర్శన ఫార్మాట్‌ల విభాగాన్ని వ్రాయండి {#step-4-write-the-displayformats-section}

`display.formats` ఆబ్జెక్ట్ ఫంక్షన్ సంతకాలను మానవులు చదవగలిగే సంతకం సూచనలకు మ్యాప్ చేస్తుంది. వినియోగదారులు లావాదేవీని ఆమోదించడానికి ముందు వాలెట్‌లు మీ ఫంక్షన్‌ను వారికి ఈ విధంగా చూపుతాయి!

ప్రతి కీ మానవులు చదవగలిగే ABI ఫ్రాగ్‌మెంట్ — మీ ABIలో కనిపించే విధంగానే పారామీటర్ పేర్లు మరియు పారామీటర్ రకాలు రెండింటినీ కలిగి ఉన్న ఫంక్షన్ సంతకం.


### ఉదాహరణ: టోకెన్ మార్పిడిని వివరించడం {#eg-describing-token-swap}

```json
"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"
          }
        }
      ]
    }
  }
}

```

### ప్రదర్శన ఫీల్డ్‌లు {#display-fields}

- **`intent`** — **(అవసరం)** "మార్పిడి" వంటి చర్య యొక్క చిన్న, వినియోగదారు-స్నేహపూర్వక వివరణ.
- **`interpolatedIntent`** — **(సిఫార్సు చేయబడింది)** `"Swap {amountIn} for at least {amountOutMin}"` వంటి ఫార్మాట్ చేయబడిన ఫీల్డ్ విలువలను పొందుపరిచే ధనిక వాక్య టెంప్లేట్. ఏవైనా ప్రదర్శన పరిమితులు ఉన్నప్పటికీ వాలెట్‌లు చూపించడానికి ఎంచుకోగల మరింత వినియోగదారు-స్నేహపూర్వక డిస్క్రిప్టర్‌ను అందించడానికి దీన్ని `intent`తో పాటు చేర్చండి.
- **`fields`** — **(అవసరం)** వాలెట్‌లు వినియోగదారులకు ప్రదర్శించాల్సిన లావాదేవీ ఫీల్డ్‌ల క్రమబద్ధీకరించబడిన జాబితా.
  - **`path`** — **(అవసరం)** లావాదేవీ డేటాకు సూచన. `#.fieldName` అనేది ABIలోని పేరు ద్వారా డీకోడ్ చేయబడిన కాల్ డేటా పారామీటర్‌ను సూచిస్తుంది. `@.value` అనేది లావాదేవీతో పంపబడిన ETH విలువను సూచిస్తుంది.
  - **`label`** — **(అవసరం)** విలువ పక్కన చూపబడే మానవులు చదవగలిగే లేబుల్.
  - **`format`** — **(సిఫార్సు చేయబడింది)** విలువ ఎలా రెండర్ చేయబడాలో నియంత్రిస్తుంది. సాధారణ ఫార్మాట్‌లు ఇవి:
    - `tokenAmount`
    - `addressName`
    - `date`

    అదనపు ఫార్మాటింగ్ అవసరం లేనప్పుడు `raw`ని ఉపయోగించండి. కొన్ని ఫార్మాట్‌లు అదనపు **`params`** కాన్ఫిగరేషన్‌ను అంగీకరిస్తాయి. ఉదాహరణకు:

    - ఏ టోకెన్ చిరునామా దశాంశాలు మరియు టిక్కర్ మెటాడేటాను అందిస్తుందో గుర్తించడానికి `tokenAmount` అనేది `tokenPath`ని ఉపయోగించవచ్చు.
    - టైమ్‌స్టాంప్ ఎలా ఎన్‌కోడ్ చేయబడిందో వివరించడానికి `date` అనేది `encoding`ని ఉపయోగించవచ్చు.

    ఎంచుకున్న ఫార్మాట్‌కు అదనపు సమాచారం అవసరం లేకపోతే, `params`ని వదిలివేయండి.

## పూర్తి డిస్క్రిప్టర్ {#the-complete-descriptor}

```json
{
  "$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: రిజిస్ట్రీకి సమర్పించండి {#step-5-submit-to-the-registry}

[ERC-7730 రిజిస్ట్రీ](https://github.com/ethereum/clear-signing-erc7730-registry) అనేది తటస్థ నిర్వాహకుడిగా [ఎథీరియం ఫౌండేషన్](/foundation/) ద్వారా హోస్ట్ చేయబడిన ఓపెన్ రిపోజిటరీ. ఎవరైనా దీన్ని క్లోన్ చేయడానికి మరియు స్వీయ-హోస్ట్ చేయడానికి స్వేచ్ఛ ఉంది — వాలెట్‌లు ఏ రిజిస్ట్రీ ఇన్‌స్టాన్స్‌లను విశ్వసించాలో స్వతంత్రంగా నిర్ణయిస్తాయి.

1. GitHubలో రిపోజిటరీని ఫోర్క్ చేయండి  
2. `registry/<your-project-name>/` వద్ద ఫోల్డర్‌ను సృష్టించండి  
3. మీ ఫైల్‌ను దాని లోపల ఉంచండి: `registry/myproject/calldata-mycontract-0_0.json`  
4. రెపోలో ఉపయోగించిన సాపేక్ష మార్గానికి `$schema` ఫీల్డ్‌ను నవీకరించండి: `"../../specs/erc7730-v2.schema.json"`  
5. పుల్ రిక్వెస్ట్‌ను తెరవండి

మీరు PRని తెరిచినప్పుడు, CI స్వయంచాలకంగా స్కీమా ధృవీకరణను అమలు చేస్తుంది, ఫంక్షన్ సంతకాలు చెల్లుబాటు అయ్యే సెలెక్టర్‌లను ఉత్పత్తి చేస్తాయో లేదో తనిఖీ చేస్తుంది, కాంట్రాక్ట్ చిరునామా Sourcifyలో ధృవీకరించబడిందని నిర్ధారిస్తుంది మరియు ABI అసమానతలను ఫ్లాగ్ చేస్తుంది. తనిఖీ ఫలితాలు PRలో ఇన్‌లైన్‌లో కనిపిస్తాయి. రిజిస్ట్రీ నిర్వహించేవారు తప్పుగా రూపొందించబడిన లేదా హానికరమైన డిస్క్రిప్టర్‌ల కోసం సమర్పణలను పరిశీలిస్తారు. రిజిస్ట్రీలో చేర్చడం అనేది ఆడిట్ లేదా ఆమోదాన్ని సూచించదు.

<Alert variant="info">
<AlertContent>
<AlertDescription>
**గమనిక:** మీ PR ఆమోదించబడటానికి ముందు మీ కాంట్రాక్ట్ <a href="https://repo.sourcify.dev">Sourcify</a>లో ధృవీకరించబడాలి. ఇది ఇంకా ధృవీకరించబడకపోతే, ముందుగా <a href="https://verify.sourcify.dev/">ధృవీకరణను సమర్పించండి</a>.
</AlertDescription>
</AlertContent>
</Alert>

## విలీనం చేసిన తర్వాత ఏమి జరుగుతుంది? {#what-happens-after-merging}

రిజిస్ట్రీలోని అన్ని డిస్క్రిప్టర్‌లు ఆడిటర్‌లకు అందుబాటులో ఉంటాయి. మీ PR విలీనం చేయబడిన తర్వాత, ఏ ఆడిటర్ అయినా మీ డిస్క్రిప్టర్‌ను సమీక్షించవచ్చు మరియు దాని ఖచ్చితత్వాన్ని నిర్ధారిస్తూ క్రిప్టోగ్రాఫిక్ ధృవీకరణను ([ERC-8176](https://github.com/ethereum/ERCs/pull/1576) కింద) ప్రచురించవచ్చు. 

ఈ ధృవీకరణ సంకేతాలు వాలెట్‌లు తమ స్వంత విశ్వాస విధానాలను వర్తింపజేయడానికి అనుమతిస్తాయి — బహుళ స్వతంత్ర ధృవీకరణలు ఉన్న డిస్క్రిప్టర్ లేని దానికంటే ఎక్కువ బరువును కలిగి ఉంటుంది. మీరు [clearsigning.org](https://clearsigning.org) ద్వారా ఆడిటర్ కమ్యూనిటీని చేరుకోవచ్చు.

వాలెట్‌లు తాము ఏ రిజిస్ట్రీకి మద్దతు ఇస్తాయో ఎంచుకుంటాయి. మీ డిస్క్రిప్టర్ రిజిస్ట్రీలో ఉన్న తర్వాత, ERC-7730కి మద్దతు ఇచ్చే వాలెట్‌లు అది వాటి రిజిస్ట్రీలో ఉంటే దాన్ని పొందడం ప్రారంభిస్తాయి మరియు వినియోగదారులు మీ కాంట్రాక్ట్‌తో ఇంటరాక్ట్ అయినప్పుడు మానవులు చదవగలిగే డేటాను ప్రదర్శిస్తాయి.

## మరింత చదవడానికి {#further-reading}

- [ERC-7730 స్పెసిఫికేషన్](https://eips.ethereum.org/EIPS/eip-7730)  
- [ERC-7730 రిజిస్ట్రీ](https://github.com/ethereum/clear-signing-erc7730-registry)  
- [clearsigning.org](https://clearsigning.org) — టూలింగ్, ఎకోసిస్టమ్ స్థితి మరియు పరిపాలన  
- [Sourcify కాంట్రాక్ట్ ధృవీకరణ](https://sourcify.dev)  
- [ట్రిలియన్ డాలర్ సెక్యూరిటీ ఇనిషియేటివ్](https://trilliondollarsecurity.org)