ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்துதல்
பக்கம் கடைசியாகப் புதுப்பிக்கப்பட்டது: 21 அக்டோபர், 2025
எத்தேரியமில் உள்ள ஸ்மார்ட் ஒப்பந்தங்கள் எத்தேரியம் மெய்நிகர் இயந்திரத்தில் (EVM) இயங்கும் தானாகச் செயல்படும் நிரல்களாகும். இந்த நிரல்கள் வடிவமைப்பிலேயே மாற்ற முடியாதவை (immutable), இது ஒப்பந்தம் பயன்படுத்தப்பட்டவுடன் வணிக தர்க்கத்தில் (business logic) எந்தவொரு புதுப்பிப்புகளையும் தடுக்கிறது.
ஸ்மார்ட் ஒப்பந்தங்களின் நம்பகத்தன்மை (trustlessness), பரவலாக்கம் மற்றும் பாதுகாப்பிற்கு மாற்ற முடியாத தன்மை அவசியமாக இருந்தாலும், சில சந்தர்ப்பங்களில் இது ஒரு குறைபாடாக இருக்கலாம். எடுத்துக்காட்டாக, மாற்ற முடியாத குறியீடு டெவலப்பர்கள் பாதிக்கப்படக்கூடிய ஒப்பந்தங்களைச் சரிசெய்வதை சாத்தியமற்றதாக்கலாம்.
இருப்பினும், ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்துவது குறித்த அதிகரித்த ஆராய்ச்சிகள் பல மேம்படுத்தல் முறைகளை (upgrade patterns) அறிமுகப்படுத்த வழிவகுத்துள்ளன. இந்த மேம்படுத்தல் முறைகள், வணிக தர்க்கத்தை வெவ்வேறு ஒப்பந்தங்களில் வைப்பதன் மூலம் டெவலப்பர்கள் ஸ்மார்ட் ஒப்பந்தங்களை (மாற்ற முடியாத தன்மையைப் பாதுகாக்கும் அதே வேளையில்) மேம்படுத்த உதவுகின்றன.
முன்நிபந்தனைகள்
உங்களுக்கு ஸ்மார்ட் ஒப்பந்தங்கள், ஸ்மார்ட் ஒப்பந்தத்தின் கட்டமைப்பு மற்றும் எத்தேரியம் மெய்நிகர் இயந்திரம் (EVM) பற்றி நல்ல புரிதல் இருக்க வேண்டும். இந்த வழிகாட்டி வாசகர்களுக்கு ஸ்மார்ட் ஒப்பந்தங்களை நிரலாக்கம் செய்வது பற்றிய புரிதல் இருப்பதாகவும் கருதுகிறது.
ஸ்மார்ட் ஒப்பந்த மேம்படுத்தல் என்றால் என்ன?
ஸ்மார்ட் ஒப்பந்த மேம்படுத்தல் என்பது ஒப்பந்தத்தின் நிலையைப் (state) பாதுகாக்கும் அதே வேளையில் ஸ்மார்ட் ஒப்பந்தத்தின் வணிக தர்க்கத்தை மாற்றுவதை உள்ளடக்குகிறது. மேம்படுத்தும் தன்மை (upgradeability) மற்றும் மாற்றக்கூடிய தன்மை (mutability) ஆகியவை ஒன்றல்ல என்பதைத் தெளிவுபடுத்துவது முக்கியம், குறிப்பாக ஸ்மார்ட் ஒப்பந்தங்களின் சூழலில்.
எத்தேரியம் நெட்வொர்க்கில் உள்ள ஒரு முகவரிக்கு பயன்படுத்தப்பட்ட நிரலை உங்களால் இன்னும் மாற்ற முடியாது. ஆனால் பயனர்கள் ஸ்மார்ட் ஒப்பந்தத்துடன் தொடர்பு கொள்ளும்போது செயல்படுத்தப்படும் குறியீட்டை நீங்கள் மாற்றலாம்.
இதை பின்வரும் முறைகள் மூலம் செய்யலாம்:
-
ஸ்மார்ட் ஒப்பந்தத்தின் பல பதிப்புகளை உருவாக்குதல் மற்றும் பழைய ஒப்பந்தத்திலிருந்து புதிய ஒப்பந்தத்தின் நிகழ்வுக்கு நிலையை (அதாவது தரவை) மாற்றுதல்.
-
வணிக தர்க்கம் மற்றும் நிலையைச் சேமிக்க தனித்தனி ஒப்பந்தங்களை உருவாக்குதல்.
-
மாற்ற முடியாத ப்ராக்ஸி ஒப்பந்தத்திலிருந்து மாற்றக்கூடிய தர்க்க ஒப்பந்தத்திற்கு செயல்பாட்டு அழைப்புகளை (function calls) வழங்க ப்ராக்ஸி முறைகளைப் பயன்படுத்துதல்.
-
குறிப்பிட்ட செயல்பாடுகளைச் செயல்படுத்த நெகிழ்வான செயற்கைக்கோள் ஒப்பந்தங்களுடன் (satellite contracts) இடைமுகமாகச் செயல்படும் மற்றும் அவற்றைச் சார்ந்திருக்கும் மாற்ற முடியாத முக்கிய ஒப்பந்தத்தை உருவாக்குதல்.
-
ப்ராக்ஸி ஒப்பந்தத்திலிருந்து தர்க்க ஒப்பந்தங்களுக்கு செயல்பாட்டு அழைப்புகளை வழங்க டயமண்ட் முறையைப் (diamond pattern) பயன்படுத்துதல்.
மேம்படுத்தல் வழிமுறை #1: ஒப்பந்த இடம்பெயர்வு
ஒப்பந்த இடம்பெயர்வு (Contract migration) என்பது பதிப்பாக்கத்தை (versioning) அடிப்படையாகக் கொண்டது—அதாவது ஒரே மென்பொருளின் தனித்துவமான நிலைகளை உருவாக்கி நிர்வகிக்கும் யோசனை. ஒப்பந்த இடம்பெயர்வு என்பது ஏற்கனவே உள்ள ஸ்மார்ட் ஒப்பந்தத்தின் புதிய நிகழ்வைப் பயன்படுத்துவதையும், சேமிப்பகம் மற்றும் நிலுவைகளை புதிய ஒப்பந்தத்திற்கு மாற்றுவதையும் உள்ளடக்குகிறது.
புதிதாகப் பயன்படுத்தப்பட்ட ஒப்பந்தம் காலியான சேமிப்பகத்தைக் கொண்டிருக்கும், இது பழைய ஒப்பந்தத்திலிருந்து தரவை மீட்டெடுக்கவும் புதிய செயலாக்கத்திற்கு எழுதவும் உங்களை அனுமதிக்கிறது. அதன் பிறகு, புதிய முகவரியைப் பிரதிபலிக்கும் வகையில் பழைய ஒப்பந்தத்துடன் தொடர்பு கொண்ட அனைத்து ஒப்பந்தங்களையும் நீங்கள் புதுப்பிக்க வேண்டும்.
ஒப்பந்த இடம்பெயர்வின் கடைசிப் படி, புதிய ஒப்பந்தத்தைப் பயன்படுத்த பயனர்களைச் சம்மதிக்க வைப்பதாகும். புதிய ஒப்பந்தப் பதிப்பு பயனர் நிலுவைகள் மற்றும் முகவரிகளைத் தக்க வைத்துக் கொள்ளும், இது மாற்ற முடியாத தன்மையைப் பாதுகாக்கிறது. இது டோக்கன் அடிப்படையிலான ஒப்பந்தமாக இருந்தால், பழைய ஒப்பந்தத்தை நிராகரித்து புதிய ஒப்பந்தத்தைப் பயன்படுத்த நீங்கள் பரிமாற்றங்களை (exchanges) தொடர்பு கொள்ள வேண்டும்.
பயனர் தொடர்புகளை உடைக்காமல் ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்துவதற்கு ஒப்பந்த இடம்பெயர்வு ஒப்பீட்டளவில் நேரடியான மற்றும் பாதுகாப்பான நடவடிக்கையாகும். இருப்பினும், பயனர் சேமிப்பகம் மற்றும் நிலுவைகளை புதிய ஒப்பந்தத்திற்கு கைமுறையாக மாற்றுவது அதிக நேரத்தை எடுத்துக்கொள்ளும் மற்றும் அதிக எரிவாயு (gas) செலவுகளை ஏற்படுத்தலாம்.
ஒப்பந்த இடம்பெயர்வு பற்றி மேலும். (opens in a new tab)
மேம்படுத்தல் வழிமுறை #2: தரவுப் பிரிப்பு
ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்துவதற்கான மற்றொரு முறை, வணிக தர்க்கம் மற்றும் தரவு சேமிப்பகத்தை தனித்தனி ஒப்பந்தங்களாகப் பிரிப்பதாகும். இதன் பொருள் பயனர்கள் தர்க்க ஒப்பந்தத்துடன் தொடர்பு கொள்கிறார்கள், அதே நேரத்தில் தரவு சேமிப்பக ஒப்பந்தத்தில் சேமிக்கப்படுகிறது.
பயனர்கள் பயன்பாட்டுடன் தொடர்பு கொள்ளும்போது செயல்படுத்தப்படும் குறியீட்டை தர்க்க ஒப்பந்தம் கொண்டுள்ளது. இது சேமிப்பக ஒப்பந்தத்தின் முகவரியையும் கொண்டுள்ளது மற்றும் தரவைப் பெறவும் அமைக்கவும் அதனுடன் தொடர்பு கொள்கிறது.
இதற்கிடையில், சேமிப்பக ஒப்பந்தம் பயனர் நிலுவைகள் மற்றும் முகவரிகள் போன்ற ஸ்மார்ட் ஒப்பந்தத்துடன் தொடர்புடைய நிலையைக் கொண்டுள்ளது. சேமிப்பக ஒப்பந்தம் தர்க்க ஒப்பந்தத்திற்குச் சொந்தமானது என்பதையும், பயன்படுத்தப்படும்போது பிந்தையதின் முகவரியுடன் கட்டமைக்கப்பட்டுள்ளது என்பதையும் நினைவில் கொள்க. இது அங்கீகரிக்கப்படாத ஒப்பந்தங்கள் சேமிப்பக ஒப்பந்தத்தை அழைப்பதையோ அல்லது அதன் தரவைப் புதுப்பிப்பதையோ தடுக்கிறது.
இயல்பாக, சேமிப்பக ஒப்பந்தம் மாற்ற முடியாதது—ஆனால் அது சுட்டிக்காட்டும் தர்க்க ஒப்பந்தத்தை புதிய செயலாக்கத்துடன் நீங்கள் மாற்றலாம். இது EVM இல் இயங்கும் குறியீட்டை மாற்றும், அதே நேரத்தில் சேமிப்பகம் மற்றும் நிலுவைகளை அப்படியே வைத்திருக்கும்.
இந்த மேம்படுத்தல் முறையைப் பயன்படுத்த, சேமிப்பக ஒப்பந்தத்தில் தர்க்க ஒப்பந்தத்தின் முகவரியைப் புதுப்பிக்க வேண்டும். முன்னர் விளக்கப்பட்ட காரணங்களுக்காக புதிய தர்க்க ஒப்பந்தத்தை சேமிப்பக ஒப்பந்தத்தின் முகவரியுடன் நீங்கள் கட்டமைக்க வேண்டும்.
ஒப்பந்த இடம்பெயர்வுடன் ஒப்பிடும்போது தரவுப் பிரிப்பு முறையைச் செயல்படுத்துவது எளிதானது என்று வாதிடலாம். இருப்பினும், தீங்கிழைக்கும் மேம்படுத்தல்களிலிருந்து ஸ்மார்ட் ஒப்பந்தங்களைப் பாதுகாக்க நீங்கள் பல ஒப்பந்தங்களை நிர்வகிக்க வேண்டும் மற்றும் சிக்கலான அங்கீகாரத் திட்டங்களைச் செயல்படுத்த வேண்டும்.
மேம்படுத்தல் வழிமுறை #3: ப்ராக்ஸி முறைகள்
வணிக தர்க்கம் மற்றும் தரவை தனித்தனி ஒப்பந்தங்களில் வைத்திருக்க ப்ராக்ஸி முறையும் தரவுப் பிரிப்பைப் பயன்படுத்துகிறது. இருப்பினும், ப்ராக்ஸி முறையில், சேமிப்பக ஒப்பந்தம் (ப்ராக்ஸி என்று அழைக்கப்படுகிறது) குறியீடு செயலாக்கத்தின் போது தர்க்க ஒப்பந்தத்தை அழைக்கிறது. இது தரவுப் பிரிப்பு முறையின் தலைகீழ் ஆகும், அங்கு தர்க்க ஒப்பந்தம் சேமிப்பக ஒப்பந்தத்தை அழைக்கிறது.
ப்ராக்ஸி முறையில் இதுதான் நடக்கிறது:
-
பயனர்கள் ப்ராக்ஸி ஒப்பந்தத்துடன் தொடர்பு கொள்கிறார்கள், இது தரவைச் சேமிக்கிறது, ஆனால் வணிக தர்க்கத்தைக் கொண்டிருக்கவில்லை.
-
ப்ராக்ஸி ஒப்பந்தம் தர்க்க ஒப்பந்தத்தின் முகவரியைச் சேமிக்கிறது மற்றும்
delegatecallசெயல்பாட்டைப் பயன்படுத்தி அனைத்து செயல்பாட்டு அழைப்புகளையும் தர்க்க ஒப்பந்தத்திற்கு (வணிக தர்க்கத்தைக் கொண்டுள்ளது) வழங்குகிறது. -
அழைப்பு தர்க்க ஒப்பந்தத்திற்கு அனுப்பப்பட்ட பிறகு, தர்க்க ஒப்பந்தத்திலிருந்து திரும்பிய தரவு மீட்டெடுக்கப்பட்டு பயனருக்குத் திருப்பித் தரப்படும்.
ப்ராக்ஸி முறைகளைப் பயன்படுத்த delegatecall செயல்பாட்டைப் பற்றிய புரிதல் தேவை. அடிப்படையில், delegatecall என்பது ஒரு ஒப்பந்தம் மற்றொரு ஒப்பந்தத்தை அழைக்க அனுமதிக்கும் ஒரு ஆப்கோட் (opcode) ஆகும், அதே நேரத்தில் உண்மையான குறியீடு செயலாக்கம் அழைக்கும் ஒப்பந்தத்தின் சூழலில் நடக்கிறது. ப்ராக்ஸி முறைகளில் delegatecall ஐப் பயன்படுத்துவதன் ஒரு உட்குறிப்பு என்னவென்றால், ப்ராக்ஸி ஒப்பந்தம் அதன் சேமிப்பகத்தில் படித்து எழுதுகிறது மற்றும் ஒரு உள் செயல்பாட்டை அழைப்பது போல தர்க்க ஒப்பந்தத்தில் சேமிக்கப்பட்ட தர்க்கத்தைச் செயல்படுத்துகிறது.
Solidity ஆவணத்திலிருந்து (opens in a new tab):
செய்தி அழைப்பின் ஒரு சிறப்பு மாறுபாடு உள்ளது, அதற்கு delegatecall என்று பெயர், இது இலக்கு முகவரியில் உள்ள குறியீடு அழைக்கும் ஒப்பந்தத்தின் சூழலில் (அதாவது முகவரியில்) செயல்படுத்தப்படுகிறது மற்றும்
msg.senderமற்றும்msg.valueஆகியவை அவற்றின் மதிப்புகளை மாற்றாது என்பதைத் தவிர செய்தி அழைப்பைப் போலவே இருக்கும். இதன் பொருள் ஒரு ஒப்பந்தம் இயக்க நேரத்தில் (runtime) வேறு முகவரியிலிருந்து குறியீட்டை மாறும் வகையில் ஏற்ற முடியும். சேமிப்பகம், தற்போதைய முகவரி மற்றும் இருப்பு ஆகியவை இன்னும் அழைக்கும் ஒப்பந்தத்தையே குறிக்கின்றன, குறியீடு மட்டுமே அழைக்கப்பட்ட முகவரியிலிருந்து எடுக்கப்படுகிறது.
ஒரு பயனர் ஒரு செயல்பாட்டை அழைக்கும் போதெல்லாம் delegatecall ஐ அழைக்க ப்ராக்ஸி ஒப்பந்தத்திற்குத் தெரியும், ஏனெனில் அதில் ஒரு fallback செயல்பாடு கட்டமைக்கப்பட்டுள்ளது. Solidity நிரலாக்கத்தில், ஒரு செயல்பாட்டு அழைப்பு ஒப்பந்தத்தில் குறிப்பிடப்பட்டுள்ள செயல்பாடுகளுடன் பொருந்தாதபோது fallback செயல்பாடு (opens in a new tab) செயல்படுத்தப்படுகிறது.
ப்ராக்ஸி முறையைச் செயல்பட வைக்க, ப்ராக்ஸி ஒப்பந்தம் ஆதரிக்காத செயல்பாட்டு அழைப்புகளை எவ்வாறு கையாள வேண்டும் என்பதைக் குறிப்பிடும் தனிப்பயன் ஃபால்பேக் (fallback) செயல்பாட்டை எழுத வேண்டும். இந்த வழக்கில், ப்ராக்ஸியின் ஃபால்பேக் செயல்பாடு ஒரு delegatecall ஐத் தொடங்கவும், பயனரின் கோரிக்கையை தற்போதைய தர்க்க ஒப்பந்தச் செயலாக்கத்திற்குத் திருப்பி விடவும் திட்டமிடப்பட்டுள்ளது.
ப்ராக்ஸி ஒப்பந்தம் இயல்பாகவே மாற்ற முடியாதது, ஆனால் புதுப்பிக்கப்பட்ட வணிக தர்க்கத்துடன் புதிய தர்க்க ஒப்பந்தங்களை உருவாக்க முடியும். மேம்படுத்தலைச் செய்வது என்பது ப்ராக்ஸி ஒப்பந்தத்தில் குறிப்பிடப்பட்டுள்ள தர்க்க ஒப்பந்தத்தின் முகவரியை மாற்றுவதாகும்.
ப்ராக்ஸி ஒப்பந்தத்தை புதிய தர்க்க ஒப்பந்தத்திற்குச் சுட்டிக்காட்டுவதன் மூலம், பயனர்கள் ப்ராக்ஸி ஒப்பந்தச் செயல்பாட்டை அழைக்கும்போது செயல்படுத்தப்படும் குறியீடு மாறுகிறது. பயனர்களைப் புதிய ஒப்பந்தத்துடன் தொடர்பு கொள்ளச் சொல்லாமலேயே ஒப்பந்தத்தின் தர்க்கத்தை மேம்படுத்த இது அனுமதிக்கிறது.
ப்ராக்ஸி முறைகள் ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்துவதற்கான ஒரு பிரபலமான முறையாகும், ஏனெனில் அவை ஒப்பந்த இடம்பெயர்வுடன் தொடர்புடைய சிரமங்களை நீக்குகின்றன. இருப்பினும், ப்ராக்ஸி முறைகளைப் பயன்படுத்துவது மிகவும் சிக்கலானது மற்றும் முறையற்ற முறையில் பயன்படுத்தப்பட்டால், செயல்பாட்டுத் தேர்வி மோதல்கள் (function selector clashes) (opens in a new tab) போன்ற முக்கியமான குறைபாடுகளை அறிமுகப்படுத்தலாம்.
ப்ராக்ஸி முறைகள் பற்றி மேலும் (opens in a new tab).
மேம்படுத்தல் வழிமுறை #4: உத்தி முறை
இந்த நுட்பம் உத்தி முறையால் (strategy pattern) (opens in a new tab) பாதிக்கப்படுகிறது, இது குறிப்பிட்ட அம்சங்களைச் செயல்படுத்த பிற நிரல்களுடன் இடைமுகமாகச் செயல்படும் மென்பொருள் நிரல்களை உருவாக்குவதை ஊக்குவிக்கிறது. எத்தேரியம் மேம்பாட்டிற்கு உத்தி முறையைப் பயன்படுத்துவது என்பது பிற ஒப்பந்தங்களிலிருந்து செயல்பாடுகளை அழைக்கும் ஸ்மார்ட் ஒப்பந்தத்தை உருவாக்குவதாகும்.
இந்த வழக்கில் உள்ள முக்கிய ஒப்பந்தம் முக்கிய வணிக தர்க்கத்தைக் கொண்டுள்ளது, ஆனால் சில செயல்பாடுகளைச் செயல்படுத்த பிற ஸ்மார்ட் ஒப்பந்தங்களுடன் ("செயற்கைக்கோள் ஒப்பந்தங்கள்") இடைமுகமாகச் செயல்படுகிறது. இந்த முக்கிய ஒப்பந்தம் ஒவ்வொரு செயற்கைக்கோள் ஒப்பந்தத்திற்கான முகவரியையும் சேமிக்கிறது மற்றும் செயற்கைக்கோள் ஒப்பந்தத்தின் வெவ்வேறு செயலாக்கங்களுக்கு இடையில் மாறலாம்.
நீங்கள் ஒரு புதிய செயற்கைக்கோள் ஒப்பந்தத்தை உருவாக்கலாம் மற்றும் புதிய முகவரியுடன் முக்கிய ஒப்பந்தத்தை உள்ளமைக்கலாம். இது ஸ்மார்ட் ஒப்பந்தத்திற்கான உத்திகளை (அதாவது புதிய தர்க்கத்தைச் செயல்படுத்துதல்) மாற்ற உங்களை அனுமதிக்கிறது.
முன்னர் விவாதிக்கப்பட்ட ப்ராக்ஸி முறையைப் போலவே இருந்தாலும், உத்தி முறை வேறுபட்டது, ஏனெனில் பயனர்கள் தொடர்பு கொள்ளும் முக்கிய ஒப்பந்தம் வணிக தர்க்கத்தைக் கொண்டுள்ளது. இந்த முறையைப் பயன்படுத்துவது முக்கிய உள்கட்டமைப்பைப் பாதிக்காமல் ஸ்மார்ட் ஒப்பந்தத்தில் வரையறுக்கப்பட்ட மாற்றங்களை அறிமுகப்படுத்துவதற்கான வாய்ப்பை வழங்குகிறது.
முக்கிய குறைபாடு என்னவென்றால், இந்த முறை பெரும்பாலும் சிறிய மேம்படுத்தல்களை வெளியிடுவதற்கு மட்டுமே பயனுள்ளதாக இருக்கும். மேலும், முக்கிய ஒப்பந்தம் சமரசம் செய்யப்பட்டால் (எ.கா., ஹேக் மூலம்), நீங்கள் இந்த மேம்படுத்தல் முறையைப் பயன்படுத்த முடியாது.
மேம்படுத்தல் வழிமுறை #5: டயமண்ட் முறை
டயமண்ட் முறையை ப்ராக்ஸி முறையின் மேம்பாடாகக் கருதலாம். டயமண்ட் முறைகள் ப்ராக்ஸி முறைகளிலிருந்து வேறுபடுகின்றன, ஏனெனில் டயமண்ட் ப்ராக்ஸி ஒப்பந்தம் ஒன்றுக்கு மேற்பட்ட தர்க்க ஒப்பந்தங்களுக்கு செயல்பாட்டு அழைப்புகளை வழங்க முடியும்.
டயமண்ட் முறையில் உள்ள தர்க்க ஒப்பந்தங்கள் முகப்புகள் (facets) என்று அழைக்கப்படுகின்றன. டயமண்ட் முறையைச் செயல்பட வைக்க, செயல்பாட்டுத் தேர்வாளர்களை (function selectors) (opens in a new tab) வெவ்வேறு முகப்பு முகவரிகளுக்கு வரைபடமாக்கும் ஒரு மேப்பிங்கை ப்ராக்ஸி ஒப்பந்தத்தில் நீங்கள் உருவாக்க வேண்டும்.
ஒரு பயனர் செயல்பாட்டு அழைப்பைச் செய்யும்போது, அந்தச் செயல்பாட்டைச் செயல்படுத்துவதற்குப் பொறுப்பான முகப்பைக் கண்டறிய ப்ராக்ஸி ஒப்பந்தம் மேப்பிங்கைச் சரிபார்க்கிறது. பின்னர் அது delegatecall ஐ (ஃபால்பேக் செயல்பாட்டைப் பயன்படுத்தி) அழைக்கிறது மற்றும் அழைப்பை பொருத்தமான தர்க்க ஒப்பந்தத்திற்குத் திருப்பி விடுகிறது.
டயமண்ட் மேம்படுத்தல் முறை பாரம்பரிய ப்ராக்ஸி மேம்படுத்தல் முறைகளை விட சில நன்மைகளைக் கொண்டுள்ளது:
-
அனைத்து குறியீட்டையும் மாற்றாமல் ஒப்பந்தத்தின் ஒரு சிறிய பகுதியை மேம்படுத்த இது உங்களை அனுமதிக்கிறது. மேம்படுத்தல்களுக்கு ப்ராக்ஸி முறையைப் பயன்படுத்துவதற்கு, சிறிய மேம்படுத்தல்களுக்குக் கூட முற்றிலும் புதிய தர்க்க ஒப்பந்தத்தை உருவாக்க வேண்டும்.
-
அனைத்து ஸ்மார்ட் ஒப்பந்தங்களும் (ப்ராக்ஸி முறைகளில் பயன்படுத்தப்படும் தர்க்க ஒப்பந்தங்கள் உட்பட) 24KB அளவு வரம்பைக் கொண்டுள்ளன, இது ஒரு வரம்பாக இருக்கலாம்—குறிப்பாக அதிக செயல்பாடுகள் தேவைப்படும் சிக்கலான ஒப்பந்தங்களுக்கு. பல தர்க்க ஒப்பந்தங்களில் செயல்பாடுகளைப் பிரிப்பதன் மூலம் இந்தச் சிக்கலைத் தீர்ப்பதை டயமண்ட் முறை எளிதாக்குகிறது.
-
ப்ராக்ஸி முறைகள் அணுகல் கட்டுப்பாடுகளுக்கு அனைத்தையும் உள்ளடக்கிய அணுகுமுறையைப் பின்பற்றுகின்றன. மேம்படுத்தல் செயல்பாடுகளுக்கான அணுகலைக் கொண்ட ஒரு நிறுவனம் முழு ஒப்பந்தத்தையும் மாற்ற முடியும். ஆனால் டயமண்ட் முறை ஒரு மட்டு அனுமதிகள் (modular permissions) அணுகுமுறையைச் செயல்படுத்துகிறது, அங்கு ஸ்மார்ட் ஒப்பந்தத்திற்குள் சில செயல்பாடுகளை மேம்படுத்துவதற்கு நிறுவனங்களை நீங்கள் கட்டுப்படுத்தலாம்.
டயமண்ட் முறை பற்றி மேலும் (opens in a new tab).
ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்துவதன் நன்மைகள் மற்றும் தீமைகள்
| நன்மைகள் | தீமைகள் |
|---|---|
| ஸ்மார்ட் ஒப்பந்த மேம்படுத்தல், பயன்படுத்தப்பட்ட பிந்தைய கட்டத்தில் கண்டறியப்பட்ட பாதிப்புகளைச் சரிசெய்வதை எளிதாக்கும். | ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்துவது குறியீடு மாற்ற முடியாத தன்மை என்ற கருத்தை மறுக்கிறது, இது பரவலாக்கம் மற்றும் பாதுகாப்பிற்கான தாக்கங்களைக் கொண்டுள்ளது. |
| பரவலாக்கப்பட்ட பயன்பாடுகளில் புதிய அம்சங்களைச் சேர்க்க டெவலப்பர்கள் தர்க்க மேம்படுத்தல்களைப் பயன்படுத்தலாம். | ஸ்மார்ட் ஒப்பந்தங்களை தன்னிச்சையாக மாற்ற மாட்டார்கள் என்று பயனர்கள் டெவலப்பர்களை நம்ப வேண்டும். |
| பிழைகளை விரைவாகச் சரிசெய்ய முடியும் என்பதால், ஸ்மார்ட் ஒப்பந்த மேம்படுத்தல்கள் இறுதிப் பயனர்களுக்கான பாதுகாப்பை மேம்படுத்தும். | ஸ்மார்ட் ஒப்பந்தங்களில் மேம்படுத்தல் செயல்பாட்டை நிரலாக்கம் செய்வது மற்றொரு சிக்கலான அடுக்கைச் சேர்க்கிறது மற்றும் முக்கியமான குறைபாடுகளின் சாத்தியத்தை அதிகரிக்கிறது. |
| ஒப்பந்த மேம்படுத்தல்கள் டெவலப்பர்களுக்கு வெவ்வேறு அம்சங்களைப் பரிசோதிக்கவும், காலப்போக்கில் dappகளை மேம்படுத்தவும் அதிக இடமளிக்கின்றன. | ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்துவதற்கான வாய்ப்பு, மேம்பாட்டு கட்டத்தில் உரிய கவனம் செலுத்தாமல் திட்டங்களை வேகமாகத் தொடங்க டெவலப்பர்களை ஊக்குவிக்கலாம். |
| ஸ்மார்ட் ஒப்பந்தங்களில் பாதுகாப்பற்ற அணுகல் கட்டுப்பாடு அல்லது மையப்படுத்தல் தீங்கிழைக்கும் நபர்கள் அங்கீகரிக்கப்படாத மேம்படுத்தல்களைச் செய்வதை எளிதாக்கும். |
ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்துவதற்கான பரிசீலனைகள்
-
அங்கீகரிக்கப்படாத ஸ்மார்ட் ஒப்பந்த மேம்படுத்தல்களைத் தடுக்க பாதுகாப்பான அணுகல் கட்டுப்பாடு/அங்கீகார வழிமுறைகளைப் பயன்படுத்தவும், குறிப்பாக ப்ராக்ஸி முறைகள், உத்தி முறைகள் அல்லது தரவுப் பிரிப்பைப் பயன்படுத்தினால். ஒப்பந்தத்தின் உரிமையாளர் மட்டுமே அதை அழைக்க முடியும் என்பது போல, மேம்படுத்தல் செயல்பாட்டிற்கான அணுகலைக் கட்டுப்படுத்துவது ஒரு எடுத்துக்காட்டு.
-
ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்துவது ஒரு சிக்கலான செயலாகும், மேலும் பாதிப்புகள் அறிமுகப்படுத்தப்படுவதைத் தடுக்க அதிக அளவிலான கவனம் தேவை.
-
மேம்படுத்தல்களைச் செயல்படுத்தும் செயல்முறையைப் பரவலாக்குவதன் மூலம் நம்பிக்கை அனுமானங்களைக் குறைக்கவும். சாத்தியமான உத்திகளில் மேம்படுத்தல்களைக் கட்டுப்படுத்த மல்டி-சிக் வாலட் ஒப்பந்தத்தைப் (multi-sig wallet contract) பயன்படுத்துவது அல்லது மேம்படுத்தலை அங்கீகரிக்க DAO இன் உறுப்பினர்கள் வாக்களிக்கக் கோருவது ஆகியவை அடங்கும்.
-
ஒப்பந்தங்களை மேம்படுத்துவதில் உள்ள செலவுகள் குறித்து விழிப்புடன் இருங்கள். எடுத்துக்காட்டாக, ஒப்பந்த இடம்பெயர்வின் போது பழைய ஒப்பந்தத்திலிருந்து புதிய ஒப்பந்தத்திற்கு நிலையை (எ.கா., பயனர் நிலுவைகள்) நகலெடுப்பதற்கு ஒன்றுக்கு மேற்பட்ட பரிவர்த்தனைகள் தேவைப்படலாம், அதாவது அதிக எரிவாயு கட்டணம்.
-
பயனர்களைப் பாதுகாக்க டைம்லாக்குகளை (timelocks) செயல்படுத்துவதைக் கவனியுங்கள். டைம்லாக் என்பது ஒரு அமைப்பில் ஏற்படும் மாற்றங்களில் செயல்படுத்தப்படும் தாமதத்தைக் குறிக்கிறது. மேம்படுத்தல்களைக் கட்டுப்படுத்த டைம்லாக்குகளை மல்டி-சிக் ஆளுமை அமைப்புடன் இணைக்கலாம்: முன்மொழியப்பட்ட நடவடிக்கை தேவையான ஒப்புதல் வரம்பை அடைந்தால், முன் வரையறுக்கப்பட்ட தாமதக் காலம் முடியும் வரை அது செயல்படுத்தப்படாது.
முன்மொழியப்பட்ட மாற்றத்துடன் (எ.கா., தர்க்க மேம்படுத்தல் அல்லது புதிய கட்டணத் திட்டங்கள்) அவர்கள் உடன்படவில்லை என்றால், கணினியிலிருந்து வெளியேற டைம்லாக்குகள் பயனர்களுக்குச் சிறிது நேரம் கொடுக்கின்றன. டைம்லாக்குகள் இல்லாமல், முன் அறிவிப்பின்றி ஸ்மார்ட் ஒப்பந்தத்தில் தன்னிச்சையான மாற்றங்களைச் செயல்படுத்த மாட்டார்கள் என்று பயனர்கள் டெவலப்பர்களை நம்ப வேண்டும். இங்குள்ள குறைபாடு என்னவென்றால், டைம்லாக்குகள் பாதிப்புகளை விரைவாகச் சரிசெய்யும் திறனைக் கட்டுப்படுத்துகின்றன.
வளங்கள்
OpenZeppelin Upgrades Plugins - மேம்படுத்தக்கூடிய ஸ்மார்ட் ஒப்பந்தங்களைப் பயன்படுத்துவதற்கும் பாதுகாப்பதற்கும் கருவிகளின் தொகுப்பு.
பயிற்சிகள்
- உங்கள் ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்துதல் | YouTube பயிற்சி (opens in a new tab) - Patrick Collins
- எத்தேரியம் ஸ்மார்ட் ஒப்பந்த இடம்பெயர்வு பயிற்சி (opens in a new tab) - Austin Griffith
- ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்த UUPS ப்ராக்ஸி முறையைப் பயன்படுத்துதல் (opens in a new tab) - Pranesh A.S
- Web3 பயிற்சி: OpenZeppelin ஐப் பயன்படுத்தி மேம்படுத்தக்கூடிய ஸ்மார்ட் ஒப்பந்தத்தை (ப்ராக்ஸி) எழுதுங்கள் (opens in a new tab) - fangjun.eth
மேலும் படிக்க
- ஸ்மார்ட் ஒப்பந்த மேம்படுத்தல்களின் நிலை (opens in a new tab) - Santiago Palladino
- Solidity ஸ்மார்ட் ஒப்பந்தத்தை மேம்படுத்த பல வழிகள் (opens in a new tab) - Crypto Market Pool வலைப்பதிவு
- கற்றுக்கொள்ளுங்கள்: ஸ்மார்ட் ஒப்பந்தங்களை மேம்படுத்துதல் (opens in a new tab) - OpenZeppelin ஆவணங்கள்
- Solidity ஒப்பந்தங்களின் மேம்படுத்தலுக்கான ப்ராக்ஸி முறைகள்: Transparent vs UUPS Proxies (opens in a new tab) - Naveen Sahu
- டயமண்ட் மேம்படுத்தல்கள் எவ்வாறு செயல்படுகின்றன (opens in a new tab) - Nick Mudge