---
title: "స్మార్ట్ కాంట్రాక్ట్‌లను అప్‌గ్రేడ్ చేయడం"
description: "ఎథీరియం స్మార్ట్ కాంట్రాక్ట్‌ల కోసం అప్‌గ్రేడ్ ప్యాట్రన్‌ల అవలోకనం"
lang: te
---

ఎథీరియంపై స్మార్ట్ కాంట్రాక్ట్‌లు ఎథీరియం వర్చువల్ మెషిన్ (EVM)లో రన్ అయ్యే స్వయంచాలకంగా అమలు అయ్యే ప్రోగ్రామ్‌లు. ఈ ప్రోగ్రామ్‌లు డిజైన్ ప్రకారం మార్చలేనివి, ఇది కాంట్రాక్ట్ డిప్లాయ్‌మెంట్ అయిన తర్వాత వ్యాపార లాజిక్‌కు ఎలాంటి అప్‌డేట్‌లను నిరోధిస్తుంది.

స్మార్ట్ కాంట్రాక్ట్‌ల విశ్వాసరహితత్వం, వికేంద్రీకరణ మరియు భద్రత కోసం మార్చలేనితనం అవసరం అయినప్పటికీ, కొన్ని సందర్భాల్లో ఇది ఒక లోపం కావచ్చు. ఉదాహరణకు, మార్చలేని కోడ్ డెవలపర్‌లకు హాని కలిగించే కాంట్రాక్ట్‌లను పరిష్కరించడం అసాధ్యం చేస్తుంది.

అయినప్పటికీ, స్మార్ట్ కాంట్రాక్ట్‌లను మెరుగుపరచడంపై పెరిగిన పరిశోధన అనేక అప్‌గ్రేడ్ ప్యాట్రన్‌ల పరిచయానికి దారితీసింది. ఈ అప్‌గ్రేడ్ ప్యాట్రన్‌లు వ్యాపార లాజిక్‌ను వేర్వేరు కాంట్రాక్ట్‌లలో ఉంచడం ద్వారా స్మార్ట్ కాంట్రాక్ట్‌లను (మార్చలేనితనంను సంరక్షిస్తూనే) అప్‌గ్రేడ్ చేయడానికి డెవలపర్‌లను అనుమతిస్తాయి.

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

మీకు [స్మార్ట్ కాంట్రాక్ట్‌లు](/developers/docs/smart-contracts/), [స్మార్ట్ కాంట్రాక్ట్ అనాటమీ](/developers/docs/smart-contracts/anatomy/) మరియు [ఎథీరియం వర్చువల్ మెషిన్ (EVM)](/developers/docs/evm/) గురించి మంచి అవగాహన ఉండాలి. ఈ గైడ్ పాఠకులకు స్మార్ట్ కాంట్రాక్ట్‌లను ప్రోగ్రామింగ్ చేయడంపై పట్టు ఉందని కూడా భావిస్తుంది.

## స్మార్ట్ కాంట్రాక్ట్ అప్‌గ్రేడ్ అంటే ఏమిటి? {#what-is-a-smart-contract-upgrade}

స్మార్ట్ కాంట్రాక్ట్ అప్‌గ్రేడ్ అనేది కాంట్రాక్ట్ స్థితిని సంరక్షిస్తూనే స్మార్ట్ కాంట్రాక్ట్ యొక్క వ్యాపార లాజిక్‌ను మార్చడాన్ని కలిగి ఉంటుంది. అప్‌గ్రేడబిలిటీ మరియు మ్యూటబిలిటీ ఒకేలా ఉండవని స్పష్టం చేయడం ముఖ్యం, ముఖ్యంగా స్మార్ట్ కాంట్రాక్ట్‌ల సందర్భంలో.

ఎథీరియం నెట్‌వర్క్‌లోని చిరునామాకు డిప్లాయ్‌మెంట్ చేయబడిన ప్రోగ్రామ్‌ను మీరు ఇప్పటికీ మార్చలేరు. కానీ వినియోగదారులు స్మార్ట్ కాంట్రాక్ట్‌తో ఇంటరాక్ట్ అయినప్పుడు అమలు చేయబడే కోడ్‌ను మీరు మార్చవచ్చు.

దీన్ని కింది పద్ధతుల ద్వారా చేయవచ్చు:

1. స్మార్ట్ కాంట్రాక్ట్ యొక్క బహుళ వెర్షన్‌లను సృష్టించడం మరియు పాత కాంట్రాక్ట్ నుండి కాంట్రాక్ట్ యొక్క కొత్త ఇన్‌స్టాన్స్‌కు స్థితిని (అంటే, డేటాను) మైగ్రేట్ చేయడం.

2. వ్యాపార లాజిక్ మరియు స్థితిని నిల్వ చేయడానికి ప్రత్యేక కాంట్రాక్ట్‌లను సృష్టించడం.

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

4. నిర్దిష్ట ఫంక్షన్‌లను అమలు చేయడానికి అనువైన శాటిలైట్ కాంట్రాక్ట్‌లతో ఇంటర్‌ఫేస్ చేసే మరియు వాటిపై ఆధారపడే మార్చలేని ప్రధాన కాంట్రాక్ట్‌ను సృష్టించడం.

5. ప్రతినిధి కాంట్రాక్ట్ నుండి లాజిక్ కాంట్రాక్ట్‌లకు ఫంక్షన్ కాల్‌లను ప్రతినిధి చేయడానికి డైమండ్ ప్యాట్రన్‌ను ఉపయోగించడం.

### అప్‌గ్రేడ్ మెకానిజం #1: కాంట్రాక్ట్ మైగ్రేషన్ {#contract-migration}

కాంట్రాక్ట్ మైగ్రేషన్ అనేది వెర్షనింగ్‌పై ఆధారపడి ఉంటుంది—అదే సాఫ్ట్‌వేర్ యొక్క ప్రత్యేక స్థితులను సృష్టించడం మరియు నిర్వహించడం అనే ఆలోచన. కాంట్రాక్ట్ మైగ్రేషన్ అనేది ఇప్పటికే ఉన్న స్మార్ట్ కాంట్రాక్ట్ యొక్క కొత్త ఇన్‌స్టాన్స్‌ను డిప్లాయ్‌మెంట్ చేయడం మరియు నిల్వ మరియు బ్యాలెన్స్‌లను కొత్త కాంట్రాక్ట్‌కు బదిలీ చేయడం కలిగి ఉంటుంది.

కొత్తగా డిప్లాయ్‌మెంట్ చేయబడిన కాంట్రాక్ట్ ఖాళీ నిల్వను కలిగి ఉంటుంది, ఇది పాత కాంట్రాక్ట్ నుండి డేటాను తిరిగి పొందడానికి మరియు కొత్త అమలుకు వ్రాయడానికి మిమ్మల్ని అనుమతిస్తుంది. ఆ తర్వాత, కొత్త చిరునామాను ప్రతిబింబించేలా పాత కాంట్రాక్ట్‌తో ఇంటరాక్ట్ అయిన అన్ని కాంట్రాక్ట్‌లను మీరు అప్‌డేట్ చేయాలి.

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

వినియోగదారు ఇంటరాక్షన్‌లకు అంతరాయం కలగకుండా స్మార్ట్ కాంట్రాక్ట్‌లను అప్‌గ్రేడ్ చేయడానికి కాంట్రాక్ట్ మైగ్రేషన్ అనేది సాపేక్షంగా సూటిగా మరియు సురక్షితమైన కొలమానం. అయినప్పటికీ, వినియోగదారు నిల్వ మరియు బ్యాలెన్స్‌లను కొత్త కాంట్రాక్ట్‌కు మాన్యువల్‌గా మైగ్రేట్ చేయడం అనేది ఎక్కువ సమయం తీసుకుంటుంది మరియు అధిక గ్యాస్ ఖర్చులకు దారితీస్తుంది.

[కాంట్రాక్ట్ మైగ్రేషన్ గురించి మరింత.](https://blog.trailofbits.com/2018/10/29/how-contract-migration-works/)

### అప్‌గ్రేడ్ మెకానిజం #2: డేటా విభజన {#data-separation}

స్మార్ట్ కాంట్రాక్ట్‌లను అప్‌గ్రేడ్ చేయడానికి మరొక పద్ధతి వ్యాపార లాజిక్ మరియు డేటా నిల్వను ప్రత్యేక కాంట్రాక్ట్‌లుగా విభజించడం. దీని అర్థం వినియోగదారులు లాజిక్ కాంట్రాక్ట్‌తో ఇంటరాక్ట్ అవుతారు, అయితే డేటా నిల్వ కాంట్రాక్ట్‌లో నిల్వ చేయబడుతుంది.

వినియోగదారులు అప్లికేషన్‌తో ఇంటరాక్ట్ అయినప్పుడు అమలు చేయబడే కోడ్‌ను లాజిక్ కాంట్రాక్ట్ కలిగి ఉంటుంది. ఇది నిల్వ కాంట్రాక్ట్ యొక్క చిరునామాను కూడా కలిగి ఉంటుంది మరియు డేటాను పొందడానికి మరియు సెట్ చేయడానికి దానితో ఇంటరాక్ట్ అవుతుంది.

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

అప్రమేయంగా, నిల్వ కాంట్రాక్ట్ మార్చలేనిది—కానీ అది సూచించే లాజిక్ కాంట్రాక్ట్‌ను మీరు కొత్త అమలుతో భర్తీ చేయవచ్చు. ఇది నిల్వ మరియు బ్యాలెన్స్‌లను చెక్కుచెదరకుండా ఉంచుతూ, EVMలో రన్ అయ్యే కోడ్‌ను మారుస్తుంది.

ఈ అప్‌గ్రేడ్ పద్ధతిని ఉపయోగించడానికి నిల్వ కాంట్రాక్ట్‌లో లాజిక్ కాంట్రాక్ట్ యొక్క చిరునామాను అప్‌డేట్ చేయడం అవసరం. ఇంతకు ముందు వివరించిన కారణాల వల్ల మీరు కొత్త లాజిక్ కాంట్రాక్ట్‌ను నిల్వ కాంట్రాక్ట్ యొక్క చిరునామాతో కూడా కాన్ఫిగర్ చేయాలి.

కాంట్రాక్ట్ మైగ్రేషన్‌తో పోలిస్తే డేటా విభజన ప్యాట్రన్‌ను అమలు చేయడం సులభం అని చెప్పవచ్చు. అయినప్పటికీ, హానికరమైన అప్‌గ్రేడ్‌ల నుండి స్మార్ట్ కాంట్రాక్ట్‌లను రక్షించడానికి మీరు బహుళ కాంట్రాక్ట్‌లను నిర్వహించాలి మరియు సంక్లిష్టమైన అధికార పథకాలను అమలు చేయాలి.

### అప్‌గ్రేడ్ మెకానిజం #3: ప్రాక్సీ ప్యాట్రన్‌లు {#proxy-patterns}

వ్యాపార లాజిక్ మరియు డేటాను ప్రత్యేక కాంట్రాక్ట్‌లలో ఉంచడానికి ప్రాక్సీ ప్యాట్రన్ కూడా డేటా విభజనను ఉపయోగిస్తుంది. అయినప్పటికీ, ప్రాక్సీ ప్యాట్రన్‌లో, నిల్వ కాంట్రాక్ట్ (ప్రాక్సీ అని పిలుస్తారు) కోడ్ అమలు సమయంలో లాజిక్ కాంట్రాక్ట్‌ను కాల్ చేస్తుంది. ఇది డేటా విభజన పద్ధతికి విరుద్ధంగా ఉంటుంది, ఇక్కడ లాజిక్ కాంట్రాక్ట్ నిల్వ కాంట్రాక్ట్‌ను కాల్ చేస్తుంది.

ప్రాక్సీ ప్యాట్రన్‌లో ఇది జరుగుతుంది:

1. వినియోగదారులు ప్రతినిధి కాంట్రాక్ట్‌తో ఇంటరాక్ట్ అవుతారు, ఇది డేటాను నిల్వ చేస్తుంది, కానీ వ్యాపార లాజిక్‌ను కలిగి ఉండదు.

2. ప్రతినిధి కాంట్రాక్ట్ లాజిక్ కాంట్రాక్ట్ యొక్క చిరునామాను నిల్వ చేస్తుంది మరియు `delegatecall` ఫంక్షన్‌ను ఉపయోగించి లాజిక్ కాంట్రాక్ట్‌కు (ఇది వ్యాపార లాజిక్‌ను కలిగి ఉంటుంది) అన్ని ఫంక్షన్ కాల్‌లను ప్రతినిధి చేస్తుంది.

3. కాల్ లాజిక్ కాంట్రాక్ట్‌కు ఫార్వార్డ్ చేయబడిన తర్వాత, లాజిక్ కాంట్రాక్ట్ నుండి తిరిగి వచ్చిన డేటా తిరిగి పొందబడుతుంది మరియు వినియోగదారుకు తిరిగి ఇవ్వబడుతుంది.

ప్రాక్సీ ప్యాట్రన్‌లను ఉపయోగించడానికి **delegatecall** ఫంక్షన్ గురించి అవగాహన అవసరం. ప్రాథమికంగా, `delegatecall` అనేది ఒక ఆప్‌కోడ్, ఇది ఒక కాంట్రాక్ట్‌ను మరొక కాంట్రాక్ట్‌ను కాల్ చేయడానికి అనుమతిస్తుంది, అయితే వాస్తవ కోడ్ అమలు కాలింగ్ కాంట్రాక్ట్ సందర్భంలో జరుగుతుంది. ప్రాక్సీ ప్యాట్రన్‌లలో `delegatecall`ని ఉపయోగించడం వల్ల కలిగే ప్రభావం ఏమిటంటే, ప్రతినిధి కాంట్రాక్ట్ దాని నిల్వకు చదువుతుంది మరియు వ్రాస్తుంది మరియు అంతర్గత ఫంక్షన్‌ను కాల్ చేస్తున్నట్లుగా లాజిక్ కాంట్రాక్ట్‌లో నిల్వ చేయబడిన లాజిక్‌ను అమలు చేస్తుంది.

[Solidity డాక్యుమెంటేషన్](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html#delegatecall-callcode-and-libraries) నుండి:

> _సందేశ పిలుపు యొక్క ప్రత్యేక రూపాంతరం ఉంది, దీనికి **delegatecall** అని పేరు పెట్టారు, ఇది లక్ష్య చిరునామాలోని కోడ్ కాలింగ్ కాంట్రాక్ట్ సందర్భంలో (అంటే, చిరునామా వద్ద) అమలు చేయబడుతుంది మరియు `msg.sender` మరియు `msg.value` వాటి విలువలను మార్చవు అనే వాస్తవం మినహా సందేశ పిలుపుకి సమానంగా ఉంటుంది._ _దీని అర్థం కాంట్రాక్ట్ రన్‌టైమ్‌లో వేరే చిరునామా నుండి కోడ్‌ను డైనమిక్‌గా లోడ్ చేయగలదు. నిల్వ, ప్రస్తుత చిరునామా మరియు బ్యాలెన్స్ ఇప్పటికీ కాలింగ్ కాంట్రాక్ట్‌ను సూచిస్తాయి, కోడ్ మాత్రమే కాల్ చేయబడిన చిరునామా నుండి తీసుకోబడుతుంది._

వినియోగదారు ఫంక్షన్‌ను కాల్ చేసినప్పుడల్లా `delegatecall`ని ప్రారంభించాలని ప్రతినిధి కాంట్రాక్ట్‌కు తెలుసు ఎందుకంటే దానిలో `fallback` ఫంక్షన్ నిర్మించబడింది. Solidity ప్రోగ్రామింగ్‌లో ఫంక్షన్ కాల్ కాంట్రాక్ట్‌లో పేర్కొన్న ఫంక్షన్‌లతో సరిపోలని పక్షంలో [ఫాల్‌బ్యాక్ ఫంక్షన్](https://docs.soliditylang.org/en/latest/contracts.html#fallback-function) అమలు చేయబడుతుంది.

ప్రాక్సీ ప్యాట్రన్ పని చేయడానికి అనుకూల ఫాల్‌బ్యాక్ ఫంక్షన్‌ను వ్రాయడం అవసరం, ఇది ప్రతినిధి కాంట్రాక్ట్ మద్దతు ఇవ్వని ఫంక్షన్ కాల్‌లను ఎలా నిర్వహించాలో నిర్దేశిస్తుంది. ఈ సందర్భంలో ప్రాక్సీ యొక్క ఫాల్‌బ్యాక్ ఫంక్షన్ డెలిగేట్‌కాల్‌ను ప్రారంభించడానికి మరియు వినియోగదారు అభ్యర్థనను ప్రస్తుత లాజిక్ కాంట్రాక్ట్ అమలుకు మళ్లించడానికి ప్రోగ్రామ్ చేయబడింది.

ప్రతినిధి కాంట్రాక్ట్ అప్రమేయంగా మార్చలేనిది, కానీ అప్‌డేట్ చేయబడిన వ్యాపార లాజిక్‌తో కొత్త లాజిక్ కాంట్రాక్ట్‌లను సృష్టించవచ్చు. అప్‌గ్రేడ్ చేయడం అనేది ప్రతినిధి కాంట్రాక్ట్‌లో సూచించబడిన లాజిక్ కాంట్రాక్ట్ యొక్క చిరునామాను మార్చడం.

ప్రతినిధి కాంట్రాక్ట్‌ను కొత్త లాజిక్ కాంట్రాక్ట్‌కు సూచించడం ద్వారా, వినియోగదారులు ప్రతినిధి కాంట్రాక్ట్ ఫంక్షన్‌ను కాల్ చేసినప్పుడు అమలు చేయబడే కోడ్ మారుతుంది. కొత్త కాంట్రాక్ట్‌తో ఇంటరాక్ట్ అవ్వమని వినియోగదారులను అడగకుండానే కాంట్రాక్ట్ లాజిక్‌ను అప్‌గ్రేడ్ చేయడానికి ఇది మమ్మల్ని అనుమతిస్తుంది.

స్మార్ట్ కాంట్రాక్ట్‌లను అప్‌గ్రేడ్ చేయడానికి ప్రాక్సీ ప్యాట్రన్‌లు ఒక ప్రసిద్ధ పద్ధతి ఎందుకంటే అవి కాంట్రాక్ట్ మైగ్రేషన్‌తో సంబంధం ఉన్న ఇబ్బందులను తొలగిస్తాయి. అయినప్పటికీ, ప్రాక్సీ ప్యాట్రన్‌లు ఉపయోగించడానికి మరింత క్లిష్టంగా ఉంటాయి మరియు సరిగ్గా ఉపయోగించకపోతే [ఫంక్షన్ సెలెక్టర్ క్లాషెస్](https://medium.com/nomic-foundation-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357) వంటి క్లిష్టమైన లోపాలను పరిచయం చేయగలవు.

[ప్రాక్సీ ప్యాట్రన్‌ల గురించి మరింత](https://blog.openzeppelin.com/proxy-patterns/).

### అప్‌గ్రేడ్ మెకానిజం #4: వ్యూహం ప్యాట్రన్ {#strategy-pattern}

ఈ సాంకేతికత [వ్యూహం ప్యాట్రన్](https://en.wikipedia.org/wiki/Strategy_pattern) ద్వారా ప్రభావితమైంది, ఇది నిర్దిష్ట లక్షణాలను అమలు చేయడానికి ఇతర ప్రోగ్రామ్‌లతో ఇంటర్‌ఫేస్ చేసే సాఫ్ట్‌వేర్ ప్రోగ్రామ్‌లను సృష్టించడాన్ని ప్రోత్సహిస్తుంది. ఎథీరియం డెవలప్‌మెంట్‌కు వ్యూహం ప్యాట్రన్‌ను వర్తింపజేయడం అంటే ఇతర కాంట్రాక్ట్‌ల నుండి ఫంక్షన్‌లను కాల్ చేసే స్మార్ట్ కాంట్రాక్ట్‌ను నిర్మించడం.

ఈ సందర్భంలో ప్రధాన కాంట్రాక్ట్ ప్రధాన వ్యాపార లాజిక్‌ను కలిగి ఉంటుంది, కానీ నిర్దిష్ట ఫంక్షన్‌లను అమలు చేయడానికి ఇతర స్మార్ట్ కాంట్రాక్ట్‌లతో ("శాటిలైట్ కాంట్రాక్ట్‌లు") ఇంటర్‌ఫేస్ చేస్తుంది. ఈ ప్రధాన కాంట్రాక్ట్ ప్రతి శాటిలైట్ కాంట్రాక్ట్ కోసం చిరునామాను కూడా నిల్వ చేస్తుంది మరియు శాటిలైట్ కాంట్రాక్ట్ యొక్క విభిన్న అమలుల మధ్య మారవచ్చు.

మీరు కొత్త శాటిలైట్ కాంట్రాక్ట్‌ను నిర్మించవచ్చు మరియు కొత్త చిరునామాతో ప్రధాన కాంట్రాక్ట్‌ను కాన్ఫిగర్ చేయవచ్చు. ఇది స్మార్ట్ కాంట్రాక్ట్ కోసం _వ్యూహాలను_ మార్చడానికి (అంటే, కొత్త లాజిక్‌ను అమలు చేయడానికి) మిమ్మల్ని అనుమతిస్తుంది.

ఇంతకు ముందు చర్చించిన ప్రాక్సీ ప్యాట్రన్‌ను పోలి ఉన్నప్పటికీ, వ్యూహం ప్యాట్రన్ భిన్నంగా ఉంటుంది ఎందుకంటే వినియోగదారులు ఇంటరాక్ట్ అయ్యే ప్రధాన కాంట్రాక్ట్ వ్యాపార లాజిక్‌ను కలిగి ఉంటుంది. ఈ ప్యాట్రన్‌ను ఉపయోగించడం వలన ప్రధాన మౌలిక సదుపాయాలను ప్రభావితం చేయకుండా స్మార్ట్ కాంట్రాక్ట్‌కు పరిమిత మార్పులను ప్రవేశపెట్టే అవకాశం మీకు లభిస్తుంది.

ప్రధాన లోపం ఏమిటంటే, ఈ ప్యాట్రన్ ఎక్కువగా చిన్న అప్‌గ్రేడ్‌లను రూపొందించడానికి ఉపయోగపడుతుంది. అలాగే, ప్రధాన కాంట్రాక్ట్ రాజీపడితే (ఉదా., హ్యాక్ ద్వారా), మీరు ఈ అప్‌గ్రేడ్ పద్ధతిని ఉపయోగించలేరు.

### అప్‌గ్రేడ్ మెకానిజం #5: డైమండ్ ప్యాట్రన్ {#diamond-pattern}

డైమండ్ ప్యాట్రన్‌ను ప్రాక్సీ ప్యాట్రన్‌పై మెరుగుదలగా పరిగణించవచ్చు. డైమండ్ ప్యాట్రన్‌లు ప్రాక్సీ ప్యాట్రన్‌ల నుండి భిన్నంగా ఉంటాయి ఎందుకంటే డైమండ్ ప్రతినిధి కాంట్రాక్ట్ ఒకటి కంటే ఎక్కువ లాజిక్ కాంట్రాక్ట్‌లకు ఫంక్షన్ కాల్‌లను ప్రతినిధి చేయగలదు.

డైమండ్ ప్యాట్రన్‌లోని లాజిక్ కాంట్రాక్ట్‌లను _ఫేసెట్స్_ అని పిలుస్తారు. డైమండ్ ప్యాట్రన్ పని చేయడానికి, మీరు ప్రతినిధి కాంట్రాక్ట్‌లో [ఫంక్షన్ సెలెక్టర్‌లను](https://docs.soliditylang.org/en/latest/abi-spec.html#function-selector) విభిన్న ఫేసెట్ చిరునామాలకు మ్యాప్ చేసే మ్యాపింగ్‌ను సృష్టించాలి.

వినియోగదారు ఫంక్షన్ కాల్ చేసినప్పుడు, ఆ ఫంక్షన్‌ను అమలు చేయడానికి బాధ్యత వహించే ఫేసెట్‌ను కనుగొనడానికి ప్రతినిధి కాంట్రాక్ట్ మ్యాపింగ్‌ను తనిఖీ చేస్తుంది. అప్పుడు అది `delegatecall`ని (ఫాల్‌బ్యాక్ ఫంక్షన్‌ని ఉపయోగించి) ప్రారంభిస్తుంది మరియు తగిన లాజిక్ కాంట్రాక్ట్‌కు కాల్‌ను దారి మళ్లిస్తుంది.

సాంప్రదాయ ప్రాక్సీ అప్‌గ్రేడ్ ప్యాట్రన్‌ల కంటే డైమండ్ అప్‌గ్రేడ్ ప్యాట్రన్ కొన్ని ప్రయోజనాలను కలిగి ఉంది:

1. మొత్తం కోడ్‌ను మార్చకుండా కాంట్రాక్ట్‌లో చిన్న భాగాన్ని అప్‌గ్రేడ్ చేయడానికి ఇది మిమ్మల్ని అనుమతిస్తుంది. అప్‌గ్రేడ్‌ల కోసం ప్రాక్సీ ప్యాట్రన్‌ను ఉపయోగించడానికి చిన్న అప్‌గ్రేడ్‌ల కోసం కూడా పూర్తిగా కొత్త లాజిక్ కాంట్రాక్ట్‌ను సృష్టించడం అవసరం.

2. అన్ని స్మార్ట్ కాంట్రాక్ట్‌లు (ప్రాక్సీ ప్యాట్రన్‌లలో ఉపయోగించే లాజిక్ కాంట్రాక్ట్‌లతో సహా) 24KB పరిమాణ పరిమితిని కలిగి ఉంటాయి, ఇది ఒక పరిమితి కావచ్చు—ముఖ్యంగా మరిన్ని ఫంక్షన్‌లు అవసరమయ్యే సంక్లిష్ట కాంట్రాక్ట్‌ల కోసం. బహుళ లాజిక్ కాంట్రాక్ట్‌లలో ఫంక్షన్‌లను విభజించడం ద్వారా ఈ సమస్యను పరిష్కరించడం డైమండ్ ప్యాట్రన్ సులభతరం చేస్తుంది.

3. ప్రాక్సీ ప్యాట్రన్‌లు యాక్సెస్ నియంత్రణలకు క్యాచ్-ఆల్ విధానాన్ని అవలంబిస్తాయి. అప్‌గ్రేడ్ ఫంక్షన్‌లకు యాక్సెస్ ఉన్న ఎంటిటీ _మొత్తం_ కాంట్రాక్ట్‌ను మార్చగలదు. కానీ డైమండ్ ప్యాట్రన్ మాడ్యులర్ అనుమతుల విధానాన్ని ప్రారంభిస్తుంది, ఇక్కడ మీరు స్మార్ట్ కాంట్రాక్ట్‌లోని నిర్దిష్ట ఫంక్షన్‌లను అప్‌గ్రేడ్ చేయడానికి ఎంటిటీలను పరిమితం చేయవచ్చు.

[డైమండ్ ప్యాట్రన్ గురించి మరింత](https://eip2535diamonds.substack.com/p/introduction-to-the-diamond-standard?s=w).

## స్మార్ట్ కాంట్రాక్ట్‌లను అప్‌గ్రేడ్ చేయడం వల్ల కలిగే లాభాలు మరియు నష్టాలు {#pros-and-cons-of-upgrading-smart-contracts}

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

## స్మార్ట్ కాంట్రాక్ట్‌లను అప్‌గ్రేడ్ చేయడానికి పరిగణనలు {#considerations-for-upgrading-smart-contracts}

1. అనధికార స్మార్ట్ కాంట్రాక్ట్ అప్‌గ్రేడ్‌లను నిరోధించడానికి సురక్షిత యాక్సెస్ నియంత్రణ/అధికార యంత్రాంగాలను ఉపయోగించండి, ప్రత్యేకించి ప్రాక్సీ ప్యాట్రన్‌లు, వ్యూహం ప్యాట్రన్‌లు లేదా డేటా విభజనను ఉపయోగిస్తుంటే. కాంట్రాక్ట్ యజమాని మాత్రమే కాల్ చేసే విధంగా అప్‌గ్రేడ్ ఫంక్షన్‌కు యాక్సెస్‌ను పరిమితం చేయడం ఒక ఉదాహరణ.

2. స్మార్ట్ కాంట్రాక్ట్‌లను అప్‌గ్రేడ్ చేయడం ఒక సంక్లిష్టమైన చర్య మరియు దుర్బలత్వాల పరిచయాన్ని నిరోధించడానికి అధిక స్థాయి శ్రద్ధ అవసరం.

3. అప్‌గ్రేడ్‌లను అమలు చేసే ప్రక్రియను వికేంద్రీకరించడం ద్వారా విశ్వాస ఉపకల్పనలను తగ్గించండి. సాధ్యమయ్యే వ్యూహాలలో అప్‌గ్రేడ్‌లను నియంత్రించడానికి [మల్టీ-సిగ్ వాలెట్ కాంట్రాక్ట్](/developers/docs/smart-contracts/#multisig)ని ఉపయోగించడం లేదా అప్‌గ్రేడ్‌ను ఆమోదించడానికి [DAO సభ్యులు](/dao/) ఓటు వేయడం అవసరం.

4. కాంట్రాక్ట్‌లను అప్‌గ్రేడ్ చేయడంలో ఉన్న ఖర్చుల గురించి తెలుసుకోండి. ఉదాహరణకు, కాంట్రాక్ట్ మైగ్రేషన్ సమయంలో పాత కాంట్రాక్ట్ నుండి కొత్త కాంట్రాక్ట్‌కు స్థితిని (ఉదా., వినియోగదారు బ్యాలెన్స్‌లు) కాపీ చేయడానికి ఒకటి కంటే ఎక్కువ లావాదేవీలు అవసరం కావచ్చు, అంటే ఎక్కువ గ్యాస్ ఫీజులు.

5. వినియోగదారులను రక్షించడానికి **టైమ్‌లాక్‌లను** అమలు చేయడాన్ని పరిగణించండి. టైమ్‌లాక్ అనేది సిస్టమ్‌లో మార్పులపై విధించబడిన ఆలస్యాన్ని సూచిస్తుంది. అప్‌గ్రేడ్‌లను నియంత్రించడానికి టైమ్‌లాక్‌లను మల్టీ-సిగ్ పరిపాలన సిస్టమ్‌తో కలపవచ్చు: ప్రతిపాదిత చర్య అవసరమైన ఆమోద థ్రెషోల్డ్‌ను చేరుకుంటే, ముందుగా నిర్వచించిన ఆలస్యం వ్యవధి ముగిసే వరకు అది అమలు చేయబడదు.

ప్రతిపాదిత మార్పుతో (ఉదా., లాజిక్ అప్‌గ్రేడ్ లేదా కొత్త ఫీజు స్కీమ్‌లు) వారు ఏకీభవించకపోతే సిస్టమ్ నుండి నిష్క్రమణ చేయడానికి టైమ్‌లాక్‌లు వినియోగదారులకు కొంత సమయం ఇస్తాయి. టైమ్‌లాక్‌లు లేకుండా, ముందస్తు నోటీసు లేకుండా స్మార్ట్ కాంట్రాక్ట్‌లో ఏకపక్ష మార్పులను అమలు చేయకూడదని వినియోగదారులు డెవలపర్‌లను విశ్వసించాలి. ఇక్కడ లోపం ఏమిటంటే, టైమ్‌లాక్‌లు దుర్బలత్వాలను త్వరగా ప్యాచ్ చేసే సామర్థ్యాన్ని పరిమితం చేస్తాయి.

## వనరులు {#resources}

**ఓపెన్‌జెప్పెలిన్ అప్‌గ్రేడ్స్ ప్లగిన్‌లు - _అప్‌గ్రేడ్ చేయగల స్మార్ట్ కాంట్రాక్ట్‌లను డిప్లాయ్‌మెంట్ చేయడానికి మరియు భద్రపరచడానికి సాధనాల సూట్._**

- [GitHub](https://github.com/OpenZeppelin/openzeppelin-upgrades)
- [డాక్యుమెంటేషన్](https://docs.openzeppelin.com/upgrades)

## ట్యుటోరియల్స్ {#tutorials}

- ప్యాట్రిక్ కాలిన్స్ ద్వారా [మీ స్మార్ట్ కాంట్రాక్ట్‌లను అప్‌గ్రేడ్ చేయడం | యూట్యూబ్ ట్యుటోరియల్](https://www.youtube.com/watch?v=bdXJmWajZRY)
- ఆస్టిన్ గ్రిఫిత్ ద్వారా [ఎథీరియం స్మార్ట్ కాంట్రాక్ట్ మైగ్రేషన్ ట్యుటోరియల్](https://medium.com/coinmonks/ethereum-smart-contract-migration-13f6f12539bd)
- ప్రణేష్ ఎ.ఎస్ ద్వారా [స్మార్ట్ కాంట్రాక్ట్‌లను అప్‌గ్రేడ్ చేయడానికి UUPS ప్రాక్సీ ప్యాట్రన్‌ను ఉపయోగించడం](https://blog.logrocket.com/author/praneshas/)
- fangjun.eth ద్వారా [Web3 ట్యుటోరియల్: ఓపెన్‌జెప్పెలిన్ ఉపయోగించి అప్‌గ్రేడ్ చేయగల స్మార్ట్ కాంట్రాక్ట్ (ప్రాక్సీ) వ్రాయండి](https://dev.to/yakult/tutorial-write-upgradeable-smart-contract-proxy-contract-with-openzeppelin-1916)

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

- శాంటియాగో పల్లాడినో ద్వారా [స్మార్ట్ కాంట్రాక్ట్ అప్‌గ్రేడ్‌ల స్థితి](https://blog.openzeppelin.com/the-state-of-smart-contract-upgrades/)
- [Solidity స్మార్ట్ కాంట్రాక్ట్‌ను అప్‌గ్రేడ్ చేయడానికి బహుళ మార్గాలు](https://cryptomarketpool.com/multiple-ways-to-upgrade-a-solidity-smart-contract/) - క్రిప్టో మార్కెట్ పూల్ బ్లాగ్
- [తెలుసుకోండి: స్మార్ట్ కాంట్రాక్ట్‌లను అప్‌గ్రేడ్ చేయడం](https://docs.openzeppelin.com/learn/upgrading-smart-contracts) - ఓపెన్‌జెప్పెలిన్ డాక్స్
- నవీన్ సాహు ద్వారా [Solidity కాంట్రాక్ట్‌ల అప్‌గ్రేడబిలిటీ కోసం ప్రాక్సీ ప్యాట్రన్‌లు: పారదర్శక vs UUPS ప్రాక్సీలు](https://mirror.xyz/0xB38709B8198d147cc9Ff9C133838a044d78B064B/M7oTptQkBGXxox-tk9VJjL66E1V8BUF0GF79MMK4YG0)
- నిక్ మడ్జ్ ద్వారా [డైమండ్ అప్‌గ్రేడ్‌లు ఎలా పని చేస్తాయి](https://dev.to/mudgen/how-diamond-upgrades-work-417j)