Kuthibitisha mikataba mahiri
Mikataba mahiri imeundwa kuwa "bila hitaji la uaminifu", ikimaanisha watumiaji hawapaswi kulazimika kuamini wahusika wengine (k.m., wasanidi na kampuni) kabla ya kutumia mkataba. Kama sharti la hali ya kutohitaji kuamini, watumiaji na wasanidi wengine lazima waweze kuthibitisha msimbo chanzo wa mkataba mahiri. Uthibitishaji wa msimbo chanzo unawahakikishia watumiaji na wasanidi kwamba msimbo wa mkataba uliochapishwa ni msimbo uleule unaoendeshwa kwenye anwani ya mkataba kwenye mnyororo wa vitalu wa Ethereum.
Ni muhimu kutofautisha kati ya "uthibitishaji wa msimbo chanzo" na "uthibitishaji rasmi". Uthibitishaji wa msimbo chanzo, ambao utaelezwa kwa kina hapa chini, unarejelea kuthibitisha kwamba msimbo chanzo uliotolewa wa mkataba mahiri katika lugha ya kiwango cha juu (k.m., Solidity) unakusanywa kuwa msimbo wa baiti uleule utakaotekelezwa kwenye anwani ya mkataba. Hata hivyo, uthibitishaji rasmi unaelezea kuthibitisha usahihi wa mkataba mahiri, ikimaanisha mkataba unafanya kazi kama inavyotarajiwa. Ingawa inategemea muktadha, uthibitishaji wa mkataba kwa kawaida unarejelea uthibitishaji wa msimbo chanzo.
Uthibitishaji wa msimbo chanzo ni nini?
Kabla ya usambazaji wa mkataba mahiri katika Mashine Pepe ya Ethereum (EVM), wasanidi hukusanya msimbo chanzo wa mkataba—maagizo yaliyoandikwa katika Solidity au lugha nyingine ya upangaji ya kiwango cha juu—kuwa msimbo wa baiti. Kwa kuwa EVM haiwezi kufasiri maagizo ya kiwango cha juu, ukusanyaji wa msimbo chanzo kuwa msimbo wa baiti (yaani, maagizo ya mashine ya kiwango cha chini) ni muhimu kwa kutekeleza mantiki ya mkataba katika EVM.
Uthibitishaji wa msimbo chanzo ni kulinganisha msimbo chanzo wa mkataba mahiri na msimbo wa baiti uliokusanywa uliotumika wakati wa kuunda mkataba ili kugundua tofauti zozote. Kuthibitisha mikataba mahiri ni muhimu kwa sababu msimbo wa mkataba uliotangazwa unaweza kuwa tofauti na kile kinachoendeshwa kwenye mnyororo wa vitalu.
Uthibitishaji wa mkataba mahiri huwezesha kuchunguza kile ambacho mkataba unafanya kupitia lugha ya kiwango cha juu uliyoandikwa, bila kulazimika kusoma msimbo wa mashine. Kazi, thamani, na kwa kawaida majina ya vigezo na maoni hubaki vilevile na msimbo chanzo asili ambao unakusanywa na kusambazwa. Hii inafanya usomaji wa msimbo kuwa rahisi zaidi. Uthibitishaji wa chanzo pia hutoa nafasi kwa nyaraka za msimbo, ili watumiaji wa mwisho wajue mkataba mahiri umeundwa kufanya nini.
Uthibitishaji kamili ni nini?
Kuna baadhi ya sehemu za msimbo chanzo ambazo haziathiri msimbo wa baiti uliokusanywa kama vile maoni au majina ya vigezo. Hiyo inamaanisha misimbo chanzo miwili yenye majina tofauti ya vigezo na maoni tofauti yote ingeweza kuthibitisha mkataba uleule. Kwa hilo, mhusika mwenye nia mbaya anaweza kuongeza maoni ya kudanganya au kutoa majina ya vigezo yanayopotosha ndani ya msimbo chanzo na kufanya mkataba uthibitishwe kwa msimbo chanzo tofauti na msimbo chanzo asili.
Inawezekana kuepuka hili kwa kuambatisha data ya ziada kwenye msimbo wa baiti ili kutumika kama dhamana ya kificho kwa usahihi wa msimbo chanzo, na kama alama ya kidole ya taarifa za ukusanyaji. Taarifa muhimu zinapatikana katika data fafanuzi ya mkataba wa Solidity (opens in a new tab), na heshi ya faili hili inaambatishwa kwenye msimbo wa baiti wa mkataba. Unaweza kuiona ikifanya kazi katika uwanja wa majaribio wa data fafanuzi (opens in a new tab)
Faili la data fafanuzi lina taarifa kuhusu ukusanyaji wa mkataba ikiwa ni pamoja na faili za chanzo na heshi zake. Ikimaanisha, ikiwa mipangilio yoyote ya ukusanyaji au hata baiti moja katika mojawapo ya faili za chanzo itabadilika, faili la data fafanuzi hubadilika. Kwa sababu hiyo heshi ya faili la data fafanuzi, ambayo imeambatishwa kwenye msimbo wa baiti, pia inabadilika. Hiyo inamaanisha ikiwa msimbo wa baiti wa mkataba + heshi ya data fafanuzi iliyoambatishwa inalingana na msimbo chanzo uliotolewa na mipangilio ya ukusanyaji, tunaweza kuwa na uhakika huu ni msimbo chanzo uleule uliotumika katika ukusanyaji asili, hata baiti moja si tofauti.
Aina hii ya uthibitishaji inayotumia heshi ya data fafanuzi inajulikana kama "uthibitishaji kamili (opens in a new tab)" (pia "uthibitishaji kamilifu"). Ikiwa heshi za data fafanuzi hazilingani au hazizingatiwi katika uthibitishaji itakuwa "ulinganifu wa kiasi", ambayo kwa sasa ndiyo njia ya kawaida zaidi ya kuthibitisha mikataba. Inawezekana kuingiza msimbo wenye nia mbaya (opens in a new tab) ambao haungeonekana katika msimbo chanzo uliothibitishwa bila uthibitishaji kamili. Wasanidi wengi hawafahamu kuhusu uthibitishaji kamili na hawatunzi faili la data fafanuzi la ukusanyaji wao, hivyo uthibitishaji wa kiasi umekuwa njia kuu ya kuthibitisha mikataba hadi sasa.
Kwa nini uthibitishaji wa msimbo chanzo ni muhimu?
Hali ya kutohitaji kuamini
Hali ya kutohitaji kuamini bila shaka ndiyo msingi mkubwa zaidi wa mikataba mahiri na programu tumizi zilizogatuliwa (dapps). Mikataba mahiri ni "isiyobadilika" na haiwezi kubadilishwa; mkataba utatekeleza tu mantiki ya biashara iliyofafanuliwa katika msimbo wakati wa usambazaji. Hii inamaanisha wasanidi na biashara hawawezi kuchezea msimbo wa mkataba baada ya kuusambaza kwenye Ethereum.
Ili mkataba mahiri uwe bila hitaji la uaminifu, msimbo wa mkataba unapaswa kupatikana kwa uthibitishaji huru. Ingawa msimbo wa baiti uliokusanywa kwa kila mkataba mahiri unapatikana hadharani kwenye mnyororo wa vitalu, lugha ya kiwango cha chini ni ngumu kuelewa—kwa wasanidi na watumiaji.
Miradi hupunguza dhana za uaminifu kwa kuchapisha msimbo chanzo wa mikataba yao. Lakini hii inasababisha tatizo jingine: ni vigumu kuthibitisha kwamba msimbo chanzo uliochapishwa unalingana na msimbo wa baiti wa mkataba. Katika hali hii, thamani ya hali ya kutohitaji kuamini inapotea kwa sababu watumiaji wanapaswa kuwaamini wasanidi kutobadilisha mantiki ya biashara ya mkataba (yaani, kwa kubadilisha msimbo wa baiti) kabla ya kuusambaza kwenye mnyororo wa vitalu.
Zana za uthibitishaji wa msimbo chanzo hutoa dhamana kwamba faili za msimbo chanzo za mkataba mahiri zinalingana na msimbo wa assembli. Matokeo yake ni mfumo ikolojia bila hitaji la uaminifu, ambapo watumiaji hawaamini wahusika wengine kipofu na badala yake huthibitisha msimbo kabla ya kuweka fedha kwenye mkataba.
Usalama wa Mtumiaji
Kwa mikataba mahiri, kwa kawaida kuna pesa nyingi zilizowekwa dhamana. Hii inahitaji dhamana za juu zaidi za usalama na uthibitishaji wa mantiki ya mkataba mahiri kabla ya kuutumia. Tatizo ni kwamba wasanidi wasio waaminifu wanaweza kuwadanganya watumiaji kwa kuingiza msimbo wenye nia mbaya katika mkataba mahiri. Bila uthibitishaji, mikataba mahiri yenye nia mbaya inaweza kuwa na milango ya nyuma (opens in a new tab), mifumo yenye utata ya udhibiti wa ufikiaji, udhaifu unaoweza kutumiwa vibaya, na mambo mengine yanayohatarisha usalama wa mtumiaji ambayo yasingegunduliwa.
Kuchapisha faili za msimbo chanzo za mkataba mahiri hurahisisha kwa wale wanaovutiwa, kama vile wakaguzi, kutathmini mkataba kwa njia zinazowezekana za mashambulizi. Pamoja na pande nyingi kuthibitisha mkataba mahiri kwa uhuru, watumiaji wana dhamana zenye nguvu zaidi za usalama wake.
Jinsi ya kuthibitisha msimbo chanzo kwa mikataba mahiri ya Ethereum
Kusambaza mkataba mahiri kwenye Ethereum kunahitaji kutuma muamala wenye mzigo wa data (msimbo wa baiti uliokusanywa) kwenye anwani maalum. Mzigo wa data unazalishwa kwa kukusanya msimbo chanzo, pamoja na hoja za konstrukta (opens in a new tab) za mfano wa mkataba zilizoambatishwa kwenye mzigo wa data katika muamala. Ukusanyaji ni wa kubainisha, ikimaanisha kila wakati unazalisha matokeo yaleyale (yaani, msimbo wa baiti wa mkataba) ikiwa faili zilezile za chanzo, na mipangilio ya ukusanyaji (k.m., toleo la kikusanyaji, kiboreshaji) inatumika.
Kuthibitisha mkataba mahiri kimsingi kunahusisha hatua zifuatazo:
-
Ingiza faili za chanzo na mipangilio ya ukusanyaji kwenye kikusanyaji.
-
Kikusanyaji hutoa msimbo wa baiti wa mkataba
-
Pata msimbo wa baiti wa mkataba uliosambazwa kwenye anwani iliyotolewa
-
Linganisha msimbo wa baiti uliosambazwa na msimbo wa baiti uliokusanywa upya. Ikiwa misimbo inalingana, mkataba unathibitishwa kwa msimbo chanzo uliotolewa na mipangilio ya ukusanyaji.
-
Zaidi ya hayo, ikiwa heshi za data fafanuzi mwishoni mwa msimbo wa baiti zinalingana, utakuwa ulinganifu kamili.
Kumbuka kwamba huu ni maelezo rahisi ya uthibitishaji na kuna tofauti nyingi ambazo hazingefanya kazi na hii kama vile kuwa na vigezo visivyobadilika (opens in a new tab).
Zana za uthibitishaji wa msimbo chanzo
Mchakato wa jadi wa kuthibitisha mikataba unaweza kuwa mgumu. Hii ndiyo sababu tuna zana za kuthibitisha msimbo chanzo kwa mikataba mahiri iliyosambazwa kwenye Ethereum. Zana hizi hufanya sehemu kubwa za uthibitishaji wa msimbo chanzo kujiendesha na pia huratibu mikataba iliyothibitishwa kwa manufaa ya watumiaji.
Etherscan
Ingawa inajulikana zaidi kama kichunguzi cha mnyororo wa vitalu cha Ethereum, Etherscan pia inatoa huduma ya uthibitishaji wa msimbo chanzo (opens in a new tab) kwa wasanidi wa mikataba mahiri na watumiaji.
Etherscan inakuruhusu kukusanya upya msimbo wa baiti wa mkataba kutoka kwenye mzigo wa data asili (msimbo chanzo, anwani ya maktaba, mipangilio ya kikusanyaji, anwani ya mkataba, n.k.) Ikiwa msimbo wa baiti uliokusanywa upya unahusishwa na msimbo wa baiti (na vigezo vya konstrukta) vya mkataba mnyororoni, basi mkataba unathibitishwa (opens in a new tab).
Baada ya kuthibitishwa, msimbo chanzo wa mkataba wako unapokea lebo ya "Imethibitishwa" na unachapishwa kwenye Etherscan ili wengine waukague. Pia inaongezwa kwenye sehemu ya Mikataba Iliyothibitishwa (opens in a new tab)—hifadhi ya mikataba mahiri yenye misimbo chanzo iliyothibitishwa.
Etherscan ndiyo zana inayotumiwa zaidi kwa kuthibitisha mikataba. Hata hivyo, uthibitishaji wa mkataba wa Etherscan una kasoro: unashindwa kulinganisha heshi ya data fafanuzi ya msimbo wa baiti mnyororoni na msimbo wa baiti uliokusanywa upya. Kwa hivyo ulinganifu katika Etherscan ni ulinganifu wa kiasi.
Zaidi kuhusu kuthibitisha mikataba kwenye Etherscan (opens in a new tab).
Blockscout
Blockscout (opens in a new tab) ni kichunguza mnyororo wa vitalu cha chanzo wazi ambacho pia hutoa huduma ya uthibitishaji wa mkataba (opens in a new tab) kwa wasanidi wa mikataba mahiri na watumiaji. Kama mbadala wa chanzo wazi, Blockscout inatoa uwazi katika jinsi uthibitishaji unavyofanywa na kuwezesha michango ya jamii kuboresha mchakato wa uthibitishaji.
Sawa na huduma nyingine za uthibitishaji, Blockscout inakuruhusu kuthibitisha msimbo chanzo wa mkataba wako kwa kukusanya upya msimbo wa baiti na kuulinganisha na mkataba uliosambazwa. Baada ya kuthibitishwa, mkataba wako unapokea hali ya uthibitishaji na msimbo chanzo unapatikana hadharani kwa ukaguzi na mwingiliano. Mikataba iliyothibitishwa pia imeorodheshwa katika hifadhi ya mikataba iliyothibitishwa (opens in a new tab) ya Blockscout kwa urahisi wa kuvinjari na ugunduzi.
Sourcify
Sourcify (opens in a new tab) ni zana nyingine ya kuthibitisha mikataba ambayo ni ya chanzo wazi na iliyogatuliwa. Sio kichunguza bloku na inathibitisha tu mikataba kwenye mitandao tofauti inayotegemea EVM (opens in a new tab). Inafanya kazi kama miundombinu ya umma kwa zana nyingine kujenga juu yake, na inalenga kuwezesha mwingiliano wa mkataba unaofaa zaidi kwa binadamu kwa kutumia ABI na maoni ya NatSpec (opens in a new tab) yanayopatikana katika faili la data fafanuzi.
Tofauti na Etherscan, Sourcify inasaidia ulinganifu kamili na heshi ya data fafanuzi. Mikataba iliyothibitishwa inatolewa katika hifadhi yake ya umma (opens in a new tab) kwenye HTTP na IPFS (opens in a new tab), ambayo ni hifadhi iliyogatuliwa, inayoshughulikiwa na maudhui (opens in a new tab). Hii inaruhusu kuchukua faili la data fafanuzi la mkataba kupitia IPFS kwa kuwa heshi ya data fafanuzi iliyoambatishwa ni heshi ya IPFS.
Zaidi ya hayo, mtu anaweza pia kupata faili za msimbo chanzo kupitia IPFS, kwani heshi za IPFS za faili hizi pia zinapatikana katika data fafanuzi. Mkataba unaweza kuthibitishwa kwa kutoa faili la data fafanuzi na faili za chanzo kupitia API yake au UI (opens in a new tab), au kwa kutumia programu-jalizi. Zana ya ufuatiliaji ya Sourcify pia husikiliza uundaji wa mikataba kwenye bloku mpya na kujaribu kuthibitisha mikataba ikiwa data fafanuzi zao na faili za chanzo zimechapishwa kwenye IPFS.
Zaidi kuhusu kuthibitisha mikataba kwenye Sourcify (opens in a new tab).
Tenderly
Jukwaa la Tenderly (opens in a new tab) huwawezesha wasanidi wa Web3 kujenga, kujaribu, kufuatilia, na kuendesha mikataba mahiri. Kwa kuchanganya zana za utatuzi na uwezo wa kuona na vizuizi vya ujenzi wa miundombinu, Tenderly inasaidia wasanidi kuharakisha uundaji wa mkataba mahiri. Ili kuwezesha kikamilifu vipengele vya Tenderly, wasanidi wanahitaji kufanya uthibitishaji wa msimbo chanzo (opens in a new tab) kwa kutumia mbinu kadhaa.
Inawezekana kuthibitisha mkataba kwa faragha au hadharani. Ikiwa imethibitishwa kwa faragha, mkataba mahiri unaonekana kwako tu (na wanachama wengine katika mradi wako). Kuthibitisha mkataba hadharani kunaufanya uonekane kwa kila mtu anayetumia jukwaa la Tenderly.
Unaweza kuthibitisha mikataba yako kwa kutumia Dashibodi (opens in a new tab), programu-jalizi ya Tenderly Hardhat (opens in a new tab), au CLI (opens in a new tab).
Unapothibitisha mikataba kupitia Dashibodi, unahitaji kuingiza faili la chanzo au faili la data fafanuzi lililozalishwa na kikusanyaji cha Solidity, anwani/mtandao, na mipangilio ya kikusanyaji.
Kutumia programu-jalizi ya Tenderly Hardhat kunaruhusu udhibiti zaidi juu ya mchakato wa uthibitishaji kwa juhudi kidogo, kukuwezesha kuchagua kati ya uthibitishaji wa kiotomatiki (bila msimbo) na wa mwongozo (unaotegemea msimbo).
