Lugha za mikataba mahiri
Ukurasa ulihaririwa mwisho: 26 Februari 2026
Kipengele kikuu kuhusu Ethereum ni kwamba mikataba-erevu inaweza kupangwa kwa kutumia lugha ambazo ni rahisi kwa wasanidi programu. Ikiwa una uzoefu na Python au lugha yoyote ya mabano (opens in a new tab), unaweza kupata lugha yenye sintaksia unayoifahamu.
Lugha mbili zinazotumika zaidi na kudumishwa ni:
- Solidity
- Vyper
Remix IDE hutoa mazingira kamili ya uendelezaji kwa ajili ya kuunda na kujaribu mikataba katika Solidity na Vyper. Jaribu Remix IDE ya kwenye kivinjari (opens in a new tab) ili kuanza kuandika msimbo.
Wasanidi programu wenye uzoefu zaidi wanaweza pia kutaka kutumia Yul, lugha ya kati ya Mashine ya mtandaoni ya Ethereum, au Yul+, kiendelezi cha Yul.
Ikiwa una hamu ya kujua na unapenda kusaidia kujaribu lugha mpya ambazo bado zinatengenezwa sana, unaweza kujaribu Fe, lugha mpya ya mkataba-erevu ambayo bado iko katika hatua za mwanzo.
Mahitaji ya awali
Ujuzi wa awali wa lugha za programu, hasa JavaScript au Python, unaweza kukusaidia kuelewa tofauti katika lugha za mkataba-erevu. Pia tunapendekeza uelewe mikataba-erevu kama dhana kabla ya kuzama sana katika ulinganisho wa lugha. Utangulizi wa mikataba-erevu.
Solidity
- Lugha ya kiwango cha juu, inayolenga vitu kwa ajili ya kutekeleza mikataba-erevu.
- Lugha ya mabano ambayo imeathiriwa pakubwa na C++.
- Aina tuli (aina ya kigezo hujulikana wakati wa kuandaliwa).
- Inasaidia:
- Urithi (unaweza kupanua mikataba mingine).
- Maktaba (unaweza kuunda msimbo unaoweza kutumika tena ambao unaweza kuuita kutoka kwa mikataba tofauti - kama vile vitendaji tuli katika darasa tuli katika lugha zingine za programu zinazolenga vitu).
- Aina changamano zilizofafanuliwa na mtumiaji.
Viungo muhimu
- Nyaraka (opens in a new tab)
- Tovuti ya Lugha ya Solidity (opens in a new tab)
- Solidity kwa Mfano (opens in a new tab)
- GitHub (opens in a new tab)
- Chumba cha Gumzo cha Solidity Matrix (opens in a new tab) kimeunganishwa na Chumba cha Gumzo cha Solidity Matrix (opens in a new tab)
- Karatasi ya Kudokezea (opens in a new tab)
- Blogu ya Solidity (opens in a new tab)
- Twitter ya Solidity (opens in a new tab)
Mfano wa mkataba
1// SPDX-Kitambulisho-Leseni: GPL-3.02pragma solidity >= 0.7.0;34contract Coin {5 // Neno kuu "public" hufanya vigezo6 // kupatikana kutoka kwa mikataba mingine7 address public minter;8 mapping (address => uint) public balances;910 // Matukio huruhusu wateja kujibu mabadiliko maalum11 // ya mkataba unaotangaza12 event Sent(address from, address to, uint amount);1314 // Msimbo wa kiunda huendeshwa tu wakati mkataba15 // unapoundwa16 constructor() {17 minter = msg.sender;18 }1920 // Hutuma kiasi cha sarafu mpya zilizoundwa kwa anwani21 // Inaweza kuitwa tu na muundaji wa mkataba22 function mint(address receiver, uint amount) public {23 require(msg.sender == minter);24 require(amount < 1e60);25 balances[receiver] += amount;26 }2728 // Hutuma kiasi cha sarafu zilizopo29 // kutoka kwa mpigaji simu yeyote hadi anwani30 function send(address receiver, uint amount) public {31 require(amount <= balances[msg.sender], "Salio halitoshi.");32 balances[msg.sender] -= amount;33 balances[receiver] += amount;34 emit Sent(msg.sender, receiver, amount);35 }36}Onyesha yoteMfano huu unapaswa kukupa hisia ya jinsi sintaksia ya mkataba wa Solidity ilivyo. Kwa maelezo ya kina zaidi ya vitendaji na vigezo, angalia nyaraka (opens in a new tab).
Vyper
- Lugha ya programu ya Pythonic
- Uchapaji imara
- Msimbo mdogo na unaoeleweka wa mkusanyaji
- Uundaji bora wa bytecode
- Kwa makusudi ina vipengele vichache kuliko Solidity kwa lengo la kufanya mikataba iwe salama zaidi na rahisi kukagua. Vyper haiungi mkono:
- Virekebishaji
- Urithi
- Mkusanyiko wa ndani
- Upakiaji mwingi wa kitendaji
- Upakiaji mwingi wa kiendeshaji
- Wito unaojirudia
- Mizunguko ya urefu usio na kikomo
- Nukta zisizobadilika za mfumo wa namba mbili
Kwa maelezo zaidi, soma mantiki ya Vyper (opens in a new tab).
Viungo muhimu
- Nyaraka (opens in a new tab)
- Vyper kwa Mfano (opens in a new tab)
- Vyper Zaidi kwa Mfano (opens in a new tab)
- GitHub (opens in a new tab)
- Gumzo la jumuiya ya Vyper Discord (opens in a new tab)
- Karatasi ya Kudokezea (opens in a new tab)
- Mifumo na zana za ukuzaji wa mkataba-erevu kwa Vyper
- VyperPunk - jifunze kulinda na kudukua mikataba-erevu ya Vyper (opens in a new tab)
- Kitovu cha Vyper kwa ajili ya maendeleo (opens in a new tab)
- Mifano bora zaidi ya mikataba-erevu ya Vyper (opens in a new tab)
- Rasilimali zilizoratibiwa za Awesome Vyper (opens in a new tab)
Mfano
1# Mnada Wazi23# Vigezo vya mnada45# Mpokeaji hupokea pesa kutoka kwa mzabuni wa juu zaidi67beneficiary: public(address)8auctionStart: public(uint256)9auctionEnd: public(uint256)1011# Hali ya sasa ya mnada1213highestBidder: public(address)14highestBid: public(uint256)1516# Imewekwa kuwa kweli mwishoni, inazuia mabadiliko yoyote1718ended: public(bool)1920# Fuatilia zabuni zilizorejeshwa ili tuweze kufuata mtindo wa kutoa pesa2122pendingReturns: public(HashMap[address, uint256])2324# Unda mnada rahisi na `_bidding_time`2526# muda wa sekunde za zabuni kwa niaba ya2728# anwani ya mpokeaji `_beneficiary`.2930@external31def __init__(_beneficiary: address, _bidding_time: uint256):32 self.beneficiary = _beneficiary33 self.auctionStart = block.timestamp34 self.auctionEnd = self.auctionStart + _bidding_time3536# Zabuni kwenye mnada na thamani iliyotumwa3738# pamoja na muamala huu.3940# Thamani itarejeshwa tu ikiwa4142# mnada haujashindwa.4344@external45@payable46def bid():47 # Angalia kama muda wa zabuni umeisha.48 assert block.timestamp < self.auctionEnd49 # Angalia kama zabuni ni ya juu vya kutosha50 assert msg.value > self.highestBid51 # Fuatilia urejeshaji wa pesa kwa mzabuni wa awali wa juu52 self.pendingReturns[self.highestBidder] += self.highestBid53 # Fuatilia zabuni mpya ya juu54 self.highestBidder = msg.sender55 self.highestBid = msg.value5657# Toa zabuni iliyorejeshwa hapo awali. Mtindo wa kutoa pesa ni5859# hutumika hapa kuepuka suala la usalama. Kama urejeshaji fedha ungekuwa moja kwa moja6061# zilizotumwa kama sehemu ya bid(), mkataba hasidi wa zabuni ungeweza kuzuia6263# urejeshaji huo na hivyo kuzuia zabuni mpya za juu kuingia.6465@external66def withdraw():67 pending_amount: uint256 = self.pendingReturns[msg.sender]68 self.pendingReturns[msg.sender] = 069 send(msg.sender, pending_amount)7071# Maliza mnada na tuma zabuni ya juu zaidi7273# kwa mpokeaji.7475@external76def endAuction():77 # Ni mwongozo mzuri wa kupanga vitendaji vinavyoingiliana78 # na mikataba mingine (yaani, huita vitendaji au hutuma ether)79 # katika awamu tatu:80 # 1. kuangalia masharti81 # 2. kufanya vitendo (vinavyoweza kubadilisha masharti)82 # 3. kuingiliana na mikataba mingine83 # Ikiwa awamu hizi zimechanganywa, mkataba mwingine unaweza kuita84 # tena katika mkataba wa sasa na kurekebisha hali au kusababisha85 # athari (malipo ya ether) kufanywa mara nyingi.86 # Ikiwa vitendaji vinavyoitwa ndani ni pamoja na mwingiliano na nje87 # mikataba, pia inapaswa kuzingatiwa mwingiliano na88 # mikataba ya nje.8990 # 1. Masharti91 # Angalia kama muda wa mwisho wa mnada umefikiwa92 assert block.timestamp >= self.auctionEnd93 # Angalia kama kitendaji hiki tayari kimeitwa94 assert not self.ended9596 # 2. Athari97 self.ended = True9899 # 3. Mwingiliano100 send(self.beneficiary, self.highestBid)Onyesha yoteMfano huu unapaswa kukupa hisia ya jinsi sintaksia ya mkataba wa Vyper ilivyo. Kwa maelezo ya kina zaidi ya vitendaji na vigezo, angalia nyaraka (opens in a new tab).
Yul na Yul+
Ikiwa wewe ni mgeni kwa Ethereum na bado hujafanya uandishi wowote wa msimbo na lugha za mkataba-erevu, tunapendekeza uanze na Solidity au Vyper. Angalia Yul au Yul+ mara tu unapofahamu mbinu bora za usalama wa mkataba-erevu na maelezo mahususi ya kufanya kazi na EVM.
Yul
- Lugha ya kati kwa Ethereum.
- Inasaidia EVM na Ewasm (opens in a new tab), Mkusanyiko wa Wavuti wenye ladha ya Ethereum, na imeundwa kuwa kigawanyiko cha kawaida kinachoweza kutumika cha majukwaa yote mawili.
- Lengo zuri kwa hatua za uboreshaji wa kiwango cha juu ambazo zinaweza kufaidi majukwaa ya EVM na Ewasm kwa usawa.
Yul+
- Kiendelezi cha kiwango cha chini, chenye ufanisi mkubwa kwa Yul.
- Hapo awali iliyoundwa kwa ajili ya mkataba wa optimistic rollup.
- Yul+ inaweza kutazamwa kama pendekezo la majaribio la sasisho kwa Yul, na kuongeza vipengele vipya kwake.
Viungo muhimu
- Nyaraka za Yul (opens in a new tab)
- Nyaraka za Yul+ (opens in a new tab)
- Chapisho la Utangulizi la Yul+ (opens in a new tab)
Mfano wa mkataba
Mfano rahisi ufuatao unatekeleza kitendaji cha nguvu. Inaweza kuandaliwa kwa kutumia solc --strict-assembly --bin input.yul. Mfano unapaswa
kuhifadhiwa katika faili ya input.yul.
1{2 function power(base, exponent) -> result3 {4 switch exponent5 case 0 { result := 1 }6 case 1 { result := base }7 default8 {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}Onyesha yoteIkiwa tayari una uzoefu mzuri na mikataba-erevu, utekelezaji kamili wa ERC20 katika Yul unaweza kupatikana hapa (opens in a new tab).
Fe
- Lugha ya aina tuli kwa ajili ya Mashine ya mtandaoni ya Ethereum (EVM).
- Imehamasishwa na Python na Rust.
- Inalenga kuwa rahisi kujifunza -- hata kwa wasanidi programu ambao ni wapya kwenye mfumo ikolojia wa Ethereum.
- Uendelezaji wa Fe bado uko katika hatua za mwanzo, lugha hiyo ilikuwa na toleo lake la alpha mnamo Januari 2021.
Viungo muhimu
- GitHub (opens in a new tab)
- Tangazo la Fe (opens in a new tab)
- Ramani ya Fe 2021 (opens in a new tab)
- Gumzo la Fe Discord (opens in a new tab)
- Twitter ya Fe (opens in a new tab)
Mfano wa mkataba
Ufuatao ni mkataba rahisi uliotekelezwa katika Fe.
1type BookMsg = bytes[100]23contract GuestBook:4 pub guest_book: map<address, BookMsg>56 event Signed:7 book_msg: BookMsg89 pub def sign(book_msg: BookMsg):10 self.guest_book[msg.sender] = book_msg1112 emit Signed(book_msg=book_msg)1314 pub def get_msg(addr: address) -> BookMsg:15 return self.guest_book[addr].to_mem()16Onyesha yoteJinsi ya kuchagua
Kama ilivyo kwa lugha nyingine yoyote ya programu, mara nyingi ni kuhusu kuchagua zana inayofaa kwa kazi inayofaa na pia mapendeleo ya kibinafsi.
Hapa kuna mambo machache ya kuzingatia ikiwa bado hujajaribu lugha yoyote:
Ni nini kizuri kuhusu Solidity?
- Ikiwa wewe ni mwanzilishi, kuna mafunzo na zana nyingi za kujifunza. Angalia zaidi kuhusu hilo katika sehemu ya Jifunze kwa Kuandika Msimbo.
- Zana nzuri za msanidi programu zinapatikana.
- Solidity ina jumuiya kubwa ya wasanidi programu, ambayo inamaanisha kuna uwezekano mkubwa utapata majibu ya maswali yako haraka sana.
Ni nini kizuri kuhusu Vyper?
- Njia nzuri ya kuanza kwa wasanidi wa Python wanaotaka kuandika mikataba-erevu.
- Vyper ina idadi ndogo ya vipengele vinavyoifanya kuwa nzuri kwa ajili ya kuunda mifano ya haraka ya mawazo.
- Vyper inalenga kuwa rahisi kukagua na kusomeka kwa urahisi iwezekanavyo kwa binadamu.
Ni nini kizuri kuhusu Yul na Yul+?
- Lugha rahisi na inayofanya kazi ya kiwango cha chini.
- Inaruhusu kusogea karibu zaidi na EVM mbichi, ambayo inaweza kusaidia kuboresha matumizi ya gesi ya mikataba yako.
Ulinganisho wa lugha
Kwa ulinganisho wa sintaksia ya msingi, mzunguko wa maisha ya mkataba, violesura, viendeshaji, miundo ya data, vitendaji, mtiririko wa udhibiti, na zaidi angalia karatasi hii ya kudokezea ya Auditless (opens in a new tab)