Apa itu zk-VM?

Menengah6/3/2024, 1:43:55 PM
ZK adalah jembatan menuju adopsi kriptografi yang meluas. Baik di Web2 atau Web3, apa pun yang melibatkan Bukti Tanpa Pengetahuan (ZKP) akan menciptakan nilai yang sangat besar. Tim Lita telah menulis artikel sains dasar, memperkenalkan dasar-dasar ZK dan zkVM, memberikan gambaran umum tingkat tinggi tentang proses dalam zkVM, dan akhirnya mengusulkan serangkaian standar untuk mengevaluasi zkVM.

Teruskan Judul Asli 'Paradigma Pengetahuan Nol: Bagian 1 - Apa itu zk-VM?'

1. Tidak Ada Bukti Pengetahuan: Sebuah Primer

Apa itu zero knowledge proof (ZKP)?

Jika Anda tidak memiliki pengetahuan sebelumnya tentang zero knowledge proofs (ZKP), video dari Wired ini menjelaskan konsep pada lima tingkat kesulitan secara interaktif dengan contoh dan demonstrasi yang mudah dimengerti. Sangat dianjurkan.

Dalam istilah yang paling sederhana, ZKP memungkinkan satu pihak (prover) untuk membuktikan kepada pihak lain (verifikator) bahwa mereka mengetahui sesuatu tanpa mengungkapkan apa itu atau informasi tambahan apa pun. Lebih khusus lagi, ZKP membuktikan pengetahuan tentang sepotong data, atau pengetahuan tentang hasil perhitungan, tanpa mengungkapkan data atau input. Proses menciptakan bukti pengetahuan nol melibatkan serangkaian model matematika untuk mengubah hasil perhitungan menjadi sepotong informasi yang tidak berarti yang membuktikan keberhasilan eksekusi kode, yang nantinya dapat diverifikasi.

Dalam beberapa kasus, dibutuhkan lebih sedikit pekerjaan untuk memverifikasi bukti, yang dibangun setelah beberapa putaran konversi aljabar dan kriptografi, daripada yang diperlukan untuk menjalankan perhitungan. Kombinasi unik antara keamanan dan skalabilitas inilah yang membuat kriptografi tanpa pengetahuan menjadi alat yang hebat.

zkSNARKs: Nol Pengetahuan Ringkas Argumen Pengetahuan Non-Interaktif

  • Bergantung pada proses penyiapan awal (tepercaya atau tidak tepercaya) untuk menetapkan parameter verifikasi
  • Membutuhkan setidaknya satu interaksi antara prover dan verifier
  • Ukuran bukti kecil dan mudah diverifikasi
  • Bukti berbasis NARK digunakan oleh rollup seperti zkSync, Scroll, dan Linea

zkSTARKs: Pengetahuan Nol Argumen Pengetahuan Transparan yang Dapat Diskalakan

  • Tidak diperlukan penyiapan tepercaya
  • Menawarkan transparansi tinggi dengan menggunakan keacakan yang dapat diverifikasi secara publik untuk menciptakan sistem yang dapat diverifikasi tanpa kepercayaan, yaitu menghasilkan parameter acak yang terbukti untuk membuktikan dan memverifikasi
  • Sangat skalabel karena mereka dapat menghasilkan dan memverifikasi bukti dengan cepat (tidak selalu), bahkan ketika ukuran saksi yang mendasarinya (data) besar
  • Tidak memerlukan interaksi antara prover dan verifier
  • Datang dengan biaya bahwa STARK menghasilkan bukti yang lebih besar, yang bisa lebih sulit untuk diverifikasi daripada SNARKs
  • Bukti lebih sulit untuk diverifikasi daripada beberapa bukti zkSNARK tetapi tidak sesulit beberapa bukti lain untuk diverifikasi
  • STARKs digunakan oleh Starknet, serta zkVM seperti Lita, Risc Zero, dan Succinct Labs

(Catatan: Jembatan Succinct's menggunakan SNARKs tetapi SP1 adalah protokol berbasis STARK)

Perlu dicatat bahwa semua STARK adalah SNARK, tetapi tidak semua SNARK adalah STARK.

Untuk pemahaman umum yang lebih baik tentang SNARKs dan STARKs, kami sarankan untuk membaca seri artikel @krzhang/privacy-in-cryptocurrencies-zero-knowledge-and-zk-snarks-1-2-68ce1838fd9c">artikel yang ditulis oleh Yan Zhang dan Yi Sun dari Axiom, dan kumpulan artikel ini di github Ventali Tan.

2. Apa itu zkVM?

Mesin virtual (VM) adalah program yang menjalankan program. Dalam konteksnya, zkVM adalah komputer virtual yang diimplementasikan sebagai sistem untuk menghasilkan bukti pengetahuan nol, atau sirkuit universal, atau alat, untuk menghasilkan ZKP untuk program atau perhitungan apa pun.

zkVM menghilangkan kebutuhan untuk mempelajari matematika dan kriptografi yang rumit untuk merancang dan mengkodekan ZK, dan memungkinkan pengembang mana pun untuk menjalankan program yang ditulis dalam bahasa pilihan mereka dan menghasilkan ZKP, membuatnya jauh lebih mudah untuk diintegrasikan dan berinteraksi tanpa pengetahuan. Secara garis besar, sebagian besar referensi ke zkVM secara implisit mencakup toolchains kompiler dan sistem bukti yang ditambahkan ke mesin virtual yang menjalankan program, dan bukan hanya mesin virtual itu sendiri. Di bawah ini, kami merangkum komponen utama zkVM dan fungsinya:

Komponen utama zkVM

Desain dan implementasi setiap komponen diatur oleh pilihan bukti (SNARKs atau STARKs) dan arsitektur set instruksi (ISA) dari zkVM. Secara tradisional, ISA menentukan apa yang CPU mampu (tipe data, register, memori dll) dan urutan tindakan yang dilakukan CPU ketika menjalankan program. Dalam konteks, ISA menentukan kode mesin yang dapat ditafsirkan dan dieksekusi oleh VM. Memilih ISA dapat menghasilkan perbedaan radikal dalam aksesibilitas dan kegunaan zkVM, serta kecepatan dan efisiensi proses pembangkitan bukti, dan mendukung pembangunan zkVM apa pun.

Di bawah ini adalah beberapa contoh zkVM dan komponennya untuk referensi Anda.


zkVM dan komponennya

Untuk saat ini, kami akan fokus pada interaksi antara masing-masing komponen pada tingkat tinggi untuk menyediakan kerangka kerja untuk memahami proses aljabar dan kriptografi serta pengorbanan desain zkVM di artikel selanjutnya.

3. Alur Proses zkVM yang Diabstraksi

Diagram berikut adalah diagram alur proses abstrak dan umum dari zkVM, dibagi dan dikategorikan antara format (input / output) suatu program saat bergerak melalui komponen zkVM. Kami akan memeriksa setiap proses secara mendalam di artikel berikutnya.


Alur umum untuk zkVM

Alur proses zkVM umumnya sebagai berikut:

  • Tahap Kompiler
  1. Kompiler pertama-tama mengkompilasi program yang ditulis dalam bahasa konvensional (C, C ++, Rust, Solidity) ke dalam kode mesin. Format kode mesin ditentukan oleh pilihan ISA.
  • Tahap VM
  1. VM mengeksekusi kode mesin dan menghasilkan jejak eksekusi, yang merupakan serangkaian langkah dari program yang mendasarinya. Format ini telah ditentukan sebelumnya oleh pilihan aritmetisasi serta serangkaian kendala polinomial. Skema aritmetisasi umum termasuk R1CS seperti pada Groth16, aritmetisasi PLONKish seperti pada halo2, dan AIR seperti pada plonky2 dan plonky3.
  • Tahap Prover
  1. Prover menerima jejak dan mewakilinya sebagai satu set polinomial yang terikat oleh serangkaian kendala, pada dasarnya menerjemahkan perhitungan ke dalam aljabar dengan memetakan fakta secara matematis.

  2. Prover berkomitmen untuk polinomial ini menggunakan Polynomial Commitment Scheme (PCS). Skema komitmen adalah protokol yang memungkinkan prover untuk membuat sidik jari dari beberapa data X, yang disebut komitmen untuk X, dan kemudian membuktikan fakta tentang X tanpa mengungkapkan X, menggunakan komitmen untuk X. PCS adalah sidik jari; versi ringkas "pra-diproses" dari batasan pada perhitungan. Hal ini memungkinkan prover untuk membuktikan fakta tentang perhitungan, sekarang dinyatakan dalam persamaan polinomial, menggunakan nilai acak yang diusulkan oleh verifier dalam langkah-langkah berikut.

  3. Prover menjalankan Polynomial Interactive Oracle Proof (PIOP) untuk menunjukkan bahwa polinomial yang berkomitmen mewakili jejak eksekusi yang memenuhi batasan yang diberikan. PIOP adalah protokol bukti interaktif yang terdiri dari serangkaian putaran di mana prover mengirimkan komitmen ke polinomial, verifier merespons dengan nilai bidang acak, dan prover memberikan evaluasi polinomial pada nilai acak ini, mirip dengan "menyelesaikan" persamaan polinomial menggunakan nilai acak untuk membujuk verifikator secara probabilistik.

  4. Menerapkan heuristik Fiat-Shamir; prover menjalankan PIOP dalam mode non-interaktif, di mana perilaku verifikator terbatas pada pengiriman poin tantangan pseudo-random. Dalam kriptografi, heuristik Fiat-Shamir mengubah bukti pengetahuan interaktif menjadi tanda tangan digital untuk verifikasi. Langkah ini mengenkripsi bukti dan menjadikannya nol pengetahuan.

  5. Prover harus meyakinkan verifikator bahwa evaluasi polinomial yang diklaim benar, sehubungan dengan komitmen polinomial yang dikirim ke verifikator. Untuk melakukan ini, prover menghasilkan bukti "evaluasi" atau "pembukaan", yang disediakan oleh skema komitmen polinomial (sidik jari).

  • Tahap Verifier
  1. Verifikator memeriksa bukti dengan mengikuti protokol verifikasi sistem bukti, baik menggunakan batasan atau komitmen. Verifikator menerima atau menolak hasil sesuai dengan validitas bukti.

Singkatnya, bukti zkVM membuktikan, untuk program tertentu, hasil yang diberikan, dan kondisi awal yang diberikan, bahwa ada beberapa input yang menyebabkan program menghasilkan hasil yang diberikan ketika dijalankan dari kondisi awal yang diberikan. Kita dapat menggabungkan pernyataan ini dengan alur proses untuk sampai pada deskripsi zkVM berikut.

Bukti zkVM membuktikan, untuk program VM tertentu dan output yang diberikan, bahwa ada beberapa input yang menyebabkan program yang diberikan menghasilkan output yang diberikan ketika dijalankan pada VM.

4. Mengevaluasi zkVM

Apa kriteria yang dengannya kita harus mengevaluasi zkVMs? Dengan kata lain, kapan kita harus mengatakan bahwa satu zkVM lebih baik dari yang lain? Sejujurnya, jawabannya tergantung pada kasus penggunaan.

Riset pasar Lita menunjukkan bahwa untuk sebagian besar kasus penggunaan komersial, sifat yang paling penting, dari kecepatan, efisiensi, dan keringkasan, adalah kecepatan atau efisiensi waktu inti, tergantung pada aplikasinya. Beberapa aplikasi sensitif terhadap harga dan ingin mengoptimalkan konsumsi energi yang rendah dan penggunaan modal yang rendah dalam membuktikan; Untuk ini, efisiensi waktu inti mungkin merupakan metrik yang paling penting untuk dioptimalkan. Aplikasi lain, terutama aplikasi terkait keuangan atau perdagangan, sensitif terhadap latensi dan ingin mengoptimalkan kecepatan.

Sebagian besar perbandingan kinerja yang dipublikasikan berfokus secara eksklusif pada kecepatan, yang penting tetapi bukan pengukuran kinerja yang holistik. Ada juga beberapa properti penting yang mengukur keandalan zkVM; Sebagian besar tidak memenuhi standar siap produksi, bahkan untuk pemain lama yang memimpin pasar.

Dengan ini kami mengusulkan bahwa zkVM harus dievaluasi berdasarkan kriteria berikut, dipisahkan menjadi dua subset:


Kriteria utama untuk mengevaluasi zk-VM

Baseline: Mengukur keandalan zkVM

  • Kebenaran
  • Keamanan
  • Asumsi Kepercayaan

Performa: Mengukur kemampuan zkVM

  • Efisiensi
  • Kecepatan
  • Keringkasan

4.1 Baseline: Asumsi Kebenaran, Keamanan, dan Kepercayaan

Saat mengevaluasi zkVM untuk aplikasi kritis misi, kebenaran dan keamanan harus dianggap sebagai garis dasar. Perlu ada alasan yang cukup untuk yakin tentang kebenaran, dan keamanan klaim yang cukup kuat. Juga, asumsi kepercayaan harus cukup lemah untuk aplikasi.

Tanpa properti ini, zkVM berpotensi lebih buruk daripada tidak berguna untuk aplikasi, karena mungkin gagal melakukan seperti yang ditentukan dan mengekspos pengguna untuk hacking dan eksploitasi.

i. Ketepatan

  • VM harus menjalankan perhitungan sebagaimana dimaksud
  • Sistem bukti harus memenuhi properti keamanan yang diklaim

Ketepatan terdiri dari tiga sifat:

  • Kesehatan: Sistem pembuktian itu benar dan oleh karena itu semua yang dibuktikannya benar. Verifikator menolak bukti pernyataan palsu; Ini hanya menerima hasil perhitungan jika input benar-benar menghasilkan hasil itu.
  • Kelengkapan: Sistem pembuktian lengkap dan dapat membuktikan semua pernyataan yang benar. Jika prover mengklaim dapat membuktikan hasil perhitungan, ia harus dapat menghasilkan bukti yang diterima oleh verifikator.
  • Pengetahuan Nol: Memiliki bukti tidak mengungkapkan lebih banyak tentang input komputasi daripada mengetahui hasilnya sendiri

Anda dapat memiliki kelengkapan tanpa kesehatan; Jika sistem pembuktian membuktikan segalanya termasuk kepalsuan, jelas itu lengkap tetapi tidak terdengar. Sebaliknya, Anda dapat memiliki kesehatan tanpa kelengkapan; Jika sistem bukti membuktikan sebuah program ada tetapi tidak dapat membuktikan perhitungan, jelas itu adalah suara (setelah semua, itu tidak pernah membuktikan kepalsuan), tetapi tidak lengkap.

ii. Keamanan

  • Berkaitan dengan toleransi kesehatan, kelengkapan, dan nol pengetahuan

Dalam praktiknya, ketiga sifat kebenaran memiliki toleransi bukan nol. Ini menyiratkan semua bukti adalah probabilitas statistik kebenaran, dan bukan kepastian mutlak. Toleransi mengacu pada probabilitas maksimum yang dapat ditoleransi bahwa satu properti akan gagal. Toleransi nol tentu saja ideal, tetapi zkVM tidak mencapai toleransi nol pada semua properti ini dalam praktiknya. Kesehatan dan kelengkapan yang sempurna tampaknya tidak sesuai dengan keringkasan, dan tidak ada metode yang diketahui untuk mencapai pengetahuan nol sempurna. Cara umum untuk mengukur keamanan adalah dalam bit keamanan, di mana toleransi 1 / (2 ^ n) disebut sebagai n bit keamanan. Lebih banyak bit keamanan lebih baik.

Jika zkVM sepenuhnya benar, itu tidak berarti bahwa itu dapat diandalkan. Kebenaran hanya menyiratkan bahwa zkVM memenuhi properti keamanannya hingga toleransi yang diklaim. Ini tidak menyiratkan bahwa toleransi yang diklaim cukup rendah untuk siap dipasarkan. Juga, jika zkVM cukup aman, itu tidak berarti bahwa itu benar; Keamanan mengacu pada toleransi yang diklaim, bukan toleransi yang benar-benar dicapai. Hanya ketika zkVM benar-benar benar dan cukup aman, dapat dikatakan bahwa zkVM dapat diandalkan hingga toleransi yang diklaim.

iii. Asumsi Kepercayaan

  • Asumsi tentang kejujuran prover dan verifier untuk mencapai kesimpulan zkVM berfungsi dengan andal

Ketika zkVM memiliki asumsi kepercayaan, ini biasanya mengambil bentuk proses penyiapan tepercaya. Proses penyiapan untuk sistem bukti ZK berjalan sekali, sebelum bukti pertama dihasilkan menggunakan sistem pembuktian, untuk menghasilkan beberapa informasi yang disebut "data pengaturan." Dalam proses penyiapan tepercaya, satu atau lebih individu menghasilkan beberapa keacakan yang dimasukkan ke dalam data penyiapan, dan perlu diasumsikan bahwa setidaknya satu dari individu tersebut menghapus keacakan yang mereka masukkan ke dalam data penyiapan.

Ada dua model asumsi kepercayaan umum dalam praktiknya.

Asumsi kepercayaan mayoritas yang jujur menyatakan bahwa dari beberapa set individu N, lebih dari N / 2 dari individu-individu tersebut menunjukkan integritas dalam beberapa interaksi tertentu dengan sistem, yang biasa digunakan oleh blockchain

Asumsi kepercayaan "1 dari N" menyatakan bahwa dari beberapa set individu N, setidaknya satu dari individu tersebut menunjukkan integritas dalam beberapa interaksi tertentu dengan sistem, yang umumnya digunakan oleh alat dan aplikasi berbasis MPC.

Secara umum disepakati bahwa semua hal lain dianggap sama, zkVM tanpa asumsi kepercayaan lebih aman daripada zkVM yang membutuhkan asumsi kepercayaan.

4.2 Trilema zkVM: Menyeimbangkan Kecepatan, Efisiensi, dan Keringkasan, dalam zkVMs


Trilema zkVM: kecepatan, efisiensi, dan keringkasan;

Kecepatan, efisiensi, dan keringkasan semuanya adalah sifat skala geser. Semua faktor ini berkontribusi pada biaya pengguna akhir zkVM. Bagaimana mereka harus ditimbang dalam evaluasi tergantung pada aplikasi. Seringkali, solusi tercepat bukanlah yang paling efisien atau paling ringkas; Solusi yang paling ringkas bukanlah yang tercepat atau paling efisien; dan seterusnya dan sebagainya. Pertama-tama mari kita definisikan setiap properti sebelum menjelaskan hubungannya

i. Kecepatan

  • Seberapa cepat prover dapat menghasilkan bukti
  • Diukur dalam waktu jam dinding, yaitu waktu yang berlalu dari awal hingga akhir perhitungan

Kecepatan harus didefinisikan dan diukur relatif terhadap program pengujian, input, dan sistem tertentu untuk memastikannya dapat dinilai secara kuantitatif. Metrik ini sangat penting untuk aplikasi sensitif latensi di mana ketersediaan bukti yang cepat sangat penting, tetapi dilengkapi dengan overhead yang lebih tinggi dan ukuran bukti yang lebih besar

ii. Efisiensi

  • Sumber daya yang dikonsumsi oleh pepatah, dengan lebih sedikit yang lebih disukai
  • Dapat didekati dengan waktu pengguna, yang merupakan jumlah waktu komputer yang dikeluarkan oleh kode program

Prover mengkonsumsi dua jenis sumber daya: waktu inti dan ruang. Oleh karena itu, efisiensi dapat dibagi lagi menjadi efisiensi waktu inti dan efisiensi ruang.

Efisiensi Core-Time: Jumlah rata-rata waktu prover beroperasi di semua core dikalikan dengan jumlah core yang menjalankan prover. Untuk prover single-core, konsumsi core-time dan kecepatannya adalah hal yang sama. Untuk prover berkemampuan multi-core yang berjalan dalam mode multi-core pada sistem multi-core, konsumsi dan kecepatan core-time bukanlah hal yang sama. Jika sebuah program sepenuhnya menggunakan 5 core atau thread selama 5 detik, itu akan menjadi 25 detik waktu pengguna dan 5 detik waktu jam dinding.

Efisiensi Ruang: Mengacu pada kapasitas penyimpanan yang digunakan, seperti RAM

Waktu pengguna menarik sebagai proxy untuk energi yang dikonsumsi dengan menjalankan perhitungan. Dalam situasi di mana semua core sepenuhnya digunakan hampir sepanjang waktu, konsumsi energi CPU harus tetap relatif konstan. Dalam situasi ini, waktu pengguna yang dihabiskan oleh eksekusi kode mode pengguna yang terikat CPU harus kira-kira berbanding lurus dengan jumlah watt-jam (yaitu, energi) yang dikonsumsi oleh eksekusi kode tersebut.

Penghematan konsumsi energi, atau penggunaan sumber daya komputasi, harus menarik dari sudut pandang setiap operasi pembuktian yang memiliki skala yang cukup sehingga tagihan energi mereka (atau tagihan komputasi awan mereka) untuk pembuktian adalah biaya operasional yang cukup besar. Untuk alasan ini, waktu pengguna adalah metrik yang menarik. Biaya pembuktian yang lebih rendah memungkinkan penyedia layanan untuk meneruskan harga pembuktian yang lebih rendah kepada pelanggan yang sensitif terhadap biaya.

Kedua jenis efisiensi terkait dengan konsumsi energi dari proses pembuktian dan jumlah modal yang digunakan oleh proses pembuktian, yang berkaitan dengan biaya keuangan pembuktian. Untuk mengoperasionalkan definisi efisiensi untuk pengukuran, definisi harus dibuat relatif terhadap satu atau lebih program pengujian, satu atau lebih input pengujian untuk masing-masing program tersebut, dan satu atau lebih sistem pengujian.

iii. Keringkasan

  • Ukuran bukti yang dihasilkan dan kompleksitas verifikasi mereka

Keringkasan adalah gabungan dari tiga metrik berbeda, dengan kompleksitas verifikasi bukti dibagi lagi:

  • Ukuran Bukti: Ukuran fisik bukti, biasanya diukur dalam kilobyte
  • Waktu Verifikasi Bukti: Durasi yang diperlukan untuk memverifikasi bukti.
  • Ruang Verifikasi Bukti: Penggunaan memori selama verifikasi bukti

Verifikasi biasanya merupakan operasi inti tunggal, sehingga kecepatan dan efisiensi waktu inti umumnya setara dalam konteks ini. Seperti halnya kecepatan dan efisiensi, mengoperasionalkan definisi ringkas memerlukan penentuan set program pengujian, input pengujian, dan sistem pengujian.

Dengan setiap properti kinerja yang ditentukan, kami sekarang mengilustrasikan efek dimunitif dari mengoptimalkan satu properti di atas yang lain.

  • Kecepatan: Pembuatan bukti yang cepat menghasilkan ukuran bukti yang lebih besar, tetapi verifikasi bukti lambat. Lebih banyak sumber daya dikonsumsi untuk menghasilkan bukti, yang mengurangi efisiensi
  • Ringkas: Prover membutuhkan lebih banyak waktu untuk mengompres bukti. Tetapi verifikasi bukti cepat. Semakin ringkas buktinya, semakin tinggi overhead komputasi
  • Efisiensi: Meminimalkan penggunaan sumber daya mengurangi kecepatan pembuatan bukti dan keringkasan bukti

Secara umum, mengoptimalkan satu kualitas berarti tidak mengoptimalkan kualitas lain, dan oleh karena itu analisis multi-dimensi diperlukan untuk memilih solusi optimal berdasarkan kasus per kasus.

Cara yang baik untuk menimbang properti ini dalam evaluasi mungkin untuk menentukan tingkat yang dapat diterima untuk setiap properti dan kemudian menentukan properti mana yang paling penting. Properti yang paling penting harus dioptimalkan, tunduk pada mempertahankan tingkat yang cukup baik pada semua properti lainnya.

Di bawah ini kami merangkum setiap properti dan pertimbangan utamanya:


Properti evaluasi zkVMs

5. Apa Selanjutnya?

Dengan tabel di atas, dengan ini kami menyimpulkan artikel pertama dari seri kami. Pada artikel berikutnya, kita akan membangun diagram alir yang ditunjukkan di atas untuk menjelaskan proses aritmatika dan kriptografi umum di zkVMs.

Jika Anda merasa ini membantu, kunjungi situs web dan gitbook kami untuk mempelajari lebih lanjut tentang apa yang kami bangun di Lita.

Juga, ikuti kami di X dan Discord untuk tetap diperbarui sehingga Anda tidak ketinggalan sisa seri

Sanggahan:

  1. Artikel ini dicetak ulang dari [lita]. Teruskan Judul Asli 'Paradigma Pengetahuan Nol: Bagian 1 - Apa itu zk-VM?'. Semua hak cipta adalah milik penulis asli [Tim Lita]. Jika ada keberatan dengan cetak ulang ini, silakan hubungi tim Gate Learn , dan mereka akan segera menanganinya.
  2. Penafian Kewajiban: Pandangan dan pendapat yang diungkapkan dalam artikel ini semata-mata milik penulis dan bukan merupakan saran investasi.
  3. Terjemahan artikel ke bahasa lain dilakukan oleh tim Gate Learn. Kecuali disebutkan, menyalin, mendistribusikan, atau menjiplak artikel yang diterjemahkan dilarang.

Apa itu zk-VM?

Menengah6/3/2024, 1:43:55 PM
ZK adalah jembatan menuju adopsi kriptografi yang meluas. Baik di Web2 atau Web3, apa pun yang melibatkan Bukti Tanpa Pengetahuan (ZKP) akan menciptakan nilai yang sangat besar. Tim Lita telah menulis artikel sains dasar, memperkenalkan dasar-dasar ZK dan zkVM, memberikan gambaran umum tingkat tinggi tentang proses dalam zkVM, dan akhirnya mengusulkan serangkaian standar untuk mengevaluasi zkVM.

Teruskan Judul Asli 'Paradigma Pengetahuan Nol: Bagian 1 - Apa itu zk-VM?'

1. Tidak Ada Bukti Pengetahuan: Sebuah Primer

Apa itu zero knowledge proof (ZKP)?

Jika Anda tidak memiliki pengetahuan sebelumnya tentang zero knowledge proofs (ZKP), video dari Wired ini menjelaskan konsep pada lima tingkat kesulitan secara interaktif dengan contoh dan demonstrasi yang mudah dimengerti. Sangat dianjurkan.

Dalam istilah yang paling sederhana, ZKP memungkinkan satu pihak (prover) untuk membuktikan kepada pihak lain (verifikator) bahwa mereka mengetahui sesuatu tanpa mengungkapkan apa itu atau informasi tambahan apa pun. Lebih khusus lagi, ZKP membuktikan pengetahuan tentang sepotong data, atau pengetahuan tentang hasil perhitungan, tanpa mengungkapkan data atau input. Proses menciptakan bukti pengetahuan nol melibatkan serangkaian model matematika untuk mengubah hasil perhitungan menjadi sepotong informasi yang tidak berarti yang membuktikan keberhasilan eksekusi kode, yang nantinya dapat diverifikasi.

Dalam beberapa kasus, dibutuhkan lebih sedikit pekerjaan untuk memverifikasi bukti, yang dibangun setelah beberapa putaran konversi aljabar dan kriptografi, daripada yang diperlukan untuk menjalankan perhitungan. Kombinasi unik antara keamanan dan skalabilitas inilah yang membuat kriptografi tanpa pengetahuan menjadi alat yang hebat.

zkSNARKs: Nol Pengetahuan Ringkas Argumen Pengetahuan Non-Interaktif

  • Bergantung pada proses penyiapan awal (tepercaya atau tidak tepercaya) untuk menetapkan parameter verifikasi
  • Membutuhkan setidaknya satu interaksi antara prover dan verifier
  • Ukuran bukti kecil dan mudah diverifikasi
  • Bukti berbasis NARK digunakan oleh rollup seperti zkSync, Scroll, dan Linea

zkSTARKs: Pengetahuan Nol Argumen Pengetahuan Transparan yang Dapat Diskalakan

  • Tidak diperlukan penyiapan tepercaya
  • Menawarkan transparansi tinggi dengan menggunakan keacakan yang dapat diverifikasi secara publik untuk menciptakan sistem yang dapat diverifikasi tanpa kepercayaan, yaitu menghasilkan parameter acak yang terbukti untuk membuktikan dan memverifikasi
  • Sangat skalabel karena mereka dapat menghasilkan dan memverifikasi bukti dengan cepat (tidak selalu), bahkan ketika ukuran saksi yang mendasarinya (data) besar
  • Tidak memerlukan interaksi antara prover dan verifier
  • Datang dengan biaya bahwa STARK menghasilkan bukti yang lebih besar, yang bisa lebih sulit untuk diverifikasi daripada SNARKs
  • Bukti lebih sulit untuk diverifikasi daripada beberapa bukti zkSNARK tetapi tidak sesulit beberapa bukti lain untuk diverifikasi
  • STARKs digunakan oleh Starknet, serta zkVM seperti Lita, Risc Zero, dan Succinct Labs

(Catatan: Jembatan Succinct's menggunakan SNARKs tetapi SP1 adalah protokol berbasis STARK)

Perlu dicatat bahwa semua STARK adalah SNARK, tetapi tidak semua SNARK adalah STARK.

Untuk pemahaman umum yang lebih baik tentang SNARKs dan STARKs, kami sarankan untuk membaca seri artikel @krzhang/privacy-in-cryptocurrencies-zero-knowledge-and-zk-snarks-1-2-68ce1838fd9c">artikel yang ditulis oleh Yan Zhang dan Yi Sun dari Axiom, dan kumpulan artikel ini di github Ventali Tan.

2. Apa itu zkVM?

Mesin virtual (VM) adalah program yang menjalankan program. Dalam konteksnya, zkVM adalah komputer virtual yang diimplementasikan sebagai sistem untuk menghasilkan bukti pengetahuan nol, atau sirkuit universal, atau alat, untuk menghasilkan ZKP untuk program atau perhitungan apa pun.

zkVM menghilangkan kebutuhan untuk mempelajari matematika dan kriptografi yang rumit untuk merancang dan mengkodekan ZK, dan memungkinkan pengembang mana pun untuk menjalankan program yang ditulis dalam bahasa pilihan mereka dan menghasilkan ZKP, membuatnya jauh lebih mudah untuk diintegrasikan dan berinteraksi tanpa pengetahuan. Secara garis besar, sebagian besar referensi ke zkVM secara implisit mencakup toolchains kompiler dan sistem bukti yang ditambahkan ke mesin virtual yang menjalankan program, dan bukan hanya mesin virtual itu sendiri. Di bawah ini, kami merangkum komponen utama zkVM dan fungsinya:

Komponen utama zkVM

Desain dan implementasi setiap komponen diatur oleh pilihan bukti (SNARKs atau STARKs) dan arsitektur set instruksi (ISA) dari zkVM. Secara tradisional, ISA menentukan apa yang CPU mampu (tipe data, register, memori dll) dan urutan tindakan yang dilakukan CPU ketika menjalankan program. Dalam konteks, ISA menentukan kode mesin yang dapat ditafsirkan dan dieksekusi oleh VM. Memilih ISA dapat menghasilkan perbedaan radikal dalam aksesibilitas dan kegunaan zkVM, serta kecepatan dan efisiensi proses pembangkitan bukti, dan mendukung pembangunan zkVM apa pun.

Di bawah ini adalah beberapa contoh zkVM dan komponennya untuk referensi Anda.


zkVM dan komponennya

Untuk saat ini, kami akan fokus pada interaksi antara masing-masing komponen pada tingkat tinggi untuk menyediakan kerangka kerja untuk memahami proses aljabar dan kriptografi serta pengorbanan desain zkVM di artikel selanjutnya.

3. Alur Proses zkVM yang Diabstraksi

Diagram berikut adalah diagram alur proses abstrak dan umum dari zkVM, dibagi dan dikategorikan antara format (input / output) suatu program saat bergerak melalui komponen zkVM. Kami akan memeriksa setiap proses secara mendalam di artikel berikutnya.


Alur umum untuk zkVM

Alur proses zkVM umumnya sebagai berikut:

  • Tahap Kompiler
  1. Kompiler pertama-tama mengkompilasi program yang ditulis dalam bahasa konvensional (C, C ++, Rust, Solidity) ke dalam kode mesin. Format kode mesin ditentukan oleh pilihan ISA.
  • Tahap VM
  1. VM mengeksekusi kode mesin dan menghasilkan jejak eksekusi, yang merupakan serangkaian langkah dari program yang mendasarinya. Format ini telah ditentukan sebelumnya oleh pilihan aritmetisasi serta serangkaian kendala polinomial. Skema aritmetisasi umum termasuk R1CS seperti pada Groth16, aritmetisasi PLONKish seperti pada halo2, dan AIR seperti pada plonky2 dan plonky3.
  • Tahap Prover
  1. Prover menerima jejak dan mewakilinya sebagai satu set polinomial yang terikat oleh serangkaian kendala, pada dasarnya menerjemahkan perhitungan ke dalam aljabar dengan memetakan fakta secara matematis.

  2. Prover berkomitmen untuk polinomial ini menggunakan Polynomial Commitment Scheme (PCS). Skema komitmen adalah protokol yang memungkinkan prover untuk membuat sidik jari dari beberapa data X, yang disebut komitmen untuk X, dan kemudian membuktikan fakta tentang X tanpa mengungkapkan X, menggunakan komitmen untuk X. PCS adalah sidik jari; versi ringkas "pra-diproses" dari batasan pada perhitungan. Hal ini memungkinkan prover untuk membuktikan fakta tentang perhitungan, sekarang dinyatakan dalam persamaan polinomial, menggunakan nilai acak yang diusulkan oleh verifier dalam langkah-langkah berikut.

  3. Prover menjalankan Polynomial Interactive Oracle Proof (PIOP) untuk menunjukkan bahwa polinomial yang berkomitmen mewakili jejak eksekusi yang memenuhi batasan yang diberikan. PIOP adalah protokol bukti interaktif yang terdiri dari serangkaian putaran di mana prover mengirimkan komitmen ke polinomial, verifier merespons dengan nilai bidang acak, dan prover memberikan evaluasi polinomial pada nilai acak ini, mirip dengan "menyelesaikan" persamaan polinomial menggunakan nilai acak untuk membujuk verifikator secara probabilistik.

  4. Menerapkan heuristik Fiat-Shamir; prover menjalankan PIOP dalam mode non-interaktif, di mana perilaku verifikator terbatas pada pengiriman poin tantangan pseudo-random. Dalam kriptografi, heuristik Fiat-Shamir mengubah bukti pengetahuan interaktif menjadi tanda tangan digital untuk verifikasi. Langkah ini mengenkripsi bukti dan menjadikannya nol pengetahuan.

  5. Prover harus meyakinkan verifikator bahwa evaluasi polinomial yang diklaim benar, sehubungan dengan komitmen polinomial yang dikirim ke verifikator. Untuk melakukan ini, prover menghasilkan bukti "evaluasi" atau "pembukaan", yang disediakan oleh skema komitmen polinomial (sidik jari).

  • Tahap Verifier
  1. Verifikator memeriksa bukti dengan mengikuti protokol verifikasi sistem bukti, baik menggunakan batasan atau komitmen. Verifikator menerima atau menolak hasil sesuai dengan validitas bukti.

Singkatnya, bukti zkVM membuktikan, untuk program tertentu, hasil yang diberikan, dan kondisi awal yang diberikan, bahwa ada beberapa input yang menyebabkan program menghasilkan hasil yang diberikan ketika dijalankan dari kondisi awal yang diberikan. Kita dapat menggabungkan pernyataan ini dengan alur proses untuk sampai pada deskripsi zkVM berikut.

Bukti zkVM membuktikan, untuk program VM tertentu dan output yang diberikan, bahwa ada beberapa input yang menyebabkan program yang diberikan menghasilkan output yang diberikan ketika dijalankan pada VM.

4. Mengevaluasi zkVM

Apa kriteria yang dengannya kita harus mengevaluasi zkVMs? Dengan kata lain, kapan kita harus mengatakan bahwa satu zkVM lebih baik dari yang lain? Sejujurnya, jawabannya tergantung pada kasus penggunaan.

Riset pasar Lita menunjukkan bahwa untuk sebagian besar kasus penggunaan komersial, sifat yang paling penting, dari kecepatan, efisiensi, dan keringkasan, adalah kecepatan atau efisiensi waktu inti, tergantung pada aplikasinya. Beberapa aplikasi sensitif terhadap harga dan ingin mengoptimalkan konsumsi energi yang rendah dan penggunaan modal yang rendah dalam membuktikan; Untuk ini, efisiensi waktu inti mungkin merupakan metrik yang paling penting untuk dioptimalkan. Aplikasi lain, terutama aplikasi terkait keuangan atau perdagangan, sensitif terhadap latensi dan ingin mengoptimalkan kecepatan.

Sebagian besar perbandingan kinerja yang dipublikasikan berfokus secara eksklusif pada kecepatan, yang penting tetapi bukan pengukuran kinerja yang holistik. Ada juga beberapa properti penting yang mengukur keandalan zkVM; Sebagian besar tidak memenuhi standar siap produksi, bahkan untuk pemain lama yang memimpin pasar.

Dengan ini kami mengusulkan bahwa zkVM harus dievaluasi berdasarkan kriteria berikut, dipisahkan menjadi dua subset:


Kriteria utama untuk mengevaluasi zk-VM

Baseline: Mengukur keandalan zkVM

  • Kebenaran
  • Keamanan
  • Asumsi Kepercayaan

Performa: Mengukur kemampuan zkVM

  • Efisiensi
  • Kecepatan
  • Keringkasan

4.1 Baseline: Asumsi Kebenaran, Keamanan, dan Kepercayaan

Saat mengevaluasi zkVM untuk aplikasi kritis misi, kebenaran dan keamanan harus dianggap sebagai garis dasar. Perlu ada alasan yang cukup untuk yakin tentang kebenaran, dan keamanan klaim yang cukup kuat. Juga, asumsi kepercayaan harus cukup lemah untuk aplikasi.

Tanpa properti ini, zkVM berpotensi lebih buruk daripada tidak berguna untuk aplikasi, karena mungkin gagal melakukan seperti yang ditentukan dan mengekspos pengguna untuk hacking dan eksploitasi.

i. Ketepatan

  • VM harus menjalankan perhitungan sebagaimana dimaksud
  • Sistem bukti harus memenuhi properti keamanan yang diklaim

Ketepatan terdiri dari tiga sifat:

  • Kesehatan: Sistem pembuktian itu benar dan oleh karena itu semua yang dibuktikannya benar. Verifikator menolak bukti pernyataan palsu; Ini hanya menerima hasil perhitungan jika input benar-benar menghasilkan hasil itu.
  • Kelengkapan: Sistem pembuktian lengkap dan dapat membuktikan semua pernyataan yang benar. Jika prover mengklaim dapat membuktikan hasil perhitungan, ia harus dapat menghasilkan bukti yang diterima oleh verifikator.
  • Pengetahuan Nol: Memiliki bukti tidak mengungkapkan lebih banyak tentang input komputasi daripada mengetahui hasilnya sendiri

Anda dapat memiliki kelengkapan tanpa kesehatan; Jika sistem pembuktian membuktikan segalanya termasuk kepalsuan, jelas itu lengkap tetapi tidak terdengar. Sebaliknya, Anda dapat memiliki kesehatan tanpa kelengkapan; Jika sistem bukti membuktikan sebuah program ada tetapi tidak dapat membuktikan perhitungan, jelas itu adalah suara (setelah semua, itu tidak pernah membuktikan kepalsuan), tetapi tidak lengkap.

ii. Keamanan

  • Berkaitan dengan toleransi kesehatan, kelengkapan, dan nol pengetahuan

Dalam praktiknya, ketiga sifat kebenaran memiliki toleransi bukan nol. Ini menyiratkan semua bukti adalah probabilitas statistik kebenaran, dan bukan kepastian mutlak. Toleransi mengacu pada probabilitas maksimum yang dapat ditoleransi bahwa satu properti akan gagal. Toleransi nol tentu saja ideal, tetapi zkVM tidak mencapai toleransi nol pada semua properti ini dalam praktiknya. Kesehatan dan kelengkapan yang sempurna tampaknya tidak sesuai dengan keringkasan, dan tidak ada metode yang diketahui untuk mencapai pengetahuan nol sempurna. Cara umum untuk mengukur keamanan adalah dalam bit keamanan, di mana toleransi 1 / (2 ^ n) disebut sebagai n bit keamanan. Lebih banyak bit keamanan lebih baik.

Jika zkVM sepenuhnya benar, itu tidak berarti bahwa itu dapat diandalkan. Kebenaran hanya menyiratkan bahwa zkVM memenuhi properti keamanannya hingga toleransi yang diklaim. Ini tidak menyiratkan bahwa toleransi yang diklaim cukup rendah untuk siap dipasarkan. Juga, jika zkVM cukup aman, itu tidak berarti bahwa itu benar; Keamanan mengacu pada toleransi yang diklaim, bukan toleransi yang benar-benar dicapai. Hanya ketika zkVM benar-benar benar dan cukup aman, dapat dikatakan bahwa zkVM dapat diandalkan hingga toleransi yang diklaim.

iii. Asumsi Kepercayaan

  • Asumsi tentang kejujuran prover dan verifier untuk mencapai kesimpulan zkVM berfungsi dengan andal

Ketika zkVM memiliki asumsi kepercayaan, ini biasanya mengambil bentuk proses penyiapan tepercaya. Proses penyiapan untuk sistem bukti ZK berjalan sekali, sebelum bukti pertama dihasilkan menggunakan sistem pembuktian, untuk menghasilkan beberapa informasi yang disebut "data pengaturan." Dalam proses penyiapan tepercaya, satu atau lebih individu menghasilkan beberapa keacakan yang dimasukkan ke dalam data penyiapan, dan perlu diasumsikan bahwa setidaknya satu dari individu tersebut menghapus keacakan yang mereka masukkan ke dalam data penyiapan.

Ada dua model asumsi kepercayaan umum dalam praktiknya.

Asumsi kepercayaan mayoritas yang jujur menyatakan bahwa dari beberapa set individu N, lebih dari N / 2 dari individu-individu tersebut menunjukkan integritas dalam beberapa interaksi tertentu dengan sistem, yang biasa digunakan oleh blockchain

Asumsi kepercayaan "1 dari N" menyatakan bahwa dari beberapa set individu N, setidaknya satu dari individu tersebut menunjukkan integritas dalam beberapa interaksi tertentu dengan sistem, yang umumnya digunakan oleh alat dan aplikasi berbasis MPC.

Secara umum disepakati bahwa semua hal lain dianggap sama, zkVM tanpa asumsi kepercayaan lebih aman daripada zkVM yang membutuhkan asumsi kepercayaan.

4.2 Trilema zkVM: Menyeimbangkan Kecepatan, Efisiensi, dan Keringkasan, dalam zkVMs


Trilema zkVM: kecepatan, efisiensi, dan keringkasan;

Kecepatan, efisiensi, dan keringkasan semuanya adalah sifat skala geser. Semua faktor ini berkontribusi pada biaya pengguna akhir zkVM. Bagaimana mereka harus ditimbang dalam evaluasi tergantung pada aplikasi. Seringkali, solusi tercepat bukanlah yang paling efisien atau paling ringkas; Solusi yang paling ringkas bukanlah yang tercepat atau paling efisien; dan seterusnya dan sebagainya. Pertama-tama mari kita definisikan setiap properti sebelum menjelaskan hubungannya

i. Kecepatan

  • Seberapa cepat prover dapat menghasilkan bukti
  • Diukur dalam waktu jam dinding, yaitu waktu yang berlalu dari awal hingga akhir perhitungan

Kecepatan harus didefinisikan dan diukur relatif terhadap program pengujian, input, dan sistem tertentu untuk memastikannya dapat dinilai secara kuantitatif. Metrik ini sangat penting untuk aplikasi sensitif latensi di mana ketersediaan bukti yang cepat sangat penting, tetapi dilengkapi dengan overhead yang lebih tinggi dan ukuran bukti yang lebih besar

ii. Efisiensi

  • Sumber daya yang dikonsumsi oleh pepatah, dengan lebih sedikit yang lebih disukai
  • Dapat didekati dengan waktu pengguna, yang merupakan jumlah waktu komputer yang dikeluarkan oleh kode program

Prover mengkonsumsi dua jenis sumber daya: waktu inti dan ruang. Oleh karena itu, efisiensi dapat dibagi lagi menjadi efisiensi waktu inti dan efisiensi ruang.

Efisiensi Core-Time: Jumlah rata-rata waktu prover beroperasi di semua core dikalikan dengan jumlah core yang menjalankan prover. Untuk prover single-core, konsumsi core-time dan kecepatannya adalah hal yang sama. Untuk prover berkemampuan multi-core yang berjalan dalam mode multi-core pada sistem multi-core, konsumsi dan kecepatan core-time bukanlah hal yang sama. Jika sebuah program sepenuhnya menggunakan 5 core atau thread selama 5 detik, itu akan menjadi 25 detik waktu pengguna dan 5 detik waktu jam dinding.

Efisiensi Ruang: Mengacu pada kapasitas penyimpanan yang digunakan, seperti RAM

Waktu pengguna menarik sebagai proxy untuk energi yang dikonsumsi dengan menjalankan perhitungan. Dalam situasi di mana semua core sepenuhnya digunakan hampir sepanjang waktu, konsumsi energi CPU harus tetap relatif konstan. Dalam situasi ini, waktu pengguna yang dihabiskan oleh eksekusi kode mode pengguna yang terikat CPU harus kira-kira berbanding lurus dengan jumlah watt-jam (yaitu, energi) yang dikonsumsi oleh eksekusi kode tersebut.

Penghematan konsumsi energi, atau penggunaan sumber daya komputasi, harus menarik dari sudut pandang setiap operasi pembuktian yang memiliki skala yang cukup sehingga tagihan energi mereka (atau tagihan komputasi awan mereka) untuk pembuktian adalah biaya operasional yang cukup besar. Untuk alasan ini, waktu pengguna adalah metrik yang menarik. Biaya pembuktian yang lebih rendah memungkinkan penyedia layanan untuk meneruskan harga pembuktian yang lebih rendah kepada pelanggan yang sensitif terhadap biaya.

Kedua jenis efisiensi terkait dengan konsumsi energi dari proses pembuktian dan jumlah modal yang digunakan oleh proses pembuktian, yang berkaitan dengan biaya keuangan pembuktian. Untuk mengoperasionalkan definisi efisiensi untuk pengukuran, definisi harus dibuat relatif terhadap satu atau lebih program pengujian, satu atau lebih input pengujian untuk masing-masing program tersebut, dan satu atau lebih sistem pengujian.

iii. Keringkasan

  • Ukuran bukti yang dihasilkan dan kompleksitas verifikasi mereka

Keringkasan adalah gabungan dari tiga metrik berbeda, dengan kompleksitas verifikasi bukti dibagi lagi:

  • Ukuran Bukti: Ukuran fisik bukti, biasanya diukur dalam kilobyte
  • Waktu Verifikasi Bukti: Durasi yang diperlukan untuk memverifikasi bukti.
  • Ruang Verifikasi Bukti: Penggunaan memori selama verifikasi bukti

Verifikasi biasanya merupakan operasi inti tunggal, sehingga kecepatan dan efisiensi waktu inti umumnya setara dalam konteks ini. Seperti halnya kecepatan dan efisiensi, mengoperasionalkan definisi ringkas memerlukan penentuan set program pengujian, input pengujian, dan sistem pengujian.

Dengan setiap properti kinerja yang ditentukan, kami sekarang mengilustrasikan efek dimunitif dari mengoptimalkan satu properti di atas yang lain.

  • Kecepatan: Pembuatan bukti yang cepat menghasilkan ukuran bukti yang lebih besar, tetapi verifikasi bukti lambat. Lebih banyak sumber daya dikonsumsi untuk menghasilkan bukti, yang mengurangi efisiensi
  • Ringkas: Prover membutuhkan lebih banyak waktu untuk mengompres bukti. Tetapi verifikasi bukti cepat. Semakin ringkas buktinya, semakin tinggi overhead komputasi
  • Efisiensi: Meminimalkan penggunaan sumber daya mengurangi kecepatan pembuatan bukti dan keringkasan bukti

Secara umum, mengoptimalkan satu kualitas berarti tidak mengoptimalkan kualitas lain, dan oleh karena itu analisis multi-dimensi diperlukan untuk memilih solusi optimal berdasarkan kasus per kasus.

Cara yang baik untuk menimbang properti ini dalam evaluasi mungkin untuk menentukan tingkat yang dapat diterima untuk setiap properti dan kemudian menentukan properti mana yang paling penting. Properti yang paling penting harus dioptimalkan, tunduk pada mempertahankan tingkat yang cukup baik pada semua properti lainnya.

Di bawah ini kami merangkum setiap properti dan pertimbangan utamanya:


Properti evaluasi zkVMs

5. Apa Selanjutnya?

Dengan tabel di atas, dengan ini kami menyimpulkan artikel pertama dari seri kami. Pada artikel berikutnya, kita akan membangun diagram alir yang ditunjukkan di atas untuk menjelaskan proses aritmatika dan kriptografi umum di zkVMs.

Jika Anda merasa ini membantu, kunjungi situs web dan gitbook kami untuk mempelajari lebih lanjut tentang apa yang kami bangun di Lita.

Juga, ikuti kami di X dan Discord untuk tetap diperbarui sehingga Anda tidak ketinggalan sisa seri

Sanggahan:

  1. Artikel ini dicetak ulang dari [lita]. Teruskan Judul Asli 'Paradigma Pengetahuan Nol: Bagian 1 - Apa itu zk-VM?'. Semua hak cipta adalah milik penulis asli [Tim Lita]. Jika ada keberatan dengan cetak ulang ini, silakan hubungi tim Gate Learn , dan mereka akan segera menanganinya.
  2. Penafian Kewajiban: Pandangan dan pendapat yang diungkapkan dalam artikel ini semata-mata milik penulis dan bukan merupakan saran investasi.
  3. Terjemahan artikel ke bahasa lain dilakukan oleh tim Gate Learn. Kecuali disebutkan, menyalin, mendistribusikan, atau menjiplak artikel yang diterjemahkan dilarang.
Empieza ahora
¡Registrarse y recibe un bono de
$100
!