Išnagrinėkite esminius išmaniųjų sutarčių audito aspektus, apimančius saugumo pažeidžiamumus, audito metodikas, geriausias praktikas ir decentralizuotų programų saugumo ateitį.
Išmaniųjų sutarčių auditas: išsami saugumo pažeidžiamumo analizės gairė
Išmaniosios sutartys yra savaime vykdomi susitarimai, parašyti kode ir įdiegti blokų grandinės tinkluose. Jos valdo platų spektrą decentralizuotų programų (dApps), nuo decentralizuotų finansų (DeFi) platformų iki tiekimo grandinės valdymo sistemų. Tačiau išmaniosios sutartys taip pat yra jautrios saugumo pažeidžiamumams, kurie gali sukelti didelius finansinius nuostolius ir reputacijos žalą. Šiame straipsnyje pateikiama išsami išmaniųjų sutarčių audito gairė, apimanti pagrindines sąvokas, dažnus pažeidžiamumus, audito metodikas ir geriausias praktikas, užtikrinančias jūsų decentralizuotų programų saugumą.
Kas yra išmaniųjų sutarčių auditas?
Išmaniųjų sutarčių auditas yra sistemingo išmaniųjų sutarčių kodo peržiūros ir analizės procesas, skirtas nustatyti galimus saugumo pažeidžiamumus, klaidas ir logikos klaidas. Tai yra kritinis bet kurios dApp kūrimo gyvavimo ciklo etapas, nes jis padeda sumažinti riziką, susijusią su nesaugaus kodo diegimu blokų grandinėje. Skirtingai nuo tradicinės programinės įrangos, išmaniosios sutartys yra nekintamos, kai tik įdiegiamos, o tai reiškia, kad jokių pažeidžiamumų, aptiktų po įdiegimo, negalima lengvai ištaisyti. Dėl to kruopštus auditas tampa dar svarbesnis.
Pagrindinis išmaniosios sutarties audito tikslas yra užtikrinti, kad sutartis veiktų taip, kaip numatyta, joje nebūtų saugumo trūkumų ir ji atitiktų geriausias praktikas. Tai apima rankinio kodo peržiūros, automatizuotų analizės įrankių ir testavimo metodų derinį, skirtą nustatyti ir išspręsti galimas problemas.
Kodėl išmaniųjų sutarčių auditas yra svarbus?
Išmaniųjų sutarčių audito svarbos negalima pervertinti. Pažeidžiamų išmaniųjų sutarčių diegimo pasekmės gali būti sunkios, sukelti:
- Finansiniai nuostoliai: kenkėjiški aktoriai gali išnaudoti pažeidžiamumus, kad pavogtų lėšas, manipuliuotų sutarties logika arba sutrikdytų dApp funkcionalumą.
- Reputacijos žala: saugumo pažeidimai gali pakirsti vartotojų pasitikėjimą ir pakenkti projekto ir jo komandos reputacijai.
- Teisinė ir reguliavimo rizika: kai kuriose jurisdikcijose nesaugių išmaniųjų sutarčių diegimas gali sukelti teisinių įsipareigojimų ir reguliavimo baudų.
- Vartotojo pasitikėjimo praradimas: vartotojai mažiau linkę pasitikėti ir naudoti dApps, kurios turi saugumo pažeidžiamumų istoriją.
Naujausia istorija yra nusėta pavyzdžių, kai išnaudojimai sukėlė milijonus dolerių nuostolių. Auditas gali užkirsti kelią šiems nuostoliams ir sukurti pasitikėjimą platforma.
Dažni išmaniųjų sutarčių pažeidžiamumai
Suprasti dažnus išmaniųjų sutarčių pažeidžiamumus yra būtina tiek kūrėjams, tiek auditoriams. Štai keletas labiausiai paplitusių pažeidžiamumų tipų:
1. Reentrancy
Reentrancy yra pažeidžiamumas, kuris atsiranda, kai sutartis atlieka išorinį skambutį į kitą sutartį prieš atnaujindama savo būseną. Tai leidžia išorinei sutarčiai kelis kartus skambinti atgal į pradinę sutartį, kol pradinė sutartis nebaigė vykdyti savo logikos. Reentrancy atakos buvo plačiai išnaudojamos DAO įsilaužime, dėl kurio buvo pavogta milijonų dolerių vertės eterio.
Pavyzdys:
Įsivaizduokite sutartį, kuri leidžia vartotojams atsiimti eterį. Jei sutartis siunčia eterį vartotojui prieš atnaujindama savo vidinį balansą, vartotojas gali paskambinti atgal į sutartį ir atsiimti eterį kelis kartus, kol jo balansas bus atnaujintas.
Švelninimas:
- Naudokite "Checks-Effects-Interactions" šabloną, kuris apima patikrinimų atlikimą prieš atliekant išorinius skambučius, būsenos atnaujinimą prieš atliekant išorinius skambučius ir sąveikos su išorinėmis sutartimis apribojimą.
- Naudokite funkcijas `transfer()` arba `send()` eterio siuntimui, nes šios funkcijos apriboja dujų kiekį, kurį gali naudoti gavėjas, užkertant kelią jam skambinti atgal į sutartį.
- Įdiekite reentrancy apsaugas, kurios neleidžia funkcijai būti iškviestai rekursyviai.
2. Sveikųjų skaičių perpildymas ir apatinė riba
Sveikųjų skaičių perpildymas ir apatinė riba atsiranda, kai aritmetinė operacija sukuria reikšmę, kuri yra už duomenų tipo, naudojamo rezultato saugojimui, ribų. Pavyzdžiui, jei nepasirašytas 8 bitų sveikasis skaičius (uint8) padidinamas virš 255, jis apvyniosis iki 0. Panašiai, jei jis sumažinamas žemiau 0, jis apvyniosis iki 255.
Pavyzdys:
Įsivaizduokite žetonų sutartį, kurioje bendras žetonų kiekis yra pavaizduotas nepasirašytuoju sveikuoju skaičiumi. Jei sutartis leidžia vartotojams kaldinti naujus žetonus, o bendras kiekis viršija didžiausią sveikojo skaičiaus reikšmę, jis apvyniosis iki mažos reikšmės, potencialiai leisdamas užpuolikams kaldinti neribotą žetonų skaičių.
Švelninimas:
- Naudokite saugias matematikos bibliotekas, tokias kaip OpenZeppelin's SafeMath biblioteka, kurioje yra funkcijos, kurios tikrina perpildymą ir apatinę ribą ir atšaukia operaciją, jei jos atsiranda.
- Naudokite didesnius sveikųjų skaičių duomenų tipus, tokius kaip uint256, kad sumažintumėte perpildymo ir apatinės ribos tikimybę.
3. Paslaugos atsisakymas (DoS)
Paslaugos atsisakymo (DoS) atakos siekia sutrikdyti normalų išmaniosios sutarties veikimą, užkertant kelią teisėtiems vartotojams pasiekti jos paslaugas. DoS pažeidžiamumai gali atsirasti iš įvairių šaltinių, tokių kaip dujų limito problemos, bloko užpildymas ir netikėtos atšaukimo sąlygos.
Pavyzdys:
Įsivaizduokite sutartį, kuri leidžia vartotojams dalyvauti aukcione. Jei sutartis iteruoja per dalyvių sąrašą, kad nustatytų nugalėtoją, užpuolikas gali sukurti didelį skaičių fiktyvių dalyvių, kad iteracija sunaudotų per daug dujų, todėl operacija nepavyks. Tai gali užkirsti kelią teisėtiems dalyviams dalyvauti aukcione.
Švelninimas:
- Venkite neribotų ciklų ir iteracijų, nes jie gali sunaudoti per daug dujų.
- Įdiekite puslapiavimą arba paketų apdorojimą, kad apribotumėte dujų kiekį, reikalingą kiekvienai operacijai.
- Naudokite atsiėmimo mokėjimus, o ne stūmimo mokėjimus, nes atsiėmimo mokėjimai leidžia vartotojams atsiimti lėšas savo tempu, sumažindami dujų limito problemų riziką.
- Įdiekite grandinės pertraukiklius, kurie gali laikinai išjungti tam tikras sutarties funkcijas, jei aptinkama DoS ataka.
4. Priklausomybė nuo laiko žymos
Išmaniosios sutartys gali pasiekti dabartinio bloko laiko žymą, kurią pateikia kalnakasys, iškasęs bloką. Tačiau kalnakasiai turi tam tikrą kontrolę virš laiko žymos ir gali ja manipuliuoti tam tikrose ribose. Tai gali sukelti pažeidžiamumų, jei sutartis remiasi laiko žyma kritinei logikai, tokiai kaip atsitiktinių skaičių generavimas arba laikui jautrios operacijos.
Pavyzdys:
Įsivaizduokite lošimų sutartį, kuri naudoja bloko laiko žymą atsitiktiniam skaičiui generuoti. Užpuolikas gali paveikti žaidimo rezultatą iškasdamas bloką su laiko žyma, kuri palanki jo norimam rezultatui.
Švelninimas:
- Venkite naudoti bloko laiko žymą kritinei logikai.
- Naudokite patikimesnius atsitiktinumo šaltinius, tokius kaip Chainlink VRF arba RANDAO.
- Įdiekite apsaugos priemones, kad užtikrintumėte, jog laiko žyma būtų pagrįstose ribose.
5. Delegatecall
`delegatecall` yra žemo lygio funkcija, leidžianti sutarčiai vykdyti kodą iš kitos sutarties kviečiančios sutarties kontekste. Tai reiškia, kad iškviesta sutartis gali modifikuoti kviečiančios sutarties saugyklos ir būsenos kintamuosius. Jei naudojamas netinkamai, `delegatecall` gali sukelti rimtų saugumo pažeidžiamumų.
Pavyzdys:
Įsivaizduokite tarpinę sutartį, kuri naudoja `delegatecall` skambučių persiuntimui į logikos sutartį. Jei logikos sutartis turi skirtingą saugyklos išdėstymą nei tarpinė sutartis, ji gali perrašyti kritinius tarpinės sutarties saugyklos kintamuosius, potencialiai leisdama užpuolikui perimti tarpinės sutarties kontrolę.
Švelninimas:
- Užtikrinkite, kad tarpinės sutarties ir logikos sutarties saugyklos išdėstymas būtų suderinamas.
- Atsargiai audituokite logikos sutarties kodą, kad įsitikintumėte, jog jame nėra kenkėjiško kodo.
- Naudokite gerai išbandytus ir audituotus tarpinius šablonus, tokius kaip UUPS (Universal Upgradeable Proxy Standard) šablonas.
6. Prieigos kontrolė
Tinkama prieigos kontrolė yra būtina, siekiant užtikrinti, kad tik įgalioti vartotojai galėtų atlikti tam tikrus veiksmus išmaniajame kontrakte. Nepakankama arba neteisinga prieigos kontrolė gali leisti užpuolikams apeiti saugumo priemones ir gauti neteisėtą prieigą prie jautrių duomenų arba funkcijų.
Pavyzdys:
Įsivaizduokite sutartį, kuri leidžia tik savininkui atsiimti lėšas. Jei sutartis tinkamai nepatvirtina skambintojo tapatybės, užpuolikas gali apsimesti savininku ir atsiimti lėšas.
Švelninimas:
- Naudokite `onlyOwner` modifikatorių, kad apribotumėte prieigą prie tam tikrų funkcijų tik sutarties savininkui.
- Įdiekite kelių parašų autentifikavimą, kad reikėtų kelių šalių patvirtinti kritinius veiksmus.
- Naudokite vaidmenimis pagrįstą prieigos kontrolę (RBAC), kad apibrėžtumėte skirtingus vaidmenis ir leidimus skirtingiems vartotojams.
- Įdiekite prieigos kontrolės sąrašus (ACL), kad suteiktumėte arba atšauktumėte prieigą prie konkrečių išteklių.
7. Neapdorotos išimtys
Solidity kalboje išimtys gali būti iškeltos naudojant funkcijas `revert()`, `require()` ir `assert()`. Jei išimtis tinkamai neapdorojama, tai gali sukelti netikėtą elgesį ir saugumo pažeidžiamumus.
Pavyzdys:
Įsivaizduokite sutartį, kuri siunčia eterį vartotojui. Jei vartotojo adresas yra sutartis, kuri iškelia išimtį gavusi eterį, operacija bus atšaukta. Tačiau, jei sutartis tinkamai neapdoros išimties, ji gali palikti savo būseną nenuoseklioje būsenoje, potencialiai leisdama užpuolikams išnaudoti nenuoseklumą.
Švelninimas:
- Naudokite "Checks-Effects-Interactions" šabloną, kad sumažintumėte išimčių atsiradimo riziką išorinių skambučių metu.
- Naudokite try-catch blokus išimtims apdoroti ir operacijai atšaukti, jei reikia.
- Venkite atlikti išorinius skambučius, kurie greičiausiai iškels išimtis.
8. Front Running
Front running atsiranda, kai užpuolikas stebi laukiančią operaciją ir pateikia savo operaciją su didesne dujų kaina, kad ji būtų įvykdyta prieš pradinę operaciją. Tai gali leisti užpuolikui pasipelnyti iš pradinės operacijos arba manipuliuoti jos rezultatu.
Pavyzdys:
Įsivaizduokite decentralizuotą biržą (DEX), kurioje vartotojai gali prekiauti žetonais. Jei užpuolikas stebi didelį pirkimo užsakymą, jis gali pateikti savo pirkimo užsakymą su šiek tiek didesne dujų kaina, kad jis būtų įvykdytas prieš pradinį užsakymą. Tai leidžia užpuolikui nusipirkti žetonus mažesne kaina ir tada parduoti juos pradiniam pirkėjui didesne kaina.
Švelninimas:
- Naudokite įsipareigojimo atskleidimo schemas, kurios reikalauja, kad vartotojai įsipareigotų savo operacijoms prieš atskleisdami jas grandinėje.
- Naudokite vykdymo už grandinės aplinkas, tokias kaip 2 sluoksnio mastelio keitimo sprendimai, kad sumažintumėte operacijų matomumą.
- Įdiekite užsakymų atitikimo algoritmus, kurie yra atsparūs front running.
Išmaniųjų sutarčių audito metodikos
Išmaniųjų sutarčių auditai paprastai apima rankinio kodo peržiūros, automatizuotų analizės įrankių ir testavimo metodų derinį. Štai keletas labiausiai paplitusių metodikų:
1. Rankinis kodo peržiūra
Rankinis kodo peržiūra yra kruopštaus išmaniosios sutarties kodo nagrinėjimo eilutė po eilutės procesas, skirtas nustatyti galimus pažeidžiamumus, klaidas ir logikos klaidas. Tai yra daug laiko reikalaujanti, bet esminė audito proceso dalis, nes ji leidžia auditoriams giliai suprasti sutarties funkcionalumą ir nustatyti problemas, kurių gali neaptikti automatizuoti įrankiai.
Geriausios praktikos:
- Naudokite struktūruotą metodą, tokį kaip OWASP Smart Contract Top 10, kad vadovautumėte peržiūros procesui.
- Dokumentuokite visas išvadas ir rekomendacijas aiškiai ir glaustai.
- Įtraukite kelis auditorius su skirtinga patirtimi, kad užtikrintumėte kruopštų peržiūrą.
- Naudokite kodo peržiūros įrankius, kad paryškintumėte galimas problemas ir stebėtumėte pažangą.
2. Statinė analizė
Statinė analizė apima išmaniosios sutarties kodo analizę jo nevykdant. Tai leidžia auditoriams nustatyti galimus pažeidžiamumus, tokius kaip sveikųjų skaičių perpildymas ir apatinė riba, reentrancy ir priklausomybė nuo laiko žymos, nevykdant sutarties blokų grandinėje. Statinės analizės įrankiai gali automatizuoti didžiąją dalį kodo peržiūros proceso, todėl jis tampa efektyvesnis ir mažiau linkęs į žmogiškas klaidas.
Populiarūs įrankiai:
- Slither
- Mythril
- Securify
- Oyente
3. Dinaminė analizė
Dinaminė analizė apima išmaniosios sutarties kodo vykdymą kontroliuojamoje aplinkoje, siekiant stebėti jo elgesį ir nustatyti galimus pažeidžiamumus. Tai galima padaryti naudojant fuzzing metodus, kurie apima sutarties aprūpinimą dideliu skaičiumi atsitiktinių įvesčių, siekiant suaktyvinti netikėtą elgesį, arba naudojant simbolinį vykdymą, kuris apima visų galimų sutarties vykdymo kelių tyrinėjimą.
Populiarūs įrankiai:
- Echidna
- MythX
- Manticore
4. Formalus patvirtinimas
Formalus patvirtinimas yra matematinis metodas, kuris apima išmaniosios sutarties teisingumo įrodymą formaliai nurodant jo numatomą elgesį ir tada patvirtinant, kad kodas atitinka specifikaciją. Tai yra labai griežtas, bet ir daug laiko reikalaujantis ir sudėtingas procesas, kuris paprastai naudojamas kritinėms sutartims, kuriose saugumas yra svarbiausias.
Populiarūs įrankiai:
- Certora Prover
- K Framework
- Isabelle/HOL
5. Dujų optimizavimas
Dujų optimizavimas yra procesas, skirtas sumažinti dujų kiekį, reikalingą išmaniosios sutarties vykdymui. Tai yra svarbu, nes dujų sąnaudos gali būti didelės, ypač sudėtingoms sutartims. Dujų optimizavimas taip pat gali pagerinti sutarties veikimą ir sumažinti paslaugos atsisakymo atakų riziką.
Geriausios praktikos:
- Naudokite efektyvias duomenų struktūras ir algoritmus.
- Sumažinkite saugyklos skaitymų ir rašymų skaičių.
- Naudokite calldata vietoj atminties funkcijų argumentams.
- Kaupkite dažnai pasiekiamus duomenis.
- Venkite nereikalingų ciklų ir iteracijų.
Išmaniosios sutarties audito procesas
Tipinis išmaniosios sutarties audito procesas apima šiuos veiksmus:
- Apimties nustatymas: Apibrėžkite audito apimtį, įskaitant audituotinas sutartis, išbandytinas funkcijas ir pasiekiamus saugumo tikslus.
- Informacijos rinkimas: Surinkite informaciją apie projektą, įskaitant architektūrą, verslo logiką, diegimo aplinką ir galimus atakų vektorius.
- Kodo peržiūra: Atlikite rankinį kodo peržiūrą, kad nustatytumėte galimus pažeidžiamumus, klaidas ir logikos klaidas.
- Automatizuota analizė: Naudokite statinės ir dinaminės analizės įrankius, kad automatizuotumėte kodo peržiūros procesą ir nustatytumėte papildomus pažeidžiamumus.
- Testavimas: Atlikite vienetinius testus, integracijos testus ir fuzzing testus, kad patikrintumėte sutarties funkcionalumą ir saugumą.
- Ataskaitų teikimas: Dokumentuokite visas išvadas ir rekomendacijas išsamioje audito ataskaitoje.
- Pašalinimas: Dirbkite su kūrimo komanda, kad pašalintumėte nustatytus pažeidžiamumus ir įdiegtumėte rekomenduojamas saugumo priemones.
- Pakartotinis auditas: Atlikite pakartotinį auditą, kad patikrintumėte, ar pašalinti pažeidžiamumai buvo sėkmingai išspręsti.
Audito įmonės pasirinkimas
Tinkamos audito įmonės pasirinkimas yra labai svarbus siekiant užtikrinti jūsų išmaniųjų sutarčių saugumą. Štai keletas veiksnių, į kuriuos reikia atsižvelgti renkantis audito įmonę:
- Patirtis: Pasirinkite įmonę, turinčią įrodytą išmaniųjų sutarčių audito istoriją ir gilų blokų grandinės technologijos supratimą.
- Patirtis: Įsitikinkite, kad įmonė turi patirties konkrečiomis programavimo kalbomis ir sistemomis, naudojamomis jūsų išmaniosiose sutartyse.
- Reputacija: Patikrinkite įmonės reputaciją ir nuorodas, kad įsitikintumėte, jog jos yra patikimos ir patikimos.
- Metodika: Supraskite įmonės audito metodiką ir įsitikinkite, kad ji atitinka jūsų saugumo tikslus.
- Bendravimas: Pasirinkite įmonę, kuri yra reaguojanti ir komunikabili, ir kuri nori dirbti su jumis, kad išspręstumėte bet kokius rūpesčius.
- Kaina: Palyginkite skirtingų įmonių kainas ir pasirinkite tokią, kuri siūlo sąžiningą kainą už teikiamas paslaugas. Tačiau nekompromituokite kokybės dėl kainos.
Geriausios išmaniųjų sutarčių saugumo praktikos
Be audito, yra keletas geriausių praktikų, kurių kūrėjai gali laikytis, kad pagerintų savo išmaniųjų sutarčių saugumą:
- Rašykite aiškų ir glaustą kodą: Naudokite reikšmingus kintamųjų pavadinimus, komentarus ir nuoseklų kodavimo stilių, kad kodą būtų lengviau suprasti ir peržiūrėti.
- Laikykitės saugumo geriausių praktikų: Laikykitės nustatytų saugumo geriausių praktikų, tokių kaip OWASP Smart Contract Top 10.
- Naudokite gerai išbandytas ir audituotas bibliotekas: Naudokite gerai išbandytas ir audituotas bibliotekas, tokias kaip OpenZeppelin Contracts, kad išvengtumėte išradinėti rato iš naujo ir įvestumėte naujų pažeidžiamumų.
- Įdiekite tinkamą prieigos kontrolę: Naudokite `onlyOwner` modifikatorių, kelių parašų autentifikavimą ir vaidmenimis pagrįstą prieigos kontrolę, kad apribotumėte prieigą prie jautrių funkcijų.
- Tinkamai apdorokite išimtis: Naudokite try-catch blokus išimtims apdoroti ir operacijai atšaukti, jei reikia.
- Kruopščiai išbandykite: Atlikite vienetinius testus, integracijos testus ir fuzzing testus, kad patikrintumėte sutarties funkcionalumą ir saugumą.
- Sekite naujausias saugumo grėsmes: Būkite informuoti apie naujausias saugumo grėsmes ir pažeidžiamumus ir atitinkamai atnaujinkite savo kodą.
- Apsvarstykite formalų patvirtinimą kritinėms sutartims: Naudokite formalų patvirtinimą, kad matematiškai įrodytumėte kritinių sutarčių teisingumą.
- Įdiekite stebėjimą ir įspėjimą: Įdiekite stebėjimo ir įspėjimo sistemas, kad aptiktumėte ir reaguotumėte į galimus saugumo incidentus.
- Turėkite klaidų premijų programą: Pasiūlykite klaidų premijų programą, kad paskatintumėte saugumo tyrėjus rasti ir pranešti apie pažeidžiamumus.
Išmaniųjų sutarčių audito ateitis
Išmaniųjų sutarčių audito sritis nuolat tobulėja, atsirandant naujoms technologijoms ir pažeidžiamumams. Štai keletas tendencijų, kurios formuoja išmaniųjų sutarčių audito ateitį:
- Padidėjęs automatizavimas: Automatizuoti analizės įrankiai tampa vis sudėtingesni ir gali aptikti platesnį pažeidžiamumų spektrą.
- Formalaus patvirtinimo priėmimas: Formalus patvirtinimas tampa vis labiau prieinamas ir praktiškas, todėl tai yra perspektyvus pasirinkimas platesniam sutarčių spektrui.
- AI pagrįstas auditas: Dirbtinis intelektas (AI) ir mašininis mokymasis (ML) naudojami naujiems audito įrankiams kurti, kurie gali automatiškai nustatyti ir prioritetizuoti pažeidžiamumus.
- Standartizuotos audito sistemos: Dedamos pastangos kurti standartizuotas audito sistemas ir sertifikatus, siekiant užtikrinti išmaniųjų sutarčių auditų kokybę ir nuoseklumą.
- Bendruomenės valdomas auditas: Atsiranda bendruomenės valdomos audito platformos, leidžiančios kūrėjams pateikti savo sutartis saugumo ekspertų bendruomenei peržiūrėti.
Išvada
Išmaniųjų sutarčių auditas yra esminis decentralizuotų programų saugumo ir patikimumo užtikrinimo aspektas. Suprasdami dažnus pažeidžiamumus, įgyvendindami patikimas audito metodikas ir laikydamiesi saugumo geriausių praktikų, kūrėjai gali sumažinti riziką, susijusią su nesaugaus kodo diegimu blokų grandinėje. Blokų grandinės ekosistemai toliau augant ir tobulėjant, išmaniųjų sutarčių audito svarba tik didės.
Investavimas į kruopštų auditą nėra tik išlaidos; tai yra investicija į ilgalaikę jūsų projekto sėkmę ir tvarumą. Prioritetizuodami saugumą, galite sukurti pasitikėjimą savo vartotojais, apsaugoti savo turtą ir prisidėti prie saugesnės ir atsparesnės decentralizuotos ateities. Bręstant pasauliniam išmaniųjų sutarčių kraštovaizdžiui, aktyvios saugumo priemonės, įskaitant išsamius auditus, bus būtinos norint skatinti platų pritaikymą ir išlaikyti blokų grandinės programų vientisumą įvairiuose tarptautiniuose kontekstuose.