திறன் ஒப்பந்தங்கள் அறிமுகம்
திறன் ஒப்பந்தம் என்றால் என்ன?
ஒரு "திறன் ஒப்பந்தம்" என்பது எத்திரியம் தொகுதிச்சங்கிலியில் இயங்கும் ஒரு நிரலாகும். இது எத்திரியம் தொகுதிச்சங்கிலியில் ஒரு குறிப்பிட்ட முகவரியில் இருக்கும் குறியீடு (அதன் செயல்பாடுகள்) மற்றும் தரவுகளின் (அதன் நிலை) தொகுப்பாகும்.
திறன் ஒப்பந்தங்கள் ஒரு வகையான எத்திரியம் கணக்கு ஆகும். அதாவது அவை ஒரு இருப்பைக் கொண்டுள்ளன மற்றும் பரிவர்த்தனைகளின் இலக்காக இருக்கலாம். இருப்பினும் அவை ஒரு பயனரால் கட்டுப்படுத்தப்படுவதில்லை, மாறாக அவை பிணையத்தில் நிலைநிறுத்தப்படுகின்றன மற்றும் நிரலாக்கம் செய்யப்பட்டபடி இயங்குகின்றன. பயனர் கணக்குகள் திறன் ஒப்பந்தத்தில் வரையறுக்கப்பட்ட ஒரு செயல்பாட்டை இயக்கும் பரிவர்த்தனைகளைச் சமர்ப்பிப்பதன் மூலம் திறன் ஒப்பந்தத்துடன் தொடர்பு கொள்ளலாம். திறன் ஒப்பந்தங்கள், ஒரு வழக்கமான ஒப்பந்தத்தைப் போல விதிகளை வரையறுக்கலாம், மேலும் குறியீட்டின் மூலம் அவற்றை தானாகவே செயல்படுத்தலாம். திறன் ஒப்பந்தங்களை இயல்பாக நீக்க முடியாது, மேலும் அவற்றுடனான தொடர்புகள் மாற்ற முடியாதவை.
முன்நிபந்தனைகள்
நீங்கள் இப்போதுதான் தொடங்குகிறீர்கள் அல்லது குறைவான தொழில்நுட்ப அறிமுகத்தைத் தேடுகிறீர்கள் என்றால், எங்களின் திறன் ஒப்பந்தங்கள் அறிமுகத்தை பரிந்துரைக்கிறோம்.
திறன் ஒப்பந்தங்களின் உலகிற்குள் நுழைவதற்கு முன், கணக்குகள், பரிவர்த்தனைகள் மற்றும் எத்திரியம் மெய்நிகர் இயந்திரம் பற்றிப் படித்திருப்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்.
ஒரு டிஜிட்டல் விற்பனை இயந்திரம்
நிக் சபோ (புதிய தாவலில் திறக்கப்படும்) விவரித்தபடி, ஒரு திறன் ஒப்பந்தத்திற்கான சிறந்த உருவகம் ஒரு விற்பனை இயந்திரமாக இருக்கலாம். சரியான உள்ளீடுகளுடன், ஒரு குறிப்பிட்ட வெளியீடு உத்தரவாதம் அளிக்கப்படுகிறது.
ஒரு விற்பனை இயந்திரத்திலிருந்து சிற்றுண்டியைப் பெற:
பணம் + சிற்றுண்டி தேர்வு = சிற்றுண்டி வழங்கப்பட்டது
இந்த தர்க்கம் விற்பனை இயந்திரத்தில் நிரலாக்கம் செய்யப்பட்டுள்ளது.
ஒரு விற்பனை இயந்திரத்தைப் போலவே, ஒரு திறன் ஒப்பந்தத்திலும் தர்க்கம் நிரலாக்கம் செய்யப்பட்டுள்ளது. இந்த விற்பனை இயந்திரம் Solidity-யில் எழுதப்பட்ட ஒரு திறன் ஒப்பந்தமாக இருந்தால் எப்படி இருக்கும் என்பதற்கான எளிய உதாரணம் இங்கே:
pragma solidity 0.8.7;
contract VendingMachine {
// ஒப்பந்தத்தின் நிலை மாறிகளை அறிவிக்கவும்
address public owner;
mapping (address => uint) public cupcakeBalances;
// 'VendingMachine' ஒப்பந்தம் நிலைநிறுத்தப்படும்போது:
// 1. நிலைநிறுத்தும் முகவரியை ஒப்பந்தத்தின் உரிமையாளராக அமைக்கவும்
// 2. நிலைநிறுத்தப்பட்ட திறன் ஒப்பந்தத்தின் கப்கேக் இருப்பை 100 ஆக அமைக்கவும்
constructor() {
owner = msg.sender;
cupcakeBalances[address(this)] = 100;
}
// திறன் ஒப்பந்தத்தின் கப்கேக் இருப்பை அதிகரிக்க உரிமையாளரை அனுமதிக்கவும்
function refill(uint amount) public {
require(msg.sender == owner, "Only the owner can refill.");
cupcakeBalances[address(this)] += amount;
}
// கப்கேக்குகளை வாங்க எவரையும் அனுமதிக்கவும்
function purchase(uint amount) public payable {
require(msg.value >= amount * 1 ether, "You must pay at least 1 ETH per cupcake");
require(cupcakeBalances[address(this)] >= amount, "Not enough cupcakes in stock to complete this purchase");
cupcakeBalances[address(this)] -= amount;
cupcakeBalances[msg.sender] += amount;
}
}
ஒரு விற்பனை இயந்திரம் விற்பனையாளர் ஊழியரின் தேவையை எவ்வாறு நீக்குகிறதோ, அதேபோல திறன் ஒப்பந்தங்கள் பல தொழில்களில் இடைத்தரகர்களை மாற்ற முடியும்.
அனுமதியற்ற
யார் வேண்டுமானாலும் ஒரு திறன் ஒப்பந்தத்தை எழுதி அதை பிணையத்தில் நிலைநிறுத்தலாம். நீங்கள் ஒரு திறன் ஒப்பந்த மொழியில் குறியீடு எழுதுவது எப்படி என்பதைக் கற்றுக்கொள்ள வேண்டும், மேலும் உங்கள் ஒப்பந்தத்தை நிலைநிறுத்த போதுமான ETH வைத்திருக்க வேண்டும். ஒரு திறன் ஒப்பந்தத்தை நிலைநிறுத்துவது தொழில்நுட்ப ரீதியாக ஒரு பரிவர்த்தனையாகும், எனவே ஒரு எளிய ETH பரிமாற்றத்திற்கு நீங்கள் எரிவாயு செலுத்துவதைப் போலவே எரிவாயு செலுத்த வேண்டும். இருப்பினும், ஒப்பந்த நிலைநிறுத்தத்திற்கான எரிவாயு செலவுகள் மிக அதிகம்.
எத்திரியம் திறன் ஒப்பந்தங்களை எழுதுவதற்கு டெவலப்பர்களுக்கு ஏற்ற மொழிகளைக் கொண்டுள்ளது:
- Solidity
- Vyper
இருப்பினும், எத்திரியத்தின் மெய்நிகர் இயந்திரம் ஒப்பந்தத்தை விளக்கி சேமிக்க ஏதுவாக, அவை நிலைநிறுத்தப்படுவதற்கு முன்பு தொகுக்கப்பட (compiled) வேண்டும். தொகுத்தல் பற்றி மேலும் அறிய
ஒருங்கிணைக்கக்கூடிய தன்மை
திறன் ஒப்பந்தங்கள் எத்திரியத்தில் பொதுவானவை மற்றும் அவற்றை திறந்த API-களாகக் கருதலாம். அதாவது, சாத்தியமானவற்றை பெரிதும் விரிவுபடுத்த உங்கள் சொந்த திறன் ஒப்பந்தத்தில் பிற திறன் ஒப்பந்தங்களை நீங்கள் அழைக்கலாம். ஒப்பந்தங்கள் மற்ற ஒப்பந்தங்களை கூட நிலைநிறுத்த முடியும்.
திறன் ஒப்பந்த ஒருங்கிணைக்கக்கூடிய தன்மை பற்றி மேலும் அறிக.
வரம்புகள்
திறன் ஒப்பந்தங்களால் புறச்சங்கிலி மூலங்களிலிருந்து தரவைப் பெற முடியாது என்பதால், "நிஜ உலக" நிகழ்வுகள் பற்றிய தகவல்களை அவற்றால் மட்டுமே பெற முடியாது. அதாவது நிஜ உலகில் நடக்கும் நிகழ்வுகளுக்கு அவற்றால் பதிலளிக்க முடியாது. இது அவ்வாறுதான் வடிவமைக்கப்பட்டுள்ளது. வெளிப்புறத் தகவல்களை நம்பியிருப்பது ஒருமித்த கருத்தை ஆபத்தில் ஆழ்த்தலாம், இது பாதுகாப்பு மற்றும் பரவலாக்கத்திற்கு முக்கியமானது.
இருப்பினும், தொகுதிச்சங்கிலி பயன்பாடுகள் புறச்சங்கிலி தரவைப் பயன்படுத்த முடிவது முக்கியம். இதற்கான தீர்வு ஆரக்கிள்கள் (oracles) ஆகும், இவை புறச்சங்கிலி தரவை உட்கொண்டு திறன் ஒப்பந்தங்களுக்குக் கிடைக்கச் செய்யும் கருவிகளாகும்.
திறன் ஒப்பந்தங்களின் மற்றொரு வரம்பு அதிகபட்ச ஒப்பந்த அளவு ஆகும். ஒரு திறன் ஒப்பந்தம் அதிகபட்சம் 24KB ஆக இருக்கலாம் அல்லது அது எரிவாயு தீர்ந்துவிடும். தி டயமண்ட் பேட்டர்னைப் (The Diamond Pattern) (புதிய தாவலில் திறக்கப்படும்) பயன்படுத்துவதன் மூலம் இதைத் தவிர்க்கலாம்.
பல்கையெழுத்து ஒப்பந்தங்கள்
பல்கையெழுத்து (பல-கையொப்பம்) ஒப்பந்தங்கள் என்பவை ஒரு பரிவர்த்தனையைச் செயல்படுத்த பல செல்லுபடியாகும் கையொப்பங்கள் தேவைப்படும் திறன் ஒப்பந்தக் கணக்குகள் ஆகும். கணிசமான அளவு ஈதர் அல்லது பிற டோக்கன்களை வைத்திருக்கும் ஒப்பந்தங்களுக்கு ஒற்றை தோல்விப் புள்ளிகளைத் தவிர்க்க இது மிகவும் பயனுள்ளதாக இருக்கும். பல்கையெழுத்துகள் ஒப்பந்தச் செயலாக்கம் மற்றும் திறவுகோல் மேலாண்மைக்கான பொறுப்பை பல தரப்பினரிடையே பிரிக்கின்றன, மேலும் ஒரு தனிப்பட்ட திறவுகோல் இழப்பால் ஏற்படும் மாற்ற முடியாத நிதி இழப்பைத் தடுக்கின்றன. இந்தக் காரணங்களுக்காக, எளிய DAO ஆளுகைக்கு பல்கையெழுத்து ஒப்பந்தங்களைப் பயன்படுத்தலாம். பல்கையெழுத்துகள் செயல்பட, சாத்தியமான M ஏற்றுக்கொள்ளக்கூடிய கையொப்பங்களில் N கையொப்பங்கள் தேவை (இங்கு N ≤ M, மற்றும் M > 1). N = 3, M = 5 மற்றும் N = 4, M = 7 ஆகியவை பொதுவாகப் பயன்படுத்தப்படுகின்றன. 4/7 பல்கையெழுத்திற்கு சாத்தியமான ஏழு செல்லுபடியாகும் கையொப்பங்களில் நான்கு தேவை. அதாவது மூன்று கையொப்பங்கள் தொலைந்து போனாலும் நிதியை மீட்டெடுக்க முடியும். இந்த நிலையில், ஒப்பந்தம் செயல்பட பெரும்பான்மையான திறவுகோல் வைத்திருப்பவர்கள் ஒப்புக்கொண்டு கையொப்பமிட வேண்டும் என்பதையும் இது குறிக்கிறது.
திறன் ஒப்பந்த வளங்கள்
ஓப்பன்செப்பெலின் ஒப்பந்தங்கள் - பாதுகாப்பான திறன் ஒப்பந்த மேம்பாட்டிற்கான நூலகம்.
- openzeppelin.com/contracts/ (புதிய தாவலில் திறக்கப்படும்)
- GitHub (புதிய தாவலில் திறக்கப்படும்)
- சமூக மன்றம் (புதிய தாவலில் திறக்கப்படும்)
மேலும் படிக்க
- காயின்பேஸ்: திறன் ஒப்பந்தம் என்றால் என்ன? (புதிய தாவலில் திறக்கப்படும்)
- செயின்லிங்க்: திறன் ஒப்பந்தம் என்றால் என்ன? (புதிய தாவலில் திறக்கப்படும்)
- காணொளி: எளிமையாக விளக்கப்பட்டுள்ளது - திறன் ஒப்பந்தங்கள் (புதிய தாவலில் திறக்கப்படும்)
- Cyfrin Updraft: Web3 கற்றல் மற்றும் தணிக்கை தளம் (புதிய தாவலில் திறக்கப்படும்)
பயிற்சிகள்: எத்திரியத்தில் திறன் ஒப்பந்த கையொப்பங்கள் (EIP-1271)
- EIP-1271: திறன் ஒப்பந்த கையொப்பங்களில் கையொப்பமிடுதல் மற்றும் சரிபார்த்தல் – EIP-1271 எவ்வாறு திறன் ஒப்பந்தங்களை கையொப்பங்களைச் சரிபார்க்க அனுமதிக்கிறது, Safe செயலாக்கத்தின் வழிகாட்டுதலுடன்.