ప్రధాన కంటెంట్‌కు దాటవేయి
Change page

స్మార్ట్ కాంట్రాక్ట్‌ల నిర్మాణం

స్మార్ట్ కాంట్రాక్ట్ అనేది ఎథీరియంపై ఒక చిరునామా వద్ద రన్ అయ్యే ప్రోగ్రామ్. అవి లావాదేవీని స్వీకరించినప్పుడు అమలు చేయగల డేటా మరియు ఫంక్షన్‌లతో రూపొందించబడ్డాయి. స్మార్ట్ కాంట్రాక్ట్‌ను రూపొందించే వాటి యొక్క అవలోకనం ఇక్కడ ఉంది.

ముందస్తు అవసరాలు

ముందుగా మీరు స్మార్ట్ కాంట్రాక్ట్‌ల గురించి చదివారని నిర్ధారించుకోండి. మీకు ఇప్పటికే JavaScript లేదా Python వంటి ప్రోగ్రామింగ్ భాషల గురించి తెలుసని ఈ డాక్యుమెంట్ భావిస్తుంది.

డేటా

ఏదైనా కాంట్రాక్ట్ డేటా తప్పనిసరిగా ఒక స్థానానికి కేటాయించబడాలి: storage లేదా memory కి. స్మార్ట్ కాంట్రాక్ట్‌లో స్టోరేజ్‌ని సవరించడం ఖర్చుతో కూడుకున్నది, కాబట్టి మీ డేటా ఎక్కడ ఉండాలో మీరు పరిగణించాలి.

స్టోరేజ్

నిరంతర డేటాను స్టోరేజ్ అని పిలుస్తారు మరియు ఇది స్థితి వేరియబుల్స్ ద్వారా సూచించబడుతుంది. ఈ విలువలు బ్లాక్‌చైన్‌లో శాశ్వతంగా నిల్వ చేయబడతాయి. మీరు రకాన్ని (type) ప్రకటించాలి, తద్వారా కాంట్రాక్ట్ కంపైల్ అయినప్పుడు బ్లాక్‌చైన్‌లో దానికి ఎంత స్టోరేజ్ అవసరమో ట్రాక్ చేయగలదు.

// Solidity ఉదాహరణ
contract SimpleStorage {
    uint storedData; // స్థితి వేరియబుల్
    // ...
}
# Vyper ఉదాహరణ
storedData: int128

మీరు ఇప్పటికే ఆబ్జెక్ట్-ఓరియెంటెడ్ భాషలను ప్రోగ్రామ్ చేసి ఉంటే, మీకు చాలా రకాల గురించి తెలిసి ఉంటుంది. అయితే, మీరు ఎథీరియం డెవలప్‌మెంట్‌కు కొత్త అయితే address మీకు కొత్తగా ఉండాలి.

address రకం ఎథీరియం చిరునామాను కలిగి ఉంటుంది, ఇది 20 బైట్‌లు లేదా 160 బిట్‌లకు సమానం. ఇది ముందు 0x తో హెక్సాడెసిమల్ సంజ్ఞామానంలో తిరిగి వస్తుంది.

ఇతర రకాలు ఇవి:

  • బూలియన్ (boolean)
  • పూర్ణాంకం (integer)
  • ఫిక్స్‌డ్ పాయింట్ నంబర్‌లు
  • ఫిక్స్‌డ్-సైజ్ బైట్ అర్రేలు
  • డైనమిక్‌గా సైజ్ చేయబడిన బైట్ అర్రేలు
  • రేషనల్ మరియు ఇంటిజర్ లిటరల్స్
  • స్ట్రింగ్ లిటరల్స్
  • హెక్సాడెసిమల్ లిటరల్స్
  • ఎనమ్స్ (enums)

మరింత వివరణ కోసం, డాక్యుమెంట్లను చూడండి:

మెమరీ

కాంట్రాక్ట్ ఫంక్షన్ అమలు చేయబడే జీవితకాలం వరకు మాత్రమే నిల్వ చేయబడే విలువలని మెమరీ వేరియబుల్స్ అంటారు. ఇవి బ్లాక్‌చైన్‌లో శాశ్వతంగా నిల్వ చేయబడవు కాబట్టి, వీటిని ఉపయోగించడం చాలా చౌక.

EVM డేటాను (స్టోరేజ్, మెమరీ మరియు స్టాక్) ఎలా నిల్వ చేస్తుందో Solidity డాక్యుమెంట్లలో (opens in a new tab) మరింత తెలుసుకోండి.

ఎన్విరాన్‌మెంట్ వేరియబుల్స్

మీ కాంట్రాక్ట్‌లో మీరు నిర్వచించే వేరియబుల్స్‌తో పాటు, కొన్ని ప్రత్యేక గ్లోబల్ వేరియబుల్స్ ఉన్నాయి. ఇవి ప్రధానంగా బ్లాక్‌చైన్ లేదా ప్రస్తుత లావాదేవీ గురించి సమాచారాన్ని అందించడానికి ఉపయోగించబడతాయి.

ఉదాహరణలు:

ప్రాప్ (Prop)స్థితి వేరియబుల్వివరణ
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. నిర్దిష్ట ఆప్‌కోడ్‌లను కలిగి ఉన్న ఇన్‌లైన్ అసెంబ్లీని ఉపయోగించడం.

కన్స్ట్రక్టర్ ఫంక్షన్‌లు

కాంట్రాక్ట్ మొదటిసారి డిప్లాయ్ చేయబడినప్పుడు 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 పంపడానికి కాంట్రాక్ట్‌లను అనుమతిస్తాయి.

ఫంక్షన్‌లను రాయడం

మీ ఫంక్షన్‌కు ఇవి అవసరం:

  • పారామీటర్ వేరియబుల్ మరియు రకం (ఇది పారామీటర్‌లను అంగీకరిస్తే)
  • అంతర్గత/బాహ్య ప్రకటన (internal/external)
  • ప్యూర్/వ్యూ/పేయబుల్ ప్రకటన (pure/view/payable)
  • రిటర్న్స్ రకం (ఇది విలువను తిరిగి ఇస్తే)

పూర్తి కాంట్రాక్ట్ ఈ విధంగా ఉండవచ్చు. ఇక్కడ constructor ఫంక్షన్ dapp_name వేరియబుల్ కోసం ప్రారంభ విలువను అందిస్తుంది.

ఈవెంట్‌లు మరియు లాగ్‌లు

ఈవెంట్‌లు మీ స్మార్ట్ కాంట్రాక్ట్‌ను మీ ఫ్రంటెండ్ లేదా ఇతర సబ్‌స్క్రైబ్ చేసుకున్న అప్లికేషన్‌లతో కమ్యూనికేట్ చేయడానికి అనుమతిస్తాయి. లావాదేవీ ధృవీకరించబడి, బ్లాక్‌కి జోడించబడిన తర్వాత, స్మార్ట్ కాంట్రాక్ట్‌లు ఈవెంట్‌లను విడుదల చేయగలవు మరియు సమాచారాన్ని లాగ్ చేయగలవు, ఆ తర్వాత ఫ్రంటెండ్ వాటిని ప్రాసెస్ చేసి ఉపయోగించుకోగలదు.

ఉల్లేఖన ఉదాహరణలు

ఇవి Solidity లో వ్రాయబడిన కొన్ని ఉదాహరణలు. మీరు కోడ్‌తో ప్రయోగాలు చేయాలనుకుంటే, మీరు వాటితో Remix (opens in a new tab) లో ఇంటరాక్ట్ అవ్వవచ్చు.

హలో వరల్డ్

టోకెన్

ప్రత్యేక డిజిటల్ ఆస్తి

మరింత పఠనం

స్మార్ట్ కాంట్రాక్ట్‌ల గురించి మరింత పూర్తి అవగాహన కోసం Solidity మరియు Vyper డాక్యుమెంటేషన్‌ను చూడండి: