Ruka hadi kwenye maudhui makuu
Change page

Muundo wa mikataba mahiri

Mkataba mahiri ni programu inayoendeshwa kwenye anwani katika Ethereum. Imeundwa na data na vipengele vinavyoweza kutekelezwa baada ya kupokea muamala. Huu hapa ni muhtasari wa kile kinachounda mkataba mahiri.

Mahitaji ya awali

Hakikisha umesoma kuhusu mikataba mahiri kwanza. Hati hii inachukulia kuwa tayari unafahamu lugha za programu kama vile JavaScript au Python.

Data

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

Hifadhi

Data ya kudumu inajulikana kama hifadhi na inawakilishwa na vigezo vya hali. Thamani hizi huhifadhiwa kabisa kwenye mnyororo wa vitalu. Unahitaji kutangaza aina ili mkataba uweze kufuatilia kiasi cha hifadhi kwenye mnyororo wa vitalu inachohitaji inapokusanywa.

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

Ikiwa tayari umepanga lugha zinazoelekezwa kwa kitu (object-oriented languages), kuna uwezekano utafahamu aina nyingi. Hata hivyo, address inapaswa kuwa mpya kwako ikiwa wewe ni mgeni katika uundaji wa Ethereum.

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

Aina zingine ni pamoja na:

  • boolean
  • nambari kamili (integer)
  • nambari za uhakika zisizobadilika (fixed point numbers)
  • safu za baiti zenye ukubwa usiobadilika
  • safu za baiti zenye ukubwa unaobadilika
  • nambari za kimantiki na kamili
  • herufi za mfuatano (string literals)
  • herufi za heksadesimali
  • enums

Kwa maelezo zaidi, angalia hati:

Kumbukumbu

Thamani ambazo huhifadhiwa tu kwa muda wa utekelezaji wa kipengele cha mkataba huitwa vigezo vya kumbukumbu. Kwa kuwa hizi hazihifadhiwi kabisa kwenye mnyororo wa vitalu, ni nafuu sana kutumia.

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

Vigezo vya mazingira

Mbali na vigezo unavyofafanua kwenye mkataba wako, kuna baadhi ya vigezo maalum vya kimataifa. Hutumiwa kimsingi kutoa taarifa kuhusu mnyororo wa vitalu au muamala wa sasa.

Mifano:

SifaKigezo cha haliMaelezo
block.timestampuint256Muhuri wa muda wa kipindi cha kitalu cha sasa
msg.senderanwaniMtumaji wa ujumbe (wito wa sasa)

Vipengele (Functions)

Kwa maneno rahisi zaidi, vipengele vinaweza kupata taarifa au kuweka taarifa kulingana na miamala inayoingia.

Kuna aina mbili za wito wa vipengele:

  • internal – hizi haziundi wito wa EVM
    • Vipengele vya ndani na vigezo vya hali vinaweza kufikiwa tu kwa ndani (yaani, kutoka ndani ya mkataba wa sasa au mikataba inayotokana nao)
  • external – hizi huunda wito wa EVM
    • Vipengele vya nje ni sehemu ya kiolesura cha mkataba, ambayo inamaanisha vinaweza kuitwa kutoka kwa mikataba mingine na kupitia miamala. Kipengele cha nje f hakiwezi kuitwa kwa ndani (yaani, f() haifanyi kazi, lakini this.f() inafanya kazi).

Vinaweza pia kuwa public au private

  • Vipengele vya public vinaweza kuitwa kwa ndani kutoka ndani ya mkataba au kwa nje kupitia jumbe
  • Vipengele vya private vinaonekana tu kwa mkataba vilivyofafanuliwa ndani yake na sio katika mikataba inayotokana

Vipengele vyote viwili na vigezo vya hali vinaweza kufanywa vya umma au vya kibinafsi

Hiki hapa ni kipengele cha kusasisha kigezo cha hali kwenye mkataba:

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

Vipengele vya kutazama (View functions)

Vipengele hivi vinaahidi kutorekebisha hali ya data ya mkataba. Mifano ya kawaida ni vipengele vya "getter" – 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

Nini kinachukuliwa kuwa kurekebisha hali:

  1. Kuandika kwenye vigezo vya hali.
  2. Kutoa matukio (opens in a new tab).
  3. Kuunda mikataba mingine (opens in a new tab).
  4. Kutumia selfdestruct.
  5. Kutuma Etha kupitia wito.
  6. Kuita kipengele chochote ambacho hakijawekwa alama ya view au pure.
  7. Kutumia wito wa kiwango cha chini.
  8. Kutumia mkusanyiko wa ndani (inline assembly) ambao una opcodes fulani.

Vipengele vya konstrukta

Vipengele vya constructor hutekelezwa mara moja tu wakati mkataba unaposambazwa kwa mara ya kwanza. Kama constructor katika lugha nyingi za programu zinazotegemea darasa (class-based), vipengele hivi mara nyingi huanzisha vigezo vya hali kwa thamani zao zilizobainishwa.

# Mfano wa Vyper

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

Vipengele vilivyojengewa ndani

Mbali na vigezo na vipengele unavyofafanua kwenye mkataba wako, kuna baadhi ya vipengele maalum vilivyojengewa ndani. Mfano ulio wazi zaidi ni:

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

Hizi huruhusu mikataba kutuma ETH kwa akaunti zingine.

Kuandika vipengele

Kipengele chako kinahitaji:

  • kigezo cha parameta na aina (ikiwa inakubali parameta)
  • tamko la ndani/nje
  • tamko la pure/view/payable
  • aina ya kurejesha (ikiwa inarejesha thamani)

Mkataba kamili unaweza kuonekana kama hivi. Hapa kipengele cha constructor hutoa thamani ya awali kwa kigezo cha dapp_name.

Matukio na logi

Matukio huwezesha mkataba mahiri wako kuwasiliana na mazingira yako ya mbele (frontend) au programu zingine zinazofuatilia. Pindi muamala unapothibitishwa na kuongezwa kwenye kitalu, mikataba mahiri inaweza kutoa matukio na taarifa za logi, ambazo mazingira ya mbele yanaweza kuchakata na kutumia.

Mifano iliyofafanuliwa

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

Hello world

Tokeni

Rasilimali ya dijitali ya kipekee

Usomaji zaidi

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