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

ஸ்மார்ட் ஒப்பந்தங்களின் கட்டமைப்பு

பக்கம் கடைசியாகப் புதுப்பிக்கப்பட்டது: 15 ஏப்ரல், 2026

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

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

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

தரவு

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

சேமிப்பகம்

நிலையான தரவு சேமிப்பகம் (storage) என்று குறிப்பிடப்படுகிறது மற்றும் இது நிலை மாறிகளால் (state variables) குறிக்கப்படுகிறது. இந்த மதிப்புகள் பிளாக்செயினில் நிரந்தரமாக சேமிக்கப்படும். தொகுக்கப்படும்போது (compile) பிளாக்செயினில் எவ்வளவு சேமிப்பகம் தேவை என்பதை ஒப்பந்தம் கண்காணிக்க, நீங்கள் அதன் வகையை (type) அறிவிக்க வேண்டும்.

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

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

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

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

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

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

நினைவகம்

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

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

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

உங்கள் ஒப்பந்தத்தில் நீங்கள் வரையறுக்கும் மாறிகளுக்கு கூடுதலாக, சில சிறப்பு உலகளாவிய மாறிகள் (global variables) உள்ளன. அவை முதன்மையாக பிளாக்செயின் அல்லது தற்போதைய பரிவர்த்தனை பற்றிய தகவல்களை வழங்கப் பயன்படுத்தப்படுகின்றன.

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

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

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

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

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

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

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

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

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

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

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

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

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

// 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. நிகழ்வுகளை வெளியிடுதல் (Emitting events) (opens in a new tab).
  3. பிற ஒப்பந்தங்களை உருவாக்குதல் (opens in a new tab).
  4. selfdestruct ஐப் பயன்படுத்துதல்.
  5. அழைப்புகள் (calls) மூலம் ஈதரை அனுப்புதல்.
  6. view அல்லது pure எனக் குறிக்கப்படாத எந்தவொரு செயல்பாட்டையும் அழைத்தல்.
  7. குறைந்த-நிலை அழைப்புகளைப் (low-level calls) பயன்படுத்துதல்.
  8. குறிப்பிட்ட ஆப்கோடுகளைக் (opcodes) கொண்ட இன்லைன் அசெம்பிளியைப் பயன்படுத்துதல்.

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

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

# Vyper உதாரணம்

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

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

உங்கள் ஒப்பந்தத்தில் நீங்கள் வரையறுக்கும் மாறிகள் மற்றும் செயல்பாடுகளுக்கு கூடுதலாக, சில சிறப்பு உள்ளமைக்கப்பட்ட செயல்பாடுகள் (built-in functions) உள்ளன. மிகவும் வெளிப்படையான எடுத்துக்காட்டு:

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

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

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

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

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

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

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

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

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

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

Hello world

Token

Unique digital asset

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

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

இந்தக் கட்டுரை பயனுள்ளதாக இருந்ததா?