zk-ASM-in təhlükəsiz və etibarsız bir internet təqdim etməsi necə ola bilər
Web3.com Ventures Orijinal Araşdırma Analizi
0xFishylosopher
Qeyd: Bu məqalə texniki cəhətdən sıx bir parçadır və zk-Proofs və ya zk-Rollups ilə bağlı əsas konseptual tanışlığı gözləyir. Bu prinsiplərə daha ümumi bir giriş burada tapıla bilər.

Giriş
Sıfır Bilgi Sübutları, xüsusilə də zk-SNARKs (Qısa İnteqrasiya Olunmayan Bilgi Argumentləri) Web 3.0-ın sərhədlərindəki ən vacib texnologiyalardan biri ola bilər. Bu alt sahədəki media və investisiya diqqətinin əksəriyyəti zk-Rollups-a yönəldilsə də, Ethereum kimi L1 blok zəncirləri üçün miqyaslandırma həlləri təqdim edən bu, zk-SNARKs-ın yeganə tətbiqi deyil. Bu esse də, Sıfır Bilgi Yığım kodunun (və ya zkASM) konseptini dərinliklə təhlil edəcək, onun istifadə sahələrini həm zk-Rollups-da, həm də daha irəlidə araşdıracaq, İnterneti yenidən ixtira etmə imkanlarını nəzərdən keçirəcək.
Texniki Prinsiplər
zk-ASM, adından da göründüyü kimi, iki əsas texniki hissədən ibarətdir: ZK və ASM. ZK hissəsi zk-SNARK-lara, yəni Succinct Non-Interactive Arguments of Knowledge-a, ASM hissəsi isə Assembly koduna aiddir. zk-ASM-in potensialını anlamaq üçün, bu görünən qeyri-adi anlayışların nəzəri əsaslarını anlamaq lazımdır.
zk-SNARKs
zk-SNARK-lar zk-Proofs-un tac juveləridir: onlar müəyyən bir ifadənin doğru olduğunu sübut edən qısa sübutlardır, burada sübut edilən məlumat haqqında heç nə açıqlanmır. Məsələn, "m-ni bilirəm ki, C(m) = 0" ifadəsini irəli sürən birini düşünün, burada m bir gigabayt uzunluğunda mesajdır və C bir funksiyadır. zk-SNARK, sürətli şəkildə təsdiq edilə bilən və m haqqında heç bir şey açıqlamayan çox qısa bir sübut (< 1GB) olardı [1].
Bəs bu "C(m)" nədir? O necə faydalıdır? Bu funksiya, əslində, icra etmək istədiyimiz spesifik funksiyanın arifmetik dövrəsi ya da Yönləndirilmiş Aysiklik Qrafik (DAG) təmsilidir, bu diaqramda göstərilir [2]. "m" əslində dövrəyə giriş məlumatıdır və dövrədəki spesifik "nöqtələr" fərdi məntiq qapıları və ya arifmetik əməliyyatlardır. Məsələn, "+" nöqtəsi "2" və "3"-ü giriş olaraq ala bilər və "5"-i növbəti operatora çıxış olaraq verə bilər. Beləliklə, istənilən arifmetik və ya məntiqi əməliyyat "arifmetik dövrə" şəklində kodlaşdırıla bilər.

Bir zk-SNARK-da icra etmək istədiyimiz kodun bu arifmetik dövrəsini əldə etdikdən sonra, bu zk-SNARK-ı qurmağa başlaya bilərik. Əsasən, bir zk-SNARK "algebra əsasları"nın fundamental teoremi sayəsində mümkündür ki, bu, "d" dərəcəli bir polinomun ən çox "d" kökə sahib olduğunu bildirir [3]. Riyazi fənd iki addımdan ibarətdir: (1) sübut etmək istədiyimiz "f(m)" funksiyasını bir polinoma çevirmək (və bununla yapışmaq) və (2) "algebra əsasları"nın fundamental teoremi ilə polinomu bir araya gətirərək qısa bir sübut təqdim etmək. Texniki terminologiyada, birinci hissə "Polinom Öhdəlik Planı" (PCS) adlanır, ikincisi isə "Polinom İnteraktiv Oracle Sübutu" (PIOP) adlanır [4].

PCS və PIOP-un spesifik tətbiqləri bu məqalənin əhatə dairəsindən kənardır, amma indiyə qədər biz bir zk-SNARK-ın əsas addımlarını əldə etdik:
İstədiyiniz bir funksiya (kod funksiyası, riyazi tənlik və s.) olsun ki, onu bir zk-SNARK-da icra etmək istəyirsiniz
Bu funksiyanı arifmetik dövrə C(m) şəklində kodlaşdırın
Bu arifmetik dövrənin polinom təmsilçisini əldə etmək üçün PCS-i icra edin
Bu arifmetik dövrənin orijinal "m"-yə nisbətən logaritmik ölçüdə qısa bir sübut əldə etmək üçün PIOP-u icra edin
Və voila, kimsə bir mesajı bildiyini sübut edə bilən xüsusi hazırlanmış bir zk-SNARK-ımız var, bu mesajın nə olduğunu açıqlamadan.
Assembly Kodu
zk-ASM-in ikinci parçası Assembly Kodu ideyasıdır. Assembly kodu, insanın başa düşməsi çətin, amma maşının oxuması asan olan çox aşağı səviyyəli təlimatları özündə cəmləşdirən bir dil sinifidir. Python, Java və ya hətta C kimi yüksək səviyyəli dillərdən fərqli olaraq, Assembly dilləri, prosessorun data register-lərində və hard-coded yaddaş yerlərində hərəkət etmək, müqayisə etmək, əlavə etmək və sıçramaq kimi çox primitiv funksiyalar ehtiva edir. Məsələn, ekranda 1-dən 9-a qədər olan ədədləri çap edən Python kodu belədir:

Çox asan başa düşülən, elə deyilmi? İndi bunun x86 Assembly versiyası [5]:

Çox çətin görünür, xüsusilə də belə sadə bir əməliyyat üçün. Bəs niyə Assembly dilindən istifadə edək? Yuxarıda qeyd edildiyi kimi, bu təlimatlar insan üçün asan olmasa da, maşının oxuyub icra etməsi üçün 110011001 byte-koduna "yığmaq" olduqca asandır (buna assembler deyilir) [6]. Müqayisədə, Python və Java kimi yüksək səviyyəli dillər oxumaq üçün daha dostdur, amma bu dillərdə yazılmış proqramlar birbaşa prosessor tərəfindən icra oluna bilmir. Bunun əvəzinə, yazdığımız Python və ya Java kodunu yeyib yandıran və yuxarıdakı assembly kodunu yaratmağa və icra etməyə imkan verən "tərtibçi"-yə ehtiyacımız var. Eyni Python və ya Java kodunun fərqli prosessorlar və əməliyyat sistemləri arasında problemsiz işləməsini gözləyə bilərik, çünki tərtibçi ağır iş görür, mənbə kodunuzu bu prosessor və ya əməliyyat sistemi üçün spesifik assembly dilinə çevirir.
Bütün dillər assembly koduna çevrildiyi üçün (bu da icra olunan ikiliyə çevrilir), assembly əslində "bütün dillərin anası" kimidir. İndi fərz edək ki, Assembly dilində (x86 və ya RISC-V kimi) bütün operandları arifmetik dövrə təmsilçisinə çevirmək mümkündür, beləliklə bu Assembly dilindəki bütün operandlar üçün zk-SNARK sübutları təqdim edə bilirik. Bu, teorik olaraq, bu Assembly dilinə tərtib olunan istənilən yüksək səviyyəli dildə (məsələn, Python və ya Java) yazılmış hər hansı bir proqramın zk-SNARK-ını təqdim etməyə qadirik deməkdir. Və buna görə də zk-ASMs haqqında düşünmək vacibdir.
Praktiki Tətbiqlər
zk-EVM Rollups: Polygon zk-ASM
zk-ASM-in ən vacib tətbiqlərindən biri Ethereum Virtual Machine-ə uyğun zk-Rolluplar, ya da zk-EVM-lər yaratmaqdır. zk-EVM blockchain-in genişlənməsi üçün son dərəcə əhəmiyyətlidir, çünki proqramçılara kodlarını çox dəyişdirmədən (hər hansı bir dəyişiklik etmədən) zk-Rollup əsaslı L2 zəncirində yerləşdirməyə imkan verir [7]. Bu sahədə, Polygon-un zk-EVM-i, zk-ASM-in bu məqsədin əldə edilməsi üçün necə istifadə oluna biləcəyini göstərən nümunəvi bir işdir.

Proqramçılar Ethereum L1 blockchain-də inkişaf edərkən, adətən Solidity-də kod yazırlar ki, bu da C-yə bənzər yüksək səviyyəli bir dildir. Bu Solidity kodu L1 blockchain-də icra olunmadan əvvəl ADD, SLOAD və EQ kimi bir sıra EVM Opcode-larına çevrilir [8]. Varsayılan olaraq, bu proses heç bir zk-Proof yaratmır. Polygon-un əsası, hər bir EVM Opcode-u öz xüsusi yazılmış zk-ASM-ə çevirmək üçün bir metod yaratmaqdır, bu da çox zk-SNARK dostudur. Sonra onların L2 zk-EVM-i zk-ASM-i icra edəcək, eyni zamanda zk-SNARK sübutu yaratmaq üçün ASM-in zk-SNARK dövrəsini də yaradacaq [9]. Məsələn, EVM-dəki ADD opcode-u Polygon-un zk-ASM-ə aşağıdakı kimi çevriləcək [10]:

Polygon zk-EVM-in fəndi Assembly səviyyəsində baş verdiyi üçün, bu, ortalama Ethereum proqramçısının toxunduğu koddan iki səviyyə uzaqdadır, yəni "Solidity" səviyyəsindən. Bu, əksər inkişaf etdiricilərin Ethereum mainnet üçün yaradılmış EVM kodunu birbaşa Polygon zk-EVM-ə keçirmə səbəbidir. Həmçinin, Polygon zk-EVM "Ethereum-un texnologiya yığmağını" opcode səviyyəsinə qədər saxladığı üçün, tərtib olunmuş opcode-ları analiz etməkdə asılı olan bütün debugging infrastrukturu istifadəyə yararlı və sağlam qalacaq. Bu, zk-Sync kimi bəzi digər zk-EVM dizaynlarından fərqlidir, çünki onlar opcode səviyyəsində zk-Proofs təqdim etmir. Beləliklə, Polygon öz Assembly dilini icad edib sübut etsə də, Vitalik yazır ki, "hələ də EVM kodunu təsdiqləyə bilər, sadəcə bunu etmək üçün bir az fərqli daxili məntiq istifadə edir" [11].
Rolluplardan kənarda: zk-WASM
zk-EVM-lər yalnız zk-ASMs üçün tək tətbiq deyil. Assembly dillərinin "bütün dillərin anası" olduğu əvvəlki iddiamızı xatırlayaq və zk-ASM yaradılması, o Assembly dilinə tərtib olunan hər hansı bir dildə yazılmış ümumi proqramlar üçün zk-Proofs-un açarını açacaq. Web Assembly, ya da WASM, ən vacib inkişaf edən assembly dillərindən biridir. 2018-ci ildə ilk dəfə dərc edilmişdir, WASM-in məqsədi Web Tətbiqlərinin icra sürətini artıran bir Assembly dil yaratmaqdır və Web-in arxasında duran əsas kodlaşdırma dili olan Javascript-ə icra əlavə edir [12].
Əslində, Web illər ərzində inkişaf etdikcə, Web Tətbiqlərinin böyüyən ölçüsü və mürəkkəbliyi, nisbətən yavaş olduğu üçün brauzerlərin Javascript-də yazılmış hər şeyi tərtib etməsi lazım olduğunu göstərdi və mürəkkəb tərtib-optimizasiya-yenidən yükləmə dövrlərinə etibar etməsi lazım idi [12]. WebAssembly, digər tərəfdən, brauzerin icra mühərriklərinə etibar etməyi aradan qaldıraraq, portativ, modul və asan icra oluna bilən assembly dili təqdim edir. Həmçinin, Assembly dili kimi, WASM proqramçılara birbaşa brauzerdə yerli icra olunan C, C++, Rust, Java və ya Ruby-də kod parçaları yazmağı imkan tanıyır. WASM buna görə də "paylanmış serverless funksiyalar təqdim etmək" üçün seçilən texnologiyadır [13].
Bəs niyə və necə zk-SNARK-lar bu mənzərəyə daxil olur? WASM-un unikal cəhəti odur ki, bu, müştəri tərəfində bir texnologiyadır, istifadəçi girişləri və məlumatları ilə birbaşa qarşılıqlı əlaqə qura bilir. Çünki çox vaxt bu, şifrələr və şəxsi məlumatlar kimi həssas məlumatları əhatə edir, bizə iki şeyi təmin edən bir texnologiya lazımdır: (1) proqramın düzgün icra olunduğunu təmin etmək və (2) həssas məlumatlarımızın sızdırılmamasını təmin etmək. Yuxarıda təsvir edildiyi kimi, zk-SNARK bu iki problemi həll etmək üçün mükəmməl bir həll yoludur və beləliklə, WASM-ı təhlükəsizləşdirməkdə mühüm bir parça olur [14].
zk-WASM-in inkişafı hələ də erkən mərhələlərdə olsa da, son vaxtlarda WebAssembly üçün prototip zk-SNARK dövrələri təqdim edən bəzi layihələr mövcuddur. Məsələn, Delphinus Lab-ın "ZAWA" zk-SNARK Emulator-u, bir WASM virtual maşınının operandlarını və semantikasını arifmetik dövrəyə kodlaşdırma metodunu təqdim edir ki, bu da ona zk-SNARK sübutları aparmağa imkan verir [13]. Zaman keçdikcə, zk-WASM dövrələri şübhəsiz ki, davamlı olaraq optimallaşdırılacaq, beləliklə də C, C++, Rust və Ruby kimi ümumi dillərdə yazılmış proqramların zk-Proofs-un paradigma qəbul etməsinə imkan verəcək.
Nəticə
Bu esse boyunca, biz zk-ASM-in nəzəri təməlini araşdırdıq və zk-ASM-in iki nümunəvi işini: Polygon-un opcode səviyyəsində zk-EVM yaratmaq üçün zk-ASM-dən istifadəsi və zk-SNARK-ların WebAssembly-ə tətbiq edilməsi ilə zk-WASM yaratmaq barədə müzakirə etdik. Nəticədə, zk-ASM-in vəd etdiyi, Web 2-nin qarşılıqlı əlaqəsini və ölçüsünü Web 3-ün etibarsızlığını və təhlükəsizliyini bir araya gətirməkdir.
Bir tərəfdən, blokçeynlər artan dərəcədə cari throughput bottlenecks-dən kənara genişlənməyə və potensial olaraq icra dəstəkləməyə çalışır, digər tərəfdən, Web 2 metodları istifadəçi məlumatları və gizliliyini qorumaqda daha çox hücuma məruz qalır. Proqramçılar Web 3 dizayn paradigmalarını Web 2 kodlarında tətbiq edərkən və Web 2 dillərini və kodlarını blokçeyndə təqdim edərkən, ümumi zk-ASMs Web 2 və Web 3 dünyasında birləşmə nöqtəsini təmsil edə bilər [15]. Bu mənada, zk-ASM bizə daha təhlükəsiz və etibarsız bir İnterneti yenidən düşünməyə imkan verə bilər.
🐦 @0xfishylosopher
📅 17 Dekabr 2022
İkrah: yuxarıda təqdim olunan məlumat tamamilə təhsil məqsədli olub, maliyyə məsləhəti hesab edilmir və yalnız müəllifin fikirlərini əks etdirir. Delphinus Lab Web3.com Ventures-in portfel şirkətidir.
İstinadlar
[1] https://z.cash/technology/zksnarks/
[2] https://cs251.stanford.edu/lectures/lecture14.pdf
[3] https://www.britannica.com/science/fundamental-theorem-of-algebra
[4] Effekti SNARK-ların yaradılması: https://cs251.stanford.edu/lectures/lecture15.pdf
[5] Məsələn: https://www.tutorialspoint.com/assembly_programming/assembly_loops.htm
[6] https://en.wikipedia.org/wiki/Assembly_language
[7] https://www.alchemy.com/overviews/zkevm
[8] Opcode-lar üçün siyahı: https://ethereum.org/en/developers/docs/evm/opcodes/
[9] https://wiki.polygon.technology/docs/zkEVM/zkASM/introduction
[10] https://wiki.polygon.technology/docs/zkEVM/zkASM/some-examples
[11] https://vitalik.ca/general/2022/08/04/zkevm.html
[12] https://blog.developer.adobe.com/understanding-webassembly-wasm-d5b592208ecc
[13] https://jhc.sjtu.edu.cn/~hongfeifu/manuscriptb.pdf
[14] https://hyperoracle.medium.com/zkwasm-the-next-chapter-of-zk-and-zkvm-471038b1fba6
[15] https://delphinuslab.com/zk-wasm/