ప్రధాన కంటెంట్‌కి స్కిప్ చేయండి
Change page

స్మార్ట్ కాంట్రాక్ట్ భాషలు

పేజీ చివరి అప్‌డేట్: 22 అక్టోబర్, 2025

ఎథేరియం గురించిన ఒక గొప్ప విషయం ఏమిటంటే, స్మార్ట్ కాంట్రాక్టులను సాపేక్షంగా డెవలపర్-స్నేహపూర్వక భాషలను ఉపయోగించి ప్రోగ్రామ్ చేయవచ్చు. మీకు పైథాన్ లేదా ఏదైనా కర్లీ-బ్రాకెట్ భాషopens in a new tabతో అనుభవం ఉంటే, మీరు పరిచితమైన సింటాక్స్‌తో కూడిన భాషను కనుగొనవచ్చు.

అత్యంత చురుకైన మరియు నిర్వహించబడుతున్న రెండు భాషలు:

  • Solidity
  • Vyper

రీమిక్స్ IDE సాలిడిటీ మరియు వైపర్ రెండింటిలోనూ కాంట్రాక్టులను సృష్టించడానికి మరియు పరీక్షించడానికి ఒక సమగ్ర అభివృద్ధి వాతావరణాన్ని అందిస్తుంది. కోడింగ్ ప్రారంభించడానికి ఇన్-బ్రౌజర్ రీమిక్స్ IDEని ప్రయత్నించండిopens in a new tab.

మరింత అనుభవం ఉన్న డెవలపర్లు ఎథేరియం వర్చువల్ మెషీన్ కోసం ఒక మధ్యంతర భాష అయిన Yul, లేదా Yul కు పొడిగింపు అయిన Yul+ ను కూడా ఉపయోగించాలనుకోవచ్చు.

మీకు ఆసక్తి ఉండి, ఇంకా భారీ అభివృద్ధిలో ఉన్న కొత్త భాషలను పరీక్షించడానికి సహాయం చేయాలనుకుంటే, ప్రస్తుతం ఇంకా శైశవ దశలో ఉన్న ఒక అభివృద్ధి చెందుతున్న స్మార్ట్ కాంట్రాక్ట్ భాష అయిన Fe తో మీరు ప్రయోగాలు చేయవచ్చు.

అవసరాలు

ప్రోగ్రామింగ్ భాషల, ముఖ్యంగా జావాస్క్రిప్ట్ లేదా పైథాన్ యొక్క మునుపటి జ్ఞానం, స్మార్ట్ కాంట్రాక్ట్ భాషలలోని తేడాలను అర్థం చేసుకోవడంలో మీకు సహాయపడుతుంది. భాషా పోలికలలోకి చాలా లోతుగా వెళ్లే ముందు మీరు స్మార్ట్ కాంట్రాక్టులను ఒక భావనగా అర్థం చేసుకోవాలని కూడా మేము సిఫార్సు చేస్తున్నాము. స్మార్ట్ కాంట్రాక్టులకు పరిచయం.

సాలిడిటీ

  • స్మార్ట్ కాంట్రాక్టులను అమలు చేయడం కోసం ఆబ్జెక్ట్-ఓరియెంటెడ్, ఉన్నత-స్థాయి భాష.
  • C++ ద్వారా అత్యంత గాఢంగా ప్రభావితమైన కర్లీ-బ్రాకెట్ భాష.
  • స్టాటిక్‌గా టైప్ చేయబడింది (ఒక వేరియబుల్ రకం కంపైల్ సమయంలో తెలుస్తుంది).
  • మద్దతు ఇస్తుంది:
    • ఇన్హెరిటెన్స్ (మీరు ఇతర కాంట్రాక్టులను విస్తరించవచ్చు).
    • లైబ్రరీలు (మీరు పునర్వినియోగ కోడ్‌ను సృష్టించవచ్చు, దానిని మీరు ఇతర ఆబ్జెక్ట్ ఓరియెంటెడ్ ప్రోగ్రామింగ్ భాషలలో ఒక స్టాటిక్ క్లాస్‌లోని స్టాటిక్ ఫంక్షన్ల వలె వివిధ కాంట్రాక్టుల నుండి కాల్ చేయవచ్చు).
    • సంక్లిష్టమైన యూజర్-డిఫైన్డ్ రకాలు.

ఉదాహరణ కాంట్రాక్ట్

1// SPDX-లైసెన్స్-ఐడెంటిఫైయర్: GPL-3.0
2pragma solidity >= 0.7.0;
3
4contract Coin {
5 // "పబ్లిక్" అనే కీవర్డ్ వేరియబుల్స్‌ను చేస్తుంది
6 // ఇతర కాంట్రాక్టుల నుండి యాక్సెస్ చేయగలవు
7 address public minter;
8 mapping (address => uint) public balances;
9
10 // ఈవెంట్‌లు నిర్దిష్టమైన వాటికి ప్రతిస్పందించడానికి క్లయింట్‌లను అనుమతిస్తాయి
11 // మీరు ప్రకటించే కాంట్రాక్ట్ మార్పులు
12 event Sent(address from, address to, uint amount);
13
14 // కాంట్రాక్ట్ ఉన్నప్పుడు మాత్రమే కన్స్ట్రక్టర్ కోడ్ అమలు చేయబడుతుంది
15 // సృష్టించబడింది
16 constructor() {
17 minter = msg.sender;
18 }
19
20 // కొత్తగా సృష్టించబడిన నాణేల మొత్తాన్ని ఒక చిరునామాకు పంపుతుంది
21 // కాంట్రాక్ట్ సృష్టికర్త ద్వారా మాత్రమే పిలువబడుతుంది
22 function mint(address receiver, uint amount) public {
23 require(msg.sender == minter);
24 require(amount < 1e60);
25 balances[receiver] += amount;
26 }
27
28 // ఉన్న నాణేల మొత్తాన్ని పంపుతుంది
29 // ఏ కాలర్ నుండి అయినా ఒక చిరునామాకు
30 function send(address receiver, uint amount) public {
31 require(amount <= balances[msg.sender], "Insufficient balance.");
32 balances[msg.sender] -= amount;
33 balances[receiver] += amount;
34 emit Sent(msg.sender, receiver, amount);
35 }
36}
అన్నీ చూపించు

ఈ ఉదాహరణ సాలిడిటీ కాంట్రాక్ట్ సింటాక్స్ ఎలా ఉంటుందో మీకు ఒక అవగాహన ఇవ్వాలి. ఫంక్షన్లు మరియు వేరియబుల్స్ యొక్క మరింత వివరణాత్మక వర్ణన కోసం, డాక్స్‌ని చూడండిopens in a new tab.

వైపర్

  • పైథానిక్ ప్రోగ్రామింగ్ భాష
  • బలమైన టైపింగ్
  • చిన్న మరియు అర్థమయ్యే కంపైలర్ కోడ్
  • సమర్థవంతమైన బైట్‌కోడ్ ఉత్పత్తి
  • కాంట్రాక్టులను మరింత సురక్షితంగా మరియు ఆడిట్ చేయడానికి సులభతరం చేసే లక్ష్యంతో సాలిడిటీ కంటే ఉద్దేశపూర్వకంగా తక్కువ ఫీచర్లను కలిగి ఉంది. వైపర్ వీటికి మద్దతు ఇవ్వదు:
    • మాడిఫైయర్‌లు
    • ఇన్హెరిటెన్స్
    • ఇన్‌లైన్ అసెంబ్లీ
    • ఫంక్షన్ ఓవర్‌లోడింగ్
    • ఆపరేటర్ ఓవర్‌లోడింగ్
    • రికర్సివ్ కాలింగ్
    • అనంత-నిడివి లూప్‌లు
    • బైనరీ ఫిక్స్‌డ్ పాయింట్లు

మరింత సమాచారం కోసం, వైపర్ హేతుబద్ధతను చదవండిopens in a new tab.

ఉదాహరణ

1# ఓపెన్ వేలం
2
3# వేలం పారామీటర్లు
4
5# లబ్ధిదారుడు అత్యధిక బిడ్డర్ నుండి డబ్బును అందుకుంటారు
6
7beneficiary: public(address)
8auctionStart: public(uint256)
9auctionEnd: public(uint256)
10
11# వేలం ప్రస్తుత స్థితి
12
13highestBidder: public(address)
14highestBid: public(uint256)
15
16# చివరిలో నిజం అని సెట్ చేయబడింది, ఏదైనా మార్పును అనుమతించదు
17
18ended: public(bool)
19
20# వాపసు చేయబడిన బిడ్‌లను ట్రాక్ చేయండి, తద్వారా మేము ఉపసంహరణ నమూనాను అనుసరించవచ్చు
21
22pendingReturns: public(HashMap[address, uint256])
23
24# `_bidding_time` తో ఒక సాధారణ వేలం సృష్టించండి
25
26# సెకన్ల బిడ్డింగ్ సమయం
27
28# లబ్ధిదారుడి చిరునామా `_beneficiary`.
29
30@external
31def __init__(_beneficiary: address, _bidding_time: uint256):
32 self.beneficiary = _beneficiary
33 self.auctionStart = block.timestamp
34 self.auctionEnd = self.auctionStart + _bidding_time
35
36# పంపిన విలువతో వేలంలో బిడ్ చేయండి
37
38# ఈ లావాదేవీతో పాటు.
39
40# ఒకవేళ మాత్రమే విలువ వాపసు చేయబడుతుంది
41
42# వేలం గెలవలేదు.
43
44@external
45@payable
46def bid():
47 # బిడ్డింగ్ వ్యవధి ముగిసిందో లేదో తనిఖీ చేయండి.
48 assert block.timestamp < self.auctionEnd
49 # బిడ్ తగినంత ఎక్కువగా ఉందో లేదో తనిఖీ చేయండి
50 assert msg.value > self.highestBid
51 # మునుపటి అధిక బిడ్డర్ కోసం వాపసును ట్రాక్ చేయండి
52 self.pendingReturns[self.highestBidder] += self.highestBid
53 # కొత్త అధిక బిడ్‌ను ట్రాక్ చేయండి
54 self.highestBidder = msg.sender
55 self.highestBid = msg.value
56
57# గతంలో వాపసు చేయబడిన బిడ్‌ను ఉపసంహరించుకోండి. ఉపసంహరణ నమూనా
58
59# భద్రతా సమస్యను నివారించడానికి ఇక్కడ ఉపయోగించబడింది. వాపసులు నేరుగా ఉంటే
60
61# బిడ్()లో భాగంగా పంపబడితే, ఒక హానికరమైన బిడ్డింగ్ కాంట్రాక్ట్ బ్లాక్ చేయగలదు
62
63# ఆ వాపసులను మరియు తద్వారా కొత్త అధిక బిడ్‌లు రాకుండా నిరోధించవచ్చు.
64
65@external
66def withdraw():
67 pending_amount: uint256 = self.pendingReturns[msg.sender]
68 self.pendingReturns[msg.sender] = 0
69 send(msg.sender, pending_amount)
70
71# వేలం ముగించి, అత్యధిక బిడ్‌ను పంపండి
72
73# లబ్ధిదారుడికి.
74
75@external
76def endAuction():
77 # ఇది ఇంటరాక్ట్ చేసే ఫంక్షన్లను రూపొందించడానికి ఒక మంచి మార్గదర్శకం
78 # ఇతర కాంట్రాక్టులతో (అంటే, వారు ఫంక్షన్లను కాల్ చేస్తారు లేదా ఈథర్ పంపుతారు)
79 # మూడు దశలుగా:
80 # 1. షరతులను తనిఖీ చేయడం
81 # 2. చర్యలను నిర్వహించడం (సంభావ్యంగా షరతులను మార్చడం)
82 # 3. ఇతర కాంట్రాక్టులతో ఇంటరాక్ట్ అవ్వడం
83 # ఈ దశలు గందరగోళానికి గురైతే, ఇతర కాంట్రాక్ట్ కాల్ చేయగలదు
84 # ప్రస్తుత కాంట్రాక్ట్‌లోకి తిరిగి వచ్చి స్థితిని సవరించండి లేదా కారణం కావచ్చు
85 # ప్రభావాలు (ఈథర్ చెల్లింపు) చాలాసార్లు నిర్వహించబడతాయి.
86 # అంతర్గతంగా పిలిచే ఫంక్షన్లు బాహ్యతో ఇంటరాక్షన్‌ను కలిగి ఉంటే
87 # కాంట్రాక్టులు, వాటిని కూడా ఇంటరాక్షన్‌గా పరిగణించాలి
88 # బాహ్య కాంట్రాక్టులు.
89
90 # 1. షరతులు
91 # వేలం ముగింపు సమయం చేరుకుందో లేదో తనిఖీ చేయండి
92 assert block.timestamp >= self.auctionEnd
93 # ఈ ఫంక్షన్ ఇప్పటికే పిలవబడిందో లేదో తనిఖీ చేయండి
94 assert not self.ended
95
96 # 2. ప్రభావాలు
97 self.ended = True
98
99 # 3. ఇంటరాక్షన్
100 send(self.beneficiary, self.highestBid)
అన్నీ చూపించు

ఈ ఉదాహరణ వైపర్ కాంట్రాక్ట్ సింటాక్స్ ఎలా ఉంటుందో మీకు ఒక అవగాహన ఇవ్వాలి. ఫంక్షన్లు మరియు వేరియబుల్స్ యొక్క మరింత వివరణాత్మక వర్ణన కోసం, డాక్స్‌ని చూడండిopens in a new tab.

Yul మరియు Yul+

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

Yul

  • ఎథేరియం కోసం మధ్యంతర భాష.
  • EVM మరియు Ewasmopens in a new tab, ఒక ఎథేరియం ఫ్లేవర్డ్ వెబ్అసెంబ్లీకి మద్దతు ఇస్తుంది మరియు రెండు ప్లాట్‌ఫారమ్‌లకు ఉపయోగపడే సాధారణ హారంగా రూపొందించబడింది.
  • EVM మరియు Ewasm ప్లాట్‌ఫారమ్‌లకు సమానంగా ప్రయోజనం చేకూర్చగల ఉన్నత-స్థాయి ఆప్టిమైజేషన్ దశలకు మంచి లక్ష్యం.

Yul+

  • Yul కు ఒక తక్కువ-స్థాయి, అత్యంత సమర్థవంతమైన పొడిగింపు.
  • ప్రారంభంలో ఒక ఆప్టిమిస్టిక్ రోలప్ కాంట్రాక్ట్ కోసం రూపొందించబడింది.
  • Yul+ ను Yul కు ఒక ప్రయోగాత్మక అప్‌గ్రేడ్ ప్రతిపాదనగా చూడవచ్చు, దీనికి కొత్త ఫీచర్లను జోడించవచ్చు.

ఉదాహరణ కాంట్రాక్ట్

కింది సాధారణ ఉదాహరణ పవర్ ఫంక్షన్‌ను అమలు చేస్తుంది. solc --strict-assembly --bin input.yul ఉపయోగించి దీనిని కంపైల్ చేయవచ్చు. ఉదాహరణ input.yul ఫైల్‌లో నిల్వ చేయబడాలి.

1{
2 function power(base, exponent) -> result
3 {
4 switch exponent
5 case 0 { result := 1 }
6 case 1 { result := base }
7 default
8 {
9 result := power(mul(base, base), div(exponent, 2))
10 if mod(exponent, 2) { result := mul(base, result) }
11 }
12 }
13 let res := power(calldataload(0), calldataload(32))
14 mstore(0, res)
15 return(0, 32)
16}
అన్నీ చూపించు

మీకు ఇప్పటికే స్మార్ట్ కాంట్రాక్టులతో మంచి అనుభవం ఉంటే, Yulలో పూర్తి ERC20 అమలును ఇక్కడopens in a new tab కనుగొనవచ్చు.

Fe

  • ఎథేరియం వర్చువల్ మెషీన్ (EVM) కోసం స్టాటిక్‌గా టైప్ చేయబడిన భాష.
  • పైథాన్ మరియు రస్ట్ ద్వారా ప్రేరణ పొందింది.
  • ఎథేరియం పర్యావరణ వ్యవస్థకు కొత్తవారైన డెవలపర్‌లకు కూడా నేర్చుకోవడానికి సులభంగా ఉండేలా లక్ష్యంగా పెట్టుకుంది.
  • Fe అభివృద్ధి ఇంకా ప్రారంభ దశలోనే ఉంది, ఈ భాష జనవరి 2021లో దాని ఆల్ఫా విడుదలను కలిగి ఉంది.

ఉదాహరణ కాంట్రాక్ట్

కిందిది Feలో అమలు చేయబడిన ఒక సాధారణ కాంట్రాక్ట్.

1type BookMsg = bytes[100]
2
3contract GuestBook:
4 pub guest_book: map<address, BookMsg>
5
6 event Signed:
7 book_msg: BookMsg
8
9 pub def sign(book_msg: BookMsg):
10 self.guest_book[msg.sender] = book_msg
11
12 emit Signed(book_msg=book_msg)
13
14 pub def get_msg(addr: address) -> BookMsg:
15 return self.guest_book[addr].to_mem()
16
అన్నీ చూపించు

ఎలా ఎంచుకోవాలి

ఏదైనా ఇతర ప్రోగ్రామింగ్ భాషతో పాటు, ఇది ఎక్కువగా సరైన పనికి సరైన సాధనాన్ని ఎంచుకోవడం మరియు వ్యక్తిగత ప్రాధాన్యతలకు సంబంధించినది.

మీరు ఇంకా ఏ భాషలను ప్రయత్నించకపోతే పరిగణించవలసిన కొన్ని విషయాలు ఇక్కడ ఉన్నాయి:

సాలిడిటీ గురించి గొప్ప విషయం ఏమిటి?

  • మీరు ఒక ప్రారంభకుడు అయితే, అక్కడ చాలా ట్యుటోరియల్స్ మరియు నేర్చుకునే సాధనాలు ఉన్నాయి. కోడింగ్ ద్వారా నేర్చుకోండి విభాగంలో దాని గురించి మరింత చూడండి.
  • మంచి డెవలపర్ టూలింగ్ అందుబాటులో ఉంది.
  • సాలిడిటీకి ఒక పెద్ద డెవలపర్ కమ్యూనిటీ ఉంది, అంటే మీరు మీ ప్రశ్నలకు చాలా త్వరగా సమాధానాలు కనుగొనే అవకాశం ఉంది.

వైపర్ గురించి గొప్ప విషయం ఏమిటి?

  • స్మార్ట్ కాంట్రాక్టులు రాయాలనుకునే పైథాన్ డెవ్‌లు ప్రారంభించడానికి గొప్ప మార్గం.
  • వైపర్‌లో తక్కువ సంఖ్యలో ఫీచర్లు ఉన్నాయి, ఇది ఆలోచనల శీఘ్ర ప్రోటోటైపింగ్ కోసం గొప్పగా చేస్తుంది.
  • వైపర్ ఆడిట్ చేయడానికి సులభంగా మరియు గరిష్టంగా మానవ-చదవగలిగేలా ఉండాలని లక్ష్యంగా పెట్టుకుంది.

Yul మరియు Yul+ గురించి గొప్ప విషయం ఏమిటి?

  • సరళమైన మరియు ఫంక్షనల్ తక్కువ-స్థాయి భాష.
  • రా EVMకి చాలా దగ్గరగా వెళ్లడానికి అనుమతిస్తుంది, ఇది మీ కాంట్రాక్టుల గ్యాస్ వినియోగాన్ని ఆప్టిమైజ్ చేయడానికి సహాయపడుతుంది.

భాషా పోలికలు

ప్రాథమిక సింటాక్స్, కాంట్రాక్ట్ జీవనచక్రం, ఇంటర్‌ఫేస్‌లు, ఆపరేటర్లు, డేటా స్ట్రక్చర్లు, ఫంక్షన్లు, కంట్రోల్ ఫ్లో మరియు మరిన్ని పోలికల కోసం ఈ ఆడిట్‌లెస్ ద్వారా చీట్‌షీట్‌నుopens in a new tab చూడండి

మరింత సమాచారం

ఈ ఆర్టికల్ ఉపయోగపడిందా?