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

திறன் ஒப்பந்தங்களின் கட்டமைப்பு

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

முன்நிபந்தனைகள்

முதலில் திறன் ஒப்பந்தங்கள் பற்றிப் படித்திருப்பதை உறுதிசெய்யவும். JavaScript அல்லது Python போன்ற நிரலாக்க மொழிகளை நீங்கள் ஏற்கனவே அறிந்திருக்கிறீர்கள் என்று இந்த ஆவணம் கருதுகிறது.

தரவு

எந்தவொரு ஒப்பந்தத் தரவும் ஒரு இடத்திற்கு ஒதுக்கப்பட வேண்டும்: storage அல்லது memory. ஒரு திறன் ஒப்பந்தத்தில் சேமிப்பகத்தை மாற்றுவது செலவுமிக்கது, எனவே உங்கள் தரவு எங்கு இருக்க வேண்டும் என்பதை நீங்கள் கருத்தில் கொள்ள வேண்டும்.

சேமிப்பகம்

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

// Solidity உதாரணம்
contract SimpleStorage {
    uint storedData; // நிலை மாறி
    // ...
}
# Vyper உதாரணம்
storedData: int128

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

ஒரு address வகையானது 20 பைட்டுகள் அல்லது 160 பிட்களுக்குச் சமமான எத்திரியம் முகவரியை வைத்திருக்க முடியும். இது முன்னணியில் 0x உடன் ஹெக்ஸாடெசிமல் குறியீட்டில் திரும்பும்.

பிற வகைகள் பின்வருமாறு:

  • பூலியன் (boolean)
  • முழு எண் (integer)
  • நிலையான புள்ளி எண்கள் (fixed point numbers)
  • நிலையான அளவு பைட் வரிசைகள் (fixed-size byte arrays)
  • மாறும் அளவு பைட் வரிசைகள் (dynamically sized byte arrays)
  • விகிதமுறு மற்றும் முழு எண் எழுத்துருக்கள் (rational and integer literals)
  • சரம் எழுத்துருக்கள் (string literals)
  • ஹெக்ஸாடெசிமல் எழுத்துருக்கள் (hexadecimal literals)
  • எனம்கள் (enums)

மேலும் விளக்கத்திற்கு, ஆவணங்களைப் பார்க்கவும்:

நினைவகம்

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

EVM எவ்வாறு தரவைச் சேமிக்கிறது (சேமிப்பகம், நினைவகம் மற்றும் அடுக்கு) என்பதைப் பற்றி Solidity ஆவணங்களில் (opens in a new tab) மேலும் அறிக.

சூழல் மாறிகள்

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

எடுத்துக்காட்டுகள்:

பண்புநிலை மாறிவிளக்கம்
block.timestampuint256தற்போதைய தொகுதி சகாப்த நேரமுத்திரை
msg.senderaddressசெய்தியை அனுப்புபவர் (தற்போதைய அழைப்பு)

செயல்பாடுகள்

மிகவும் எளிமையான சொற்களில், உள்வரும் பரிவர்த்தனைகளுக்குப் பதிலளிக்கும் வகையில் செயல்பாடுகள் தகவலைப் பெறலாம் அல்லது தகவலை அமைக்கலாம்.

இரண்டு வகையான செயல்பாட்டு அழைப்புகள் உள்ளன:

  • internal – இவை EVM அழைப்பை உருவாக்காது
    • உள் செயல்பாடுகள் மற்றும் நிலை மாறிகளை உள்நாட்டில் மட்டுமே அணுக முடியும் (அதாவது, தற்போதைய ஒப்பந்தம் அல்லது அதிலிருந்து பெறப்பட்ட ஒப்பந்தங்களுக்குள் இருந்து)
  • external – இவை EVM அழைப்பை உருவாக்குகின்றன
    • வெளிப்புற செயல்பாடுகள் ஒப்பந்த இடைமுகத்தின் ஒரு பகுதியாகும், அதாவது அவற்றை மற்ற ஒப்பந்தங்களிலிருந்தும் பரிவர்த்தனைகள் மூலமாகவும் அழைக்கலாம். ஒரு வெளிப்புறச் செயல்பாடு f ஐ உள்நாட்டில் அழைக்க முடியாது (அதாவது, f() வேலை செய்யாது, ஆனால் this.f() வேலை செய்யும்).

அவை public அல்லது private ஆகவும் இருக்கலாம்

  • public செயல்பாடுகளை ஒப்பந்தத்திற்குள் இருந்து உள்நாட்டிலோ அல்லது செய்திகள் வழியாக வெளிப்புறமாகவோ அழைக்கலாம்
  • private செயல்பாடுகள் அவை வரையறுக்கப்பட்ட ஒப்பந்தத்திற்கு மட்டுமே தெரியும், பெறப்பட்ட ஒப்பந்தங்களில் அல்ல

செயல்பாடுகள் மற்றும் நிலை மாறிகள் இரண்டையும் பொது அல்லது தனிப்பட்டதாக மாற்றலாம்

ஒரு ஒப்பந்தத்தில் நிலை மாறியைப் புதுப்பிப்பதற்கான செயல்பாடு இங்கே:

// Solidity உதாரணம்
function update_name(string value) public {
    dapp_name = value;
}
  • string வகையின் அளவுரு value செயல்பாட்டிற்கு அனுப்பப்படுகிறது: update_name
  • இது public என அறிவிக்கப்பட்டுள்ளது, அதாவது யார் வேண்டுமானாலும் இதை அணுகலாம்
  • இது view என அறிவிக்கப்படவில்லை, எனவே இது ஒப்பந்த நிலையை மாற்றியமைக்கலாம்

காட்சிச் செயல்பாடுகள் (View functions)

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

// Solidity உதாரணம்
function balanceOf(address _owner) public view returns (uint256 _balance) {
    return ownerPizzaCount[_owner];
}
dappName: public(string)

@view
@public
def readName() -> string:
  return dappName

நிலையை மாற்றுவதாகக் கருதப்படுவது எது:

  1. நிலை மாறிகளுக்கு எழுதுதல்.
  2. நிகழ்வுகளை வெளியிடுதல் (opens in a new tab).
  3. பிற ஒப்பந்தங்களை உருவாக்குதல் (opens in a new tab).
  4. selfdestruct ஐப் பயன்படுத்துதல்.
  5. அழைப்புகள் மூலம் ஈதரை அனுப்புதல்.
  6. view அல்லது pure எனக் குறிக்கப்படாத எந்தவொரு செயல்பாட்டையும் அழைத்தல்.
  7. குறைந்த-நிலை அழைப்புகளைப் பயன்படுத்துதல்.
  8. குறிப்பிட்ட ஆப்-குறியீடுகளைக் (opcodes) கொண்ட இன்லைன் அசெம்பிளியைப் பயன்படுத்துதல்.

ஆக்கிச் செயல்பாடுகள் (Constructor functions)

ஒப்பந்தம் முதன்முதலில் நிலைநிறுத்தப்படும்போது constructor செயல்பாடுகள் ஒருமுறை மட்டுமே செயல்படுத்தப்படும். பல வகுப்பு அடிப்படையிலான நிரலாக்க மொழிகளில் உள்ள constructor ஐப் போலவே, இந்தச் செயல்பாடுகள் பெரும்பாலும் நிலை மாறிகளை அவற்றின் குறிப்பிட்ட மதிப்புகளுக்குத் துவக்குகின்றன.

# Vyper உதாரணம்

@external
def __init__(_beneficiary: address, _bidding_time: uint256):
    self.beneficiary = _beneficiary
    self.auctionStart = block.timestamp
    self.auctionEnd = self.auctionStart + _bidding_time

உள்ளமைக்கப்பட்ட செயல்பாடுகள்

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

  • address.send() – Solidity
  • send(address) – Vyper

இவை மற்ற கணக்குகளுக்கு ETH ஐ அனுப்ப ஒப்பந்தங்களை அனுமதிக்கின்றன.

செயல்பாடுகளை எழுதுதல்

உங்கள் செயல்பாட்டிற்குத் தேவையானது:

  • அளவுரு மாறி மற்றும் வகை (அது அளவுருக்களை ஏற்றுக் கொண்டால்)
  • உள்/வெளிப்புற அறிவிப்பு
  • pure/view/payable அறிவிப்பு
  • திரும்பும் வகை (அது ஒரு மதிப்பை வழங்கினால்)

ஒரு முழுமையான ஒப்பந்தம் இதுபோன்று இருக்கலாம். இங்கே constructor செயல்பாடு dapp_name மாறிக்கு ஆரம்ப மதிப்பை வழங்குகிறது.

நிகழ்வுகள் மற்றும் பதிவுகள்

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

சிறுகுறிப்பு எடுத்துக்காட்டுகள்

இவை Solidity இல் எழுதப்பட்ட சில எடுத்துக்காட்டுகள். நீங்கள் குறியீட்டுடன் விளையாட விரும்பினால், Remix (opens in a new tab) இல் அவற்றுடன் தொடர்பு கொள்ளலாம்.

ஹலோ வேர்ல்ட் (Hello world)

வில்லை

தனித்துவமான டிஜிட்டல் சொத்து

மேலும் படிக்க

திறன் ஒப்பந்தங்களின் முழுமையான கண்ணோட்டத்திற்கு Solidity மற்றும் Vyper இன் ஆவணங்களைப் பார்க்கவும்: