முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்

EIP-1271: திறன் ஒப்பந்தக் கையொப்பங்களில் கையெழுத்திடுதல் மற்றும் சரிபார்த்தல்

eip-1271
திறன் ஒப்பந்தங்கள்
சரிபார்த்தல்
கையெழுத்திடுதல்
இடைநிலை
நாதன் எச். லியுங்
12 ஜனவரி, 2023
5 நிமிட வாசிப்பு

EIP-1271 (புதிய தாவலில் திறக்கப்படும்) தரநிலையானது திறன் ஒப்பந்தங்களைக் கையொப்பங்களைச் சரிபார்க்க அனுமதிக்கிறது.

இந்த வழிகாட்டியில், டிஜிட்டல் கையொப்பங்கள், EIP-1271 இன் பின்னணி மற்றும் Safe (புதிய தாவலில் திறக்கப்படும்) (முன்பு Gnosis Safe) பயன்படுத்தும் EIP-1271 இன் குறிப்பிட்ட செயலாக்கம் ஆகியவற்றின் கண்ணோட்டத்தை நாங்கள் வழங்குகிறோம். இவை அனைத்தும் சேர்ந்து, உங்கள் சொந்த ஒப்பந்தங்களில் EIP-1271 ஐச் செயல்படுத்துவதற்கான தொடக்கப் புள்ளியாகச் செயல்படலாம்.

கையொப்பம் என்றால் என்ன?

இந்தச் சூழலில், ஒரு கையொப்பம் (இன்னும் துல்லியமாக, ஒரு "டிஜிட்டல் கையொப்பம்") என்பது ஒரு செய்தி மற்றும் அந்தச் செய்தி ஒரு குறிப்பிட்ட நபர்/அனுப்புநர்/முகவரியிலிருந்து வந்தது என்பதற்கான ஒரு வகையான சான்று ஆகும்.

எடுத்துக்காட்டாக, ஒரு டிஜிட்டல் கையொப்பம் இப்படி இருக்கலாம்:

  1. செய்தி: "எனது எத்திரியம் பணப்பையைக் கொண்டு இந்த இணையதளத்தில் உள்நுழைய விரும்புகிறேன்."
  2. கையொப்பமிடுபவர்: எனது முகவரி 0x000…
  3. சான்று: 0x000… ஆகிய நான் தான் இந்த முழுச் செய்தியையும் உண்மையில் உருவாக்கினேன் என்பதற்கான சில சான்றுகள் இங்கே உள்ளன (இது பொதுவாக குறியாக்கவியல் சார்ந்ததாக இருக்கும்).

ஒரு டிஜிட்டல் கையொப்பம் என்பது "செய்தி" மற்றும் "கையொப்பம்" ஆகிய இரண்டையும் உள்ளடக்கியது என்பதைக் கவனத்தில் கொள்ள வேண்டியது அவசியம்.

ஏன்? எடுத்துக்காட்டாக, நீங்கள் என்னிடம் கையெழுத்திட ஒரு ஒப்பந்தத்தைக் கொடுத்தால், நான் கையொப்பப் பக்கத்தை மட்டும் வெட்டி, ஒப்பந்தத்தின் மற்ற பகுதிகள் இல்லாமல் எனது கையொப்பங்களை மட்டும் உங்களிடம் திருப்பிக் கொடுத்தால், அந்த ஒப்பந்தம் செல்லுபடியாகாது.

அதேபோல, தொடர்புடைய செய்தி இல்லாமல் டிஜிட்டல் கையொப்பத்திற்கு எந்த அர்த்தமும் இல்லை!

EIP-1271 ஏன் உள்ளது?

எத்திரியம் அடிப்படையிலான பிளாக்செயின்களில் பயன்படுத்துவதற்கான டிஜிட்டல் கையொப்பத்தை உருவாக்க, பொதுவாக வேறு யாருக்கும் தெரியாத ஒரு ரகசியத் தனிப்பட்ட திறவுகோல் உங்களுக்குத் தேவை. இதுவே உங்கள் கையொப்பத்தை உங்களுடையதாக மாற்றுகிறது (ரகசியத் திறவுகோல் தெரியாமல் வேறு எவராலும் அதே கையொப்பத்தை உருவாக்க முடியாது).

உங்கள் எத்திரியம் கணக்குடன் (அதாவது, உங்கள் வெளிப்புறமாகச் சொந்தமான கணக்கு/EOA) ஒரு தனிப்பட்ட திறவுகோல் இணைக்கப்பட்டுள்ளது, மேலும் ஒரு இணையதளம் அல்லது பரவலாக்கப்பட்ட செயலி (dapp) உங்களிடம் கையொப்பத்தைக் கேட்கும்போது (எ.கா., "எத்திரியம் மூலம் உள்நுழைக" என்பதற்கு) பொதுவாக இந்தத் தனிப்பட்ட திறவுகோல் தான் பயன்படுத்தப்படுகிறது.

ethers.js போன்ற மூன்றாம் தரப்பு நிரலகத்தைப் பயன்படுத்தி நீங்கள் உருவாக்கும் கையொப்பத்தை, உங்கள் தனிப்பட்ட திறவுகோலை அறியாமலேயே (புதிய தாவலில் திறக்கப்படும்) ஒரு செயலியால் சரிபார்க்க முடியும் (புதிய தாவலில் திறக்கப்படும்), மேலும் நீங்கள் தான் அந்தக் கையொப்பத்தை உருவாக்கினீர்கள் என்பதில் உறுதியாக இருக்க முடியும்.

உண்மையில், EOA டிஜிட்டல் கையொப்பங்கள் பொதுத் திறவுகோல் குறியாக்கவியலைப் பயன்படுத்துவதால், அவற்றை புறச்சங்கிலியில் உருவாக்கவும் சரிபார்க்கவும் முடியும்! எரிவாயு இல்லாத DAO வாக்குப்பதிவு இப்படித்தான் செயல்படுகிறது — சங்கிலிசார் வாக்குகளைச் சமர்ப்பிப்பதற்குப் பதிலாக, குறியாக்கவியல் நிரலகங்களைப் பயன்படுத்திப் புறச்சங்கிலியில் டிஜிட்டல் கையொப்பங்களை உருவாக்கிச் சரிபார்க்கலாம்.

EOA கணக்குகள் தனிப்பட்ட திறவுகோலைக் கொண்டிருந்தாலும், திறன் ஒப்பந்தக் கணக்குகளுக்கு எந்த வகையான தனிப்பட்ட அல்லது ரகசியத் திறவுகோலும் இல்லை (எனவே "எத்திரியம் மூலம் உள்நுழைக" போன்றவை திறன் ஒப்பந்தக் கணக்குகளுடன் இயல்பாகச் செயல்பட முடியாது).

EIP-1271 தீர்க்க முனையும் சிக்கல்: திறன் ஒப்பந்தத்தில் கையொப்பத்தில் இணைக்கக்கூடிய "ரகசியம்" எதுவும் இல்லை என்றால், திறன் ஒப்பந்தக் கையொப்பம் செல்லுபடியாகும் என்பதை நாம் எப்படிச் சொல்வது?

EIP-1271 எவ்வாறு செயல்படுகிறது?

செய்திகளில் கையொப்பமிடப் பயன்படுத்தக்கூடிய தனிப்பட்ட திறவுகோல்கள் திறன் ஒப்பந்தங்களில் இல்லை. எனவே ஒரு கையொப்பம் உண்மையானதா என்பதை நாம் எப்படிச் சொல்வது?

சரி, ஒரு யோசனை என்னவென்றால், ஒரு கையொப்பம் உண்மையானதா என்று நாம் திறன் ஒப்பந்தத்திடம் கேட்கலாம்!

EIP-1271 என்ன செய்கிறது என்றால், கொடுக்கப்பட்ட கையொப்பம் செல்லுபடியாகுமா என்று திறன் ஒப்பந்தத்திடம் "கேட்கும்" இந்த யோசனையைத் தரப்படுத்துகிறது.

EIP-1271 ஐச் செயல்படுத்தும் ஒரு ஒப்பந்தத்தில் isValidSignature என்ற செயல்பாடு இருக்க வேண்டும், அது ஒரு செய்தியையும் கையொப்பத்தையும் எடுத்துக்கொள்கிறது. ஒப்பந்தம் பின்னர் சில சரிபார்ப்பு தர்க்கங்களை இயக்கலாம் (விவரக்குறிப்பு இங்கே குறிப்பிட்ட எதையும் கட்டாயப்படுத்தாது) பின்னர் கையொப்பம் செல்லுபடியாகுமா இல்லையா என்பதைக் குறிக்கும் மதிப்பை வழங்கும்.

isValidSignature செல்லுபடியாகும் முடிவை வழங்கினால், அது ஒப்பந்தம் "ஆம், இந்த கையொப்பம் + செய்திக்கு நான் ஒப்புதல் அளிக்கிறேன்!" என்று சொல்வதற்குச் சமம்.

இடைமுகம்

EIP-1271 விவரக்குறிப்பில் உள்ள சரியான இடைமுகம் இங்கே உள்ளது (கீழே உள்ள _hash அளவுருவைப் பற்றிப் பேசுவோம், ஆனால் இப்போதைக்கு, அதைச் சரிபார்க்கப்படும் செய்தியாக நினைத்துக் கொள்ளுங்கள்):

EIP-1271 செயலாக்க எடுத்துக்காட்டு: Safe

ஒப்பந்தங்கள் isValidSignature ஐப் பல வழிகளில் செயல்படுத்தலாம் — விவரக்குறிப்பு சரியான செயலாக்கத்தைப் பற்றி அதிகம் கூறவில்லை.

EIP-1271 ஐச் செயல்படுத்தும் ஒரு குறிப்பிடத்தக்க ஒப்பந்தம் Safe (முன்பு Gnosis Safe) ஆகும்.

Safe இன் குறியீட்டில், கையொப்பங்களை இரண்டு வழிகளில் (புதிய தாவலில் திறக்கப்படும்) உருவாக்கிச் சரிபார்க்கும் வகையில் isValidSignature செயல்படுத்தப்பட்டுள்ளது (புதிய தாவலில் திறக்கப்படும்):

  1. சங்கிலிசார் செய்திகள்
    1. உருவாக்கம்: ஒரு safe உரிமையாளர் ஒரு செய்தியில் "கையெழுத்திட" ஒரு புதிய safe பரிவர்த்தனையை உருவாக்குகிறார், செய்தியைத் தரவாகப் பரிவர்த்தனைக்குள் அனுப்புகிறார். பல்கையெழுத்து வரம்பை அடையப் போதுமான உரிமையாளர்கள் பரிவர்த்தனையில் கையெழுத்திட்டவுடன், பரிவர்த்தனை ஒளிபரப்பப்பட்டு இயக்கப்படும். பரிவர்த்தனையில், (signMessage(bytes calldata _data)) என்ற safe செயல்பாடு உள்ளது, இது "ஒப்புதல் அளிக்கப்பட்ட" செய்திகளின் பட்டியலில் செய்தியைச் சேர்க்கிறது.
    2. சரிபார்த்தல்: Safe ஒப்பந்தத்தில் isValidSignature ஐ அழைக்கவும், மேலும் சரிபார்க்க வேண்டிய செய்தியைச் செய்தி அளவுருவாகவும், கையொப்ப அளவுருவுக்கு ஒரு வெற்று மதிப்பையும் (புதிய தாவலில் திறக்கப்படும்) (அதாவது, 0x) அனுப்பவும். கையொப்ப அளவுரு காலியாக இருப்பதை Safe பார்க்கும், மேலும் கையொப்பத்தைக் குறியாக்கவியல் ரீதியாகச் சரிபார்ப்பதற்குப் பதிலாக, "ஒப்புதல் அளிக்கப்பட்ட" செய்திகளின் பட்டியலில் செய்தி உள்ளதா என்பதைச் சரிபார்க்க அது தெரிந்துகொள்ளும்.
  2. புறச்சங்கிலி செய்திகள்:
    1. உருவாக்கம்: ஒரு safe உரிமையாளர் புறச்சங்கிலியில் ஒரு செய்தியை உருவாக்குகிறார், பின்னர் பல்கையெழுத்து ஒப்புதல் வரம்பைக் கடக்கப் போதுமான கையொப்பங்கள் கிடைக்கும் வரை மற்ற safe உரிமையாளர்களைச் செய்தியில் தனித்தனியாகக் கையெழுத்திடச் செய்கிறார்.
    2. சரிபார்த்தல்: isValidSignature ஐ அழைக்கவும். செய்தி அளவுருவில், சரிபார்க்க வேண்டிய செய்தியை அனுப்பவும். கையொப்ப அளவுருவில், ஒவ்வொரு safe உரிமையாளரின் தனிப்பட்ட கையொப்பங்களையும் ஒன்றோடொன்று இணைத்து அனுப்பவும். வரம்பைப் பூர்த்தி செய்யப் போதுமான கையொப்பங்கள் உள்ளனவா மற்றும் ஒவ்வொரு கையொப்பமும் செல்லுபடியாகுமா என்பதை Safe சரிபார்க்கும். அப்படியானால், வெற்றிகரமான கையொப்பச் சரிபார்ப்பைக் குறிக்கும் மதிப்பை அது வழங்கும்.

_hash அளவுரு என்றால் என்ன? முழுச் செய்தியையும் ஏன் அனுப்பக்கூடாது?

EIP-1271 இடைமுகத்தில் (புதிய தாவலில் திறக்கப்படும்) உள்ள isValidSignature செயல்பாடு செய்தியை எடுத்துக்கொள்ளாமல், அதற்குப் பதிலாக _hash அளவுருவை எடுத்துக்கொள்வதை நீங்கள் கவனித்திருக்கலாம். இதன் பொருள் என்னவென்றால், முழுமையான தன்னிச்சையான நீளச் செய்தியை isValidSignature க்கு அனுப்புவதற்குப் பதிலாக, செய்தியின் 32-பைட் ஹாஷை (பொதுவாக keccak256) அனுப்புகிறோம்.

அழைப்புத் தரவின் ஒவ்வொரு பைட்டும் — அதாவது, திறன் ஒப்பந்தச் செயல்பாட்டிற்கு அனுப்பப்படும் செயல்பாட்டு அளவுருத் தரவு — 16 எரிவாயு செலவாகும் (பூஜ்ஜிய பைட்டாக இருந்தால் 4 எரிவாயு) (புதிய தாவலில் திறக்கப்படும்), எனவே செய்தி நீளமாக இருந்தால் இது நிறைய எரிவாயுவைச் சேமிக்கலாம்.

முந்தைய EIP-1271 விவரக்குறிப்புகள்

நடைமுறையில் உள்ள EIP-1271 விவரக்குறிப்புகளில் isValidSignature செயல்பாடு உள்ளது, அதன் முதல் அளவுரு bytes வகையாகவும் (நிலையான நீளமுள்ள bytes32 க்குப் பதிலாகத் தன்னிச்சையான நீளம்) மற்றும் அளவுருவின் பெயர் message ஆகவும் இருக்கும். இது EIP-1271 தரநிலையின் பழைய பதிப்பாகும் (புதிய தாவலில் திறக்கப்படும்).

எனது சொந்த ஒப்பந்தங்களில் EIP-1271 எவ்வாறு செயல்படுத்தப்பட வேண்டும்?

விவரக்குறிப்பு இங்கே மிகவும் திறந்த முடிவைக் கொண்டுள்ளது. Safe செயலாக்கத்தில் சில நல்ல யோசனைகள் உள்ளன:

  • ஒப்பந்தத்தின் "உரிமையாளரிடமிருந்து" வரும் EOA கையொப்பங்களைச் செல்லுபடியாகும் எனக் கருதலாம்.
  • ஒப்புதல் அளிக்கப்பட்ட செய்திகளின் பட்டியலை நீங்கள் சேமித்து வைத்து, அவற்றை மட்டுமே செல்லுபடியாகும் எனக் கருதலாம்.

முடிவில், ஒப்பந்த உருவாக்குநராக இது உங்களைப் பொறுத்தது!

முடிவுரை

EIP-1271 (புதிய தாவலில் திறக்கப்படும்) என்பது திறன் ஒப்பந்தங்களைக் கையொப்பங்களைச் சரிபார்க்க அனுமதிக்கும் ஒரு பல்துறைத் தரநிலையாகும். இது திறன் ஒப்பந்தங்கள் EOA-களைப் போலச் செயல்படுவதற்கான வழியைத் திறக்கிறது — எடுத்துக்காட்டாக, "எத்திரியம் மூலம் உள்நுழைக" என்பது திறன் ஒப்பந்தங்களுடன் செயல்படுவதற்கான வழியை வழங்குகிறது — மேலும் இதைப் பல வழிகளில் செயல்படுத்தலாம் (Safe கருத்தில் கொள்ள வேண்டிய ஒரு குறிப்பிடத்தக்க, சுவாரஸ்யமான செயலாக்கத்தைக் கொண்டுள்ளது).