Kujaribu mikataba ya mahiri
Ukurasa ulihaririwa mwisho: 26 Februari 2026
Minyororo ya kiambajengo cha umma kama vile Ethereum hakiwezi kubadilika, hivyo kufanya iwe vigumu kubadilisha msimbo wa mikataba mahiri baada ya kutumwa. Mifumo ya kuboresha mikataba kwa ajili ya kufanya "maboresho ya mtandaoni" ipo, lakini hii ni vigumu kuitekeleza na inahitaji makubaliano ya kijamii. Zaidi ya hayo, sasisho linaweza kurekebisha hitilafu baada ya kugunduliwa—ikiwa mshambulizi atagundua udhaifu kwanza, mkataba wako-erevu uko katika hatari ya kutumiwa vibaya.
Kwa sababu hizi, kupima mikataba-erevu kabla ya kupeleka kwenye Mtandao Mkuu ni sharti la chini kabisa kwa usalama. Kuna mbinu nyingi za kupima mikataba na kutathmini usahihi wa kanuni, unachochagua kunategemea mahitaji yako. Hata hivyo kundi la majaribio linaloundwa na zana na mbinu tofauti ni bora kwa kupata dosari ndogo na kuu za usalama katika msimbo wa mkataba.
Mahitaji ya awali
Ukurasa huu unaelezea jinsi ya kupima mikataba-erevu kabla ya kuipeleka kwenye mtandao wa Ethereum. Inachukulia kuwa unafahamu mikataba-erevu.
Upimaji wa mkataba-erevu ni nini?
Majaribio ya mkataba mahiri ni mchakato wa kuthibitisha kuwa msimbo wa mkataba mahiri hufanya kazi inavyotarajiwa. Majaribio ni muhimu kwa kuthibitisha kama mkataba mahiri unakidhi mahitaji ya kutegemewa, utumiaji na usalama.
Ingawa mbinu hutofautiana, mbinu nyingi za majaribio zinahitaji kutekeleza mkataba mahiri na sampuli ndogo ya data inayotarajiwa kushughulikia. Ikiwa mkataba utatoa matokeo sahihi kwa data ya sampuli, inachukuliwa kuwa unafanya kazi ipasavyo. Zana nyingi za upimaji hutoa rasilimali za kuandika na kutekeleza kesi za majaribio (opens in a new tab) ili kuangalia kama utekelezaji wa mikataba unalingana na matokeo yanayotarajiwa.
Kwa nini ni muhimu kupima mikataba-erevu?
Kwa kuwa mikataba-erevu mara nyingi hudhibiti mali za kifedha za thamani ya juu, makosa madogo ya programu yanaweza na mara nyingi husababisha hasara kubwa kwa watumiaji (opens in a new tab). Majaribio thabiti yanaweza, hata hivyo, kukusaidia kugundua kasoro na matatizo katika msimbo mahiri wa mkataba na kuyarekebisha kabla ya kuzindua kwenye Mainnet.
Ingawa inawezekana kuboresha mkataba ikiwa hitilafu itagunduliwa, maboresho ni magumu na yanaweza kusababisha makosa (opens in a new tab) ikiwa hayatashughulikiwa ipasavyo. Kuboresha mkataba kunakanusha zaidi kanuni ya kutobadilika na kubebea watumiaji mawazo ya ziada ya uaminifu. Kinyume chake, mpango wa kina wa kupima mkataba wako hupunguza hatari za usalama wa mkataba na kupunguza hitaji la kufanya maboresho changamano baada ya kupeleka.
Mbinu za kupima mikataba-erevu
Mbinu za kupima mikataba-erevu ya Ethereum ziko chini ya kategoria mbili pana: upimaji wa kiotomatiki na upimaji wa mikono. Majaribio ya kiotomatiki na majaribio ya mikono hutoa manufaa ya kipekee na usuluhishi, lakini unaweza kuchanganya zote mbili ili kuunda mpango thabiti wa kuchanganua mikataba yako.
Upimaji wa kiotomatiki
Jaribio la kiotomatiki hutumia zana zinazokagua kiotomatiki msimbo mahiri wa mikataba kwa hitilafu katika utekelezaji. Faida ya upimaji wa kiotomatiki hutokana na kutumia skripti (opens in a new tab) kuongoza tathmini ya utendakazi wa mkataba. Majaribio ya hati yanaweza kuratibiwa kufanya kazi mara kwa mara bila uingiliaji kati wa binadamu, hivyo kufanya majaribio ya kiotomatiki kuwa na ufanisi zaidi kuliko mbinu za mikono za majaribio.
Jaribio la kiotomatiki ni muhimu sana wakati majaribio yanarudiwa na kuchukua muda; ngumu kutekeleza kwa mikono; hushambuliwa na makosa ya kibinadamu; au kuhusisha kutathmini kazi muhimu za mkataba. Lakini zana za kupima za kiotomatiki zinaweza kuwa na hasara—zinaweza kukosa hitilafu fulani na kutoa chanya za uwongo (opens in a new tab) nyingi. Hivyo, kuoanisha upimaji wa kiotomatiki na upimaji wa mikono kwa mikataba-erevu ni bora.
Upimaji wa mikono
Uthibitishaji wa mikono linasaidiwa na binadamu na linahusisha kutekeleza kila kesi ya jaribio katika kundi lako la majaribio moja baada ya jingine wakati wa kuchanganua usahihi wa mikataba mahiri. Hii ni tofauti na majaribio ya kiotomatiki ambapo unaweza kufanya majaribio mengi ya pekee kwenye mkataba kwa wakati mmoja na kupata ripoti inayoonyesha majaribio yote yaliyofeli na kufaulu.
Jaribio la kibinafsi linaweza kufanywa na mtu mmoja kufuatia mpango wa jaribio ulioandikwa ambao unashughulikia hali tofauti za majaribio. Unaweza pia kuwa na watu au vikundi vingi kushirikiana na mkataba mzuri katika kipindi fulani kama sehemu ya majaribio ya mikono. Wanaojaribu watalinganisha tabia halisi ya mkataba dhidi ya tabia inayotarajiwa, kuashiria tofauti yoyote kama kosa.
Upimaji wa mwongozo unaofaa unahitaji rasilimali nyingi (ustadi, muda, pesa, na juhudi), na inawezekana—kutokana na makosa ya kibinadamu—kukosa makosa fulani wakati wa kufanya majaribio. Lakini uthibitishaji kwa mkono kunaweza pia kuwa na manufaa—kwa mfano, mtu anayejaribu (k.m., mkaguzi) anaweza kutumia angavu kutambua matukio makali ambayo chombo cha kupima kiotomatiki kinaweza kukosa.
Upimaji wa kiotomatiki kwa mikataba-erevu
Upimaji wa vitengo
Upimaji wa kitengo hutathmini utendaji kazi wa mkataba kando na hukagua kuwa kila sehemu inafanya kazi kwa usahihi. Majaribio mazuri ya vipimo yanapaswa kuwa rahisi, ya haraka na kutoa wazo wazi la nini kilienda vibaya ikiwa majaribio hayatafaulu.
Majaribio ya vipimo ni muhimu kwa kuangalia kuwa chaguo za kukokotoa hurejesha thamani zinazotarajiwa na kwamba hifadhi ya mkataba inaboreshashwa ipasavyo baada ya kutekeleza utendaji kazi. Zaidi ya hayo, kufanya majaribio ya kitengo baada ya kufanya mabadiliko kwa msingi wa mikataba huhakikisha kuongeza mantiki mpya hakuleti makosa. Hapa chini kuna miongozo ya kufanya upimaji wa vitengo kwa ufanisi:
Miongozo ya upimaji wa vitengo vya mikataba-erevu
1. Elewa mantiki ya biashara na mtiririko wa kazi wa mikataba yako
Kabla ya kuandika uthibitishaji wa vipimo, inasaidia kujua ni utendaji gani ambao mkataba mahiri hutoa na jinsi watumiaji watakavyofikia na kutumia vipengele hivyo. Hii ni muhimu hasa kwa kufanya majaribio ya njia ya furaha (opens in a new tab) ambayo huamua kama utendakazi katika mkataba hurejesha matokeo sahihi kwa ingizo halali za watumiaji. Tutaeleza dhana hii kwa kutumia mfano huu (uliofupishwa) wa mkataba wa mnada (opens in a new tab)
1constructor(2 uint biddingTime,3 address payable beneficiaryAddress4 ) {5 beneficiary = beneficiaryAddress;6 auctionEndTime = block.timestamp + biddingTime;7 }89function bid() external payable {1011 if (block.timestamp > auctionEndTime)12 revert AuctionAlreadyEnded();1314 if (msg.value <= highestBid)15 revert BidNotHighEnough(highestBid);1617 if (highestBid != 0) {18 pendingReturns[highestBidder] += highestBid;19 }20 highestBidder = msg.sender;21 highestBid = msg.value;22 emit HighestBidIncreased(msg.sender, msg.value);23 }2425 function withdraw() external returns (bool) {26 uint amount = pendingReturns[msg.sender];27 if (amount > 0) {28 pendingReturns[msg.sender] = 0;2930 if (!payable(msg.sender).send(amount)) {31 pendingReturns[msg.sender] = amount;32 return false;33 }34 }35 return true;36 }3738function auctionEnd() external {39 if (block.timestamp < auctionEndTime)40 revert AuctionNotYetEnded();41 if (ended)42 revert AuctionEndAlreadyCalled();4344 ended = true;45 emit AuctionEnded(highestBidder, highestBid);4647 beneficiary.transfer(highestBid);48 }49}Onyesha yoteHuu ni mkataba rahisi wa mnada ulioundwa kupokea zabuni wakati wa kipindi cha kutoa zabuni. Ikiwa highestBid itaongezeka, mzabuni wa awali aliyetoa zabuni ya juu zaidi hupokea pesa zake; mara tu kipindi cha zabuni kinapoisha, beneficiary huita mkataba ili kupata pesa zake.
Upimaji wa vitengo kwa mkataba kama huu ungejumuisha utendakazi tofauti ambao mtumiaji anaweza kuita anapoingiliana na mkataba. Mfano ungekuwa upimaji wa kitengo unaoangalia ikiwa mtumiaji anaweza kuweka zabuni wakati mnada unaendelea (yaani, wito kwa bid() hufaulu) au unaoangalia ikiwa mtumiaji anaweza kuweka zabuni ya juu kuliko highestBid ya sasa.
Kuelewa mtiririko wa kazi wa utendaji wa mkataba pia husaidia katika kuandika upimaji wa vitengo unaoangalia ikiwa utekelezaji unakidhi mahitaji. Kwa mfano, mkataba wa mnada unabainisha kuwa watumiaji hawawezi kuweka zabuni wakati mnada umeisha (yaani, wakati auctionEndTime ni chini kuliko block.timestamp). Kwa hivyo, msanidi programu anaweza kufanya upimaji wa kitengo unaoangalia ikiwa wito kwa utendakazi wa bid() hufaulu au hushindwa wakati mnada umeisha (yaani, wakati auctionEndTime > block.timestamp).
2. Tathmini dhana zote zinazohusiana na utekelezaji wa mkataba
Ni muhimu kuweka kumbukumbu ya dhana zozote kuhusu utekelezaji wa mkataba na kuandika upimaji wa vitengo ili kuthibitisha uhalali wa dhana hizo. Mbali na kutoa ulinzi dhidi ya utekelezaji usiotarajiwa, madai ya upimaji yanakulazimisha kufikiria juu ya shughuli ambazo zinaweza kuvunja mfumo wa usalama wa mkataba-erevu. Kidokezo muhimu ni kwenda mbali zaidi ya "majaribio ya mtumiaji mwenye furaha" na kuandika majaribio hasi yanayoangalia ikiwa utendakazi unashindwa kwa ingizo zisizo sahihi.
Mifumo mingi ya upimaji wa vitengo inakuruhusu kuunda madai—kauli rahisi zinazoeleza kile mkataba unaweza na hauwezi kufanya—na kufanya majaribio kuona ikiwa madai hayo yanadumu chini ya utekelezaji. Msanidi programu anayeshughulikia mkataba wa mnada ulioelezwa hapo awali anaweza kutoa madai yafuatayo kuhusu tabia yake kabla ya kufanya majaribio hasi:
-
Watumiaji hawawezi kuweka zabuni wakati mnada umeisha au haujaanza.
-
Mkataba wa mnada hurejea nyuma ikiwa zabuni iko chini ya kiwango kinachokubalika.
-
Watumiaji wanaoshindwa kushinda zabuni hurejeshewa fedha zao
Kumbuka: Njia nyingine ya kupima dhana ni kuandika majaribio yanayoanzisha virekebishaji vya utendakazi (opens in a new tab) katika mkataba, hasa kauli za require, assert, na if…else.
3. Pima ufikiaji wa msimbo
Ufikiaji wa msimbo (opens in a new tab) ni kipimo cha upimaji kinachofuatilia idadi ya matawi, mistari, na kauli katika msimbo wako zilizotekelezwa wakati wa majaribio. Majaribio yanapaswa kuwa na ufikiaji mzuri wa msimbo ili kupunguza hatari ya udhaifu ambao haujapimwa. Bila ufikiaji wa kutosha, unaweza kudhani kimakosa kuwa mkataba wako ni salama kwa sababu majaribio yote yamefaulu, wakati udhaifu bado upo katika njia za msimbo ambazo hazijapimwa. Hata hivyo, kurekodi ufikiaji wa juu wa msimbo kunatoa uhakikisho kwamba kauli/utendakazi wote katika mkataba-erevu vilipimwa vya kutosha kwa usahihi.
4. Tumia mifumo ya upimaji iliyoendelezwa vizuri
Ubora wa zana zinazotumika katika kufanya upimaji wa vitengo kwa mikataba-erevu yako ni muhimu sana. Mfumo bora wa upimaji ni ule unaotunzwa mara kwa mara; hutoa vipengele muhimu (k.m., uwezo wa kukata kumbukumbu na kutoa ripoti); na lazima uwe umetumiwa sana na kuchunguzwa na wasanidi programu wengine.
Mifumo ya upimaji wa vitengo kwa mikataba-erevu ya Solidity huja katika lugha tofauti (zaidi JavaScript, Python, na Rust). Angalia baadhi ya miongozo hapa chini kwa taarifa juu ya jinsi ya kuanza kufanya upimaji wa vitengo na mifumo tofauti ya upimaji:
- Kufanya upimaji wa vitengo na Brownie (opens in a new tab)
- Kufanya upimaji wa vitengo na Foundry (opens in a new tab)
- Kufanya upimaji wa vitengo na Waffle (opens in a new tab)
- Kufanya upimaji wa vitengo na Remix (opens in a new tab)
- Kufanya upimaji wa vitengo na Ape (opens in a new tab)
- Kufanya upimaji wa vitengo na Hardhat (opens in a new tab)
- Kufanya upimaji wa vitengo na Wake (opens in a new tab)
Upimaji wa ujumuishaji
Wakati uthibitishaji wa vipimo hutatua kazi za mkataba kwa kutengwa, majaribio ya ujumuishaji hutathmini vipengele vya mkataba mahiri kwa ujumla. Jaribio la ujumuishaji linaweza kugundua matatizo yanayotokana na simu za mkataba mtambuka au mwingiliano kati ya utendakazi tofauti katika mkataba huo mahiri. Kwa mfano, majaribio ya ujumuishaji yanaweza kusaidia kuangalia kama mambo kama urithi (opens in a new tab) na sindano ya utegemezi hufanya kazi ipasavyo.
Jaribio la ujumuishaji ni muhimu ikiwa mkataba wako utakubali usanifu wa kawaida au miingiliano na mikataba mingine ya onchain wakati wa utekelezaji. Njia moja ya kufanya majaribio ya ujumuishaji ni katika urefu maalum (kwa kutumia zana kama Forge (opens in a new tab) au Hardhat (opens in a new tab) na kuiga mwingiliano kati ya mkataba wako na mikataba iliyopelekwa.
Kiambajengo kiliyogawanyika itafanya kazi sawa na Mainnet na kuwa na akaunti na majimbo na salio zinazohusiana. Lakini inafanya kazi tu kama mazingira ya maendeleo ya ndani yaliyowekwa mchanga, kumaanisha kuwa hutahitaji ETH halisi kwa shughuli, kwa mfano, wala mabadiliko yako hayataathiri itifaki halisi ya Ethereum.
Upimaji unaozingatia sifa
Upimaji kulingana na mali ni mchakato wa kuangalia kama mkataba mzuri unakidhi baadhi ya mali iliyobainishwa. Sifa huthibitisha ukweli kuhusu tabia ya mkataba ambao unatarajiwa kubaki kuwa kweli katika hali tofauti-mfano wa mali mahiri ya mkataba unaweza kuwa "Shughuli za hesabu katika mkataba kamwe hazifuriki au hazifukiwi."
Uchambuzi tuli na uchambuzi wa nguvu ni mbinu mbili za kawaida za kutekeleza upimaji unaozingatia sifa, na zote mbili zinaweza kuthibitisha kuwa msimbo wa programu (mkataba-erevu katika kesi hii) unakidhi sifa fulani iliyoainishwa awali. Baadhi ya zana za kupima kulingana na mali huja na sheria zilizobainishwa mapema kuhusu sifa za mkataba zinazotarajiwa na kuangalia msimbo dhidi ya sheria hizo, huku zingine hukuruhusu kuunda sifa maalum kwa mkataba mzuri.
Uchambuzi tuli
Kichanganuzi tuli huchukua msimbo wa chanzo wa mkataba mahiri kama ingizo na matokeo ya matokeo yanayotangaza kama mkataba unakidhi mali au la. Tofauti na uchanganuzi unaobadilika, uchanganuzi tuli haujumuishi kutekeleza mkataba ili kuuchanganua kwa usahihi. Uchanganuzi thabiti badala yake unasababu kuhusu njia zote zinazowezekana ambazo mkataba mahiri unaweza kuchukua wakati wa utekelezaji (yaani, kwa kuchunguza muundo wa msimbo wa chanzo ili kubaini kitakachomaanisha kwa utendakazi wa mikataba wakati wa utekelezaji).
Linting (opens in a new tab) na upimaji tuli (opens in a new tab) ni mbinu za kawaida za kufanya uchambuzi tuli kwenye mikataba. Zote zinahitaji kuchanganua uwakilishi wa kiwango cha chini wa utekelezaji wa mikataba kama vile miti ya sintaksia dhahania (opens in a new tab) na grafu za mtiririko wa udhibiti (opens in a new tab) zinazotolewa na mkusanyaji.
Katika hali nyingi, uchanganuzi tuli ni muhimu kwa kugundua maswala ya usalama kama vile matumizi ya miundo isiyo salama, hitilafu za sintaksia, au ukiukaji wa viwango vya usimbaji katika msimbo wa mikataba. Hata hivyo, vichanganuzi tuli vinajulikana kwa ujumla kutokuwa sawa katika kugundua udhaifu mkubwa zaidi, na vinaweza kutoa chanya nyingi za uwongo.
Uchambuzi wa nguvu
Uchambuzi wa nguvu hutoa ingizo za ishara (k.m., katika utekelezaji wa ishara (opens in a new tab)) au ingizo halisi (k.m., katika fuzzing (opens in a new tab)) kwa utendakazi wa mikataba-erevu ili kuona kama ufuatiliaji wowote wa utekelezaji unakiuka sifa maalum. Aina hii ya majaribio kulingana na mali hutofautiana na majaribio ya kitengo kwa kuwa kesi za majaribio hushughulikia hali nyingi na mpango hushughulikia uzalishaji wa kesi za majaribio.
Fuzzing (opens in a new tab) ni mfano wa mbinu ya uchambuzi wa nguvu ya kuthibitisha sifa za kiholela katika mikataba-erevu. Fuzzer huomba utendakazi katika mkataba lengwa na tofauti za nasibu au zisizo na hitilafu za thamani iliyobainishwa ya ingizo. Iwapo mkataba mahiri utaingia katika hali ya hitilafu (k.m., ambapo madai hayatafaulu), tatizo hualamishwa na michango ambayo husababisha utekelezaji kuelekea njia hatarishi hutolewa katika ripoti.
Fuzzing ni muhimu kwa kutathmini utaratibu mzuri wa uthibitishaji wa pembejeo za mikataba kwa kuwa utunzaji usiofaa wa pembejeo zisizotarajiwa kunaweza kusababisha utekelezaji usiotarajiwa na kutoa athari hatari. Aina hii ya upimaji unaozingatia sifa inaweza kuwa bora kwa sababu nyingi:
-
Kuandika kesi za majaribio kufunika hali nyingi ni ngumu. Jaribio la sifa linahitaji tu uainishe tabia na anuwai ya data ili kujaribu tabia hiyo—programu huunda kesi za majaribio kiotomatiki kulingana na sifa iliyoainishwa.
-
Seti yako ya majaribio haiwezi kufunika vya kutosha njia zote zinazowezekana ndani ya programu. Hata kwa ufikiaji wa 100%, inawezekana kukosa kesi za pembezoni.
-
Upimaji wa vitengo huthibitisha kuwa mkataba unatekelezwa kwa usahihi kwa data ya sampuli, lakini kama mkataba utatekelezwa kwa usahihi kwa ingizo nje ya sampuli bado haijulikani. Majaribio ya sifa hutekeleza mkataba lengwa na tofauti nyingi za thamani ya ingizo ili kupata athari za utekelezaji zinazosababisha kushindwa kwa madai. Kwa hivyo, jaribio la mali hutoa hakikisho zaidi kwamba mkataba hutekelezwa kwa usahihi kwa darasa pana la data ya ingizo.
Miongozo ya kufanya upimaji unaozingatia sifa kwa mikataba-erevu
Kufanya upimaji unaozingatia sifa kwa kawaida huanza kwa kufafanua sifa (k.m., kutokuwepo kwa mafuriko ya nambari kamili (opens in a new tab)) au mkusanyiko wa sifa ambazo unataka kuthibitisha katika mkataba-erevu. Unaweza pia kuhitaji kufafanua safu ya thamani ambazo programu inaweza kutoa data ya pembejeo za miamala wakati wa kuandika majaribio ya mali.
Baada ya kupangwa ipasavyo, zana ya kupima mali itatekeleza utendakazi wako wa mikataba mahiri kwa ingizo zinazozalishwa bila mpangilio. Iwapo kuna ukiukaji wowote wa madai, unapaswa kupata ripoti iliyo na data thabiti ya ingizo ambayo inakiuka mali inayotathminiwa. Tazama baadhi ya miongozo hapa chini ili kuanza na kuendesha majaribio ya msingi wa mali kwa zana tofauti:
- Uchambuzi tuli wa mikataba-erevu na Slither (opens in a new tab)
- Uchambuzi tuli wa mikataba-erevu na Wake (opens in a new tab)
- Upimaji unaozingatia sifa na Brownie (opens in a new tab)
- Kufanya fuzzing kwenye mikataba na Foundry (opens in a new tab)
- Kufanya fuzzing kwenye mikataba na Echidna (opens in a new tab)
- Kufanya fuzzing kwenye mikataba na Wake (opens in a new tab)
- Utekelezaji wa ishara wa mikataba-erevu na Manticore (opens in a new tab)
- Utekelezaji wa ishara wa mikataba-erevu na Mythril (opens in a new tab)
Upimaji wa mikono kwa mikataba-erevu
Upimaji wa mikono wa mikataba-erevu mara nyingi huja baadaye katika mzunguko wa maendeleo baada ya kufanya majaribio ya kiotomatiki. Aina hii ya upimaji hutathmini mkataba-erevu kama bidhaa moja iliyojumuishwa kikamilifu ili kuona ikiwa inafanya kazi kama ilivyoainishwa katika mahitaji ya kiufundi.
Kupima mikataba kwenye mnyororo wa bloku wa ndani
Ingawa upimaji wa kiotomatiki unaofanywa katika mazingira ya maendeleo ya ndani unaweza kutoa taarifa muhimu za utatuzi, utataka kujua jinsi mkataba-erevu wako unavyofanya kazi katika mazingira ya uzalishaji. Hata hivyo, kupeleka kwenye mnyororo mkuu wa Ethereum kunasababisha ada za gesi—bila kusahau kwamba wewe au watumiaji wako mnaweza kupoteza pesa halisi ikiwa mkataba-erevu wako bado una hitilafu.
Kupima mkataba wako kwenye mnyororo wa bloku wa ndani (pia unajulikana kama mtandao wa maendeleo) ni mbadala unaopendekezwa badala ya kupima kwenye Mtandao Mkuu. Mnyororo wa bloku wa ndani ni nakala ya mnyororo wa bloku wa Ethereum unaoendeshwa ndani ya kompyuta yako ambao unaiga tabia ya safu ya utekelezaji ya Ethereum. Kwa hivyo, unaweza kupanga miamala ili kuingiliana na mkataba bila kupata gharama kubwa.
Kuendesha mikataba kwenye mnyororo wa bloku wa ndani kunaweza kuwa muhimu kama aina ya upimaji wa ujumuishaji wa mikono. Mikataba-erevu inaweza kutungwa kwa urahisi sana, ikikuruhusu kujumuika na itifaki zilizopo—lakini bado utahitaji kuhakikisha kuwa mwingiliano huo changamano wa kwenye mnyororo unatoa matokeo sahihi.
Zaidi kuhusu mitandao ya maendeleo.
Kupima mikataba kwenye testnet
Mtandao wa majaribio au testnet hufanya kazi sawa kabisa na Mtandao Mkuu wa Ethereum, isipokuwa kwamba hutumia ether (ETH) isiyo na thamani ya ulimwengu halisi. Kupeleka mkataba wako kwenye testnet kunamaanisha mtu yeyote anaweza kuingiliana nao (k.m., kupitia sehemu ya mbele ya mfumo mtawanyo wa kimamlaka) bila kuweka fedha hatarini.
Aina hii ya upimaji wa mikono ni muhimu kwa kutathmini mtiririko wa mwisho-hadi-mwisho wa programu yako kutoka kwa mtazamo wa mtumiaji. Hapa, wajaribu wa beta wanaweza pia kufanya majaribio na kuripoti masuala yoyote na mantiki ya biashara ya mkataba na utendakazi wa jumla.
Kupeleka kwenye testnet baada ya kupima kwenye mnyororo wa bloku wa ndani ni bora kwani ya kwanza iko karibu zaidi na tabia ya mashine halisi ya ethereum. Kwa hivyo, ni kawaida kwa miradi mingi ya asili ya Ethereum kupeleka mfumo mtawanyo wa kimamlaka kwenye testnet kutathmini utendaji wa mkataba-erevu chini ya hali za ulimwengu halisi.
Zaidi kuhusu testnet za Ethereum.
Upimaji dhidi ya uthibitishaji rasmi
Ingawa upimaji husaidia kuthibitisha kuwa mkataba unarudisha matokeo yanayotarajiwa kwa baadhi ya ingizo za data, hauwezi kuthibitisha kwa uhakika vivyo hivyo kwa ingizo ambazo hazikutumika wakati wa majaribio. Kupima mkataba-erevu, kwa hivyo, hakuwezi kuhakikisha "usahihi wa kiutendaji" (yaani, hakuwezi kuonyesha kwamba programu inafanya kazi kama inavyotakiwa kwa seti zote za thamani za ingizo).
Uthibitishaji rasmi ni mbinu ya kutathmini usahihi wa programu kwa kuangalia kama mfumo rasmi wa programu unalingana na vipimo rasmi. Mfumo rasmi ni uwakilishi dhahania wa kihisabati wa programu, wakati vipimo rasmi vinafafanua sifa za programu (yaani, madai ya kimantiki kuhusu utekelezaji wa programu).
Kwa sababu sifa zimeandikwa kwa maneno ya kihisabati, inawezekana kuthibitisha kuwa mfumo rasmi (wa kihisabati) wa mfumo unakidhi vipimo kwa kutumia kanuni za kimantiki za kuhitimisha. Kwa hivyo, zana za uthibitishaji rasmi zinasemekana kutoa 'uthibitisho wa kihisabati' wa usahihi wa mfumo.
Tofauti na upimaji, uthibitishaji rasmi unaweza kutumika kuthibitisha utekelezaji wa mkataba-erevu unakidhi vipimo rasmi kwa utekelezaji wote (yaani, hauna hitilafu) bila kuhitaji kuutekeleza kwa data ya sampuli. Hii haipunguzi tu muda unaotumika kufanya majaribio kadhaa ya vitengo, lakini pia ni bora zaidi katika kugundua udhaifu uliofichwa. Hata hivyo, mbinu za uthibitishaji rasmi ziko kwenye wigo kulingana na ugumu wao wa utekelezaji na manufaa.
Zaidi kuhusu uthibitishaji rasmi wa mikataba-erevu.
Upimaji dhidi ya ukaguzi na zawadi za hitilafu
Kama ilivyoelezwa, upimaji mkali mara chache unaweza kuhakikisha kutokuwepo kwa hitilafu katika mkataba; mbinu za uthibitishaji rasmi zinaweza kutoa uhakikisho wenye nguvu zaidi wa usahihi lakini kwa sasa ni ngumu kutumia na zinahusisha gharama kubwa.
Bado, unaweza kuongeza zaidi uwezekano wa kugundua udhaifu wa mkataba kwa kupata ukaguzi huru wa msimbo. Ukaguzi wa mikataba-erevu (opens in a new tab) na zawadi za hitilafu (opens in a new tab) ni njia mbili za kuwafanya wengine wachanganue mikataba yako.
Ukaguzi hufanywa na wakaguzi wenye uzoefu katika kutafuta kesi za dosari za usalama na mazoea duni ya maendeleo katika kandarasi mahiri. Ukaguzi kwa kawaida utajumuisha majaribio (na ikiwezekana uthibitishaji rasmi) pamoja na uhakiki wa mwongozo wa msingi wote wa msimbo.
Kinyume chake, programu ya zawadi ya hitilafu kwa kawaida huhusisha kutoa zawadi ya kifedha kwa mtu binafsi (anayejulikana kama wadukuzi wa kofia nyeupe (opens in a new tab)) anayegundua udhaifu katika mkataba-erevu na kuufichua kwa wasanidi programu. Fadhila za kosa ni sawa na ukaguzi kwa vile unahusisha kuwauliza wengine kusaidia kupata kasoro katika mikataba mahiri.
Tofauti kuu ni kwamba programu za fadhila za kosa ziko wazi kwa jumuiya pana ya wasanifu/wadukuzi na kuvutia tabaka pana la wavamizi wa maadili na wataalamu huru wa usalama walio na ujuzi na uzoefu wa kipekee. Hii inaweza kuwa faida zaidi ya ukaguzi mzuri wa mikataba ambayo inategemea sana timu ambazo zinaweza kuwa na utaalamu mdogo au finyu.
Zana na maktaba za upimaji
Zana za upimaji wa vitengo
-
solidity-coverage (opens in a new tab) - Zana ya kufunika msimbo kwa mikataba-erevu iliyoandikwa katika Solidity.
-
Waffle (opens in a new tab) - Mfumo wa maendeleo ya hali ya juu ya mkataba-erevu na upimaji (kwa kuzingatia ethers.js).
-
Remix Tests (opens in a new tab) - Zana ya kupima mikataba-erevu ya Solidity. Hufanya kazi chini ya programu-jalizi ya Remix IDE "Solidity Unit Testing" ambayo hutumika kuandika na kuendesha kesi za majaribio kwa mkataba.
-
OpenZeppelin Test Helpers (opens in a new tab) - Maktaba ya madai kwa ajili ya upimaji wa mkataba-erevu wa Ethereum. Hakikisha mikataba yako inafanya kazi kama inavyotarajiwa!
-
Mfumo wa upimaji wa kitengo wa Brownie (opens in a new tab) - Brownie hutumia Pytest, mfumo wa majaribio wenye vipengele vingi unaokuruhusu kuandika majaribio madogo na msimbo mdogo, unaongezeka vizuri kwa miradi mikubwa, na unaweza kupanuliwa sana.
-
Majaribio ya Foundry (opens in a new tab) - Foundry inatoa Forge, mfumo wa upimaji wa haraka na rahisi wa Ethereum unaoweza kutekeleza upimaji rahisi wa vitengo, ukaguzi wa uboreshaji wa gesi, na ufanyaji wa fuzzing kwenye mikataba.
-
Majaribio ya Hardhat (opens in a new tab) - Mfumo wa kupima mikataba-erevu unaozingatia ethers.js, Mocha, na Chai.
-
ApeWorx (opens in a new tab) - Mfumo wa maendeleo na upimaji unaotegemea Python kwa mikataba-erevu unaolenga mashine halisi ya ethereum.
-
Wake (opens in a new tab) - Mfumo unaotegemea Python kwa upimaji wa vitengo na fuzzing na uwezo mkubwa wa utatuzi na usaidizi wa upimaji wa minyororo mbalimbali, ukitumia pytest na Anvil kwa uzoefu bora wa mtumiaji na utendakazi.
Zana za upimaji unaozingatia sifa
Zana za uchambuzi tuli
-
Slither (opens in a new tab) - Mfumo wa uchambuzi tuli wa Solidity unaotegemea Python wa kupata udhaifu, kuboresha uelewa wa msimbo, na kuandika uchambuzi maalum wa mikataba-erevu.
-
Ethlint (opens in a new tab) - Linter ya kutekeleza mtindo na mbinu bora za usalama kwa lugha ya programu ya mkataba-erevu ya Solidity.
-
Cyfrin Aderyn (opens in a new tab) - Kichanganuzi tuli chenye msingi wa Rust kilichoundwa mahsusi kwa usalama na maendeleo ya mkataba-erevu wa Web3.
-
Wake (opens in a new tab) - Mfumo wa uchambuzi tuli unaotegemea Python na vigunduzi vya udhaifu na ubora wa msimbo, vichapishi vya kutoa taarifa muhimu kutoka kwa msimbo na usaidizi wa kuandika moduli ndogo maalum.
-
Slippy (opens in a new tab) - Linter rahisi na yenye nguvu kwa Solidity.
Zana za uchambuzi wa nguvu
-
Echidna (opens in a new tab) - Fuzzer ya mikataba ya haraka ya kugundua udhaifu katika mikataba-erevu kupitia upimaji unaozingatia sifa.
-
Diligence Fuzzing (opens in a new tab) - Zana ya kiotomatiki ya fuzzing inayofaa kugundua ukiukaji wa sifa katika msimbo wa mkataba-erevu.
-
Manticore (opens in a new tab) - Mfumo wa utekelezaji wa ishara wa nguvu wa kuchambua bytecode ya EVM.
-
Mythril (opens in a new tab) - Zana ya tathmini ya bytecode ya EVM ya kugundua udhaifu wa mkataba kwa kutumia uchambuzi wa doa, uchambuzi wa concolic, na ukaguzi wa mtiririko wa udhibiti.
-
Diligence Scribble (opens in a new tab) - Scribble ni lugha ya vipimo na zana ya uthibitishaji wakati wa utekelezaji inayokuruhusu kufafanua mikataba-erevu na sifa zinazokuwezesha kupima mikataba kiotomatiki na zana kama vile Diligence Fuzzing au MythX.
Mafunzo yanayohusiana
- Muhtasari na ulinganisho wa bidhaa tofauti za upimaji _
- Jinsi ya kutumia Echidna kupima mikataba-erevu
- Jinsi ya kutumia Manticore kupata mende za mkataba-erevu
- Jinsi ya kutumia Slither kupata mende za mkataba-erevu
- Jinsi ya kuiga mikataba ya Solidity kwa ajili ya upimaji
- Jinsi ya kufanya upimaji wa vitengo katika Solidity kwa kutumia Foundry (opens in a new tab)