ievads

Nulles zināšanu pierādījumi, jo īpaši zk-SNARK (Zero-Knowledge Succinct Non-Interactive Knowledge Arguments), iespējams, ir viena no svarīgākajām jaunākajām tehnoloģijām Web 3. Pašlaik lielākā daļa plašsaziņas līdzekļu un investīciju uzmanības šajā apakšnozarē ir vērsta uz zk-Rollups — mērogošanas risinājumu, kas nodrošina milzīgu mērogojamību līdz L1 blokķēdēm, piemēram, Ethereum. Neskatoties uz to, zk-Rollups ir nekas cits kā zk-SNARK vienīgais mērķis. Šis raksts sniegs padziļinātu nulles zināšanu montāžas koda (zkASM) jēdziena analīzi, novērtēs tā izmantošanas gadījumus zk-Rollups un citos aspektos, kā arī izpētīs tā potenciālu, lai atkārtoti izgudrotu internetu no teorētiskā līmeņa.

Tehniskie principi

Kā norāda nosaukums, zk-ASM galvenokārt sastāv no diviem tehniskajiem komponentiem: ZK un ASM. ZK attiecas uz zk-SNARK, kas ir kodolīgs, neinteraktīvs zināšanu arguments, un ASM attiecas uz montāžas kodu. Lai saprastu zk-ASM potenciālu, mums vispirms ir jāsaprot šo divu šķietami neskaidro jēdzienu teorētiskais pamatojums.

zk-SNARKs

zk-SNARK ir zk-Proofs dārgakmens: tie ir īss veids, kā pierādīt, ka apgalvojums ir patiess, neatklājot nekādu informāciju par pierādāmiem datiem. Piemēram, pieņemsim, ka kāds paziņo: "Es zinu, ka ir m, kurā C(m) = 0", kur m ir informācijas gigabaits un C ir funkcija. zk-SNARK būs īss pierādījums (<1GB), kas ātri pārbauda m esamību, vienlaikus neatklājot nekādu informāciju par m (izņemot publisku informāciju).

Kas īsti ir šis "C(m)"? Kāda jēga? Šī funkcija faktiski ir aritmētiskā shēma vai virzīta acikliskā diagramma (DAG) attēlojums konkrētajai funkcijai, kuru vēlamies izpildīt, kā parādīts attēlā. Būtībā "m" ir ķēdes ievades dati, un konkrētie ķēdes "mezgli" ir atsevišķi loģiski vārti vai darbības. Piemēram, "2" un "3" var ievadīt "+" mezglā, un pēc tam "5" tiek izvadīts nākamajam operatoram. Tas ļauj iekodēt jebkuru aritmētisko vai loģisko darbību "aritmētiskajā shēmā".

Kad zk-SNARK kods, kuru mēs vēlamies palaist, ir attēlots ar aritmētisko shēmu, mēs varam sākt veidot šo zk-SNARK. Principā zk-SNARK iespējamību nosaka "Algebras pamatteorēma" Saskaņā ar algebras pamatteorēmu, "d" pakāpes polinomam ir ne vairāk kā "d" saknes. Šis matemātiskais triks ir divpakāpju process: (1) pārveidojiet funkciju "f(m)", kas ir jāpierāda, par polinomu un turpiniet izmantot polinomu, un (2) izmantojiet "Algebras pamatteorēmu", lai apstrādā polinomu un sniedz īsu pierādījumu. Tehniskā ziņā pirmā daļa tiek saukta par "Polynomial Commitment Scheme" (PCS), bet otrā daļa tiek saukta par "Polynomial Interactive Proof of Oracle" (PIOP).

Efektīvas universālas shēmas SNARK sastāvs. Avots: https://cs251.stanford.edu/lectures/lecture15.pdf

Konkrētā PCS un PIOP ieviešana neietilpst šī raksta darbības jomā, taču tas sniedz aptuvenu zk-SNARK galveno darbību skici:

  1. Atlasiet funkciju (koda funkciju, matemātisko vienādojumu utt.), kurā vēlaties palaist zk-SNARK

  2. Kodēt šo funkciju aritmētiskajā shēmā C(m)

  3. Palaidiet PCS, lai iegūtu aritmētiskās ķēdes polinoma attēlojumu.

  4. Palaidiet PIOP un saņemiet īsu žurnāla(m) izmēra pierādījumu

Tagad ir pielāgots zk-SNARK, kas var pierādīt, ka kāds zina kādu informāciju, neatklājot konkrēto informācijas saturu.

montāžas kods

Otrais zk-ASM mīklas gabals ir montāžas kods. Tā ir valodai līdzīga valoda, kas satur ļoti zema līmeņa valodas instrukcijas, kuras mašīnām ir viegli lasīt, bet cilvēkiem ir grūti atšifrēt. Atšķirībā no augsta līmeņa valodām, piemēram, Python, Java vai pat C, montāžas valoda satur dažas ļoti primitīvas funkcijas, kā arī MOVE (pārvietot), CMP (salīdzināt), ADD (pievienošana) un JMP (pārlēkt) procesorā. un reģistrēt līmeņus. Piemēram, Python kods skaitļu no 1 līdz 9 ierakstīšanai ekrānā ir `123456789`:

To ir viegli saprast, vai ne? Apskatīsim tās x86 montāžas versiju:

Tas tiešām ir daudz apgrūtinošāk, un tā ir tikai ļoti vienkārša darbība. Kāpēc šajā gadījumā izmantot montāžas valodu? Kā minēts iepriekš, lai gan šīs instrukcijas nav viegli nolasāmas cilvēkiem, tās ir viegli "samontētas" baitu kodā `110011001`, lai mašīna tos nolasītu un izpildītu (saukta par montētāju). Salīdzinājumam, lai gan augsta līmeņa valodas, piemēram, Python un Java, ir lasāmākas, procesors nevar tieši izpildīt šajās valodās rakstītas programmas. Mums ir nepieciešams "kompilators", lai pārveidotu Python vai Java kodu, ko mēs rakstām, iepriekš minētajā montāžas kodā un nodotu iekārtai montāžai un izpildei. Iemesls, kāpēc viens un tas pats Python vai Java koda fragments var darboties nevainojami dažādos procesoros un operētājsistēmās, ir tāpēc, ka kompilators veic smago darbu un apkopo avota kodu montāžas valodā konkrētajam procesoram vai operētājsistēmai.

Tā kā visas valodas tiek kompilētas montāžas kodā (kas pats tiek kompilēts izpildāmos bināros failos), montāža būtībā ir kā "visu valodu māte". Tagad, pieņemot, ka mēs varam pārvērst visus operandus montāžas valodā (piemēram, x86 vai RISC-V) aritmētiskās shēmas attēlojumos, mēs varam nodrošināt zk-SNARK pierādījumus visiem operandiem šajā montāžas valodā. Teorētiski tas nozīmē, ka mēs varam nodrošināt zk-SNARK jebkurai programmai, kas rakstīta jebkurā augsta līmeņa valodā, kas tiek kompilēta montāžai, piemēram, Python vai Java. Šī iemesla dēļ zk-ASM ir pelnījis mūsu rūpīgu izpēti.

Praktisks pielietojums

zk-EVM apkopojumi: daudzstūris zk-ASM

Viens no svarīgākajiem zk-ASM lietojumiem ir ar Ethereum virtuālo mašīnu vai zk-EVM saderīgu zk-Rollups izveide. zk-EVM ir ļoti svarīgs blokķēdes mērogojamībai, jo tas ļauj programmētājiem izmantot zk-Rollup bāzes L2 ķēdes, neveicot pārāk daudz (vai jebkādu) modifikāciju kodā. Šajā sakarā poligona zk-EVM ir tipisks piemērs tam, kā zk-ASM var izmantot šī mērķa sasniegšanai.

Ethereum L1 publiskās ķēdes izstrādātāji parasti izmanto valodu Solidity, kas ir augsta līmeņa programmēšanas valoda, kas līdzīga C valodai. Pirms Solidity koda palaišanas L1 blokķēdē tas vispirms tiks apkopots EVM darbības kodu sērijā, piemēram, ADD, SLOAD, EQ utt. Pēc noklusējuma šis process acīmredzami nerada nekādu zk-Proof. Daudzstūra atjautība bija radīt veidu, kā pārtulkot katru EVM opkodu viņu pielāgotajā zk-ASM, kas ir ļoti draudzīgs zk-SNARK. Viņu L2 zk-EVM pēc tam izpilda zk-ASM, vienlaikus izveidojot ASM zk-SNARK shēmu, lai izveidotu zk-SNARK pierādījumu. Piemēram, ADD darbības kods EVM tiks tulkots daudzstūra zk-ASM šādi:

Tā kā Polygon zk-EVM burvība notiek montāžas līmenī, tas ir divus līmeņus “zemāks” nekā koda slānis, kuram pieskaras parastais Ethereum — slānis — Solidity. Šī iemesla dēļ lielākā daļa izstrādātāju var portēt Ethereum tīklam izveidoto EVM kodu tieši uz Polygon zk-EVM. Tajā pašā laikā Polygon zk-EVM "saglabā" Ethereum tehnoloģiju kopu līdz pat darbības koda līmenim, un visu atkļūdošanas infrastruktūru, kas balstās uz kompilētā darbības koda analīzi, joprojām var izmantot neskartu. Tas atšķiras no citiem zk-EVM dizainiem, kas nenodrošina zk-Proof opkoda līmenī, piemēram, zk-Sync. Tāpēc, lai gan Polygon izgudroja un pārbaudīja savu montāžas valodu, kā teica Buterīns, "tas joprojām var pārbaudīt EVM kodu, tas tikai izmanto atšķirīgu iekšējo loģiku."

Beyond Rollups: zk-WASM

zk-EVM nekādā ziņā nav vienīgais zk-ASM lietošanas gadījums. Kā minēts iepriekš, montāžas valoda būtībā ir "visu valodu māte", un zk-ASM izveide atbloķēs zk-Proofs vispārējas nozīmes programmām, kas rakstītas jebkurā valodā, kas tiek kompilēta montāžas valodā. Web Assembly (WASM) ir viena no svarīgākajām topošajām montāžas valodām. Tā pirmo reizi tika izlaista 2018. gadā, un tās mērķis ir uzlabot tīmekļa lietojumprogrammu izpildes ātrumu un nodrošināt Javascript (galvenā tīmekļa programmēšanas valoda) izpildes papildinājumus.

Būtībā, tīmeklim gadu gaitā attīstoties, tīmekļa lietojumprogrammas ir palielinājušās pēc izmēra un sarežģītības, kas nozīmē, ka pārlūkprogrammām ir jākompilē viss Javascript rakstītais, bieži vien ārkārtīgi lēnā ātrumā, un ir jāatkārto sarežģīts "kompilēt-optimizēt-pārlādēt" process. WebAssembly novērš atkarību no sarežģītiem pārlūkprogrammas izpildes dzinējiem, nodrošinot montāžas valodu, kas ir pārnēsājama, modulāra un viegli izpildāma. Turklāt WASM kā montāžas valoda ļauj programmētājiem rakstīt koda fragmentus, izmantojot tādas valodas kā C, C++, Rust, Java vai Ruby, kuras var palaist tieši pārlūkprogrammā. Tāpēc WASM ir kļuvusi par izvēlēto tehnoloģiju "izplatītu bezserveru funkciju nodrošināšanai".

Kādu lomu šajā ziņā var spēlēt zk-SNARK? WASM ir unikāla ar to, ka tā ir klienta puses tehnoloģija, kas tieši mijiedarbojas ar lietotāja ievadītajiem datiem. Tas bieži ietver sensitīvus datus, piemēram, paroles un personisko informāciju, tāpēc mums ir nepieciešama tehnoloģija, kas (1) nodrošina programmas precīzu izpildi un (2) nodrošina, ka sensitīva informācija netiek nopludināta. zk-SNARK ir ideāls risinājums šīm divām problēmām, un tāpēc tas ir svarīgs WASM puzles gabals.

Darbs pie zk-WASM izstrādes joprojām ir agrīnā stadijā, taču vairāki projekti nesen ir izlaiduši WebAssembly zk-SNARK shēmu prototipu. Piemēram, Delphinus Lab “ZAWA” zk-SNARK simulators nodrošina veidu, kā kodēt WASM virtuālās mašīnas operandus un semantiku skaitļošanas shēmā, ļaujot tai izveidot zk-SNARK pierādījumus. Zk-WASM shēma noteikti tiks optimizēta, lai programmas, kas rakstītas vispārējas nozīmes valodās, piemēram, C, C++, Rust un Ruby, pārņems zk-Proofs paradigmu.

noslēgumā

Šajā rakstā ir apskatīta zk-ASM teorētiskā bāze un apskatīti divi zk-ASM paradigmu lietošanas gadījumi. Daudzstūris izmanto zk-ASM, lai izveidotu zk-EVM darbības koda līmenī, un lieto zk-SNARK WebAssembly, lai izveidotu zk-WASM. Galu galā zk-ASM sola apvienot Web 2 savietojamību un mērogu ar Web 3 neuzticamību un drošību.

No vienas puses, blokķēde arvien vairāk cenšas pārvarēt pašreizējās apstrādes apjoma vājās vietas, un, no otras puses, Web 2 pieejas arvien vairāk tiek kritizētas par nespēju adekvāti aizsargāt lietotāju datus un privātumu. Tā kā programmētāji Web 2 kodā var izmantot Web 3 dizaina paradigmas un iekļaut Web 2 valodas un kodu blokķēdē, sagaidāms, ka universālais zk-ASM kļūs par Web 2 un Web 3 pasaules tikšanās punktu. Ņemot to vērā, zk-ASM var ļaut mums no jauna iztēloties drošāku un neuzticamāku internetu.