ടൈപ്പ്സ്ക്രിപ്റ്റ് ബ്ലോക്ക്ചെയിൻ സാങ്കേതികവിദ്യയുമായി സംയോജിപ്പിക്കുന്നതിനെക്കുറിച്ചുള്ള ആഴത്തിലുള്ള വിവരങ്ങൾ. കൂടുതൽ കരുത്തുറ്റതും സുരക്ഷിതവും പരിപാലിക്കാൻ എളുപ്പമുള്ളതുമായ വിതരണം ചെയ്ത ആപ്ലിക്കേഷനുകളും സ്മാർട്ട് കരാറുകളും നിർമ്മിക്കാൻ ടൈപ്പ് സുരക്ഷ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് മനസിലാക്കുക.
ടൈപ്പ്സ്ക്രിപ്റ്റ് ബ്ലോക്ക്ചെയിൻ സംയോജനം: വിതരണം ചെയ്ത ലെഡ്ജർ ടൈപ്പ് സുരക്ഷയുടെ ഒരു പുതിയ യുഗം
ബ്ലോക്ക്ചെയിൻ ലോകം മാറ്റമില്ലാത്തതും സുതാര്യവും വിശ്വാസമില്ലാത്തതുമായ തത്വങ്ങളെ അടിസ്ഥാനമാക്കിയുള്ളതാണ്. അടിസ്ഥാന കോഡ്, പലപ്പോഴും ഒരു സ്മാർട്ട് കരാർ എന്ന് വിളിക്കപ്പെടുന്നു, ഒരു ഡിജിറ്റൽ, സ്വയം പ്രവർത്തിക്കുന്ന ഉടമ്പടിയായി പ്രവർത്തിക്കുന്നു. വിതരണം ചെയ്ത ലെഡ്ജറിൽ വിന്യസിച്ചു കഴിഞ്ഞാൽ, ഈ കോഡ് സാധാരണയായി മാറ്റാൻ കഴിയില്ല. ഈ സ്ഥിരത സാങ്കേതികവിദ്യയുടെ ഏറ്റവും വലിയ ശക്തിയും അതിന്റെ ഏറ്റവും വലിയ വെല്ലുവിളിയുമാണ്. ഒരു ചെറിയ ബഗ്, യുക്തിയിലുള്ള ഒരു ചെറിയSupervision, വിനാശകരമായ, മാറ്റാനാവാത്ത സാമ്പത്തിക നഷ്ടങ്ങളിലേക്കും വിശ്വാസത്തിന്റെ സ്ഥിരമായ ലംഘനത്തിലേക്കും നയിച്ചേക്കാം.
ചരിത്രപരമായി, ഈ സ്മാർട്ട് കരാറുകൾക്കായുള്ള മിക്ക ടൂളിംഗുകളും ഇടപെടൽ പാളിയും, പ്രത്യേകിച്ച് 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 விவரக்குறிப்பு. டைப் செயின் போன்ற கருவிகள் இந்த ABI ஐப் படித்து, உங்கள் ஒப்பந்தத்திற்கான முழுமையாக தட்டச்சு செய்யப்பட்ட இடைமுகங்களை வழங்கும் டைப்ஸ்கிரிப்ட் கோப்புகளை தானாக உருவாக்குகின்றன. இதன் பொருள் உங்கள் Solidity ஒப்பந்தத்தைப் பிரதிபலிக்கும் டைப்ஸ்கிரிப்ட் பொருளைப் பெறுவீர்கள், அதன் அனைத்து செயல்பாடுகளும் நிகழ்வுகளும் சரியாக தட்டச்சு செய்யப்படுகின்றன.
பிளாக்செயின் தொடர்பு நூலகங்கள் (இடைநிலை மென்பொருள்)
ஜாவாஸ்கிரிப்ட்/டைப்ஸ்கிரிப்ட் சூழலில் இருந்து பிளாக்செயினுடன் தொடர்பு கொள்ள, பிளாக்செயின் முனைக்கு இணைக்கக்கூடிய, கோரிக்கைகளை வடிவமைக்க மற்றும் பதில்களை அலசக்கூடிய ஒரு நூலகம் உங்களுக்குத் தேவை. இந்த இடத்தில் உள்ள முன்னணி நூலகங்கள் டைப்ஸ்கிரிப்டை முழு மனதுடன் ஏற்றுக்கொண்டன.
- Ethers.js: Ethereum உடன் தொடர்பு கொள்ள ஒரு நீண்டகால, விரிவான மற்றும் நம்பகமான நூலகம். இது டைப்ஸ்கிரிப்டில் எழுதப்பட்டுள்ளது மற்றும் அதன் வடிவமைப்பு வகை பாதுகாப்பை பெரிதும் ஊக்குவிக்கிறது, குறிப்பாக டைப் செயினிலிருந்து தானாக உருவாக்கப்பட்ட வகைகளுடன் பயன்படுத்தும்போது.
- viem: Ethers.js க்கு ஒரு புதிய, இலகுரக மற்றும் மிகவும் மட்டு விருப்பம். டைப்ஸ்கிரிப்ட் மற்றும் செயல்திறனை மனதில் கொண்டு தரையிலிருந்து கட்டமைக்கப்பட்ட `viem` தீவிர வகை பாதுகாப்பை வழங்குகிறது, நவீன டைப்ஸ்கிரிப்ட் அம்சங்களைப் பயன்படுத்தி நம்பமுடியாத தானியங்கு நிரப்புதல் மற்றும் வகை ஊகத்தை வழங்குகிறது, இது பெரும்பாலும் மேஜிக் போல உணர்கிறது.
இந்த நூலகங்களைப் பயன்படுத்தி, நீங்கள் இனி சரக் விசைகளுடன் பரிவர்த்தனை பொருட்களை கைமுறையாக உருவாக்க வேண்டியதில்லை. மாறாக, நீங்கள் நன்கு தட்டச்சு செய்யப்பட்ட முறைகளுடன் தொடர்பு கொண்டு தட்டச்சு செய்யப்பட்ட பதில்களைப் பெறுவீர்கள், தரவு நிலைத்தன்மையை உறுதி செய்கிறீர்கள்.
முன்பக்க கட்டமைப்புகள் (பயனர் இடைமுகம்)
நவீன முன்பக்க மேம்பாட்டில் React, Vue மற்றும் Angular போன்ற கட்டமைப்புகள் ஆதிக்கம் செலுத்துகின்றன, இவை அனைத்தும் முதல் வகுப்பு டைப்ஸ்கிரிப்ட் ஆதரவைக் கொண்டுள்ளன. ஒரு dApp ஐ உருவாக்கும் போது, பயனர் வரை வகை பாதுகாப்பை நீட்டிக்க இது உங்களை அனுமதிக்கிறது. நிலை மேலாண்மை நூலகங்கள் (Redux அல்லது Zustand போன்றவை) மற்றும் தரவு மீட்டெடுக்கும் கொக்கிகள் (`wagmi` இலிருந்து போன்றவை, இது `viem` இன் மேல் கட்டமைக்கப்பட்டுள்ளது) ஆகியவை வலுவாக தட்டச்சு செய்யப்படலாம். இதன் பொருள் ஒரு ஸ்மார்ட் ஒப்பந்தத்திலிருந்து நீங்கள் மீட்டெடுக்கும் தரவு உங்கள் கூறு மரம் வழியாக பாயும் போது வகை பாதுகாப்பாக இருக்கும், UI பிழைகளைத் தடுக்கும் மற்றும் பயனர் பார்ப்பது ஆன்-செயின் நிலையின் சரியான பிரதிநிதித்துவத்தை உறுதி செய்யும்.
மேம்பாடு மற்றும் சோதனை சூழல்கள் (கருவிகள்)
ஒரு வலுவான திட்டத்தின் அடித்தளம் அதன் மேம்பாட்டு சூழல். EVM மேம்பாட்டிற்கான மிகவும் பிரபலமான சூழல், ஹார்தாட் அதன் மையத்தில் டைப்ஸ்கிரிப்ட் மூலம் கட்டமைக்கப்பட்டுள்ளது. உங்கள் திட்டத்தை `hardhat.config.ts` கோப்பில் உள்ளமைத்து, உங்கள் வரிசைப்படுத்தல் ஸ்கிரிப்டுகள் மற்றும் தானியங்கி சோதனைகளை டைப்ஸ்கிரிப்டில் எழுதுகிறீர்கள். இது மேம்பாட்டின் மிக முக்கியமான கட்டங்களில் வகை பாதுகாப்பின் முழு சக்தியையும் பயன்படுத்த உங்களை அனுமதிக்கிறது: வரிசைப்படுத்தல் மற்றும் சோதனை.
நடைமுறை வழிகாட்டி: ஒரு வகை-பாதுகாப்பான dApp தொடர்பு அடுக்கை உருவாக்குதல்
இந்த துண்டுகள் எவ்வாறு பொருந்துகின்றன என்பதற்கான எளிமைப்படுத்தப்பட்ட ஆனால் நடைமுறை உதாரணத்தின் மூலம் செல்வோம். ஒரு ஸ்மார்ட் ஒப்பந்தத்தை தொகுக்க ஹார்தாட்டைப் பயன்படுத்துவோம், டைப் செயின் மூலம் டைப்ஸ்கிரிப்ட் வகைகளை உருவாக்கவும், வகை-பாதுகாப்பான சோதனையை எழுதவும்.
படி 1: டைப்ஸ்கிரிப்ட் மூலம் உங்கள் ஹார்தாட் திட்டத்தை அமைத்தல்
முதலில், நீங்கள் Node.js ஐ நிறுவ வேண்டும். பின்னர், ஒரு புதிய திட்டத்தைத் தொடங்கவும்.
உங்கள் டெர்மினலில், இயக்கவும்:
mkdir my-typed-project && cd my-typed-project
npm init -y
npm install --save-dev hardhat
இப்போது, ஹார்தாட் அமைப்பு வழிகாட்டியை இயக்கவும்:
npx hardhat
தூண்டப்பட்டால், "டைப்ஸ்கிரிப்ட் திட்டத்தை உருவாக்கவும்" விருப்பத்தைத் தேர்வு செய்யவும். ஹார்தாட் `எத்தர்ஸ்`, `ஹார்தாட்-எத்தர்ஸ்`, `டைப் செயின்` மற்றும் அவற்றின் தொடர்புடைய தொகுப்புகள் உள்ளிட்ட தேவையான அனைத்து சார்புகளையும் தானாக நிறுவும். இது ஒரு `tsconfig.json` மற்றும் ஒரு `hardhat.config.ts` கோப்பையும் உருவாக்கும், ஆரம்பத்திலிருந்தே உங்களை ஒரு வகை-பாதுகாப்பான பணிப்பாய்வுக்காக அமைக்கிறது.
படி 2: ஒரு எளிய Solidity ஸ்மார்ட் ஒப்பந்தத்தை எழுதுதல்
`ஒப்பந்தங்கள்/` கோப்பகத்தில் ஒரு அடிப்படை ஒப்பந்தத்தை உருவாக்குவோம். அதை `Storage.sol` என்று பெயரிடுங்கள்.
// ஒப்பந்தங்கள்/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: டைப் செயின் மூலம் டைப்ஸ்கிரிப்ட் தட்டச்சு உருவாக்குதல்
இப்போது, ஒப்பந்தத்தை தொகுக்கவும். டைப்ஸ்கிரிப்ட் ஹார்தாட் ஸ்டார்டர் திட்டம் தொகுப்புக்குப் பிறகு டைப் செயினை தானாக இயக்க ஏற்கனவே கட்டமைக்கப்பட்டுள்ளது.
தொகுப்பு கட்டளையை இயக்கவும்:
npx hardhat compile
இந்த கட்டளை முடிந்ததும், உங்கள் திட்டத்தின் ரூட் கோப்பகத்தைப் பாருங்கள். `டைப் செயின்-வகைகள்` என்ற பெயரில் ஒரு புதிய கோப்புறையை நீங்கள் காண்பீர்கள். உள்ளே, உங்கள் ஒப்பந்தத்திற்கான டைப்ஸ்கிரிப்ட் இடைமுகம் அடங்கும் `Storage.ts` உள்ளிட்ட டைப்ஸ்கிரிப்ட் கோப்புகளைக் காண்பீர்கள். `store` செயல்பாடு, `retrieve` செயல்பாடு, `NumberChanged` நிகழ்வு மற்றும் அவை எதிர்பார்க்கும் வகைகள் (எ.கா., `store` ஒரு `BigNumberish` ஐ எதிர்பார்க்கிறது, `retrieve` ஒரு `Promise
படி 4: ஒரு வகை-பாதுகாப்பான சோதனையை எழுதுதல்
`சோதனை/` கோப்பகத்தில் ஒரு சோதனையை எழுதுவதன் மூலம் இந்த உருவாக்கப்பட்ட வகைகளின் சக்தியைக் காண்போம். `Storage.test.ts` என்ற கோப்பை உருவாக்கவும்.
// சோதனை/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("மதிப்பை சரியாக சேமித்து மீட்டெடுக்க வேண்டும்", async function () {
const testValue = 42;
// இந்த பரிவர்த்தனை அழைப்பு முழுமையாக தட்டச்சு செய்யப்பட்டுள்ளது.
const storeTx = await storage.store(testValue);
await storeTx.wait();
// இப்போது, தொகுப்பு நேரத்தில் தோல்வியடைய வேண்டிய ஒன்றை முயற்சிப்போம்.
// உங்கள் IDE இல் கீழே உள்ள வரியை கருத்து நீக்கவும்:
// await storage.store("இது ஒரு எண் அல்ல");
// ^ டைப்ஸ்கிரிப்ட் பிழை: 'சரகம்' வகையின் ஆர்குமென்ட் 'பிக் நம்பரிஷ்' வகையின் அளவுருவுக்கு ஒதுக்க முடியாது.
// retrieve() இலிருந்து திரும்பும் மதிப்பும் ஒரு Promise
const retrievedValue = await storage.retrieve();
expect(retrievedValue).to.equal(testValue);
});
it("தட்டச்சு செய்யப்பட்ட ஆர்குமென்ட்களுடன் NumberChanged நிகழ்வை வெளியிட வேண்டும்", async function () {
const testValue = 100;
await expect(storage.store(testValue))
.to.emit(storage, "NumberChanged")
.withArgs(owner.address, testValue); // .withArgs உம் வகை சரிபார்க்கப்பட்டது!
});
});
இந்த சோதனையில், `சேமிப்பு` மாறி ஒரு பொதுவான ஒப்பந்த பொருள் மட்டுமல்ல; இது குறிப்பாக `சேமிப்பு` என தட்டச்சு செய்யப்பட்டுள்ளது. இது அதன் முறைகளுக்கான தானியங்கு நிரப்பலை வழங்குகிறது (`.store()`, `.retrieve()`) மற்றும், மிக முக்கியமாக, நாங்கள் அனுப்பும் ஆர்குமென்ட்களில் தொகுப்பு நேர சோதனைகள். சோதனை செய்வதற்கு முன்பே ஒரு எளிய ஆனால் முக்கியமான தவறு செய்வதிலிருந்து டைப்ஸ்கிரிப்ட் எவ்வாறு உங்களைத் தடுக்கும் என்பதை கருத்து தெரிவித்த வரி காட்டுகிறது.
படி 5: கருத்தியல் முன்பக்க ஒருங்கிணைப்பு
இதை ஒரு முன்பக்க பயன்பாட்டிற்கு (எ.கா., React மற்றும் `wagmi` ஐப் பயன்படுத்தி) நீட்டிப்பது அதே கொள்கையைப் பின்பற்றுகிறது. உங்கள் முன்பக்க திட்டத்துடன் `டைப் செயின்-வகைகள்` கோப்பகத்தை நீங்கள் பகிர்ந்து கொள்வீர்கள். ஒப்பந்தத்துடன் தொடர்பு கொள்ள ஒரு கொக்கியைத் தொடங்கும்போது, நீங்கள் உருவாக்கப்பட்ட ABI மற்றும் வகை வரையறைகளை வழங்குகிறீர்கள். இதன் விளைவாக, உங்கள் முழு முன்பக்கமும் உங்கள் ஸ்மார்ட் ஒப்பந்தத்தின் API ஐப் பற்றி அறிந்திருக்கிறது, இறுதி வரை வகை பாதுகாப்பை உறுதி செய்கிறது.
பிளாக்செயின் மேம்பாட்டில் மேம்பட்ட வகை பாதுகாப்பு முறைகள்
அடிப்படை செயல்பாடு அழைப்புகளைத் தாண்டி, பரவலாக்கப்பட்ட பயன்பாடுகளை உருவாக்குவதற்கான மிகவும் அதிநவீனமான மற்றும் வலுவான வடிவங்களை டைப்ஸ்கிரிப்ட் செயல்படுத்துகிறது.
தனிப்பயன் ஒப்பந்த பிழைகளை தட்டச்சு செய்தல்
Solidity இன் நவீன பதிப்புகள் டெவலப்பர்களை தனிப்பயன் பிழைகளை வரையறுக்க அனுமதிக்கின்றன, அவை சர அடிப்படையிலான `தேவை` செய்திகளை விட அதிக எரிவாயு திறன் கொண்டவை. ஒரு ஒப்பந்தத்திற்கு `பிழை போதிய இருப்பு (uint256 தேவை, uint256 கிடைக்கும்);` இருக்கலாம். இவை ஆன்-செயினில் சிறந்தவை என்றாலும், அவற்றை ஆஃப்-செயின் டிகோட் செய்வது கடினமாக இருக்கும். இருப்பினும், சமீபத்திய கருவிகள் இந்த தனிப்பயன் பிழைகளை அலச முடியும் மற்றும் டைப்ஸ்கிரிப்ட் மூலம், உங்கள் கிளையன்ட்-சைடு குறியீட்டில் தொடர்புடைய தட்டச்சு செய்யப்பட்ட பிழை வகுப்புகளை நீங்கள் உருவாக்கலாம். இது சுத்தமான, வகை-பாதுகாப்பான பிழை கையாளுதல் தர்க்கத்தை எழுத உங்களை அனுமதிக்கிறது:
try {
await contract.withdraw(amount);
} catch (error) {
if (error instanceof InsufficientBalanceError) {
// இப்போது நீங்கள் தட்டச்சு செய்யப்பட்ட பண்புகளை பாதுகாப்பாக அணுகலாம்
console.log(`உங்களுக்கு ${error.required} தேவை, ஆனால் ${error.available} மட்டுமே உள்ளது`);
}
}
ரன்டைம் சரிபார்ப்புக்கு Zod ஐ மேம்படுத்துதல்
டைப்ஸ்கிரிப்டின் பாதுகாப்பு வலை தொகுப்பு நேரத்தில் உள்ளது. ஒரு படிவத்திலிருந்து பயனர் உள்ளீடு அல்லது மூன்றாம் தரப்பு API இலிருந்து வரும் தரவு போன்ற ரன்டைமில் வெளிப்புற மூலங்களிலிருந்து வரும் செல்லாத தரவிலிருந்து இது உங்களைப் பாதுகாக்க முடியாது. இங்கேதான் Zod போன்ற ரன்டைம் சரிபார்ப்பு நூலகங்கள் டைப்ஸ்கிரிப்டுக்கு அத்தியாவசிய கூட்டாளர்களாகின்றன.
ஒரு ஒப்பந்த செயல்பாட்டிற்கான எதிர்பார்க்கப்படும் உள்ளீட்டை பிரதிபலிக்கும் ஒரு Zod ஸ்கீமாவை நீங்கள் வரையறுக்கலாம். பரிவர்த்தனையை அனுப்புவதற்கு முன்பு, இந்த ஸ்கீமாவிற்கு எதிராக பயனரின் உள்ளீட்டை நீங்கள் சரிபார்க்கிறீர்கள். தரவு சரியான வகை மட்டுமல்ல, மற்ற வணிக தர்க்கத்திற்கும் (எ.கா., ஒரு சரம் ஒரு செல்லுபடியாகும் முகவரியாக இருக்க வேண்டும், ஒரு எண் ஒரு குறிப்பிட்ட வரம்பிற்குள் இருக்க வேண்டும்) இணங்குகிறது என்பதை இது உறுதி செய்கிறது. இது இரண்டு அடுக்கு பாதுகாப்பை உருவாக்குகிறது: Zod ரன்டைம் தரவை சரிபார்க்கிறது, மேலும் தரவு உங்கள் பயன்பாட்டின் தர்க்கத்திற்குள் சரியாக கையாளப்படுவதை டைப்ஸ்கிரிப்ட் உறுதி செய்கிறது.
வகை-பாதுகாப்பான நிகழ்வு கையாளுதல்
ஸ்மார்ட் ஒப்பந்த நிகழ்வுகளைக் கேட்பது பதிலளிக்கக்கூடிய dApps ஐ உருவாக்குவதற்கு அடிப்படையானது. உருவாக்கப்பட்ட வகைகளுடன், நிகழ்வு கையாளுதல் மிகவும் பாதுகாப்பானது. நிகழ்வு வடிப்பான்களை உருவாக்கவும் நிகழ்வு பதிவுகளை அலசவும் டைப் செயின் தட்டச்சு செய்யப்பட்ட உதவியாளர்களை உருவாக்குகிறது. நீங்கள் ஒரு நிகழ்வைப் பெறும்போது, அதன் ஆர்குமென்ட்கள் ஏற்கனவே அலசப்பட்டு சரியாக தட்டச்சு செய்யப்பட்டுள்ளன. எங்கள் `சேமிப்பு` ஒப்பந்தத்தின் `NumberChanged` நிகழ்வுக்கு, நீங்கள் ஒரு பொருளைப் பெறுவீர்கள், அங்கு `மாற்றி` ஒரு `சரம்` (முகவரி) என தட்டச்சு செய்யப்படுகிறது மற்றும் `புதியஎண்` ஒரு `பெரிய இன்ட்`, ஊகங்களை நீக்குகிறது மற்றும் கையேடு அலசலில் இருந்து சாத்தியமான பிழைகள்.
உலகளாவிய தாக்கம்: வகை பாதுகாப்பு எவ்வாறு நம்பிக்கையையும் தத்தெடுப்பையும் வளர்க்கிறது
பிளாக்செயினில் டைப்ஸ்கிரிப்டின் நன்மைகள் தனிப்பட்ட டெவலப்பர் உற்பத்தித்திறனைத் தாண்டி விரிவடைகின்றன. அவை முழு சுற்றுச்சூழல் அமைப்பின் ஆரோக்கியம், பாதுகாப்பு மற்றும் வளர்ச்சியில் ஆழமான தாக்கத்தை ஏற்படுத்துகின்றன.
பாதிப்புகளைக் குறைத்தல் மற்றும் பாதுகாப்பை அதிகரித்தல்
வரிசைப்படுத்துவதற்கு முன்பு ஒரு பெரிய வகை பிழைகளை பிடிப்பதன் மூலம், டைப்ஸ்கிரிப்ட் நேரடியாக ஒரு பாதுகாப்பான பரவலாக்கப்பட்ட வலைக்கு பங்களிக்கிறது. குறைவான பிழைகள் என்றால் சுரண்டல்கள் குறைவாகும், இது பயனர்கள் மற்றும் நிறுவன முதலீட்டாளர்கள் மத்தியில் நம்பிக்கையை உருவாக்குகிறது. டைப்ஸ்கிரிப்ட் போன்ற கருவிகளால் இயக்கப்படும் ஒரு வலுவான பொறியியலுக்கான நற்பெயர், எந்தவொரு பிளாக்செயின் திட்டத்தின் நீண்டகால சாத்தியக்கூறுகளுக்கு மிகவும் முக்கியமானது.
டெவலப்பர்களுக்கான நுழைவுக்கான தடையைக் குறைத்தல்
Web3 இடம் முக்கிய நீரோட்டத்தை அடைய Web2 டெவலப்பர்களின் பெரிய குளத்திலிருந்து திறமையை ஈர்க்க வேண்டும். ஜாவாஸ்கிரிப்ட் அடிப்படையிலான பிளாக்செயின் மேம்பாட்டின் குழப்பமான மற்றும் அடிக்கடி மன்னிக்க முடியாத இயல்பு ஒரு குறிப்பிடத்தக்க தடையாக இருக்கலாம். டைப்ஸ்கிரிப்ட், அதன் கட்டமைக்கப்பட்ட இயல்பு மற்றும் சக்திவாய்ந்த கருவிகள் மூலம், பழக்கமான மற்றும் குறைந்த அச்சுறுத்தலான ஒன்றிணைக்கும் அனுபவத்தை வழங்குகிறது, இது உலகம் முழுவதிலுமிருந்து திறமையான பொறியாளர்களுக்கு பரவலாக்கப்பட்ட பயன்பாடுகளை உருவாக்குவதற்கு மாற உதவுகிறது.
உலகளாவிய, பரவலாக்கப்பட்ட குழுக்களில் ஒத்துழைப்பை மேம்படுத்துதல்
பிளாக்செயின் மற்றும் திறந்த மூல மேம்பாடு கைகோர்த்து செல்கின்றன. திட்டங்கள் பெரும்பாலும் வெவ்வேறு நேர மண்டலங்களில் பணிபுரியும் பங்களிப்பாளர்களின் உலகளவில் விநியோகிக்கப்பட்ட குழுக்களால் பராமரிக்கப்படுகின்றன. இதுபோன்ற ஒரு ஒத்திசைவற்ற சூழலில், தெளிவான மற்றும் சுய ஆவணப்படுத்தும் குறியீடு ஒரு ஆடம்பரம் அல்ல; இது ஒரு அவசியம். டைப்ஸ்கிரிப்ட் குறியீட்டுத் தளம், அதன் வெளிப்படையான வகைகள் மற்றும் இடைமுகங்களுடன், கணினியின் வெவ்வேறு பகுதிகளுக்கும் வெவ்வேறு டெவலப்பர்களுக்கும் இடையிலான நம்பகமான ஒப்பந்தமாக செயல்படுகிறது, தடையற்ற ஒத்துழைப்பை எளிதாக்குகிறது மற்றும் ஒருங்கிணைப்பு உராய்வைக் குறைக்கிறது.
முடிவுரை: டைப்ஸ்கிரிப்ட் மற்றும் பிளாக்செயினின் தவிர்க்க முடியாத இணைவு
பிளாக்செயின் மேம்பாட்டு சுற்றுச்சூழல் அமைப்பின் பாதை தெளிவாக உள்ளது. தொடர்பு அடுக்கை ஜாவாஸ்கிரிப்ட் ஸ்கிரிப்டுகளின் தளர்வான தொகுப்பாக கருதும் நாட்கள் முடிந்துவிட்டன. பாதுகாப்பு, நம்பகத்தன்மை மற்றும் பராமரிப்புக்கான தேவை டைப்ஸ்கிரிப்டை ஒரு "நல்லதாக இருக்க வேண்டும்" என்பதிலிருந்து ஒரு தொழில்துறை-தரமான சிறந்த நடைமுறையாக உயர்த்தியுள்ளது. `viem` மற்றும் `wagmi` போன்ற புதிய தலைமுறை கருவிகள் டைப்ஸ்கிரிப்ட்-முதல் திட்டங்களாக கட்டப்பட்டு வருகின்றன, இது அதன் அடிப்படை முக்கியத்துவத்திற்கு சான்றாகும்.
உங்கள் பிளாக்செயின் பணிப்பாய்வுகளில் டைப்ஸ்கிரிப்டை ஒருங்கிணைப்பது நிலைத்தன்மையில் ஒரு முதலீடு. இது ஒழுக்கத்தை கட்டாயப்படுத்துகிறது, நோக்கத்தை தெளிவுபடுத்துகிறது மற்றும் பரவலான பொதுவான பிழைகளுக்கு எதிராக ஒரு சக்திவாய்ந்த தானியங்கி பாதுகாப்பு வலையை வழங்குகிறது. பிழைகள் நிரந்தரமான மற்றும் விலை உயர்ந்த மாற்ற முடியாத உலகில், இந்த தடுப்பு அணுகுமுறை விவேகமானதாக மட்டுமல்ல - இது அவசியம். பரவலாக்கப்பட்ட எதிர்காலத்தில் நீண்ட காலத்திற்கு உருவாக்குவதில் தீவிரமாக இருக்கும் எந்தவொரு தனிநபர், குழு அல்லது அமைப்புக்கும், டைப்ஸ்கிரிப்டை ஏற்றுக்கொள்வது வெற்றிக்கான ஒரு முக்கியமான உத்தி.