டைப்ஸ்கிரிப்ட்டை பிளாக்செயின் தொழில்நுட்பத்துடன் ஒருங்கிணைப்பது பற்றிய ஆழமான பார்வை. வலுவான, பாதுகாப்பான மற்றும் பராமரிக்கக்கூடிய விநியோகிக்கப்பட்ட பயன்பாடுகள் மற்றும் ஸ்மார்ட் ஒப்பந்தங்களை உருவாக்க வகை பாதுகாப்பைப் பயன்படுத்துவது எப்படி என்பதை அறிக.
டைப்ஸ்கிரிப்ட் பிளாக்செயின் ஒருங்கிணைப்பு: விநியோகிக்கப்பட்ட லெட்ஜர் வகை பாதுகாப்பின் புதிய சகாப்தம்
பிளாக்செயின் உலகம் மாற்றமுடியாத தன்மை, வெளிப்படைத்தன்மை மற்றும் நம்பிக்கையற்ற தன்மை ஆகியவற்றின் கொள்கைகளில் நிறுவப்பட்டுள்ளது. அடிக்கோடிட்ட குறியீடு, பெரும்பாலும் ஒரு ஸ்மார்ட் ஒப்பந்தம் என குறிப்பிடப்படுகிறது, ஒரு டிஜிட்டல், சுய-செயல்படுத்தும் ஒப்பந்தமாக செயல்படுகிறது. விநியோகிக்கப்பட்ட லெட்ஜரில் பயன்படுத்தப்பட்டதும், இந்த குறியீடு பொதுவாக மாற்ற முடியாதது. இந்த நிரந்தரத்தன்மை தொழில்நுட்பத்தின் மிகப்பெரிய பலம் மற்றும் அதன் மிக முக்கியமான சவால். ஒரு சிறிய பிழை, தர்க்கத்தில் ஒரு சிறிய மேற்பார்வை, பேரழிவு தரும், மாற்ற முடியாத நிதி இழப்புகளுக்கும் மற்றும் நம்பிக்கையின் நிரந்தர மீறலுக்கும் வழிவகுக்கும்.
வரலாற்று ரீதியாக, இந்த ஸ்மார்ட் ஒப்பந்தங்களுக்கான பெரும்பாலான கருவிகள் மற்றும் இடைசெயல் அடுக்கு, குறிப்பாக Ethereum சுற்றுச்சூழல் அமைப்பில், வெண்ணிலா ஜாவாஸ்கிரிப்டைப் பயன்படுத்தி கட்டப்பட்டுள்ளது. ஜாவாஸ்கிரிப்டின் நெகிழ்வுத்தன்மை மற்றும் எங்கும் நிறைந்த தன்மை Web3 புரட்சியை ஊக்குவிக்க உதவியிருந்தாலும், அதன் டைனமிக் மற்றும் தளர்வாக தட்டச்சு செய்யப்பட்ட தன்மை ஒரு ஆபத்தான பொறுப்பாகும், அங்கு துல்லியம் மிக முக்கியமானது. ரன்டைம் பிழைகள், எதிர்பாராத வகை நிர்ப்பந்தங்கள் மற்றும் அமைதியான தோல்விகள் பாரம்பரிய வலை மேம்பாட்டில் சிறிய எரிச்சல்கள், ஆனால் பிளாக்செயினில் பல மில்லியன் டாலர் சுரண்டல்களாக மாறும்.
இங்குதான் டைப்ஸ்கிரிப்ட் படத்தில் நுழைகிறது. நிலையான வகைகளைச் சேர்க்கும் ஜாவாஸ்கிரிப்டின் ஒரு சூப்பர்செட்டாக, டைப்ஸ்கிரிப்ட் முழு பிளாக்செயின் மேம்பாட்டு அடுக்கிற்கும் ஒரு புதிய நிலை ஒழுக்கம், கணிப்பு மற்றும் பாதுகாப்பை கொண்டுவருகிறது. இது ஒரு டெவலப்பர் வசதி மட்டுமல்ல; இது மிகவும் வலுவான, பாதுகாப்பான மற்றும் பராமரிக்கக்கூடிய பரவலாக்கப்பட்ட அமைப்புகளை உருவாக்குவதற்கான ஒரு அடிப்படை மாற்றமாகும். இந்த கட்டுரை டைப்ஸ்கிரிப்ட் பிளாக்செயின் மேம்பாட்டை எவ்வாறு மாற்றுகிறது என்பதைப் பற்றிய விரிவான ஆய்வை வழங்குகிறது, ஸ்மார்ட் ஒப்பந்த இடைசெயல் அடுக்கிலிருந்து பயனர் எதிர்கொள்ளும் பரவலாக்கப்பட்ட பயன்பாடு (dApp) வரை வகை பாதுகாப்பை செயல்படுத்துகிறது.
பரவலாக்கப்பட்ட உலகில் ஏன் வகை பாதுகாப்பு முக்கியமானது
டைப்ஸ்கிரிப்டின் தாக்கத்தை முழுமையாகப் பாராட்ட, விநியோகிக்கப்பட்ட லெட்ஜர் மேம்பாட்டில் உள்ளார்ந்த தனித்துவமான அபாயங்களை நாம் முதலில் புரிந்து கொள்ள வேண்டும். ஒரு மையப்படுத்தப்பட்ட பயன்பாட்டைப் போலன்றி, ஒரு பிழை சரி செய்யப்பட்டு தரவுத்தளம் சரி செய்யப்படலாம், பொது பிளாக்செயினில் குறைபாடுள்ள ஸ்மார்ட் ஒப்பந்தம் ஒரு நிரந்தர பாதிப்பாகும்.
ஸ்மார்ட் ஒப்பந்த மேம்பாட்டின் அதிக பங்கு
"குறியீடு என்பது சட்டம்" என்ற சொற்றொடர் பிளாக்செயின் இடத்தில் ஒரு கவர்ச்சியான முழக்கம் மட்டுமல்ல; இது செயல்பாட்டு உண்மை. ஒரு ஸ்மார்ட் ஒப்பந்தத்தின் மரணதண்டனை இறுதியானது. அழைக்க வாடிக்கையாளர் ஆதரவு வரி இல்லை, பரிவர்த்தனையை மாற்றியமைக்க நிர்வாகி இல்லை. இந்த மன்னிக்க முடியாத சூழல் குறியீடு தரம் மற்றும் சரிபார்ப்பின் உயர்ந்த தரத்தை கோருகிறது. பாரம்பரிய மென்பொருள் சூழலில் மிகவும் குறைவான விளைவுகளை ஏற்படுத்தியிருக்கும் நுட்பமான தர்க்கரீதியான பிழைகளிலிருந்து வரும் ஆண்டுகளில் பொதுவான பாதிப்புகள் மில்லியன் கணக்கான டாலர் இழப்புக்கு வழிவகுத்தன.
- மாற்றமுடியாத ஆபத்து: பயன்படுத்தப்பட்டதும், தர்க்கம் கல்லில் அமைக்கப்படுகிறது. பிழையை சரிசெய்வதற்கு ஒரு புதிய ஒப்பந்தத்தை உருவாக்கி, அனைத்து நிலை மற்றும் பயனர்களையும் இடம்பெயரச் செய்யும் ஒரு சிக்கலான மற்றும் பெரும்பாலும் சர்ச்சைக்குரிய செயல்முறை தேவைப்படுகிறது.
- நிதி ஆபத்து: ஸ்மார்ட் ஒப்பந்தங்கள் அடிக்கடி மதிப்புமிக்க டிஜிட்டல் சொத்துக்களை நிர்வகிக்கின்றன. ஒரு பிழை ஒரு பயன்பாட்டை செயலிழக்கச் செய்யாது; இது ஒரு கருவூலத்தை வடிகட்டலாம் அல்லது நிதியை என்றென்றும் பூட்டலாம்.
- கலவை ஆபத்து: dApps பெரும்பாலும் பல ஸ்மார்ட் ஒப்பந்தங்களுடன் தொடர்பு கொள்கின்றன ("பண லெகோஸ்" என்ற கருத்து). வெளிப்புற ஒப்பந்தத்தை அழைக்கும்போது ஒரு வகை பொருந்தாத அல்லது தர்க்கரீதியான பிழை சுற்றுச்சூழல் அமைப்பு முழுவதும் தோல்விகளை உருவாக்க முடியும்.
டைனமிக்-தட்டச்சு மொழிகளின் பலவீனங்கள்
ஜாவாஸ்கிரிப்டின் வடிவமைப்பு நெகிழ்வுத்தன்மைக்கு முன்னுரிமை அளிக்கிறது, இது பெரும்பாலும் பாதுகாப்பின் விலையில் வருகிறது. அதன் டைனமிக் தட்டச்சு அமைப்பு ரன்டைமில் வகைகளைத் தீர்க்கிறது, அதாவது அதை உள்ளடக்கிய குறியீடு பாதையை இயக்கும் வரை வகை தொடர்பான பிழையை நீங்கள் கண்டுபிடிப்பதில்லை. பிளாக்செயின் சூழலில், இது மிகவும் தாமதமானது.
இந்த பொதுவான ஜாவாஸ்கிரிப்ட் சிக்கல்களையும் அவற்றின் பிளாக்செயின் தாக்கங்களையும் கவனியுங்கள்:
- வகை நிர்ப்பந்த பிழைகள்: வகைகளை தானாக மாற்றுவதன் மூலம் உதவ ஜாவாஸ்கிரிப்டின் முயற்சி விசித்திரமான விளைவுகளுக்கு வழிவகுக்கும் (எ.கா.,
'5' - 1 = 4ஆனால்'5' + 1 = '51'). ஒரு ஸ்மார்ட் ஒப்பந்தத்தில் உள்ள ஒரு செயல்பாடு ஒரு துல்லியமான கையொப்பமிடப்படாத முழு எண்ணை (uint256) எதிர்பார்க்கும்போது மற்றும் உங்கள் ஜாவாஸ்கிரிப்ட் குறியீடு தற்செயலாக ஒரு சரத்தை கடந்து சென்றால், இதன் விளைவாக கணிக்க முடியாத பரிவர்த்தனையாக இருக்கலாம், அது அமைதியாக தோல்வியடைகிறது அல்லது மோசமான நிலையில், சிதைந்த தரவுடன் வெற்றிகரமாகிறது. - வரையறுக்கப்படாத மற்றும் வெற்று பிழைகள்: பிரபலமற்ற
"வரையறுக்கப்படாத பண்புகளைப் படிக்க முடியாது"பிழை ஜாவாஸ்கிரிப்ட் பிழைத்திருத்தத்தின் ஒரு பிரதானம். ஒரு dApp இல், ஒரு ஒப்பந்த அழைப்பிலிருந்து எதிர்பார்க்கப்படும் மதிப்பு திரும்பப்பெறப்படாவிட்டால் இது நிகழலாம், இது பயனர் இடைமுகத்தை செயலிழக்கச் செய்கிறது அல்லது இன்னும் ஆபத்தான முறையில் செல்லாத நிலையுடன் தொடர வேண்டும். - சுய-ஆவணப்படுத்தல் இல்லாமை: வெளிப்படையான வகைகள் இல்லாமல், ஒரு செயல்பாடு என்ன வகையான தரவை எதிர்பார்க்கிறது அல்லது அது என்ன தருகிறது என்பதை அறிவது பெரும்பாலும் கடினம். இந்த தெளிவின்மை மேம்பாட்டை மெதுவாக்குகிறது மற்றும் ஒருங்கிணைப்பு பிழைகளின் சாத்தியக்கூறுகளை அதிகரிக்கிறது, குறிப்பாக பெரிய, உலகளவில் விநியோகிக்கப்பட்ட குழுக்களில்.
டைப்ஸ்கிரிப்ட் இந்த அபாயங்களை எவ்வாறு குறைக்கிறது
டைப்ஸ்கிரிப்ட் ஒரு நிலையான வகை அமைப்பைச் சேர்ப்பதன் மூலம் இந்த சிக்கல்களை நிவர்த்தி செய்கிறது, இது மேம்பாட்டின் போது செயல்படுகிறது-தொகுக்கும் நேரத்தில். இது ஒரு தடுப்பு அணுகுமுறை, இது டெவலப்பர்கள் தங்கள் குறியீடு ஒரு நேரடி நெட்வொர்க்கைத் தொடும் முன்பே ஒரு பாதுகாப்பு வலையை உருவாக்குகிறது.
- தொகுக்கும் நேர பிழை சரிபார்ப்பு: மிக முக்கியமான நன்மை. ஒரு ஸ்மார்ட் ஒப்பந்த செயல்பாடு ஒரு
BigNumberஐ எதிர்பார்த்தால், அதை ஒருstringஐ அனுப்ப முயற்சித்தால், டைப்ஸ்கிரிப்ட் கம்பைலர் இதை உங்கள் குறியீடு எடிட்டரில் உடனடியாக ஒரு பிழையாகக் கொடியிடும். இந்த எளிய காசோலை பொதுவான ரன்டைம் பிழைகளின் முழு வகுப்பையும் நீக்குகிறது. - மேம்படுத்தப்பட்ட குறியீடு தெளிவு மற்றும் இன்டெலிசென்ஸ்: வகைகளுடன், உங்கள் குறியீடு சுய-ஆவணப்படுத்தப்படுகிறது. டெவலப்பர்கள் தரவின் சரியான வடிவம், செயல்பாடு கையொப்பங்கள் மற்றும் திரும்பும் மதிப்புகளைக் காணலாம். இது தானாக பூர்த்தி செய்தல் மற்றும் இன்லைன் ஆவணப்படுத்தல் போன்ற சக்திவாய்ந்த கருவியைத் தூண்டுகிறது, டெவலப்பர் அனுபவத்தை வியத்தகு முறையில் மேம்படுத்துகிறது மற்றும் மன மேலேயை குறைக்கிறது.
- பாதுகாப்பான மறுசீரமைப்பு: ஒரு பெரிய திட்டத்தில், ஒரு செயல்பாடு கையொப்பம் அல்லது தரவு கட்டமைப்பை மாற்றுவது ஒரு பயங்கரமான பணியாக இருக்கும். டைப்ஸ்கிரிப்ட் கம்பைலர் ஒரு வழிகாட்டியாக செயல்படுகிறது, மாற்றத்தை இடமளிக்க புதுப்பிக்கப்பட வேண்டிய உங்கள் குறியீட்டின் ஒவ்வொரு பகுதியையும் உடனடியாகக் காட்டுகிறது, எதுவும் தவறவிடப்படவில்லை என்பதை உறுதி செய்கிறது.
- Web2 டெவலப்பர்களுக்கான பாலத்தை உருவாக்குதல்: ஜாவா, சி # அல்லது ஸ்விஃப்ட் போன்ற தட்டச்சு மொழிகளுடன் பணிபுரியும் மில்லியன் கணக்கான டெவலப்பர்களுக்கு, டைப்ஸ்கிரிப்ட் Web3 உலகில் ஒரு பழக்கமான மற்றும் வசதியான நுழைவு புள்ளியை வழங்குகிறது, நுழைவுக்கான தடையை குறைக்கிறது மற்றும் திறமை குளத்தை விரிவுபடுத்துகிறது.
டைப்ஸ்கிரிப்ட் கொண்ட நவீன Web3 ஸ்டாக்
டைப்ஸ்கிரிப்டின் செல்வாக்கு மேம்பாட்டு செயல்முறையின் ஒரு பகுதிக்கு மட்டுப்படுத்தப்படவில்லை; இது முழு நவீன Web3 ஸ்டாக்கையும் ஊடுருவி, பின்தள தர்க்கத்திலிருந்து முன் இணைப்பு இடைமுகத்திற்கு ஒரு ஒருங்கிணைந்த, வகை பாதுகாப்பான குழாய் உருவாக்குகிறது.
ஸ்மார்ட் ஒப்பந்தங்கள் (பின்தள தர்க்கம்)
ஸ்மார்ட் ஒப்பந்தங்கள் பொதுவாக Solidity (EVM க்கு), Vyper அல்லது Rust (Solana க்கு) போன்ற மொழிகளில் எழுதப்பட்டாலும், மந்திரம் இடைசெயல் அடுக்கில் நடக்கும். முக்கியமானது ஒப்பந்தத்தின் ABI (பயன்பாட்டு பைனரி இடைமுகம்) ஆகும். ABI என்பது ஒப்பந்தத்தின் பொது செயல்பாடுகள், நிகழ்வுகள் மற்றும் மாறிகளை விவரிக்கும் ஒரு JSON கோப்பு. இது உங்கள் ஆன்-செயின் நிரலுக்கான API விவரக்குறிப்பு. TypeChain போன்ற கருவிகள் இந்த ABI ஐப் படித்து, உங்கள் ஒப்பந்தத்திற்கான முழுமையாக தட்டச்சு செய்யப்பட்ட இடைமுகங்களை வழங்கும் டைப்ஸ்கிரிப்ட் கோப்புகளை தானாக உருவாக்குகின்றன. அதாவது உங்கள் Solidity ஒப்பந்தத்தை பிரதிபலிக்கும் ஒரு டைப்ஸ்கிரிப்ட் பொருள் கிடைக்கிறது, அதன் அனைத்து செயல்பாடுகளும் நிகழ்வுகளும் சரியாக தட்டச்சு செய்யப்படுகின்றன.
பிளாக்செயின் தொடர்பு நூலகங்கள் (நடுவர்)
ஜாவாஸ்கிரிப்ட்/டைப்ஸ்கிரிப்ட் சூழலிலிருந்து பிளாக்செயினுடன் தொடர்புகொள்வதற்கு, பிளாக்செயின் நோடுடன் இணைக்கக்கூடிய, கோரிக்கைகளை வடிவமைக்கக்கூடிய மற்றும் பதில்களைப் பகுப்பாய்வு செய்யக்கூடிய ஒரு நூலகம் உங்களுக்குத் தேவை. இந்த இடத்தில் முன்னணி நூலகங்கள் டைப்ஸ்கிரிப்டை முழு மனதுடன் ஏற்றுக்கொண்டன.
- Ethers.js: Ethereum உடன் தொடர்பு கொள்ள ஒரு நீண்டகால, விரிவான மற்றும் நம்பகமான நூலகம். இது டைப்ஸ்கிரிப்டில் எழுதப்பட்டுள்ளது மற்றும் அதன் வடிவமைப்பு வகை பாதுகாப்பை பெரிதும் ஊக்குவிக்கிறது, குறிப்பாக TypeChain இலிருந்து தானாக உருவாக்கப்பட்ட வகைகளுடன் பயன்படுத்தும்போது.
- viem: Ethers.js க்கு ஒரு புதிய, இலகுரக மற்றும் அதிக மட்டு மாற்றாகும். டைப்ஸ்கிரிப்ட் மற்றும் செயல்திறனை மனதில் கொண்டு தரையிலிருந்து கட்டப்பட்ட
viemநவீன டைப்ஸ்கிரிப்ட் அம்சங்களைப் பயன்படுத்தி நம்பமுடியாத ஆட்டோகம்பீஷனையும் வகை அனுமானத்தையும் வழங்கும் தீவிர வகை பாதுகாப்பை வழங்குகிறது, இது பெரும்பாலும் மந்திரம் போல் உணர்கிறது.
இந்த நூலகங்களைப் பயன்படுத்தி, நீங்கள் இனி சரம் விசைகளுடன் பரிவர்த்தனை பொருட்களை கைமுறையாக உருவாக்க வேண்டியதில்லை. அதற்கு பதிலாக, நீங்கள் நன்கு தட்டச்சு செய்யப்பட்ட முறைகளுடன் தொடர்பு கொள்கிறீர்கள் மற்றும் தட்டச்சு செய்யப்பட்ட பதில்களைப் பெறுகிறீர்கள், தரவு நிலைத்தன்மையை உறுதி செய்கிறீர்கள்.
முன் இணைப்பு கட்டமைப்புகள் (பயனர் இடைமுகம்)
நவீன முன் இணைப்பு மேம்பாடு React, Vue மற்றும் Angular போன்ற கட்டமைப்புகளால் ஆதிக்கம் செலுத்துகிறது, இவை அனைத்தும் முதல் வகுப்பு டைப்ஸ்கிரிப்ட் ஆதரவைக் கொண்டுள்ளன. ஒரு dApp ஐ உருவாக்கும்போது, இது வகை பாதுகாப்பை பயனர் வரை நீட்டிக்க உங்களை அனுமதிக்கிறது. நிலை மேலாண்மை நூலகங்கள் (ரெட்யூக்ஸ் அல்லது ஜுஸ்டாண்ட் போன்றவை) மற்றும் தரவு மீட்டெடுக்கும் கொக்கிகள் (wagmi இலிருந்து வந்தவை போன்றவை, இது viem இன் மேல் கட்டப்பட்டுள்ளது) உறுதியாக தட்டச்சு செய்யப்படலாம். இதன் பொருள் ஒரு ஸ்மார்ட் ஒப்பந்தத்திலிருந்து நீங்கள் மீட்டெடுக்கும் தரவு உங்கள் கூறு மரத்தின் மூலம் பாயும்போது வகை-பாதுகாப்பாக இருக்கும், UI பிழைகளைத் தடுக்கிறது மற்றும் பயனர் பார்ப்பது ஆன்-செயின் நிலையின் சரியான பிரதிநிதித்துவம் என்பதை உறுதி செய்கிறது.
மேம்பாடு மற்றும் சோதனை சூழல்கள் (கருவி)
ஒரு வலுவான திட்டத்தின் அடிப்படை அதன் மேம்பாட்டு சூழல். EVM மேம்பாட்டிற்கான மிகவும் பிரபலமான சூழல், Hardhat, அதன் மையத்தில் டைப்ஸ்கிரிப்ட் உடன் கட்டப்பட்டுள்ளது. உங்கள் திட்டத்தை hardhat.config.ts கோப்பில் உள்ளமைக்கிறீர்கள், மேலும் உங்கள் வரிசைப்படுத்தல் ஸ்கிரிப்டுகள் மற்றும் தானியங்கி சோதனைகளை டைப்ஸ்கிரிப்டில் எழுதுகிறீர்கள். இது மேம்பாட்டின் மிக முக்கியமான கட்டங்களில் வகை பாதுகாப்பின் முழு சக்தியையும் பயன்படுத்த உங்களை அனுமதிக்கிறது: வரிசைப்படுத்தல் மற்றும் சோதனை.
நடைமுறை வழிகாட்டி: வகை-பாதுகாப்பான dApp இடைசெயல் அடுக்கை உருவாக்குதல்
இந்த துண்டுகள் எவ்வாறு ஒன்றாகப் பொருந்துகின்றன என்பதற்கான எளிமைப்படுத்தப்பட்ட ஆனால் நடைமுறை உதாரணத்தின் மூலம் செல்வோம். ஒரு ஸ்மார்ட் ஒப்பந்தத்தைத் தொகுக்க, டைப்ஸ்கிரிப்ட் வகைகளை TypeChain உடன் உருவாக்க மற்றும் வகை-பாதுகாப்பான சோதனையை எழுத Hardhat ஐப் பயன்படுத்துவோம்.
படி 1: டைப்ஸ்கிரிப்ட் உடன் உங்கள் Hardhat திட்டத்தை அமைத்தல்
முதலில், உங்களிடம் Node.js நிறுவப்பட்டிருக்க வேண்டும். பின்னர், ஒரு புதிய திட்டத்தை துவக்கவும்.
உங்கள் டெர்மினலில், இயக்கவும்:
mkdir my-typed-project && cd my-typed-project
npm init -y
npm install --save-dev hardhat
இப்போது, Hardhat அமைப்பு வழிகாட்டியை இயக்கவும்:
npx hardhat
கேட்கப்பட்டதும், "டைப்ஸ்கிரிப்ட் திட்டத்தை உருவாக்கு" என்ற விருப்பத்தைத் தேர்வுசெய்க. Hardhat `ethers`, `hardhat-ethers`, `typechain` மற்றும் அவற்றின் தொடர்புடைய தொகுப்புகள் உட்பட தேவையான அனைத்து சார்புகளையும் தானாகவே நிறுவும். இது ஒரு `tsconfig.json` மற்றும் ஒரு `hardhat.config.ts` கோப்பையும் உருவாக்கும், ஆரம்பத்தில் இருந்தே வகை-பாதுகாப்பான பணிப்பாய்வுக்கு உங்களை அமைக்கும்.
படி 2: ஒரு எளிய Solidity ஸ்மார்ட் ஒப்பந்தத்தை எழுதுதல்
`contracts/` கோப்பகத்தில் ஒரு அடிப்படை ஒப்பந்தத்தை உருவாக்குவோம். அதை `Storage.sol` என்று பெயரிடுங்கள்.
// contracts/Storage.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Storage {
uint256 private number;
address public lastChanger;
event NumberChanged(address indexed changer, uint256 newNumber);
function store(uint256 newNumber) public {
number = newNumber;
lastChanger = msg.sender;
emit NumberChanged(msg.sender, newNumber);
}
function retrieve() public view returns (uint256) {
return number;
}
}
இது ஒரு எளிய ஒப்பந்தமாகும், இது எந்தவொரு கையொப்பமிடப்படாத முழு எண்ணையும் சேமித்து அதைப் பார்க்க அனுமதிக்கிறது.
படி 3: TypeChain உடன் டைப்ஸ்கிரிப்ட் தட்டச்சுக்களை உருவாக்குதல்
இப்போது, ஒப்பந்தத்தைத் தொகுக்கவும். டைப்ஸ்கிரிப்ட் Hardhat தொடக்க திட்டம் தொகுத்த பிறகு தானாகவே TypeChain ஐ இயக்க ஏற்கனவே கட்டமைக்கப்பட்டுள்ளது.
தொகுப்பு கட்டளையை இயக்கவும்:
npx hardhat compile
இந்த கட்டளை முடிந்ததும், உங்கள் திட்டத்தின் ரூட் கோப்பகத்தில் பாருங்கள். `typechain-types` என்ற பெயரில் ஒரு புதிய கோப்புறையைப் பார்ப்பீர்கள். உள்ளே, `Storage.ts` உட்பட டைப்ஸ்கிரிப்ட் கோப்புகளைக் காண்பீர்கள். இந்த கோப்பில் உங்கள் ஒப்பந்தத்திற்கான டைப்ஸ்கிரிப்ட் இடைமுகம் உள்ளது. இது `store` செயல்பாடு, `retrieve` செயல்பாடு,` NumberChanged` நிகழ்வு மற்றும் அவை அனைத்தும் எதிர்பார்க்கும் வகைகளைப் பற்றி அறிந்திருக்கிறது (எ.கா., `store` ஒரு `BigNumberish` ஐ எதிர்பார்க்கிறது, `retrieve` ஒரு `Promise
படி 4: வகை-பாதுகாப்பான சோதனையை எழுதுதல்
`test/` கோப்பகத்தில் ஒரு சோதனையை எழுதி செயல்பாட்டில் உருவாக்கப்பட்ட இந்த வகைகளின் சக்தியைப் பார்ப்போம். `Storage.test.ts` என்ற கோப்பை உருவாக்கவும்.
// test/Storage.test.ts
import { ethers } from "hardhat";
import { expect } from "chai";
import { Storage } from "../typechain-types"; // <-- உருவாக்கப்பட்ட வகையை இறக்குமதி செய்க!
import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers";
describe("Storage Contract", function () {
let storage: Storage; // <-- ஒப்பந்தத்தின் வகையுடன் எங்கள் மாறி அறிவிக்கவும்
let owner: HardhatEthersSigner;
beforeEach(async function () {
[owner] = await ethers.getSigners();
const storageFactory = await ethers.getContractFactory("Storage");
storage = await storageFactory.deploy();
});
it("Should store and retrieve a value correctly", async function () {
const testValue = 42;
// இந்த பரிவர்த்தனை அழைப்பு முழுமையாக தட்டச்சு செய்யப்பட்டுள்ளது.
const storeTx = await storage.store(testValue);
await storeTx.wait();
// இப்போது, தொகுக்கும் நேரத்தில் தோல்வியடைய வேண்டிய ஒன்றை முயற்சிப்போம்.
// உங்கள் IDE இல் கீழே உள்ள வரியை நீக்கவும்:
// await storage.store("this is not a number");
// ^ டைப்ஸ்கிரிப்ட் பிழை: வகை 'சரம்' இன் வாதம் வகை 'BigNumberish' இன் அளவுருவிற்கு ஒதுக்க முடியாது.
// retrieve() இலிருந்து திரும்பும் மதிப்பு ஒரு Promise
const retrievedValue = await storage.retrieve();
expect(retrievedValue).to.equal(testValue);
});
it("Should emit a NumberChanged event with typed arguments", async function () {
const testValue = 100;
await expect(storage.store(testValue))
.to.emit(storage, "NumberChanged")
.withArgs(owner.address, testValue); // .withArgs வகையும் சரிபார்க்கப்படுகிறது!
});
});
இந்த சோதனையில், `storage` மாறி ஒரு பொதுவான ஒப்பந்த பொருள் மட்டுமல்ல; இது குறிப்பாக `Storage` என்று தட்டச்சு செய்யப்பட்டுள்ளது. இது அதன் முறைகளுக்கான ஆட்டோகம்பீஷனை வழங்குகிறது (`.store()`, `.retrieve()`) மற்றும், மிக முக்கியமாக, நாம் அனுப்பும் வாதங்களில் தொகுக்கும் நேர சோதனைகள். சோதனை இயக்குவதற்கு முன்பே டைப்ஸ்கிரிப்ட் ஒரு எளிய ஆனால் முக்கியமான தவறு செய்வதிலிருந்து உங்களைத் தடுப்பது எப்படி என்பதை கருத்து தெரிவிக்கப்பட்ட வரி காட்டுகிறது.
படி 5: கருத்தியல் முன் இணைப்பு ஒருங்கிணைப்பு
இதை முன் இணைப்பு பயன்பாட்டிற்கு நீட்டிப்பது (எ.கா., React மற்றும் `wagmi` ஐப் பயன்படுத்துதல்) அதே கொள்கையைப் பின்பற்றுகிறது. உங்கள் முன் இணைப்பு திட்டத்துடன் `typechain-types` கோப்பகத்தைப் பகிர்வீர்கள். ஒப்பந்தத்துடன் தொடர்பு கொள்ள ஒரு கொக்கியை நீங்கள் துவக்கும்போது, உருவாக்கப்பட்ட ABI மற்றும் வகை வரையறைகளை வழங்குகிறீர்கள். இதன் விளைவாக, உங்கள் முழு முன் இணைப்பும் உங்கள் ஸ்மார்ட் ஒப்பந்தத்தின் API பற்றி அறிந்திருக்கிறது, இறுதி முதல் இறுதி வரை வகை பாதுகாப்பை உறுதி செய்கிறது.
பிளாக்செயின் மேம்பாட்டில் மேம்பட்ட வகை பாதுகாப்பு வடிவங்கள்
அடிப்படை செயல்பாடு அழைப்புகளைத் தாண்டி, டைப்ஸ்கிரிப்ட் பரவலாக்கப்பட்ட பயன்பாடுகளை உருவாக்குவதற்கு மிகவும் அதிநவீன மற்றும் வலுவான வடிவங்களை செயல்படுத்துகிறது.
தனிப்பயன் ஒப்பந்த பிழைகளை தட்டச்சு செய்தல்
Solidity இன் நவீன பதிப்புகள் டெவலப்பர்கள் தனிப்பயன் பிழைகளை வரையறுக்க அனுமதிக்கின்றன, அவை சரம் அடிப்படையிலான `require` செய்திகளை விட அதிக எரிவாயு திறன் கொண்டவை. ஒரு ஒப்பந்தத்தில் `error InsufficientBalance(uint256 required, uint256 available);` இருக்கலாம். இவை ஆன்-செயினில் சிறந்தவை என்றாலும், ஆஃப்-செயினை டிகோட் செய்வது கடினம். இருப்பினும், சமீபத்திய கருவி இந்த தனிப்பயன் பிழைகளைப் பாகுபடுத்தலாம் மற்றும் டைப்ஸ்கிரிப்ட் மூலம் உங்கள் வாடிக்கையாளர் பக்க குறியீட்டில் தொடர்புடைய தட்டச்சு செய்யப்பட்ட பிழை வகுப்புகளை உருவாக்கலாம். இது சுத்தமான, வகை-பாதுகாப்பான பிழை கையாளுதல் தர்க்கத்தை எழுத உங்களை அனுமதிக்கிறது:
try {
await contract.withdraw(amount);
} catch (error) {
if (error instanceof InsufficientBalanceError) {
// இப்போது நீங்கள் பாதுகாப்பாக தட்டச்சு செய்யப்பட்ட பண்புகளை அணுகலாம்
console.log(`You need ${error.required} but only have ${error.available}`);
}
}
ரன்டைம் சரிபார்ப்பிற்காக Zod ஐப் பயன்படுத்துதல்
டைப்ஸ்கிரிப்டின் பாதுகாப்பு வலை தொகுக்கும் நேரத்தில் உள்ளது. ஒரு படிவத்திலிருந்து பயனர் உள்ளீடு அல்லது மூன்றாம் தரப்பு API இலிருந்து தரவு போன்ற ரன்டைமில் வெளிப்புற மூலங்களிலிருந்து வரும் செல்லாத தரவிலிருந்து இது உங்களைப் பாதுகாக்க முடியாது. இங்குதான் Zod போன்ற ரன்டைம் சரிபார்ப்பு நூலகங்கள் டைப்ஸ்கிரிப்டுக்கு அத்தியாவசிய கூட்டாளர்களாகின்றன.
ஒரு ஒப்பந்த செயல்பாட்டிற்கான எதிர்பார்க்கப்படும் உள்ளீட்டை பிரதிபலிக்கும் ஒரு Zod திட்டத்தை நீங்கள் வரையறுக்கலாம். பரிவர்த்தனையை அனுப்புவதற்கு முன், பயனரின் உள்ளீட்டை இந்த திட்டத்திற்கு எதிராக சரிபார்க்கிறீர்கள். தரவு சரியான வகை மட்டுமல்லாமல், பிற வணிக தர்க்கத்துடன் ஒத்துப்போகிறது என்பதை இது உறுதி செய்கிறது (எ.கா., ஒரு சரம் ஒரு செல்லுபடியாகும் முகவரியாக இருக்க வேண்டும், ஒரு எண் ஒரு குறிப்பிட்ட வரம்பிற்குள் இருக்க வேண்டும்). இது இரண்டு அடுக்கு பாதுகாப்பை உருவாக்குகிறது: Zod ரன்டைம் தரவை சரிபார்க்கிறது, மேலும் டைப்ஸ்கிரிப்ட் உங்கள் பயன்பாட்டின் தர்க்கத்திற்குள் தரவு சரியாகக் கையாளப்படுவதை உறுதி செய்கிறது.
வகை-பாதுகாப்பான நிகழ்வு கையாளுதல்
பதில் தரும் dApp களை உருவாக்குவதற்கு ஸ்மார்ட் ஒப்பந்த நிகழ்வுகளைக் கேட்பது அடிப்படை. உருவாக்கப்பட்ட வகைகளுடன், நிகழ்வு கையாளுதல் மிகவும் பாதுகாப்பானது. நிகழ்வு வடிப்பான்களை உருவாக்க மற்றும் நிகழ்வு பதிவுகளைப் பாகுபடுத்த TypeChain தட்டச்சு செய்யப்பட்ட உதவியாளர்களை உருவாக்குகிறது. நீங்கள் ஒரு நிகழ்வைப் பெறும்போது, அதன் வாதங்கள் ஏற்கனவே பாகுபடுத்தப்பட்டு சரியாக தட்டச்சு செய்யப்படுகின்றன. எங்கள் `Storage` ஒப்பந்தத்தின் `NumberChanged` நிகழ்வுக்கு, `changer` ஒரு `string` (முகவரி) ஆக தட்டச்சு செய்யப்பட்ட ஒரு பொருளைப் பெறுவீர்கள், மேலும் `newNumber` என்பது ஒரு `bigint` ஆகும், இது கையேடு பாகுபடுத்தலில் இருந்து யூகம் மற்றும் சாத்தியமான பிழைகளை நீக்குகிறது.
உலகளாவிய தாக்கம்: வகை பாதுகாப்பு எவ்வாறு நம்பிக்கை மற்றும் தத்தெடுப்பை ஊக்குவிக்கிறது
பிளாக்செயினில் டைப்ஸ்கிரிப்ட்டின் நன்மைகள் தனிப்பட்ட டெவலப்பர் உற்பத்தித்திறனைத் தாண்டி நீட்டிக்கப்படுகின்றன. அவை முழு சுற்றுச்சூழல் அமைப்பின் சுகாதாரம், பாதுகாப்பு மற்றும் வளர்ச்சியில் ஆழமான தாக்கத்தை ஏற்படுத்துகின்றன.
பாதிப்புகளைக் குறைத்தல் மற்றும் பாதுகாப்பை அதிகரித்தல்
வரிசைப்படுத்துவதற்கு முன்பு பிழைகளின் பரந்த வகையைப் பிடிப்பதன் மூலம், டைப்ஸ்கிரிப்ட் மிகவும் பாதுகாப்பான பரவலாக்கப்பட்ட வலைக்கு நேரடியாக பங்களிக்கிறது. குறைவான பிழைகள் என்றால் குறைவான சுரண்டல்கள், இது பயனர்கள் மற்றும் நிறுவன முதலீட்டாளர்களிடையே நம்பிக்கையை உருவாக்குகிறது. டைப்ஸ்கிரிப்ட் போன்ற கருவிகளால் இயக்கப்பட்ட வலுவான பொறியியலுக்கான நற்பெயர் எந்த பிளாக்செயின் திட்டத்தின் நீண்டகால சாத்தியத்திற்கும் முக்கியமானது.
டெவலப்பர்களுக்கான நுழைவுக்கான தடையைக் குறைத்தல்
பிரதான தத்தெடுப்பை அடைய Web3 இடம் Web2 டெவலப்பர்களின் மிகப் பெரிய குளத்திலிருந்து திறமையைப் பெற வேண்டும். ஜாவாஸ்கிரிப்ட் அடிப்படையிலான பிளாக்செயின் மேம்பாட்டின் குழப்பமான மற்றும் பெரும்பாலும் மன்னிக்க முடியாத தன்மை ஒரு குறிப்பிடத்தக்க தடையாக இருக்கலாம். டைப்ஸ்கிரிப்ட், அதன் கட்டமைக்கப்பட்ட தன்மை மற்றும் சக்திவாய்ந்த கருவியுடன், பழக்கமான மற்றும் குறைந்த அச்சுறுத்தலான ஆன் போர்டிங் அனுபவத்தை வழங்குகிறது, இது உலகம் முழுவதிலுமிருந்து திறமையான பொறியியலாளர்களுக்கு பரவலாக்கப்பட்ட பயன்பாடுகளை உருவாக்குவதற்கு மாறுவதை எளிதாக்குகிறது.
உலகளாவிய, பரவலாக்கப்பட்ட குழுக்களில் ஒத்துழைப்பை மேம்படுத்துதல்
பிளாக்செயின் மற்றும் திறந்த மூல மேம்பாடு கைகோர்த்துச் செல்கின்றன. திட்டங்கள் பெரும்பாலும் வெவ்வேறு நேர மண்டலங்களில் பணிபுரியும் பங்களிப்பாளர்களின் உலகளவில் விநியோகிக்கப்பட்ட குழுக்களால் பராமரிக்கப்படுகின்றன. இத்தகைய ஒத்திசைவற்ற சூழலில், தெளிவான மற்றும் சுய-ஆவணப்படுத்தும் குறியீடு ஒரு ஆடம்பரம் அல்ல; இது ஒரு தேவை. ஒரு டைப்ஸ்கிரிப்ட் குறியீட்டு அடிப்படை, அதன் வெளிப்படையான வகைகள் மற்றும் இடைமுகங்களுடன், அமைப்பின் வெவ்வேறு பகுதிகளுக்கும் மற்றும் வெவ்வேறு டெவலப்பர்களுக்கும் இடையே ஒரு நம்பகமான ஒப்பந்தமாக செயல்படுகிறது, இது தடையற்ற ஒத்துழைப்பை எளிதாக்குகிறது மற்றும் ஒருங்கிணைப்பு உராய்வைக் குறைக்கிறது.
முடிவு: டைப்ஸ்கிரிப்ட் மற்றும் பிளாக்செயினின் தவிர்க்க முடியாத இணைவு
பிளாக்செயின் மேம்பாட்டு சுற்றுச்சூழல் அமைப்பின் பாதை தெளிவாக உள்ளது. இடைசெயல் அடுக்கை ஜாவாஸ்கிரிப்ட் ஸ்கிரிப்டுகளின் தளர்வான சேகரிப்பாக கருதும் நாட்கள் முடிந்துவிட்டன. பாதுகாப்பு, நம்பகத்தன்மை மற்றும் பராமரிப்புக்கான தேவை டைப்ஸ்கிரிப்டை "நன்றாக இருக்க வேண்டும்" என்பதிலிருந்து ஒரு தொழில் தரமான சிறந்த நடைமுறையாக உயர்த்தியுள்ளது. `viem` மற்றும் `wagmi` போன்ற புதிய தலைமுறை கருவிகள் டைப்ஸ்கிரிப்ட்-முதல் திட்டங்களாக கட்டப்பட்டு வருகின்றன, இது அதன் அடிப்படைக் முக்கியத்துவத்திற்கு ஒரு சான்றாகும்.
உங்கள் பிளாக்செயின் பணிப்பாய்வுக்குள் டைப்ஸ்கிரிப்டை ஒருங்கிணைப்பது நிலைத்தன்மையில் ஒரு முதலீடு. இது ஒழுக்கத்தை கட்டாயப்படுத்துகிறது, நோக்கத்தை தெளிவுபடுத்துகிறது மற்றும் பரந்த அளவிலான பொதுவான பிழைகளுக்கு எதிராக ஒரு சக்திவாய்ந்த தானியங்கி பாதுகாப்பு வலையை வழங்குகிறது. தவறுகள் நிரந்தரமானவை மற்றும் விலை உயர்ந்த ஒரு மாற்ற முடியாத உலகில், இந்த தடுப்பு அணுகுமுறை விவேகமானதல்ல - இது அவசியம். பரவலாக்கப்பட்ட எதிர்காலத்தில் நீண்ட காலத்திற்கு உருவாக்க தீவிரமான எந்தவொரு தனிநபர், குழு அல்லது அமைப்புக்கும், டைப்ஸ்கிரிப்டை ஏற்றுக்கொள்வது வெற்றிக்கான ஒரு முக்கியமான உத்தி ஆகும்.