EIP-1271: ஸ்மார்ட் ஒப்பந்த கையொப்பங்களில் கையொப்பமிடுதல் மற்றும் சரிபார்த்தல்
EIP-1271 (opens in a new tab) தரநிலையானது ஸ்மார்ட் ஒப்பந்தங்களை கையொப்பங்களைச் சரிபார்க்க அனுமதிக்கிறது.
இந்த வழிகாட்டியில், டிஜிட்டல் கையொப்பங்கள், EIP-1271 இன் பின்னணி மற்றும் Safe (opens in a new tab) (முன்பு Gnosis Safe) பயன்படுத்தும் EIP-1271 இன் குறிப்பிட்ட செயலாக்கம் பற்றிய கண்ணோட்டத்தை வழங்குகிறோம். இவை அனைத்தும் சேர்ந்து, உங்கள் சொந்த ஒப்பந்தங்களில் EIP-1271 ஐ செயல்படுத்துவதற்கான தொடக்கப் புள்ளியாகச் செயல்படும்.
கையொப்பம் என்றால் என்ன?
இந்தச் சூழலில், கையொப்பம் (இன்னும் துல்லியமாக, "டிஜிட்டல் கையொப்பம்") என்பது ஒரு செய்தி மற்றும் அந்தச் செய்தி ஒரு குறிப்பிட்ட நபர்/அனுப்புநர்/முகவரியிடமிருந்து வந்தது என்பதற்கான ஒரு வகையான சான்றாகும்.
எடுத்துக்காட்டாக, டிஜிட்டல் கையொப்பம் இப்படி இருக்கலாம்:
- செய்தி: "எனது Ethereum வாலட் மூலம் இந்த இணையதளத்தில் உள்நுழைய விரும்புகிறேன்."
- கையொப்பமிட்டவர்: எனது முகவரி
0x000… - சான்று:
0x000…ஆகிய நான் தான் இந்த முழுச் செய்தியையும் உருவாக்கினேன் என்பதற்கான சில சான்றுகள் இங்கே உள்ளன (இது பொதுவாக கிரிப்டோகிராஃபிக் தொடர்பானதாக இருக்கும்).
டிஜிட்டல் கையொப்பத்தில் "செய்தி" மற்றும் "கையொப்பம்" ஆகிய இரண்டும் அடங்கும் என்பதைக் கவனத்தில் கொள்ள வேண்டியது அவசியம்.
ஏன்? எடுத்துக்காட்டாக, நீங்கள் என்னிடம் கையொப்பமிட ஒரு ஒப்பந்தத்தைக் கொடுத்தால், நான் கையொப்பப் பக்கத்தை மட்டும் வெட்டிவிட்டு, ஒப்பந்தத்தின் மற்ற பகுதிகள் இல்லாமல் எனது கையொப்பங்களை மட்டும் உங்களிடம் திருப்பிக் கொடுத்தால், அந்த ஒப்பந்தம் செல்லுபடியாகாது.
அதேபோல, தொடர்புடைய செய்தி இல்லாமல் டிஜிட்டல் கையொப்பத்திற்கு எந்த அர்த்தமும் இல்லை!
EIP-1271 ஏன் உள்ளது?
Ethereum அடிப்படையிலான பிளாக்செயின்களில் பயன்படுத்துவதற்கான டிஜிட்டல் கையொப்பத்தை உருவாக்க, பொதுவாக வேறு யாருக்கும் தெரியாத ரகசிய தனிப்பட்ட விசை (private key) உங்களுக்குத் தேவை. இதுவே உங்கள் கையொப்பத்தை உங்களுடையதாக மாற்றுகிறது (ரகசிய விசை பற்றிய அறிவு இல்லாமல் வேறு எவராலும் அதே கையொப்பத்தை உருவாக்க முடியாது).
உங்கள் Ethereum கணக்குடன் (அதாவது, உங்கள் வெளிப்புறமாகச் சொந்தமான கணக்கு/EOA) ஒரு தனிப்பட்ட விசை இணைக்கப்பட்டுள்ளது, மேலும் ஒரு இணையதளம் அல்லது dapp உங்களிடம் கையொப்பத்தைக் கேட்கும்போது (எ.கா., "Ethereum மூலம் உள்நுழைக" என்பதற்கு) பொதுவாக இந்தத் தனிப்பட்ட விசைதான் பயன்படுத்தப்படுகிறது.
ethers.js போன்ற மூன்றாம் தரப்பு லைப்ரரியைப் பயன்படுத்தி நீங்கள் உருவாக்கும் கையொப்பத்தை (opens in a new tab) ஒரு செயலி உங்கள் தனிப்பட்ட விசை தெரியாமலேயே சரிபார்க்க முடியும் (opens in a new tab), மேலும் நீங்கள் தான் கையொப்பத்தை உருவாக்கினீர்கள் என்பதில் உறுதியாக இருக்க முடியும்.
உண்மையில், EOA டிஜிட்டல் கையொப்பங்கள் பொது-விசை கிரிப்டோகிராஃபியைப் பயன்படுத்துவதால், அவற்றை ஆஃப்-செயினில் (offchain) உருவாக்கி சரிபார்க்க முடியும்! கேஸ் இல்லாத DAO வாக்குப்பதிவு இப்படித்தான் செயல்படுகிறது — ஆன்-செயினில் (onchain) வாக்குகளைச் சமர்ப்பிப்பதற்குப் பதிலாக, கிரிப்டோகிராஃபிக் லைப்ரரிகளைப் பயன்படுத்தி ஆஃப்-செயினில் டிஜிட்டல் கையொப்பங்களை உருவாக்கி சரிபார்க்கலாம்.
EOA கணக்குகளில் தனிப்பட்ட விசை இருந்தாலும், ஸ்மார்ட் ஒப்பந்தக் கணக்குகளில் எந்த வகையான தனிப்பட்ட அல்லது ரகசிய விசையும் இல்லை (எனவே "Ethereum மூலம் உள்நுழைக" போன்றவை ஸ்மார்ட் ஒப்பந்தக் கணக்குகளுடன் இயல்பாகச் செயல்பட முடியாது).
EIP-1271 தீர்க்க முனையும் சிக்கல்: ஸ்மார்ட் ஒப்பந்தத்தில் கையொப்பத்தில் இணைக்கக்கூடிய "ரகசியம்" எதுவும் இல்லை என்றால், ஸ்மார்ட் ஒப்பந்த கையொப்பம் செல்லுபடியாகும் என்பதை நாம் எப்படிச் சொல்வது?
EIP-1271 எவ்வாறு செயல்படுகிறது?
செய்திகளில் கையொப்பமிடப் பயன்படுத்தக்கூடிய தனிப்பட்ட விசைகள் ஸ்மார்ட் ஒப்பந்தங்களில் இல்லை. அப்படியானால், ஒரு கையொப்பம் உண்மையானதா என்பதை நாம் எப்படிச் சொல்வது?
சரி, ஒரு யோசனை என்னவென்றால், ஒரு கையொப்பம் உண்மையானதா என்று ஸ்மார்ட் ஒப்பந்தத்திடம் நாம் கேட்கலாம்!
EIP-1271 என்ன செய்கிறது என்றால், கொடுக்கப்பட்ட கையொப்பம் செல்லுபடியாகுமா என்று ஸ்மார்ட் ஒப்பந்தத்திடம் "கேட்கும்" இந்த யோசனையைத் தரப்படுத்துகிறது.
EIP-1271 ஐச் செயல்படுத்தும் ஒப்பந்தத்தில் isValidSignature என்ற செயல்பாடு இருக்க வேண்டும், அது ஒரு செய்தியையும் கையொப்பத்தையும் எடுத்துக்கொள்கிறது. ஒப்பந்தம் பின்னர் சில சரிபார்ப்பு தர்க்கங்களை இயக்கலாம் (விவரக்குறிப்பு இங்கே குறிப்பிட்ட எதையும் கட்டாயப்படுத்தாது) பின்னர் கையொப்பம் செல்லுபடியாகுமா இல்லையா என்பதைக் குறிக்கும் மதிப்பை வழங்கும்.
If isValidSignature செல்லுபடியாகும் முடிவை வழங்கினால், அது ஒப்பந்தம் "ஆம், இந்த கையொப்பம் + செய்தியை நான் அங்கீகரிக்கிறேன்!" என்று சொல்வதற்குச் சமம்.
இடைமுகம்
EIP-1271 விவரக்குறிப்பில் உள்ள சரியான இடைமுகம் இங்கே உள்ளது (_hash அளவுருவைப் பற்றி கீழே பேசுவோம், ஆனால் இப்போதைக்கு, அதைச் சரிபார்க்கப்படும் செய்தியாக நினைத்துக் கொள்ளுங்கள்):
1pragma solidity ^0.5.0;2
3contract ERC1271 {4
5 // bytes4(keccak256("isValidSignature(bytes32,bytes)")6 bytes4 constant internal MAGICVALUE = 0x1626ba7e;7
8 /* *9 * @dev வழங்கப்பட்ட ஹாஷுக்கு வழங்கப்பட்ட கையொப்பம் செல்லுபடியாகுமா என்பதை வழங்க வேண்டும்10 * @param _hash கையொப்பமிடப்பட வேண்டிய தரவின் ஹாஷ்11 * @param _signature _hash உடன் தொடர்புடைய கையொப்ப பைட் வரிசை12 *13 * செயல்பாடு வெற்றியடையும் போது bytes4 மேஜிக் மதிப்பு 0x1626ba7e-ஐ கட்டாயம் வழங்க வேண்டும்.14 * நிலையை கட்டாயம் மாற்றக்கூடாது (solc < 0.5 க்கு STATICCALL, solc > 0.5 க்கு view modifier).15 * வெளிப்புற அழைப்புகளை கட்டாயம் அனுமதிக்க வேண்டும் */16 function isValidSignature(17 bytes32 _hash,18 bytes memory _signature)19 public20 view21 returns (bytes4 magicValue);22}எடுத்துக்காட்டு EIP-1271 செயலாக்கம்: Safe
ஒப்பந்தங்கள் isValidSignature ஐப் பல வழிகளில் செயல்படுத்தலாம் — சரியான செயலாக்கத்தைப் பற்றி விவரக்குறிப்பு அதிகம் கூறவில்லை.
EIP-1271 ஐச் செயல்படுத்தும் ஒரு குறிப்பிடத்தக்க ஒப்பந்தம் Safe (முன்பு Gnosis Safe) ஆகும்.
Safe இன் குறியீட்டில், isValidSignature செயல்படுத்தப்பட்டுள்ளது (opens in a new tab), இதனால் கையொப்பங்களை இரண்டு வழிகளில் (opens in a new tab) உருவாக்கி சரிபார்க்கலாம்:
- ஆன்-செயின் (Onchain) செய்திகள்
- உருவாக்கம்: ஒரு safe உரிமையாளர் ஒரு செய்தியில் "கையொப்பமிட" புதிய safe பரிவர்த்தனையை உருவாக்குகிறார், செய்தியைத் தரவாகப் பரிவர்த்தனைக்கு அனுப்புகிறார். மல்டிசிக் (multisig) வரம்பை அடையப் போதுமான உரிமையாளர்கள் பரிவர்த்தனையில் கையொப்பமிட்டவுடன், பரிவர்த்தனை ஒளிபரப்பப்பட்டு இயக்கப்படும். பரிவர்த்தனையில், (
signMessage(bytes calldata _data)) என்ற safe செயல்பாடு உள்ளது, இது "அங்கீகரிக்கப்பட்ட" செய்திகளின் பட்டியலில் செய்தியைச் சேர்க்கிறது. - சரிபார்ப்பு: Safe ஒப்பந்தத்தில்
isValidSignatureஐ அழைக்கவும், மேலும் சரிபார்க்க வேண்டிய செய்தியை செய்தி அளவுருவாகவும், கையொப்ப அளவுருவிற்கான வெற்று மதிப்பையும் (opens in a new tab) (அதாவது,0x) அனுப்பவும். கையொப்ப அளவுரு காலியாக இருப்பதை Safe பார்க்கும், மேலும் கையொப்பத்தைக் கிரிப்டோகிராஃபிக் முறையில் சரிபார்ப்பதற்குப் பதிலாக, "அங்கீகரிக்கப்பட்ட" செய்திகளின் பட்டியலில் செய்தி உள்ளதா என்பதைச் சரிபார்க்க அது தெரிந்துகொள்ளும்.
- உருவாக்கம்: ஒரு safe உரிமையாளர் ஒரு செய்தியில் "கையொப்பமிட" புதிய safe பரிவர்த்தனையை உருவாக்குகிறார், செய்தியைத் தரவாகப் பரிவர்த்தனைக்கு அனுப்புகிறார். மல்டிசிக் (multisig) வரம்பை அடையப் போதுமான உரிமையாளர்கள் பரிவர்த்தனையில் கையொப்பமிட்டவுடன், பரிவர்த்தனை ஒளிபரப்பப்பட்டு இயக்கப்படும். பரிவர்த்தனையில், (
- ஆஃப்-செயின் (Offchain) செய்திகள்:
- உருவாக்கம்: ஒரு safe உரிமையாளர் ஆஃப்-செயினில் ஒரு செய்தியை உருவாக்குகிறார், பின்னர் மல்டிசிக் ஒப்புதல் வரம்பைக் கடக்கப் போதுமான கையொப்பங்கள் கிடைக்கும் வரை மற்ற safe உரிமையாளர்களைச் செய்தியில் தனித்தனியாகக் கையொப்பமிடச் செய்கிறார்.
- சரிபார்ப்பு:
isValidSignatureஐ அழைக்கவும். செய்தி அளவுருவில், சரிபார்க்க வேண்டிய செய்தியை அனுப்பவும். கையொப்ப அளவுருவில், ஒவ்வொரு safe உரிமையாளரின் தனிப்பட்ட கையொப்பங்களையும் ஒன்றோடொன்று இணைத்து அனுப்பவும். வரம்பைப் பூர்த்தி செய்யப் போதுமான கையொப்பங்கள் உள்ளதா மற்றும் ஒவ்வொரு கையொப்பமும் செல்லுபடியாகுமா என்பதை Safe சரிபார்க்கும். அப்படியானால், வெற்றிகரமான கையொப்பச் சரிபார்ப்பைக் குறிக்கும் மதிப்பை அது வழங்கும்.
_hash அளவுரு என்றால் என்ன? முழுச் செய்தியையும் ஏன் அனுப்பக்கூடாது?
EIP-1271 இடைமுகத்தில் (opens in a new tab) உள்ள isValidSignature செயல்பாடு செய்தியை எடுத்துக்கொள்ளாமல், அதற்குப் பதிலாக _hash அளவுருவை எடுத்துக்கொள்வதை நீங்கள் கவனித்திருக்கலாம். இதன் அர்த்தம் என்னவென்றால், முழுமையான தன்னிச்சையான நீளச் செய்தியை isValidSignature க்கு அனுப்புவதற்குப் பதிலாக, செய்தியின் 32-பைட் ஹாஷை (பொதுவாக keccak256) அனுப்புகிறோம்.
கால்டேட்டாவின் (calldata) ஒவ்வொரு பைட்டும் — அதாவது, ஸ்மார்ட் ஒப்பந்தச் செயல்பாட்டிற்கு அனுப்பப்படும் செயல்பாட்டு அளவுருத் தரவு — 16 கேஸ் செலவாகும் (பூஜ்ஜிய பைட்டாக இருந்தால் 4 கேஸ்) (opens in a new tab), எனவே செய்தி நீளமாக இருந்தால் இது நிறைய கேஸைச் சேமிக்கும்.
முந்தைய EIP-1271 விவரக்குறிப்புகள்
bytes வகையின் முதல் அளவுருவுடன் (நிலையான நீளமுள்ள bytes32 க்குப் பதிலாக தன்னிச்சையான நீளம்) மற்றும் message என்ற அளவுருப் பெயருடன் isValidSignature செயல்பாட்டைக் கொண்ட EIP-1271 விவரக்குறிப்புகள் பயன்பாட்டில் உள்ளன. இது EIP-1271 தரநிலையின் பழைய பதிப்பாகும் (opens in a new tab).
எனது சொந்த ஒப்பந்தங்களில் EIP-1271 எவ்வாறு செயல்படுத்தப்பட வேண்டும்?
விவரக்குறிப்பு இங்கே மிகவும் திறந்த முடிவைக் கொண்டுள்ளது. Safe செயலாக்கத்தில் சில நல்ல யோசனைகள் உள்ளன:
- ஒப்பந்தத்தின் "உரிமையாளரிடமிருந்து" வரும் EOA கையொப்பங்களைச் செல்லுபடியாகும் என நீங்கள் கருதலாம்.
- அங்கீகரிக்கப்பட்ட செய்திகளின் பட்டியலை நீங்கள் சேமித்து வைத்து, அவற்றை மட்டுமே செல்லுபடியாகும் எனக் கருதலாம்.
முடிவில், ஒப்பந்த உருவாக்குநராக இது உங்களுடைய விருப்பம்!
முடிவுரை
EIP-1271 (opens in a new tab) என்பது ஸ்மார்ட் ஒப்பந்தங்களைக் கையொப்பங்களைச் சரிபார்க்க அனுமதிக்கும் ஒரு பல்துறைத் தரநிலையாகும். இது ஸ்மார்ட் ஒப்பந்தங்கள் EOA-களைப் போலச் செயல்படுவதற்கான வழியைத் திறக்கிறது — எடுத்துக்காட்டாக, ஸ்மார்ட் ஒப்பந்தங்களுடன் "Ethereum மூலம் உள்நுழைக" செயல்படுவதற்கான வழியை வழங்குகிறது — மேலும் இதை பல வழிகளில் செயல்படுத்தலாம் (Safe கருத்தில் கொள்ள வேண்டிய ஒரு முக்கியமற்ற, சுவாரஸ்யமான செயலாக்கத்தைக் கொண்டுள்ளது).
பக்கம் கடைசியாகப் புதுப்பிக்கப்பட்டது: 3 மார்ச், 2026