Ruka kwenda kwenye maudhui makuu
Change page

Usalama wa mkataba erevu

Ukurasa ulihaririwa mwisho: 14 Septemba 2025

Mikataba mahiri ni rahisi kubadilika, na ina uwezo wa kudhibiti kiwango kikubwa cha thamani na data, huku ikiendesha mantiki isiyobadilika kulingana na msimbo uliowekwa kwenye kiambajengo. Hii imeunda mfumo mzuri wa ikolojia wa programu zisizoaminika na zilizotawanywa ambazo hutoa faida nyingi juu ya mifumo ya urithi. Pia zinawakilisha fursa kwa washambuliaji wanaotafuta faida kwa kutumia udhaifu katika mikataba mahiri.

Minyororo ya bloku ya umma, kama Ethereum, inazidisha ugumu wa suala la kulinda mikataba-erevu. Msimbo wa mkataba-erevu uliotumwa kawaida hauwezi kubadilishwa ili kurekebisha dosari za usalama, ilhali mali zilizoibwa kutoka kwa mikataba-erevu ni ngumu sana kufuatilia na mara nyingi hazipatikani kwa sababu ya kutobadilika.

Ingawa takwimu zinatofautiana, inakadiriwa kuwa jumla ya thamani iliyoibiwa au kupotea kutokana na kasoro za kiusalama katika mikataba mahiri ni zaidi ya $1 bilioni kwa urahisi. Hii inajumuisha matukio mashuhuri, kama vile udukuzi wa DAOopens in a new tab (ETH milioni 3.6 ziliibwa, zenye thamani ya zaidi ya dola bilioni 1 kwa bei za leo), udukuzi wa mkoba wa Parity wenye saini nyingiopens in a new tab (dola milioni 30 zilipotea kwa wadukuzi), na suala la mkoba ulioganda wa Parityopens in a new tab (zaidi ya dola milioni 300 za ETH zimefungiwa milele).

Masuala yaliyotajwa hapo juu yanafanya kuwa muhimu kwa wasanifu programu kuwekeza juhudi katika kujenga mkataba mahiri iliyo salama, thabiti na inayostahimili uthabiti. Usalama wa mkataba-erevu ni jambo zito, na kila msanidi programu atafanya vizuri kujifunza. Mwongozo huu utashughulikia masuala ya usalama kwa wasanifu wa Ethereum na kuchunguza nyenzo za kuboresha usalama wa mikataba mahiri.

Mahitaji ya awali

Hakikisha unafahamu misingi ya usanidi wa mkataba-erevu kabla ya kushughulikia usalama.

Miongozo ya kuunda mikataba-erevu salama ya Ethereum

1. Buni vidhibiti sahihi vya ufikiaji

Katika mikataba-erevu, vitendaji vilivyowekwa alama ya public au external vinaweza kuitwa na akaunti zozote zinazomilikiwa na nje (EOAs) au akaunti za mkataba. Kubainisha mwonekano wa umma kwa vipengele ni muhimu ikiwa unataka wengine kuingiliana na mkataba wako. Hata hivyo, vitendaji vilivyowekwa alama ya private vinaweza tu kuitwa na vitendaji ndani ya mkataba-erevu, na si akaunti za nje. Kumpa kila mshiriki wa mtandao ufikiaji wa kazi za mkataba kunaweza kusababisha shida, haswa ikiwa inamaanisha kuwa mtu yeyote anaweza kufanya shughuli nyeti (k.m., kutengeneza tokeni mpya).

Ili kuzuia matumizi yasiyoidhinishwa ya vitendaji vya mkataba-erevu, ni muhimu kutekeleza vidhibiti salama vya ufikiaji. Mbinu za udhibiti wa ufikiaji huzuia uwezo wa kutumia kazi fulani katika mkataba mahiri kwa vyombo vilivyoidhinishwa, kama vile akaunti zinazowajibika kudhibiti mkataba. Muundo wa Ownable na udhibiti unaotegemea majukumu ni miundo miwili muhimu kwa kutekeleza udhibiti wa ufikiaji katika mikataba-erevu:

Muundo wa Ownable

Katika muundo wa Kumiliki, anwani imewekwa kama "mmiliki" wa mkataba wakati wa mchakato wa kuunda mkataba. Vitendaji vilivyolindwa hupewa kirekebishaji cha OnlyOwner, ambacho huhakikisha mkataba unathibitisha utambulisho wa anwani inayopiga simu kabla ya kutekeleza kitendaji. Simu za utendajikazi zinazolindwa kutoka kwa anwani zingine kando na mmiliki wa mkataba hurejeshwa kila wakati, na hivyo kuzuia ufikiaji usiohitajika.

Udhibiti wa ufikiaji unaotegemea majukumu

Kusajili anwani moja kama Owner katika mkataba-erevu huleta hatari ya uwekaji kati na huwakilisha sehemu moja ya kushindwa. Ikiwa funguo za akaunti ya mmiliki zitaathiriwa, washambuliaji wanaweza kushambulia mkataba unaomilikiwa. Hii ndiyo sababu kutumia muundo wa udhibiti wa ufikiaji wenye msingi wa dhima na akaunti nyingi za usimamizi inaweza kuwa chaguo bora.

Katika udhibiti wa ufikiaji unaotegemea jukumu, ufikiaji wa vipengele nyeti husambazwa kati ya seti ya washiriki wanaoaminika. Kwa mfano, akaunti moja inaweza kuwa na jukumu la kutengeneza tokeni, huku akaunti nyingine ikifanya marekebisho au kusitisha mkataba. Kutawanya udhibiti wa ufikiaji kwa njia hii huondoa alama moja ya kutofaulu na kupunguza mawazo ya kuaminiana kwa watumiaji.

Kutumia mikoba ya saini nyingi

Njia nyingine ya kutekeleza udhibiti salama wa ufikiaji ni kutumia akaunti ya saini nyingi kudhibiti mkataba. Tofauti na EOA ya kawaida, akaunti zenye sahihi ni nyingi zinamilikiwa na mamlaka nyingi na zinahitaji sahihi kutoka kwa idadi ya chini ya akaunti—sema 3-ya-5—ili kutekeleza miamala.

Kutumia sahihi nyingi kwa udhibiti wa ufikiaji huleta safu ya ziada ya usalama kwani vitendo kwenye mkataba lengwa vinahitaji idhini kutoka kwa wahusika wengi. Hili ni muhimu hasa ikiwa ni muhimu kutumia muundo wa Kumiliki, kwa kuwa inafanya iwe vigumu zaidi kwa mshambulizi au mtu wa ndani kulaghai utendaji kazi nyeti wa mkataba kwa madhumuni mabaya.

2. Tumia kauli za require(), assert(), na revert() kulinda utendakazi wa mkataba

Kama ilivyotajwa, mtu yeyote anaweza kupiga simu kazi za umma katika mkataba wako mahiri mara tu utakapowekwa kwenye kiambajengo. Kwa kuwa huwezi kujua mapema jinsi akaunti za nje zitakavyoingiliana na mkataba, ni vyema kutekeleza ulinzi wa ndani dhidi ya utendaji kazi wenye matatizo kabla ya kupeleka. Unaweza kutekeleza tabia sahihi katika mikataba-erevu kwa kutumia kauli za require(), assert(), na revert() ili kusababisha vighairi na kurudisha mabadiliko ya hali ikiwa utekelezaji utashindwa kukidhi mahitaji fulani.

require(): require hufafanuliwa mwanzoni mwa vitendaji na huhakikisha masharti yaliyowekwa awali yanatimizwa kabla ya kitendaji kilichoitwa kutekelezwa. Kauli ya require inaweza kutumika kuthibitisha ingizo la mtumiaji, kuangalia vigezo vya hali, au kuthibitisha utambulisho wa akaunti inayopiga simu kabla ya kuendelea na kitendaji.

assert(): assert() hutumika kugundua makosa ya ndani na kuangalia ukiukaji wa “kanuni zisizobadilika” katika msimbo wako. Tofauti ni madai ya kimantiki kuhusu hali ya mkataba ambayo inapaswa kuwa ya kweli kwa utekelezaji wote wa kazi. Mfano wa kanuni isiyobadilika ni jumla ya kiwango cha juu cha usambazaji au salio la mkataba wa tokeni. Kutumia assert() huhakikisha kuwa mkataba wako haufikii hali hatarishi, na ikitokea, mabadiliko yote kwenye vigezo vya hali yanarejeshwa nyuma.

revert(): revert() inaweza kutumika katika kauli ya if-else ambayo husababisha kighairi ikiwa hali inayohitajika haijatimizwa. Mkataba wa sampuli hapa chini unatumia revert() kulinda utekelezaji wa vitendaji:

1pragma solidity ^0.8.4;
2
3contract VendingMachine {
4 address owner;
5 error Unauthorized();
6 function buy(uint amount) public payable {
7 if (amount > msg.value / 2 ether)
8 revert("Hakuna Ether ya kutosha iliyotolewa.");
9 // Tekeleza ununuzi.
10 }
11 function withdraw() public {
12 if (msg.sender != owner)
13 revert Unauthorized();
14
15 payable(msg.sender).transfer(address(this).balance);
16 }
17}
Onyesha yote

3. Pima mikataba-erevu na thibitisha usahihi wa msimbo

Kutobadilika kwa msimbo unaoendeshwa katika Mashine Halisi ya Ethereum kunamaanisha mikataba-erevu inahitaji kiwango cha juu cha tathmini ya ubora wakati wa awamu ya usanidi. Kupima mkataba wako kwa kina na kuuangalia kwa matokeo yoyote yasiyotarajiwa kutaboresha usalama kwa kiasi kikubwa na kulinda watumiaji wako kwa muda mrefu.

Njia ya kawaida ni kuandika majaribio madogo ya vitengo kwa kutumia data ya mfano ambayo mkataba unatarajiwa kupokea kutoka kwa watumiaji. Upimaji wa vitengo ni mzuri kwa kupima utendakazi wa vitendaji fulani na kuhakikisha mkataba-erevu unafanya kazi kama inavyotarajiwa.

Kwa bahati mbaya, upimaji wa vitengo hauna ufanisi mdogo katika kuboresha usalama wa mkataba-erevu unapotumika peke yake. Jaribio la kitengo linaweza kuthibitisha kuwa kitendaji kinajitekeleza vizuri kwa data ya mfano, lakini majaribio ya kitengo yana ufanisi tu kama majaribio yaliyoandikwa. Hii inafanya iwe vigumu kugundua visa vya pembeni vilivyokosekana na udhaifu ambao unaweza kuvunja usalama wa mkataba wako-erevu.

Njia bora ni kuchanganya upimaji wa vitengo na upimaji unaotegemea sifa unaofanywa kwa kutumia uchanganuzi tuli na unaobadilika. Uchanganuzi tuli hutegemea uwakilishi wa kiwango cha chini, kama vile grafu za mtiririko wa udhibitiopens in a new tab na miti dhahania ya sintaksiaopens in a new tab ili kuchanganua hali za programu zinazoweza kufikiwa na njia za utekelezaji. Wakati huo huo, mbinu za uchanganuzi unaobadilika, kama vile uchanganyaji wa mkataba-erevuopens in a new tab, hutekeleza msimbo wa mkataba na thamani za ingizo nasibu ili kugundua operesheni zinazokiuka sifa za usalama.

Uthibitishaji rasmi ni mbinu nyingine ya kuthibitisha sifa za usalama katika mikataba-erevu. Tofauti na upimaji wa kawaida, uthibitishaji rasmi unaweza kuthibitisha kwa uhakika kutokuwepo kwa makosa katika mkataba-erevu. Hii inafanikiwa kwa kuunda vipimo rasmi ambavyo vinanasa sifa za usalama zinazohitajika na kuthibitisha kuwa muundo rasmi wa kandarasi unafuata vipimo hivi.

4. Omba mapitio huru ya msimbo wako

Baada ya kupima mkataba wako, ni vizuri kuwaomba wengine wakague msimbo chanzo kwa masuala yoyote ya usalama. Majaribio hayatafichua kila dosari katika mkataba mzuri, lakini kupata hakiki huru huongeza uwezekano wa kugundua udhaifu.

Ukaguzi

Kuagiza ukaguzi wa mkataba-erevu ni njia moja ya kufanya mapitio huru ya msimbo. Wakaguzi wana jukumu muhimu katika kuhakikisha kuwa mikataba mahiri ni salama na haina kasoro za ubora na hitilafu za muundo.

Hata hivyo, unapaswa kuepuka kuchukulia ukaguzi kama suluhisho la kila kitu. Ukaguzi mahiri wa mikataba hautashika kila hitilafu na mara nyingi umeundwa ili kutoa ukaguzi wa ziada, ambao unaweza kusaidia kugundua matatizo ambayo wasanidi programu hawakuyapata wakati wa utayarishaji na majaribio ya awali. Unapaswa pia kufuata mbinu bora za kufanya kazi na wakaguzi, kama vile kuandika msimbo ipasavyo na kuongeza maoni ya ndani, ili kuongeza manufaa ya ukaguzi wa mikataba mahiri.

Zawadi za mdudu

Kuanzisha programu ya zawadi ya mdudu ni njia nyingine ya kutekeleza mapitio ya msimbo wa nje. Zawadi ya mdudu ni malipo ya kifedha yanayotolewa kwa watu binafsi (kawaida wadukuzi wa kofia nyeupe) wanaogundua udhaifu katika programu.

Zikitumiwa ipasavyo, zawadi za mdudu huwapa wanachama wa jumuiya ya wadukuzi motisha wa kukagua msimbo wako kwa dosari muhimu. Mfano halisi ni "mdudu wa pesa usio na kikomo" ambao ungemruhusu mshambuliaji kuunda kiasi kisicho na kikomo cha ether kwenye Optimismopens in a new tab, itifaki ya Safu ya 2 inayoendeshwa kwenye Ethereum. Kwa bahati nzuri, mdukuzi wa kofia nyeupe aligundua dosari hiyoopens in a new tab na kuijulisha timu, na kupata malipo makubwa katika mchakato huoopens in a new tab.

Mkakati muhimu ni kuweka malipo ya programu ya zawadi ya mdudu kulingana na kiasi cha fedha zilizo hatarini. Ikifafanuliwa kama "zawadi ya mdudu ya kuongeza kiwangoopens in a new tab", njia hii hutoa motisha wa kifedha kwa watu binafsi kufichua udhaifu kwa uwajibikaji badala ya kuutumia.

5. Fuata mbinu bora wakati wa usanidi wa mkataba-erevu

Uwepo wa ukaguzi na zawadi za mdudu haukuondolei jukumu lako la kuandika msimbo wa hali ya juu. Usalama mzuri wa mkataba-erevu huanza na kufuata michakato sahihi ya usanifu na usanidi:

  • Hifadhi msimbo wote katika mfumo wa kudhibiti matoleo, kama vile git

  • Fanya marekebisho yote ya msimbo kupitia maombi ya kuvuta

  • Hakikisha maombi ya kuvuta yana angalau mkaguzi mmoja huru ikiwa unafanya kazi peke yako kwenye mradi, zingatia kutafuta wasanifu programu wengine na ukaguzi wa nambari za biashara

  • Tumia mazingira ya usanidi kwa kupima, kuandaa, na kutuma mikataba-erevu

  • Pitia msimbo wako kupitia zana za msingi za uchambuzi wa msimbo, kama vile Cyfrin Aderynopens in a new tab, Mythril na Slither. Kimsingi, unapaswa kufanya hivi kabla ya kila ombi la kuvuta kuunganishwa na kulinganisha tofauti katika matokeo

  • Hakikisha msimbo wako unakusanywa bila makosa, na mkusanyaji wa Solidity hatoi maonyo yoyote

  • Andika nyaraka za msimbo wako ipasavyo (ukitumia NatSpecopens in a new tab) na ueleze maelezo kuhusu usanifu wa mkataba katika lugha rahisi kueleweka. Hii itarahisisha wengine kukagua na kupitia msimbo wako.

6. Tekeleza mipango thabiti ya kukabiliana na maafa

Kubuni vidhibiti salama vya ufikiaji, kutekeleza virekebishaji vya utendaji kazi na mapendekezo mengine kunaweza kuboresha usalama wa mikataba mahiri, lakini hakuwezi kuondoa uwezekano wa matumizi mabaya. Kuunda mikataba mahiri iliyo salama kunahitaji "kujitayarisha kwa kutofaulu" na kuwa na mpango mbadala wa kujibu mashambulizi kwa ufanisi. Mpango sahihi wa kukabiliana na maafa utajumuisha baadhi au yote ya vipengele vifuatavyo:

Uboreshaji wa mkataba

Ingawa mikataba mahiri ya Ethereum haiwezi kubadilika kwa chaguo msingi, inawezekana kufikia kiwango fulani cha kubadilika kwa kutumia mifumo ya uboreshaji. Kuboresha mikataba ni muhimu katika hali ambapo kosa kubwa hufanya mkataba wako wa zamani kutotumika na kupeleka mantiki mpya ndilo chaguo linalowezekana zaidi.

Mbinu za uboreshaji wa mikataba hufanya kazi tofauti, lakini "mchoro wa seva mbadala" ni mojawapo ya mbinu maarufu zaidi za kuboresha mikataba mahiri. Miundo ya proksiopens in a new tab hugawanya hali na mantiki ya programu kati ya mikataba miwili. Mkataba wa kwanza (unaoitwa ‘mkataba wa wakala’) huhifadhi vigezo vya hali (k.m., salio la mtumiaji), huku mkataba wa pili (unaoitwa ‘mkataba wa mantiki’) unashikilia msimbo wa kutekeleza majukumu ya mkataba.

Akaunti huingiliana na mkataba wa proksi, ambao hupeleka simu zote za vitendaji kwa mkataba wa mantiki kwa kutumia simu ya kiwango cha chini ya delegatecall()opens in a new tab. Tofauti na simu ya kawaida ya ujumbe, delegatecall() huhakikisha kuwa msimbo unaoendeshwa kwenye anwani ya mkataba wa mantiki unatekelezwa katika muktadha wa mkataba unaopiga simu. Hii inamaanisha kuwa mkataba wa mantiki utaandika kila wakati kwenye hifadhi ya proksi (badala ya hifadhi yake yenyewe) na thamani asili za msg.sender na msg.value huhifadhiwa.

Kukabidhi simu kwa mkataba wa mantiki kunahitaji kuhifadhi anwani yake katika hifadhi ya mkataba wa wakala. Kwa hivyo, kuboresha mantiki ya mkataba ni suala la kupeleka mkataba mwingine wa kimantiki na kuhifadhi anwani mpya katika mkataba wa wakala. Simu zinazofuata kwa mkataba wa wakala zinapoelekezwa kiotomatiki hadi kwa mkataba mpya wa kimantiki, ungekuwa "umeboresha" mkataba bila kurekebisha msimbo.

Zaidi kuhusu uboreshaji wa mikataba.

Vituo vya dharura

Kama ilivyoelezwa, ukaguzi na upimaji wa kina hauwezi kugundua mende zote kwenye mkataba-erevu. Athari ikitokea kwenye msimbo wako baada ya kutumwa, haiwezekani kuweka alama kwa kuwa huwezi kubadilisha msimbo unaotumika kwenye anwani ya mkataba. Pia, mbinu za uboreshaji (k.m., ruwaza za seva mbadala) zinaweza kuchukua muda kutekelezwa (mara nyingi zinahitaji idhini kutoka kwa wahusika tofauti), ambayo huwapa washambuliaji muda zaidi wa kusababisha uharibifu zaidi.

Chaguo la nyuklia ni kutekeleza chaguo la kukokotoa la "kusimamisha dharura" ambalo huzuia simu kwa kazi zinazoweza kuathiriwa katika mkataba. Vituo vya dharura kwa kawaida hujumuisha vipengele vifuatavyo:

  1. Kigezo cha Boolean cha kimataifa kinachoonyesha ikiwa mkataba-erevu uko katika hali ya kusimamishwa au la. Kigezo hiki huwekwa kuwa false wakati wa kusanidi mkataba, lakini kitarudi kuwa true mara mkataba utakapositishwa.

  2. Vitendaji vinavyorejelea kigezo cha Boolean katika utekelezaji wao. Vipengele kama hivyo vinaweza kufikiwa wakati mkataba mahiri haujasimamishwa, na hutoweza kufikiwa wakati kipengele cha kusimamisha dharura kinapoanzishwa.

  3. Hulka yenye ufikiaji wa kitendaji cha kusimamisha dharura, ambacho huweka kigezo cha Boolean kuwa true. Ili kuzuia vitendo viovu, simu kwa chaguo hili la kazi zinaweza kuzuiwa kwa anwani inayoaminika (k.m., mmiliki wa mkataba).

Mara tu mkataba unapowasha kituo cha dharura, vitendaji fulani havitaitika. Hii inafanikiwa kwa kufunga vitendaji teule katika kirekebishaji kinachorejelea kigezo cha kimataifa. Hapo chini ni mfanoopens in a new tab unaoelezea utekelezaji wa muundo huu katika mikataba:

1// Msimbo huu haujakaguliwa kitaalamu na hautoi ahadi yoyote kuhusu usalama au usahihi. Tumia kwa hatari yako mwenyewe.
2
3contract EmergencyStop {
4
5 bool isStopped = false;
6
7 modifier stoppedInEmergency {
8 require(!isStopped);
9 _;
10 }
11
12 modifier onlyWhenStopped {
13 require(isStopped);
14 _;
15 }
16
17 modifier onlyAuthorized {
18 // Angalia uidhinishaji wa msg.sender hapa
19 _;
20 }
21
22 function stopContract() public onlyAuthorized {
23 isStopped = true;
24 }
25
26 function resumeContract() public onlyAuthorized {
27 isStopped = false;
28 }
29
30 function deposit() public payable stoppedInEmergency {
31 // Mantiki ya kuweka amana inatokea hapa
32 }
33
34 function emergencyWithdraw() public onlyWhenStopped {
35 // Utoaji wa dharura unatokea hapa
36 }
37}
Onyesha yote

Mfano huu unaonyesha sifa za msingi za vituo vya dharura:

  • isStopped ni Boolean inayotathminiwa kuwa false mwanzoni na true wakati mkataba unapoingia katika hali ya dharura.

  • Virekebishaji vya vitendaji onlyWhenStopped na stoppedInEmergency hukagua kigezo cha isStopped. stoppedInEmergency hutumika kudhibiti vitendaji ambavyo havipaswi kufikiwa wakati mkataba uko hatarini (k.m., deposit()). Simu kwa vitendaji hivi zitarudi nyuma tu.

onlyWhenStopped hutumika kwa vitendaji ambavyo vinapaswa kuitika wakati wa dharura (k.m., emergencyWithdraw()). Kazi kama hizo zinaweza kusaidia kutatua hali hiyo, kwa hivyo kutengwa kwao kutoka kwa orodha ya "kazi zilizozuiliwa".

Kutumia utendaji kazi wa kusimamisha dharura kunatoa mwanya mzuri wa kushughulika na udhaifu mkubwa katika mkataba wako mahiri. Hata hivyo, huongeza hitaji la watumiaji kuamini wasanidi programu kutoiwasha kwa sababu za kibinafsi. Kufikia hili, kugatua udhibiti wa kituo cha dharura ama kwa kukiweka chini ya utaratibu wa upigaji kura wa mtandaoni, kufunga saa, au uidhinishaji kutoka kwa mikoba ya sahihi nyingni suluhisho zinazowezekana.

Ufuatiliaji wa matukio

Matukioopens in a new tab hukuruhusu kufuatilia simu kwa vitendaji vya mkataba-erevu na kufuatilia mabadiliko kwenye vigezo vya hali. Ni vyema kupanga mkataba wako mahiri ili kutangaza tukio wakati wowote mhusika anachukua hatua muhimu ya usalama (k.m., kutoa pesa).

Kuweka matukio na kuyafuatilia nje ya mnyororo hutoa maarifa juu ya utendakazi wa mikataba na kusaidia ugunduzi wa haraka wa vitendo viovu. Hii inamaanisha kuwa timu yako inaweza kukabiliana haraka na udukuzi na kuchukua hatua ili kupunguza athari kwa watumiaji, kama vile kusitisha utendakazi au kufanya uboreshaji.

Unaweza pia kuchagua zana ya ufuatiliaji ya nje ya rafu ambayo inasambaza arifa kiotomatiki wakati wowote mtu anapoingiliana na mikataba yako. Zana hizi zitakuruhusu kuunda arifa maalum kulingana na vichochezi tofauti, kama vile kiasi cha muamala, marudio ya simu za utendakazi, au vipengele maalum vinavyohusika. Kwa mfano, unaweza kupanga arifa inayokuja wakati kiasi kilichotolewa katika muamala mmoja kinavuka kiwango fulani.

7. Buni mifumo salama ya utawala

Unaweza kutaka kugawa ombi lako kwa kugeuza udhibiti wa kandarasi za msingi kwa wanajamii. Katika hali hii, mfumo mahiri wa kandarasi utajumuisha moduli ya utawala utaratibu unaoruhusu wanajamii kuidhinisha vitendo vya usimamizi kupitia mfumo wa utawala wa mnyororo. Kwa mfano, pendekezo la kuboresha mkataba wa wakala hadi utekelezaji mpya linaweza kupigiwa kura na wenye tokeni.

Utawala uliogawanyika unaweza kuwa wa manufaa, hasa kwa sababu unapatanisha maslahi ya wasanifu programu na watumiaji wa mwisho. Hata hivyo, mbinu mahiri za usimamizi wa mikataba zinaweza kuleta hatari mpya zikitekelezwa kimakosa. Hali inayowezekana ni ikiwa mshambuliaji anapata nguvu kubwa ya kupiga kura (inayopimwa kwa idadi ya tokeni zilizoshikiliwa) kwa kuchukua mkopo wa ghafla na kusukuma pendekezo ovu.

Njia moja ya kuzuia matatizo yanayohusiana na utawala kwenye mnyororo ni kutumia kufuli ya mudaopens in a new tab. Kufunga muda huzuia mkataba mahiri kutekeleza vitendo fulani hadi muda mahususi upite. Mikakati mingine ni pamoja na kugawa "uzito wa kupiga kura" kwa kila tokeni kulingana na muda ambao imekuwa imefungwa, au kupima uwezo wa kupiga kura wa anwani katika kipindi cha kihistoria (kwa mfano, vitalu 2-3 hapo awali) badala ya kizuizi cha sasa. Njia zote mbili hupunguza uwezekano wa kukusanya haraka nguvu ya kupiga kura ili kubadilisha kura kwenye mnyororo.

Zaidi kuhusu kubuni mifumo salama ya utawalaopens in a new tab, mifumo tofauti ya upigaji kura katika DAOopens in a new tab, na vejeta za kawaida za mashambulizi ya DAO zinazotumia DeFiopens in a new tab katika viungo vilivyoshirikiwa.

8. Punguza utata katika msimbo kwa kiwango cha chini

Wasanidi programu wa jadi wanafahamu kanuni ya KISS (“weka rahisi, mjinga”), ambayo inashauri dhidi ya kuleta utata usio wa lazima katika usanifu wa programu. Hii inafuata fikra ya muda mrefu kwamba “mifumo tata hushindwa kwa njia tata” na iko katika hatari zaidi ya makosa ya gharama kubwa.

Kuweka mambo rahisi ni muhimu sana wakati wa kuandika mikataba mahiri, ikizingatiwa kwamba mikataba mahiri inaweza kudhibiti kiwango kikubwa cha thamani. Kidokezo cha kufikia urahisi unapoandika mikataba-erevu ni kutumia tena maktaba zilizopo, kama vile OpenZeppelin Contractsopens in a new tab, inapowezekana. Kwa sababu maktaba hizi zimekaguliwa sana na kujaribiwa na wasanifu programu, kuzitumia hupunguza uwezekano wa kuibua makosa kwa kuandika utendaji kazi mpya kuanzia mwanzo.

Ushauri mwingine wa kawaida ni kuandika kazi ndogo ndogo na kuweka mikataba ya kawaida kwa kugawanya mantiki ya biashara katika mikataba mingi. Sio tu kwamba kuandika msimbo rahisi hupunguza eneo la mashambulizi katika mkataba mahiri, pia hurahisisha kufikiria juu ya usahihi wa mfumo mzima na kugundua makosa yanayoweza kutokea ya muundo mapema.

9. Jilinde dhidi ya udhaifu wa kawaida wa mkataba-erevu

Uingiaji upya

EVM hairuhusu upatanishi, kumaanisha kuwa mikataba miwili inayohusika katika simu ya ujumbe haiwezi kutekelezwa kwa wakati mmoja. Simu ya nje inasitisha utekelezaji wa mkataba wa kupiga simu na kumbukumbu hadi simu irudi, wakati ambapo utekelezaji unaendelea kama kawaida. Mchakato huu unaweza kuelezewa rasmi kama kuhamisha mtiririko wa udhibitiopens in a new tab kwenda kwa mkataba mwingine.

Ingawa mara nyingi haina madhara, kuhamisha mtiririko wa udhibiti kwa mikataba isiyoaminika inaweza kusababisha matatizo, kama vile kurejea tena. Shambulio la kurejesha tena hutokea wakati mkataba mbovu unaporejesha kwenye mkataba unaoweza kuathiriwa kabla ya ombi la awali la utendaji kazi kukamilika. Aina hii ya shambulio inaelezewa vizuri zaidi kwa mfano.

Fikiria mkataba-erevu rahisi ('Mhanga') unaomruhusu yeyote kuweka na kutoa ether:

1// Mkataba huu una udhaifu. Usitumie katika uzalishaji
2
3contract Victim {
4 mapping (address => uint256) public balances;
5
6 function deposit() external payable {
7 balances[msg.sender] += msg.value;
8 }
9
10 function withdraw() external {
11 uint256 amount = balances[msg.sender];
12 (bool success, ) = msg.sender.call.value(amount)("");
13 require(success);
14 balances[msg.sender] = 0;
15 }
16}
Onyesha yote

Mkataba huu unafichua kitendaji cha withdraw() ili kuruhusu watumiaji kutoa ETH iliyowekwa awali kwenye mkataba. Wakati wa kuchakata utoaji, mkataba hufanya operesheni zifuatazo:

  1. Hukagua salio la ETH la mtumiaji
  2. Hutuma fedha kwa anwani inayopiga simu
  3. Huweka upya salio lao kuwa 0, kuzuia utoaji wa ziada kutoka kwa mtumiaji

Kitendaji cha withdraw() katika mkataba wa Victim hufuata muundo wa “ukaguzi-maingiliano-athari”. Hukagua ikiwa masharti muhimu kwa utekelezaji yanatimizwa (yaani, mtumiaji ana salio chanya la ETH) na hufanya maingiliano kwa kutuma ETH kwa anwani ya mpigaji, kabla ya kutumia athari za muamala (yaani, kupunguza salio la mtumiaji).

Ikiwa withdraw() inaitwa kutoka kwa akaunti inayomilikiwa na nje (EOA), kitendaji hutekelezwa kama inavyotarajiwa: msg.sender.call.value() hutuma ETH kwa mpigaji. Hata hivyo, ikiwa msg.sender ni akaunti ya mkataba-erevu inayoita withdraw(), kutuma fedha kwa kutumia msg.sender.call.value() pia kutasababisha msimbo uliohifadhiwa kwenye anwani hiyo kuendeshwa.

Fikiria huu ndio msimbo uliotumwa kwenye anwani ya mkataba:

1 contract Attacker {
2 function beginAttack() external payable {
3 Victim(victim_address).deposit.value(1 ether)();
4 Victim(victim_address).withdraw();
5 }
6
7 function() external payable {
8 if (gasleft() > 40000) {
9 Victim(victim_address).withdraw();
10 }
11 }
12}
Onyesha yote

Mkataba huu umebuniwa kufanya mambo matatu:

  1. Kubali amana kutoka kwa akaunti nyingine (labda EOA ya mshambuliaji)
  2. Weka ETH 1 kwenye mkataba wa Mhanga
  3. Toa ETH 1 iliyohifadhiwa kwenye mkataba-erevu

Hakuna tatizo hapa, isipokuwa Attacker ana kitendaji kingine kinachoita withdraw() katika Victim tena ikiwa gesi iliyobaki kutoka kwa msg.sender.call.value inayoingia ni zaidi ya 40,000. Hii inampa Attacker uwezo wa kuingia tena Victim na kutoa fedha zaidi kabla ya wito wa kwanza wa withdraw kukamilika. Mzunguko unaonekana hivi:

1- EOA ya Mshambuliaji inaita `Attacker.beginAttack()` na ETH 1
2- `Attacker.beginAttack()` inaweka ETH 1 kwenye `Victim`
3- `Attacker` inaita `withdraw()` katika `Victim`
4- `Victim` inakagua salio la `Attacker` (ETH 1)
5- `Victim` inatuma ETH 1 kwa `Attacker` (ambayo inasababisha kitendaji cha chaguo-msingi)
6- `Attacker` inaita `Victim.withdraw()` tena (kumbuka kwamba `Victim` haijapunguza salio la `Attacker` kutoka kwa utoaji wa kwanza)
7- `Victim` inakagua salio la `Attacker` (ambalo bado ni ETH 1 kwa sababu haijatumia athari za simu ya kwanza)
8- `Victim` inatuma ETH 1 kwa `Attacker` (ambayo inasababisha kitendaji cha chaguo-msingi na kumruhusu `Attacker` kuingia tena kwenye kitendaji cha `withdraw`)
9- Mchakato unarudiwa hadi `Attacker` aishiwe na gesi, ambapo `msg.sender.call.value` inarudi bila kusababisha utoaji wa ziada
10- `Victim` hatimaye inatumia matokeo ya muamala wa kwanza (na zinazofuata) kwenye hali yake, hivyo salio la `Attacker` linawekwa kuwa 0
Onyesha yote

Muhtasari ni kwamba kwa sababu salio la mpigaji simu halijawekwa kuwa 0 hadi utekelezaji wa chaguo la kazi ukamilike, maombi yatakayofuata yatafaulu na kumruhusu mpigaji simu kuondoa salio lake mara nyingi. Aina hii ya shambulio inaweza kutumika kumaliza fedha za mkataba-erevu, kama ilivyotokea katika udukuzi wa DAO wa 2016opens in a new tab. Mashambulio ya uingiaji upya bado ni suala muhimu kwa mikataba-erevu leo kama orodha za umma za unyonyaji wa uingiaji upyaopens in a new tab zinavyoonyesha.

Jinsi ya kuzuia mashambulio ya uingiaji upya

Njia moja ya kushughulikia uingiaji upya ni kufuata muundo wa ukaguzi-athari-maingilianoopens in a new tab. Mchoro huu huamuru utekelezaji wa chaguo za kukokotoa kwa njia ambayo msimbo unaofanya ukaguzi unaohitajika kabla ya kuendelea na utekelezaji huja kwanza, ikifuatiwa na msimbo unaodhibiti hali ya mkataba, na msimbo unaoingiliana na mikataba mingine au EOA zinazofika mwisho.

Muundo wa ukaguzi-athari-maingiliano unatumika katika toleo lililorekebishwa la mkataba wa Victim ulioonyeshwa hapa chini:

1contract NoLongerAVictim {
2 function withdraw() external {
3 uint256 amount = balances[msg.sender];
4 balances[msg.sender] = 0;
5 (bool success, ) = msg.sender.call.value(amount)("");
6 require(success);
7 }
8}

Mkataba huu hufanya ukaguzi kwenye salio la mtumiaji, hutumia athari za kitendaji cha withdraw() (kwa kuweka upya salio la mtumiaji kuwa 0), na huendelea kufanya maingiliano (kutuma ETH kwa anwani ya mtumiaji). Hii inahakikisha kwamba mkataba unasasisha hifadhi yake kabla ya simu ya nje, kuondoa hali ya kuingia tena iliyowezesha shambulio la kwanza. Mkataba wa Attacker bado ungeweza kurudi nyuma kwenye NoLongerAVictim, lakini kwa kuwa balances[msg.sender] imewekwa kuwa 0, utoaji wa ziada utatupa kosa.

Chaguo jingine ni kutumia kufuli ya kujumuisha (inayojulikana kama "mutex") ambayo hufunga sehemu ya hali ya mkataba hadi ombi la kukokotoa likamilike. Hii inatekelezwa kwa kutumia kigezo cha Boolean ambacho huwekwa kuwa true kabla ya kitendaji kutekelezwa na kurudi kuwa false baada ya wito kukamilika. Kama inavyoonekana katika mfano ulio hapa chini, kutumia mwito hulinda chaguo za kukokotoa dhidi ya simu zinazorudiwa wakati ombi la asili likiendelea kuchakatwa, hivyo basi kusimamisha kwa njia sahihi kurejesha.

1pragma solidity ^0.7.0;
2
3contract MutexPattern {
4 bool locked = false;
5 mapping(address => uint256) public balances;
6
7 modifier noReentrancy() {
8 require(!locked, "Umezuiliwa kuingia upya.");
9 locked = true;
10 _;
11 locked = false;
12 }
13 // Kitendaji hiki kinalindwa na mutex, kwa hivyo simu za kuingia upya kutoka ndani ya `msg.sender.call` haziwezi kuita `withdraw` tena.
14 // Kauli ya `return` inatathminiwa kuwa `true` lakini bado inatathmini kauli ya `locked = false` katika kirekebishaji
15 function withdraw(uint _amount) public payable noReentrancy returns(bool) {
16 require(balances[msg.sender] >= _amount, "Hakuna salio la kutoa.");
17
18 balances[msg.sender] -= _amount;
19 (bool success, ) = msg.sender.call{value: _amount}("");
20 require(success);
21
22 return true;
23 }
24}
Onyesha yote

Unaweza pia kutumia mfumo wa malipo ya kuvutaopens in a new tab unaohitaji watumiaji kutoa fedha kutoka kwa mikataba-erevu, badala ya mfumo wa "malipo ya kusukuma" unaotuma fedha kwenye akaunti. Hii huondoa uwezekano wa kuanzisha msimbo bila kukusudia katika anwani zisizojulikana (na pia inaweza kuzuia mashambulizi fulani ya kunyimwa huduma).

Kupungua na kufurika kwa nambari kamili

Kuongezeka kamili hutokea wakati matokeo ya utendaji kazi wa hesabu yanapotoka nje ya anuwai ya thamani zinazokubalika, na kusababisha "kupinduka" hadi thamani ya chini kabisa inayoweza kuwakilishwa. Kwa mfano, uint8 inaweza tu kuhifadhi thamani hadi 2^8-1=255. Operesheni za hesabu zinazosababisha thamani za juu kuliko 255 zitafurika na kuweka upya uint kuwa 0, sawa na jinsi odomita kwenye gari inavyowekwa upya kuwa 0 mara inapofikia maili ya juu zaidi (999999).

Kupungua kupita kiasi kwa namba kamili chini ya thamanini inayoweza kuwakilishwa hutokea kwa sababu sawa: matokeo ya utekelezaji ya hesabu huanguka chini ya masafa yanayokubalika. Sema ulijaribu kupunguza 0 katika uint8, matokeo yangevuka tu hadi thamani ya juu inayoweza kuwakilishwa (255).

Kujaza kamili na kupunguka kunaweza kusababisha mabadiliko yasiyotarajiwa kwa vigezo vya hali ya mkataba na kusababisha utekelezaji usiopangwa. Ufuatao ni mfano unaoonyesha jinsi mshambulizi anavyoweza kutumia wingi wa hesabu katika mikataba mahiri ili kutekeleza utekelezaji usio sahihi:

1pragma solidity ^0.7.6;
2
3// Mkataba huu umebuniwa kufanya kazi kama hifadhi ya muda.
4// Mtumiaji anaweza kuweka amana kwenye mkataba huu lakini hawezi kutoa kwa angalau wiki moja.
5// Mtumiaji anaweza pia kuongeza muda wa kusubiri zaidi ya kipindi cha kusubiri cha wiki 1.
6
7/*
81. Tumia TimeLock
92. Tumia Attack na anwani ya TimeLock
103. Ita Attack.attack ukituma ether 1. Utaweza mara moja
11 kutoa ether yako.
12
13Nini kilitokea?
14Attack ilisababisha TimeLock.lockTime kufurika na iliweza kutoa
15kabla ya kipindi cha kusubiri cha wiki 1.
16*/
17
18contract TimeLock {
19 mapping(address => uint) public balances;
20 mapping(address => uint) public lockTime;
21
22 function deposit() external payable {
23 balances[msg.sender] += msg.value;
24 lockTime[msg.sender] = block.timestamp + 1 weeks;
25 }
26
27 function increaseLockTime(uint _secondsToIncrease) public {
28 lockTime[msg.sender] += _secondsToIncrease;
29 }
30
31 function withdraw() public {
32 require(balances[msg.sender] > 0, "Fedha haitoshi");
33 require(block.timestamp > lockTime[msg.sender], "Muda wa kufunga haujaisha");
34
35 uint amount = balances[msg.sender];
36 balances[msg.sender] = 0;
37
38 (bool sent, ) = msg.sender.call{value: amount}("");
39 require(sent, "Imeshindwa kutuma Ether");
40 }
41}
42
43contract Attack {
44 TimeLock timeLock;
45
46 constructor(TimeLock _timeLock) {
47 timeLock = TimeLock(_timeLock);
48 }
49
50 fallback() external payable {}
51
52 function attack() public payable {
53 timeLock.deposit{value: msg.value}();
54 /*
55 kama t = muda wa sasa wa kufunga basi tunahitaji kupata x kiasi kwamba
56 x + t = 2**256 = 0
57 hivyo x = -t
58 2**256 = type(uint).max + 1
59 hivyo x = type(uint).max + 1 - t
60 */
61 timeLock.increaseLockTime(
62 type(uint).max + 1 - timeLock.lockTime(address(this))
63 );
64 timeLock.withdraw();
65 }
66}
Onyesha yote
Jinsi ya kuzuia kupungua na kufurika kwa nambari kamili

Kuanzia toleo la 0.8.0, mkusanyaji wa Solidity hukataa msimbo unaosababisha kupungua na kufurika kwa nambari kamili. Hata hivyo, mikataba iliyokusanywa na toleo la chini la mkusanyaji inapaswa kufanya ukaguzi kwenye vitendaji vinavyohusisha operesheni za hesabu au kutumia maktaba (k.m., SafeMathopens in a new tab) inayokagua kupungua/kufurika.

Udanganyifu wa Oracle

Maneno hupata taarifa nje ya mnyororo na kuituma kwenye mnyororo ili mikataba-erevu itumie. Ukiwa na maneno, unaweza kubuni mikataba mahiri ambayo inashirikiana na mifumo ya nje ya mnyororo, kama vile masoko ya mitaji, na kupanua matumizi yao kwa kiasi kikubwa.

Lakini ikiwa chumba cha ndani kimeharibika na kutuma taarifa zisizo sahihi kwenye mnyororo, mikataba mahiri itatekelezwa kulingana na maingizo yenye makosa, ambayo yanaweza kusababisha matatizo. Huu ndio msingi wa "tatizo la chanzo cha data cha nje", ambalo linahusu kazi ya kuhakikisha habari kutoka kwa chumba cha kuzuia kiambajengo ni sahihi, ya kisasa na ya wakati.

Hoja inayohusiana na usalama ni kutumia oracle ya onchain, kama vile ubadilishanaji wa madaraka, ili kupata bei halisi ya mali. Mifumo ya ukopeshaji katika tasnia ya fedha zilizogatuliwa (DeFi) mara nyingi hufanya hivi ili kubaini thamani ya dhamana ya mtumiaji ili kubaini ni kiasi gani wanaweza kukopa.

Bei za DEX mara nyingi huwa sahihi, hasa kutokana na wasuluhishi kurejesha usawa katika masoko. Hata hivyo, zinaweza kubadilishwa, hasa ikiwa chumba cha ndani cha mnyororo hukokotoa bei za vipengee kulingana na mifumo ya kihistoria ya biashara (kama kawaida).

Kwa mfano, mshambulizi anaweza kusukuma bei ya bidhaa kwa njia isiyo halali kwa kuchukua mkopo wa haraka kabla ya kuingiliana na mkataba wako wa ukopeshaji. Kuuliza DEX kwa bei ya kipengee kunaweza kurudisha thamani ya juu kuliko ya kawaida (kutokana na hitaji kubwa la mvamizi la "kununua" la kipengee), na kuwaruhusu kukopa zaidi ya inavyopaswa. "Mashambulizi ya mkopo wa flash" kama hayo yametumiwa kutumia utegemezi wa maneno ya bei kati ya programu za DeFi, na kugharimu itifaki za mamilioni ya pesa zilizopotea.

Jinsi ya kuzuia udanganyifu wa oracle

Sharti la chini kabisa la kuepuka udanganyifu wa oracleopens in a new tab ni kutumia mtandao wa oracle uliogatuliwa unaouliza taarifa kutoka vyanzo vingi ili kuepuka sehemu moja ya kushindwa. Mara nyingi, chanzo cha data cha nje kilichotawanywa huwa na motisha za kiuchumi za kikriptomito ili kuhimiza nodi za oracle kuripoti habari sahihi, na kuzifanya kuwa salama zaidi kuliko chanzo cha data cha kati.

Ikiwa unapanga kuuliza chanzo cha data cha ndani ya mnyororo kwa bei za mali, zingatia kutumia ile inayotekeleza utaratibu wa wastani wa bei uliopimwa kwa wakati (TWAP). Oracle ya TWAPopens in a new tab huuliza bei ya mali kwa nyakati mbili tofauti (ambazo unaweza kurekebisha) na kukokotoa bei ya papo hapo kulingana na wastani uliopatikana. Kuchagua muda mrefu hulinda itifaki yako dhidi ya udanganyifu wa bei kwa kuwa maagizo makubwa yaliyotekelezwa hivi majuzi hayawezi kuathiri bei za mali.

Rasilimali za usalama wa mkataba-erevu kwa wasanidi programu

Zana za kuchambua mikataba-erevu na kuthibitisha usahihi wa msimbo

  • Zana na maktaba za upimaji - Mkusanyiko wa zana na maktaba za kiwango cha tasnia za kufanya majaribio ya kitengo, uchambuzi tuli, na uchambuzi unaobadilika kwenye mikataba-erevu.

  • Zana za uthibitishaji rasmi - Zana za kuthibitisha usahihi wa utendaji katika mikataba-erevu na kuangalia kanuni zisizobadilika.

  • Huduma za ukaguzi wa mkataba-erevu - Orodha ya mashirika yanayotoa huduma za ukaguzi wa mkataba-erevu kwa miradi ya maendeleo ya Ethereum.

  • Mifumo ya zawadi za mdudu - Mifumo ya kuratibu zawadi za mdudu na kuthawabisha ufichuzi wa kuwajibika wa udhaifu muhimu katika mikataba-erevu.

  • Kikagua Umaopens in a new tab - Zana ya mtandaoni isiyolipishwa ya kuangalia taarifa zote zinazopatikana kuhusu mkataba uliogawanywa.

  • Kisimbaji cha ABIopens in a new tab - Huduma ya mtandaoni isiyolipishwa ya kusimba vitendaji vya mkataba wako wa Solidity na hoja za ujenzi.

  • Aderynopens in a new tab - Kichanganuzi Tuli cha Solidity, kinachopitia Miti ya Sintaksia Dhahania (AST) ili kubainisha udhaifu unaoshukiwa na kuchapisha masuala katika umbizo la markdown linalotumika kwa urahisi.

Zana za ufuatiliaji wa mikataba-erevu

Zana za usimamizi salama wa mikataba-erevu

  • Safeopens in a new tab - Mkoba wa mkataba-erevu unaoendeshwa kwenye Ethereum unaohitaji idadi ya chini ya watu kuidhinisha muamala kabla haujatokea (M-of-N).

  • OpenZeppelin Contractsopens in a new tab - Maktaba za mikataba za kutekeleza vipengele vya kiutawala, ikiwa ni pamoja na umiliki wa mkataba, uboreshaji, vidhibiti vya ufikiaji, utawala, uwezo wa kusitishwa, na zaidi.

Huduma za ukaguzi wa mkataba-erevu

  • ConsenSys Diligenceopens in a new tab - Huduma ya ukaguzi wa mkataba-erevu inayosaidia miradi katika mfumo mzima wa mnyororo wa bloku kuhakikisha itifaki zao ziko tayari kwa uzinduzi na zimejengwa ili kuwalinda watumiaji.

  • CertiKopens in a new tab - Kampuni ya usalama ya mnyororo wa bloku inayoanzisha matumizi ya teknolojia ya kisasa ya Uthibitishaji rasmi kwenye mikataba-erevu na mitandao ya mnyororo wa bloku.

  • Trail of Bitsopens in a new tab - Kampuni ya usalama wa mtandao inayochanganya utafiti wa usalama na mtazamo wa mshambuliaji ili kupunguza hatari na kuimarisha msimbo.

  • PeckShieldopens in a new tab - Kampuni ya usalama ya mnyororo wa bloku inayotoa bidhaa na huduma kwa ajili ya usalama, faragha, na utumiaji wa mfumo mzima wa mnyororo wa bloku.

  • QuantStampopens in a new tab - Huduma ya ukaguzi inayowezesha upitishaji mkuu wa teknolojia ya mnyororo wa bloku kupitia huduma za usalama na tathmini ya hatari.

  • OpenZeppelinopens in a new tab - Kampuni ya usalama wa mkataba-erevu inayotoa ukaguzi wa usalama kwa mifumo iliyogatuliwa.

  • Runtime Verificationopens in a new tab - Kampuni ya usalama inayobobea katika uundaji rasmi na uthibitishaji wa mikataba-erevu.

  • Hackenopens in a new tab - Mkaguzi wa usalama wa mtandao wa Web3 anayeleta mbinu ya 360-degree kwa usalama wa mnyororo wa bloku.

  • Nethermindopens in a new tab - Huduma za ukaguzi za Solidity na Cairo, zinazohakikisha uadilifu wa mikataba-erevu na usalama wa watumiaji kote Ethereum na Starknet.

  • HashExopens in a new tab - HashEx inazingatia ukaguzi wa mnyororo wa bloku na mkataba-erevu ili kuhakikisha usalama wa sarafu za kidigitali, ikitoa huduma kama vile maendeleo ya mkataba-erevu, upimaji wa kupenya, ushauri wa mnyororo wa bloku.

  • Code4renaopens in a new tab - Jukwaa la ukaguzi shindani linalowapa motisha wataalam wa usalama wa mkataba-erevu kutafuta udhaifu na kusaidia kufanya web3 iwe salama zaidi.

  • CodeHawksopens in a new tab - Jukwaa la ukaguzi shindani linaloandaa mashindano ya ukaguzi wa mikataba-erevu kwa watafiti wa usalama.

  • Cyfrinopens in a new tab - Nguvu ya usalama ya Web3, inayokuza usalama wa crypto kupitia bidhaa na huduma za ukaguzi wa mkataba-erevu.

  • ImmuneBytesopens in a new tab - Kampuni ya usalama ya Web3 inayotoa ukaguzi wa usalama kwa mifumo ya mnyororo wa bloku kupitia timu ya wakaguzi wenye uzoefu na zana bora zaidi.

  • Oxorioopens in a new tab - Ukaguzi wa mikataba-erevu na huduma za usalama za mnyororo wa bloku zenye utaalamu katika EVM, Solidity, ZK, teknolojia ya minyororo-tofauti kwa kampuni za crypto na miradi ya DeFi.

  • Inferenceopens in a new tab - Kampuni ya ukaguzi wa usalama, iliyobobea katika ukaguzi wa mkataba-erevu kwa minyororo ya bloku inayotegemea EVM. Shukrani kwa wakaguzi wake waliobobea, wanatambua matatizo yanayoweza kutokea na kupendekeza njia zinazoweza kuchukuliwa ili kuyasuluhisha kabla ya kutumwa.

Mifumo ya zawadi za mdudu

  • Immunefiopens in a new tab - Jukwaa la zawadi za mdudu kwa mikataba-erevu na miradi ya DeFi, ambapo watafiti wa usalama hupitia msimbo, hufichua udhaifu, hulipwa, na kufanya crypto iwe salama zaidi.

  • HackerOneopens in a new tab - Jukwaa la uratibu wa udhaifu na zawadi za mdudu linalounganisha biashara na wapimaji wa kupenya na watafiti wa usalama wa mtandao.

  • HackenProofopens in a new tab - Jukwaa la kitaalamu la zawadi za mdudu kwa miradi ya crypto (DeFi, Mikataba-erevu, Mikoba, CEX na zaidi), ambapo wataalamu wa usalama hutoa huduma za uchunguzi na watafiti hulipwa kwa ripoti za mdudu zinazofaa na zilizothibitishwa.

  • Sherlockopens in a new tab - Mtoa dhamana katika Web3 kwa usalama wa mkataba-erevu, na malipo kwa wakaguzi yanasimamiwa kupitia mikataba-erevu ili kuhakikisha kwamba mende husika zinalipwa kwa haki.

  • CodeHawksopens in a new tab - Jukwaa la ushindani la zawadi za mdudu ambapo wakaguzi hushiriki katika mashindano na changamoto za usalama, na (hivi karibuni) katika ukaguzi wao wa kibinafsi.

Machapisho ya udhaifu na unyonyaji unaojulikana wa mkataba-erevu

Changamoto za kujifunza usalama wa mkataba-erevu

Mbinu bora za kulinda mikataba-erevu

Mafunzo kuhusu usalama wa mkataba-erevu

Je! makala haya yamekusaidia?