Bagaimana zk-SNARKs mewujudkan pemisahan logika transaksi dompet dan aset

Penulis: @Toni Wahrstätter Terjemahan: DeBox Institute

Kata Pengantar

Vitalik merekomendasikan penggunaan zk-SNARKs untuk memisahkan akun logika perdagangan dari akun yang menyimpan aset. Hal ini meningkatkan privasi, pengalaman pengguna, dan pemulihan sosial sekali klik. Peneliti Ethereum Toni Wahrstätter memberikan analisis mendetail tentang prototipe dompet ini, mencakup alur kerja dan keuntungannya.

Terima kasih banyak kepada Matt atas diskusi hebat mengenai topik ini dan atas pengembangan alat ini untuk mengurai setiap kontrak dan memasukkannya ke dalam pohon Merkle yang jarang yang menyederhanakan pembuatan prototipe dengan menghilangkan kebutuhan akan bukti zk pada pohon patricia. Juga, terima kasih kepada Vitalik atas masukannya yang luar biasa.

Mengelola banyak akun dapat menjadi tantangan karena berbagai alasan, termasuk masalah pemulihan sosial, privasi, L2, dan pengalaman pengguna secara keseluruhan. Menggunakan alamat tersembunyi membuat segalanya menjadi lebih rumit karena setiap interaksi memerlukan akun baru. Vitalik merekomendasikan penggunaan zk-SNARKs untuk memisahkan akun logika perdagangan dari akun yang menyimpan aset. Hal ini meningkatkan privasi, pengalaman pengguna, dan pemulihan sosial sekali klik.

Untuk yang berikut ini, saya sarankan untuk membaca postingan "Tiga Transformasi" Vitalik terlebih dahulu untuk mengetahui latar belakangnya.

Singkatnya, apa yang ingin kami capai adalah:

**Pemulihan sosial terpadu tanpa mengorbankan privasi. **

1. Cara tradisional

Penerapan yang sederhana namun membahayakan privasi terlihat seperti ini:

Pemulihan sosial terpadu: Bagaimana zk-SNARKs mewujudkan pemisahan logika transaksi dompet dan aset?

  1. Pengguna memberikan tanda tangan dan beberapa maksud/perintah kepada akun penyimpanan aset.
  2. Rekening penyimpanan aset meneruskan tanda tangan ke rekening penyimpanan logis.
  3. Akun penyimpanan logis memperoleh kunci publik dari tanda tangan dan membandingkannya dengan kunci publik yang disimpan.
  4. Jika verifikasi berhasil, akun logis akan memberitahukan akun penyimpanan aset untuk melanjutkan operasi.
  5. Akun penyimpanan aset menjalankan perintah pengguna.

Kerugiannya adalah hal ini secara publik menghubungkan akun logis dan akun penyimpanan aset, sehingga membahayakan privasi.

2. Gunakan ZK-SNARK

Dengan menggunakan zk-SNARKs, pengguna dapat membuktikan bahwa mereka berwenang untuk membelanjakan uang tanpa mengungkapkan hubungan antara akun penyimpanan logis dan akun penyimpanan aset.

Pemulihan sosial terpadu: Bagaimana zk-SNARKs mewujudkan pemisahan logika transaksi dompet dan aset?

Alur kerjanya adalah sebagai berikut:

  1. Pengguna membuat pohon Merkle secara lokal dan mengidentifikasi daun yang berisi kontraknya.

1.1 Pohon Merkle pada dasarnya berisi nilai slot0 dan slot1 dari setiap kontrak yang ada, diurutkan berdasarkan tanggal atau nama.

1.2 Setiap pengguna dapat membangun pohon Merkle secara lokal berdasarkan status terkini.

  1. Pengguna membuat bukti zk untuk membuktikan bahwa dia mengetahui rahasia di akun penyimpanan logis. Buktikan secara detail nanti.

  2. Pengguna mengirimkan bukti zk ke akun penyimpanan aset.

  3. Sertifikat verifikasi akun penyimpanan aset, yang mengonfirmasi hal-hal berikut:

4.1 Pengguna mengetahui di mana logikanya.

4.2 Pengguna mengetahui nilai rahasia yang di-hash dan dipetakan ke nilai yang disimpan di akun penyimpanan logis.

4.3 Pengguna dapat merekonstruksi status akun Akar pohon Merkle yang dipelihara dalam rantai kanonik (misalnya, sudah dikompilasi sebelumnya)

4.4 Gunakan nomor acak yang benar (digunakan untuk mengganti kunci di rekening penyimpanan logis).

Pada dasarnya, pengguna dapat mengatakan, "Saya memiliki izin yang dapat dibuktikan dari akun penyimpanan logis untuk melakukan tindakan ini, dan saya mengetahui lokasi akun logis tersebut."

keuntungan

  • Pengalaman pengguna: Satu kunci pribadi atau satu pengaturan multi-tanda tangan dapat mengontrol banyak akun, meskipun mereka berada di L2 yang berbeda.
  • Pemulihan: Akun dapat dipulihkan dengan lebih mudah dengan satu pembaruan kontrak.
  • Privasi: Tidak ada tautan publik antar akun.
  • Kompatibilitas: Ini membantu mempopulerkan dompet Abstraksi Akun (AA) dan fitur lainnya.

Selain itu, dengan menambahkan kontrak (agregator) lain antara logika dan kontrak kepemilikan aset, beberapa bukti dari akun penyimpanan aset yang berbeda dapat diberikan dalam satu transaksi, sehingga akun tersebut diperlakukan hampir seperti UTXO. Agregator akan dapat memperoleh beberapa sertifikat zk dan meneruskannya ke akun penyimpanan aset masing-masing untuk verifikasi. Tentu saja, agregator semacam itu dapat membuat tautan – termasuk privasi – antara masing-masing akun penyimpanan aset.

Perlu dicatat bahwa ini belum tentu merupakan pilihan antara menggunakan SNARK (dan karena itu mengandalkan keamanannya) dan tidak menggunakan SNARK sama sekali (sehingga kehilangan properti privasi yang baik). Komprominya bisa dengan menggunakan bukti SNARK untuk membuka jendela waktu dalam kontrak penyimpanan logis, diikuti dengan penundaan singkat, setelah itu pemilik kontrak penyimpanan logis dapat mengubah nilai slot0, daripada memerlukan bukti SNARK untuk membelanjakan dan sehingga mengubah logika konsumsi. Pemilik kontrak saat ini dapat menggunakan penundaan sebelum jendela waktu terbuka untuk mencegah pembaruan kredensial.

detail teknis

Pengaturan zk-SNARK mencakup elemen pribadi:

  • Kunci digunakan untuk verifikasi.
  • Alamat rekening penyimpanan logis adalah alamat yang ditunjuk oleh rekening penyimpanan aset.
  • Cabang Merkle untuk mengidentifikasi nilai-nilai negara tertentu.
  • Nonce yang memungkinkan rotasi kunci sambil membatalkan validasi kunci lama. Elemen privat seperti logika teks biasa yang menyimpan alamat kontrak dan rahasia tidak dipublikasikan, namun digunakan untuk menghubungkan akun penyimpanan logika dan akun penyimpanan aset secara pribadi. Dengan menghasilkan bukti seluruh negara bagian, otoritas pusat tidak perlu membangun pohon Merkle untuk menyerahkan bukti.

1. Rekening penyimpanan logis

Prototipe untuk rekening penyimpanan logis mungkin terlihat seperti ini:

soliditas pragma >=0.7.0 <0.9.0;

kontrak LogicHoldingAccount Dapat Dimiliki { uint256 public slot0 = 0x1234; // rahasia hash uint256 public nonce = 0; // melacak perubahan penting alamat pemilik publik;

fungsi updateOwner(uint256 newValue) public onlyOwner { nonce += 1; slot0 = Nilai baru;

  • slot0: variabel publik yang awalnya menyimpan nilai hash. Hanya pemilik yang mengetahui preimage yang di-hash.
  • nonce: Penghitung yang melacak jumlah pembaruan informasi pemilik. Hal ini memastikan bahwa kunci lama menjadi tidak valid.
  • updateOwner(uint256 newValue): Fungsi yang memperbarui nilai dan menambahkan nomor acak.

Kontrak ini melacak logika pengeluaran pemilik saat ini (slot0) dan mengizinkan pembaruan melalui fungsi updateOwner.

2. Rekening induk

soliditas pragma >=0.7.0 <0.9.0;

kontrak AssetHoldingAccount { uint256 public logicHoldingAccountHash = 1234...;

// Ukuran bidang skalar, Ukuran bidang dasar, Data Kunci Verifikasi, dll. // ...

fungsi verifikasiBukti( uint [2] data panggilan _pA, uint [2] [2] data panggilan _pB, uint [2] data panggilan _pC, uint [2] calldata _pubSignals) tampilan publik kembali (bool val) { // Kode rakitan Snarkjs untuk verifikasi bukti... // ... }

// _pubSinyal [0] - akar pohon contract-slot0||nonce Merkle // _pubSignals [1] - fungsi alamat pemegang logika hased ute (alamat dibayarkan ke, jumlah uint256, uint [2] data panggilan _pA, uint [2] [2] data panggilan _pB, uint [2] data panggilan _pC, uint [2] calldata _pubSignals) public { contractRootPrecompile.getRoot(block.number) uint256 ditentukanLogicHolder = _pubSignals [1] ; memerlukan(specifiedLogicHolder == logicHoldingAccountHash, "Tidak diizinkan");

bool validProof = verifikasiProof(_pA, _pB, _pC, _pubSignals) == benar; if (validProof) { (bool sukses,) = to.call{value:amount}(""); membutuhkan (sukses); } }

menerima() hutang eksternal {

Akun penyimpanan aset menyimpan aset seperti ETH dan memungkinkan pengguna mengirimkan bukti penarikan. Dengan memverifikasi bahwa ditentukanLogicHolder cocok dengan logicHoldingAccountHash, pemilik dapat memastikan bahwa kontrak penyimpanan aset hanya menerima bukti dari kontrak penyimpanan logis yang sah, bukan kontrak sewenang-wenang.

Rahasia yang diberikan sebagai sinyal pribadi ketika membuat bukti memastikan bahwa hanya pemilik akun yang berisi logika pengeluaran yang dapat mengakses dana dari akun penyimpanan aset.

3. Sirkuit

Rangkaian berikut dikembangkan menggunakan circom, kode lengkapnya dapat dilihat di sini.

pragma sirkum 2.0.2;

sertakan "./modules/merkleTree.circom"; sertakan "./modules/commitmentHasher.circom";

templat Utama(level) { akar masukan sinyal; logika masukan sinyalHoldingAddressHash; logika input sinyalHoldingAddress; rahasia masukan sinyal; masukan sinyal nonce; jalur masukan sinyalElemen [levels] ; jalur masukan sinyalIndeks [levels] ; komponen secretHasher = SecretHasher(); rahasiaHasher.rahasia <== rahasia; komponen hasher = CommitmentHasher(); hasher.logicHoldingAddress <== logikaHoldingAddress; hasher.rahasia <== secretHasher.hashedSecret; hasher.nonce <== nonce; hasher.logicHoldingAddressHash === logikaHoldingAddressHash; pohon komponen = MerkleTreeChecker(level); pohon.leaf <== hasher.komitmen; pohon.root <== akar; untuk ( i = 0; i < level; i++) { tree.pathElements [i] <== elemen jalur [i] ; tree.pathIndices [i] <== pathIndices [i] ;

komponen main {public [root,logicHoldingAddressHash]} = Main(N);

Sirkuit ini memiliki total 7 sinyal, 2 di antaranya bersifat publik, yaitu akar pohon Merkle dan alamat hash dari akun penyimpanan logis (yang harus di-hash sebelum dikodekan ke dalam kontrak kepemilikan aset untuk mencegah pengamat menggabungkan akun) kelas) berdasarkan logika yang sama dengan akun pemegang).

Kesimpulannya

Di dunia di mana pengguna harus mengelola banyak akun, kebutuhan akan fungsi pemulihan sosial terpadu menjadi semakin penting. Zk-SNARK dapat digunakan dalam dompet yang menerapkan pemisahan logika/aset, memungkinkan pengguna menggunakan "logika" Akun A untuk berbelanja dari Akun B tanpa membuat tautan di antara keduanya. Sebagai langkah pertama, bukti SNARK dapat digunakan untuk tindakan yang risikonya lebih kecil dibandingkan pengeluaran aset. Misalnya, titik awal yang baik adalah mengizinkan pengguna memulai "permintaan penarikan". Jika pemilik kontrak penyimpanan logika tidak mengajukan keberatan, pengguna dapat menyelesaikan permintaan setelah jangka waktu tertentu.

Dengan cara ini, pemilik kontrak kepemilikan logis masih dapat melakukan intervensi, meskipun dengan cara yang melanggar privasi, jika terjadi sesuatu yang tidak terduga.

Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • Komentar
  • Bagikan
Komentar
0/400
Tidak ada komentar
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)