Ruka hadi kwenye maudhui makuu
Change page

Anatomy ya mikataba smart

Mkataba mzuri ni mpango unaoendeshwa kwenye anwani kwenye Ethereum. Zinajumuisha data na vipengele vinavyoweza kutekeleza unapopokea muamala. Huu hapa ni muhtasari wa kile kinachounda mkataba mzuri.

Mahitaji ya awali

Hakikisha umesoma kuhusu mikataba-erevu kwanza. Hati hii inadhania kuwa tayari unajua lugha za programu kama vile JavaScript au Python.

Data

Data yoyote ya mkataba lazima ipewe eneo: ama kwa storage au memory. Ni gharama kubwa kurekebisha hifadhi katika mkataba mahiri kwa hivyo unahitaji kuzingatia mahali data yako inapaswa kuishi.

Ghala

Data endelevu inajulikana kama hifadhi na inawakilishwa na vigeu vya hali. Thamani hizi huhifadhiwa kabisa kwenye Kiambajengo. Unahitaji kutangaza aina ili mkataba uweze kufuatilia ni kiasi gani cha hifadhi kwenye Kiambajengo inahitaji wakati inapoundwa.

// Mfano wa Solidity
contract SimpleStorage {
    uint storedData; // Kigezo cha Hali
    // ...
}
# Mfano wa Vyper
storedData: int128

Ikiwa tayari umepanga lugha zinazoelekezwa kwa kitu, kuna uwezekano kwamba utafahamu aina nyingi. Hata hivyo, address inapaswa kuwa mpya kwako ikiwa wewe ni mgeni katika uendelezaji wa Ethereum.

Aina ya address inaweza kushikilia anwani ya Ethereum ambayo ni sawa na baiti 20 au biti 160. Inarudi katika nukuu ya hexadecimal na 0x inayoongoza.

Aina zingine ni pamoja na:

  • boolean
  • nambari kamili
  • nambari za uhakika
  • safu za baiti za ukubwa usiobadilika
  • safu za baiti zenye ukubwa unaobadilika
  • maandishi halisi ya kimantiki na nambari kamili
  • maandishi halisi ya string
  • maandishi halisi ya heksadesimali
  • enums

Kwa maelezo zaidi, angalia hati:

Kumbukumbu

Thamani ambazo huhifadhiwa kwa muda wote wa utendakazi wa kazi ya mkataba huitwa vigeu vya kumbukumbu. Kwa kuwa hizi hazihifadhiwa kwa kudumu kwenye Kiambajengo, ni nafuu sana kutumia.

Jifunze zaidi kuhusu jinsi EVM inavyohifadhi data (Hifadhi, Kumbukumbu, na Stack) katika nyaraka za Solidity (opens in a new tab).

Vigezo vya mazingira

Mbali na vigezo unavyobainisha kwenye mkataba wako, kuna baadhi ya vigezo maalum vya kimataifa. Zinatumika kimsingi kutoa habari kuhusu blockchain au shughuli ya sasa.

Mifano:

SifaKigezo cha HaliMaelezo
block.timestampuint256Muhuri wa wakati wa kipindi cha kizuizi cha sasa
msg.senderanuaniMtumaji wa ujumbe (simu ya sasa)

Kazi

Kwa maneno rahisi zaidi, chaguo za kukokotoa zinaweza kupata taarifa au kuweka taarifa kujibu miamala inayoingia.

Kuna aina mbili za simu za kazi:

  • internal – hizi hazitengenezi simu ya EVM
    • Kazi za ndani na vigezo vya hali vinaweza kufikiwa tu ndani (yaani, kutoka ndani ya mkataba wa sasa au mikataba inayotokana nayo)
  • external – hizi hutengeneza simu ya EVM
    • Kazi za nje ni sehemu ya kiolesura cha mkataba, ambayo ina maana kwamba zinaweza kuitwa kutoka kwa mikataba mingine na kupitia miamala. Kazi ya nje f haiwezi kuitwa ndani (yaani, f() haifanyi kazi, lakini this.f() inafanya kazi).

Pia zinaweza kuwa za umma au faragha

  • kazi za umma zinaweza kuitwa ndani kutoka ndani ya mkataba au nje kupitia ujumbe
  • kazi za faragha zinaonekana tu kwa mkataba ambapo zimefafanuliwa na si katika mikataba inayotokana

Vipengele vyote viwili vya kukokotoa na vigezo vya hali vinaweza kuwekwa hadharani au kwa faragha

Hapa kuna kazi ya kubadilisha utofauti wa hali kwenye mkataba:

// Mfano wa Solidity
function update_name(string value) public {
    dapp_name = value;
}
  • Kigezo value cha aina ya string kinapitishwa kwenye kazi: update_name
  • Imetangazwa kuwa ya umma, ikimaanisha mtu yeyote anaweza kuifikia
  • Haijatangazwa view, hivyo inaweza kurekebisha hali ya mkataba

Kazi za kutazama

Kazi hizi zinaahidi kutorekebisha hali ya data ya mkataba. Mifano ya kawaida ni vitendaji vya "pata" - unaweza kutumia hii kupokea salio la mtumiaji kwa mfano.

// Mfano wa Solidity
function balanceOf(address _owner) public view returns (uint256 _balance) {
    return ownerPizzaCount[_owner];
}
dappName: public(string)

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

Ni nini kinachozingatiwa hali ya kurekebisha:

  1. Kuandika vigezo kwa hali.
  2. Kutoa matukio (opens in a new tab).
  3. Kuunda mikataba mingine (opens in a new tab).
  4. Kutumia selfdestruct.
  5. Inatuma etha kupitia simu.
  6. Kuita kazi yoyote ambayo haijawekwa alama ya view au pure.
  7. Kutumia simu za kiwango cha chini.
  8. Kutumia mkusanyiko wa ndani ambao una opcodes fulani.

Kazi za kiunda

kazi za kiunda hutekelezwa mara moja tu wakati mkataba unapelekwa kwa mara ya kwanza. Kama constructor katika lugha nyingi za programu za msingi wa darasa, kazi hizi mara nyingi huanzisha vigezo vya hali kwa thamani zake zilizoainishwa.

# Mfano wa Vyper

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

Kazi zilizojengewa ndani

Kando na vigezo na chaguo za kukokotoa unazofafanua kwenye mkataba wako, kuna vitendaji maalum vilivyojumuishwa. Mfano dhahiri zaidi ni:

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

Hizi huruhusu kandarasi kutuma ETH kwa akaunti zingine.

Kuandika kazi

Utendaji wako unahitaji:

  • kutofautisha kwa paramu na aina (ikiwa inakubali vigezo)
  • tamko la ndani/nje
  • tamko la mtazamo safi/unaoweza kulipwa
  • inarudisha aina (ikiwa inarudisha thamani)

Mkataba kamili unaweza kuonekana kama hii. Hapa kazi ya constructor inatoa thamani ya awali kwa kigezo cha dapp_name.

Matukio na kumbukumbu

Matukio huwezesha mkataba wako mahiri kuwasiliana na eneo lako la mbele au programu zingine za kujisajili. Baada ya muamala kuthibitishwa na kuongezwa kwenye kizuizi, mikataba mahiri inaweza kutoa matukio na kuweka taarifa, ambayo sehemu ya mbele inaweza kuchakata na kutumia.

Mifano yenye maelezo

Hii ni baadhi ya mifano iliyoandikwa katika Solidity. Ikiwa ungependa kucheza na msimbo, unaweza kuingiliana nao katika Remix (opens in a new tab).

Habari dunia

Token

Mali ya kipekee ya kidijitali

Masomo zaidi

Angalia nyaraka za Solidity na Vyper kwa muhtasari kamili zaidi wa mikataba mahiri:

Ukurasa ulisasishwa mwisho: 15 Aprili 2026

Je, makala haya yalikuwa ya msaada?