Pengantar Ring
Setiap transaksi di Solana dapat dibaca secara publik: alamat, saldo, dan riwayat transfer dapat dilihat oleh siapa saja. Ring mengenkripsi saldo onchain dan secara default selalu bersifat nonkustodial:- Dalam Ring rahasia, aset dan jumlah bersifat privat, sedangkan pengirim dan penerima tetap terlihat.
- Dalam Ring anonim, aset, jumlah, pengirim, dan penerima bersifat privat.
- Default Ring tidak memerlukan izin dan bersifat rahasia. Ring ini mengenkripsi aset dan jumlah, dapat digunakan oleh siapa saja, serta tidak memiliki kontrol kebijakan khusus.
- Custom Ring adalah program Solana yang membuat privasi di Solana dapat diprogram, serupa dengan Token-2022. Custom Ring dapat bersifat rahasia atau anonim dengan aturan kebijakan, pelaporan, dan visibilitas khusus.
Untuk sebagian besar aplikasi, kami menyarankan Default Ring yang tidak memerlukan izin dan bersifat rahasia.
Untuk kebijakan khusus dan kontrol kepatuhan, hubungi kami guna mulai menggunakan Custom Ring.
Custom Ring Dapat Diprogram
Custom Ring adalah program Solana sederhana yang membuat privasi dapat diprogram, dengan fitur yang serupa dengan Token-2022. Custom Ring dapat menetapkan aturan yang sepenuhnya khusus untuk transfer dan visibilitas/audit.Example Custom Ring policies
Example Custom Ring policies
Alur Pengguna dan Jaminan Privasi
Transaksi dengan Helius Privacy dijalankan secara native onchain dan dapat dikomposisikan dengan program Solana lainnya dalam satu transaksi. Pengguna dapat masuk, melakukan transfer privat di dalam, atau keluar dari Ring: 1. Deposit atau on-ramp. Pengguna mengirim token dari saldo publik Solana atau saldo fiat langsung ke saldo privat. 2. Transfer privat. Pengguna mengirim token antarsaldo privat dalam Ring yang sama atau ke Ring lain. 3. Penarikan atau off-ramp. Pengguna mengirim token dari saldo privat ke saldo publik Solana atau langsung ke saldo fiat.Deposit ke Saldo Privat: Hal yang Bersifat Privat
Pengguna dapat melakukan deposit ke saldo privat dengan dua cara:- On-ramp dari saldo fiat ke saldo kripto privat
- Deposit dari saldo kripto publik ke saldo kripto privat
- On-ramp from fiat balance
- Deposit from public crypto balance
Transfer Privat: Hal yang Bersifat Privat
Pengguna dapat mengirim transfer privat dengan dua cara:- Transfer dalam Ring yang sama
- Transfer ke Ring lain
Untuk sebagian besar aplikasi, kami menyarankan Default Ring yang tidak memerlukan izin dan bersifat rahasia.
Untuk kebijakan khusus dan kontrol kepatuhan, hubungi kami guna mulai menggunakan Custom Ring.
- Permissionless Confidential Ring
- Custom Rings
Penarikan dari Saldo Privat: Hal yang Bersifat Privat
Pengguna dapat menarik dana dari saldo privat dengan dua cara:- Off-ramp dari kripto privat ke saldo fiat
- Penarikan dari kripto privat ke saldo kripto publik
- Off-ramp to fiat balance
- Withdraw to public crypto balance
Alur Transaksi Tingkat Tinggi
Transfer privat berperilaku serupa dengan transfer publik dan dijalankan dalam satu transaksi Solana.- Private transfer
- Solana transfer
- Saldo SOL atau SPL pengguna dienkripsi onchain.
- Ambil status terenkripsi dan dekripsi secara lokal, atau penyedia yang diberi delegasi mendekripsi dan menyajikan status yang telah didekripsi.
- Dompet menetapkan jumlah dan penerima, lalu meminta bukti ZK.
- Secara default, penyedia RPC menghasilkan bukti ZK dan mengembalikannya. Custom Ring juga memerlukan bukti kebijakan.
- Dompet menyusun transaksi Solana. Bukti ZK diverifikasi tanpa mengungkapkan status terenkripsi. Program yang dipanggil serta pihak yang menandatangani dan mengirimkannya bergantung pada Ring:
- Aplikasi melacak status melalui hash transaksi Solana.
- Permissionless Confidential Ring
- Custom Confidential Ring
- Custom Anonymous Ring
Private Wallet
Pengguna menyimpan saldo terenkripsi mereka dalam Private Wallet. Private Wallet menerima transfer di alamat Solana publik pengguna dan berfungsi sebagaiinbox.
Dengan demikian, pengirim selalu memasukkan alamat Solana penerima seperti saat melakukan transfer publik.
Pembuatan Private Wallet
Saat Private Wallet dibuat, alamat Solana didaftarkan dalam registri onchain. Registri memetakan satu alamat Solana ke satu . Transfer dienkripsi secara internal ke Shielded Address. Beberapa alamat Solana tidak dapat menggunakan satu Shielded Address yang sama. Setiap catatan registri merupakan PDA yang dimiliki oleh , yang dapat dicari oleh siapa saja untuk mengetahui apakah alamat Solana dapat menerima transfer privat.Dalam aplikasi dompet Anda, Anda dapat mengizinkan pengguna membuat dompet privat hanya untuk kunci publik “Private Wallet” khusus,
atau untuk kunci publik apa pun.
Transfer ke Private Wallet
Pada setiap transfer, Privacy API mencari alamat dompet di registri onchain untuk memeriksa apakah penerima memiliki dompet privat. Jika ditemukan, API menggunakan Shielded Address secara internal untuk mengenkripsi transfer.Jika penerima transfer privat tidak memiliki Private Wallet, Privacy API mengubah transfer menjadi penarikan dari privat ke publik.Kami menyarankan agar Anda meminta tanda tangan pengguna yang terpisah di UI guna memastikan pengguna tidak menarik dana ke saldo publik secara tidak sengaja.
Pengelolaan Kunci
Private Wallet menambahkan pasangan kunci terlindung ke dompet Solana dari pasangan kunci Solana Anda.
Pasangan kunci terlindung adalah bundel kunci penandatanganan, nullifier, dan penampil. Pasangan ini bukan pasangan kunci Solana.
Shielded Address merupakan kunci publik dari pasangan kunci terlindung. Transfer dienkripsi ke alamat ini.
Membuat Pasangan Kunci Terlindung
Dompet dapat membuat pasangan kunci terlindung dengan dua cara.-
Turunkan kunci dari frasa seed.
- Pendekatan yang disarankan untuk dompet berbasis seed.
- Ring Rahasia: kunci penandatanganan adalah kunci Ed25519 yang sama dengan yang diturunkan dompet Solana dari seed tersebut. Kunci nullifier dan penampil adalah kunci tambahan yang diturunkan dari seed yang sama.
- Custom Ring Anonim: kunci penandatanganan adalah kunci P-256 tambahan yang diturunkan dari seed dompet.
- Anda selalu dapat membuat ulang pasangan kunci terlindung dengan cara yang sama seperti saat membuat ulang dompet Solana.
-
Turunkan kunci dari pesan tetap dengan kunci Solana yang ada.
- Tanda tangan Solana bersifat deterministik sehingga pasangan kunci Solana yang sama selalu menghasilkan pasangan kunci terlindung yang sama. Aplikasi tidak pernah menerima kunci privat.
- Pendekatan yang disarankan untuk pengujian dan dompet yang tidak menggunakan frasa seed. Dompet yang diintegrasikan harus memastikan bahwa tanda tangan tidak terekspos kepada pihak ketiga.
Mengintegrasikan Pasangan Kunci Terlindung
Dompet dapat menyimpan sendiri pasangan kunci terlindung melalui Integrasi Dompet native. Dengan Embedded Privacy Wallet, Wallet Provider menyimpan pasangan kunci terlindung dan menjalankan operasi kuncinya.Mode Dekripsi dan Sinkronisasi Dompet
Hanya pemilik yang dapat mendekripsi Saldo Private Wallet dengan Kunci Penampil. Untuk pengungkapan selektif, pemilik dapat membagikan kunci penampil kepada auditor agar auditor dapat membaca aktivitas tanpa dapat membelanjakan dana. Dalam Custom Ring, kebijakan dapat menetapkan auditor yang dapat mendekripsi semua saldo dari Custom Ring tersebut. Ring rahasia (Default Ring dan Custom Ring rahasia) mendukung dekripsi lokal dan terdelegasi. Ring anonim (hanya Custom Ring) hanya mendukung dekripsi terdelegasi.Dompet harus mendekripsi dan memperbarui saldo di mana pun backfill dijalankan: saat dompet dibuka kuncinya,
Private Wallet dibuka, aplikasi dilanjutkan, jaringan terhubung kembali, terdapat celah stream, atau dompet dipulihkan.
Dekripsi Lokal
Dalam mode dekripsi lokal, dompet mendekripsi dan menyinkronkan saldo serta riwayat secara lokal. Server Helius tidak menerima mnemonik, seed, kunci privat penandatanganan, kunci privat penampil, atau rahasia nullifier.Dekripsi Terdelegasi
Dalam mode dekripsi terdelegasi, dompet dan penyedia yang dipilih berbagi kunci penampil. Hal ini memungkinkan penyedia mendekripsi saldo dan riwayat, tetapi tidak memberikan wewenang untuk membelanjakan dana. Dompet juga dapat membagikan kunci penampil sebelumnya saat mengizinkan penyedia menyinkronkan aktivitas historis. Akses auditor terpisah dari dekripsi terdelegasi. Auditor menerima visibilitas Ring yang ditentukan oleh kebijakan, sedangkan penyedia terdelegasi menerima akses sinkronisasi dalam cakupan dompet.Pengindeks Menyajikan Status Terenkripsi
Sama seperti dompet publik mengandalkan RPC Solana, Private Wallet mengandalkan pengindeks. Pengindeks menyajikan status terenkripsi yang dibutuhkan dompet untuk membaca saldo dan menyusun transaksi privat. Secara default, pengindeks dapat diakses melalui ; siapa pun juga dapat menjalankan pengindeksnya sendiri tanpa izin sebagai cadangan.Saldo Private Wallet
Saldo Private Wallet disimpan onchain dalam Akun Token Privat Solana sebagai UTXO (output transaksi yang belum dibelanjakan), bukan dalam akun token Solana. Default Ring dan semua Custom Ring menyimpan saldo privat dalam satu pohon Merkle status. Saldo Private Wallet adalah jumlah semua UTXO yang dimiliki oleh Private Wallet. Program Solana dapat memiliki UTXO seperti akun Solana biasa. Dokumentasi ini menggunakan istilah Akun Token Privat Solana dan UTXO secara bergantian.Balances in UTXOs vs Solana accounts
Balances in UTXOs vs Solana accounts
Untuk pengalaman pengguna, tidak ada perbedaan antara saldo yang disimpan dalam UTXO dan akun token Solana.Pada tingkat teknis, membelanjakan saldo publik mengurangi 
amount dalam akun token Solana.
Membelanjakan Saldo Privat tidak menimpa kolom amount milik UTXO.
Sebagai gantinya, transaksi privat mengambil UTXO yang ada sebagai input (dipilih secara otomatis oleh SDK),
menggunakan input tersebut, dan membuat output baru untuk penerima serta sisa saldo pengirim.Misalnya, Alice memiliki 50 USDC dan mengirim 35 kepada Bob.- Dalam akun token Solana, kolom
amountmiliknya berubah dari 50 menjadi 15, sedangkan milik Bob bertambah 35. Angka tersebut berubah langsung pada tempatnya. - Dengan UTXO, Alice memiliki satu nota 50 USDC. Transaksi membelanjakannya dan membuat dua nota baru: nota 35 USDC untuk Bob dan nota kembalian 15 USDC untuk Alice. Nota lama Alice senilai 50 kini telah dibelanjakan.
- One input note
- Multiple input notes
Saat melakukan deposit aset SOL dan SPL ke saldo privat, PDA antarmuka yang dimiliki oleh Solana Privacy Program menyimpan token dalam eskro dan membuat UTXO dengan pengguna sebagai pemilik.Saat menarik dana ke saldo publik, UTXO yang ada ditandai sebagai telah dibelanjakan dan token dilepaskan ke akun token Solana.
policy_program_id.
Akun Token Privat Solana
Akun Token Privat Solana adalah UTXO yang berperilaku serupa dengan akun token Solana, dengan dua perbedaan utama:- Akun Token Privat Solana tidak memerlukan pengecualian biaya sewa saat dibuat, dan
- saldonya dienkripsi onchain.
- Aset: mint yang unitnya disimpan oleh UTXO. SOL adalah alamat mint default. Aset dapat berupa SOL atau aset SPL maupun Token-2022 apa pun.
- Jumlah: jumlah unit
assetyang disimpan nota, dalam unit terkecil aset. - Data program dan kebijakan: data opsional agar kebijakan Ring yang dikonfigurasi dapat menambahkan fungsi seperti Token-2022
- Diagram
- Code
View Solana token account
View Solana token account
- Diagram
- Code