Skip to main content
Saldo privat disimpan dalam UTXO (output transaksi yang belum dibelanjakan). Anda dapat menganggap UTXO sebagai akun token SPL privat, dengan dua perbedaan utama:
  1. UTXO bukan akun Solana sehingga tidak memerlukan pembebasan biaya sewa.
  2. Saldonya dienkripsi secara onchain.
Tata letak data UTXO serupa dengan akun token SPL:
  • Pemilik – keypair Solana, PDA, atau kunci P-256.
  • Aset – mint (SOL, SPL, atau Token-2022).
  • Jumlah – jumlah unit asset, dalam unit terkecilnya.
  • Data – UTXO dapat menyimpan data arbitrer, misalnya pemilik token yang ditempatkan dalam escrow.
  • Data program dan kebijakan – kepatuhan Ring terkonfigurasi yang bersifat opsional.
Akun Token Solana Privat. Program Privasi Solana memiliki Akun Token Privat, yang diperluas menjadi bidang-bidang UTXO: pemilik, aset, jumlah, data, data kebijakan, dan ID program kebijakan.
Akun token Solana.

Saldo Privat

Saldo privat adalah jumlah seluruh UTXO dari satu aset yang dimiliki oleh dompet privat. Dompet menampilkan satu saldo, terlepas dari apakah saldo privat terdiri dari satu atau beberapa UTXO. Transfer privat dapat membelanjakan beberapa UTXO sekaligus. Dompet Privat yang terhubung dengan garis putus-putus ke beberapa UTXO, masing-masing menyimpan sejumlah nilai dari satu aset. Saldo dompet adalah jumlah seluruh UTXO.

Transfer Privat

Transfer privat dengan UTXO bekerja secara berbeda dari transfer publik dengan akun token SPL:
  • Transfer dari akun token SPL memperbarui amount.
  • Transfer privat dengan UTXO tidak memperbarui amount milik UTXO. Sebagai gantinya, transfer privat membelanjakan UTXO yang ada dan membuat UTXO baru untuk penerima serta sisa saldo pengirim.
Namun, bagi pengguna, transfer publik dengan akun token Solana dan transfer privat dengan UTXO terasa serupa. Sebagai contoh, Alice memiliki 50 USDC dan mengirimkan 35 USDC kepada Bob.
  • Dengan akun token SPL, amount milik Alice berkurang dari 50 menjadi 15, sedangkan milik Bob bertambah 35.
  • Dengan UTXO, Alice memiliki satu UTXO senilai 50 USDC. Transaksi membelanjakan UTXO yang ada dan membuat dua UTXO baru: satu senilai 35 USDC untuk Bob dan satu senilai 15 USDC untuk Alice.
Membelanjakan satu UTXO

Pemilihan UTXO

Untuk transfer privat, SDK memilih UTXO yang belum dibelanjakan dan mencukupi jumlah yang ingin Anda transfer. Algoritma pemilihan UTXO membelanjakan sesedikit mungkin UTXO per transfer:
  1. SDK memfilter UTXO Anda berdasarkan aset yang dikirim dan mengurutkannya berdasarkan jumlah.
  2. SDK memilih UTXO sebanyak yang diperlukan untuk mencukupi jumlah transfer. SDK memilih UTXO terbesar terlebih dahulu hingga jumlah transfer tercukupi.
Sebagai contoh, Alice mengirimkan 80 USDC kepada Bob. Tiga UTXO terbesarnya cukup untuk mencakup transfer tersebut: Alice mengirimkan 80 USDC. UTXO miliknya diurutkan dari yang terbesar: 40, 25, 20, 10, dan 5 USDC. SDK memilih 40, 25, dan 20 USDC, yang mencukupi 80 USDC, serta membiarkan 10 dan 5 USDC tidak dipilih. Jumlah UTXO yang lebih sedikit menjaga ukuran transaksi tetap kecil. Setiap UTXO yang dibelanjakan menambahkan 66 byte untuk akun nullifier, yang menandai UTXO sebagai telah dibelanjakan. Akun tersebut mencegah UTXO . Contoh transfer privat tanpa data tambahan atau instruksi lainnya:

Varian Transaksi

Setiap transfer privat menggunakan varian transaksi: jumlah slot tetap untuk UTXO yang akan dibelanjakan dan UTXO baru yang akan dibuat. Varian berkisar dari 1 hingga 36 UTXO yang dibelanjakan, dan setiap varian memiliki sirkuit ZK tersendiri. Sirkuit tersebut membuktikan bahwa UTXO yang dibelanjakan valid dan UTXO baru menyimpan jumlah total yang sama. Jika transfer memerlukan lebih dari 36 UTXO, gabungkan terlebih dahulu. SDK memilih varian yang sesuai dengan transfer dan mengisi slot yang tidak digunakan dengan UTXO dummy. UTXO dummy tidak menyimpan nilai dan terlihat seperti UTXO asli secara onchain.
Alice mengirimkan 30 USDC kepada Bob. UTXO terbesarnya mencukupi transfer tersebut.UTXO Alice senilai 40 USDC dibelanjakan, sedangkan UTXO miliknya yang bernilai 25, 20, 10, dan 5 USDC tetap belum dibelanjakan. Transaksi membuat 30 USDC untuk Bob dan 10 USDC untuk Alice.
Lihat kode sumber: Spesifikasi · Varian yang didukung

Menggabungkan UTXO

Menerima banyak transfer tanpa melakukan pembelanjaan dapat memecah saldo privat ke banyak UTXO. Jika transfer memerlukan lebih dari 36 UTXO, gabungkan terlebih dahulu agar pengguna dapat membelanjakan seluruh saldo dalam satu transfer. Sebagian besar pengguna jarang menemui saldo yang terfragmentasi karena satu transfer dapat membelanjakan hingga 36 UTXO.
  • Penggabungan menyatukan UTXO dengan pemilik dan aset yang sama menjadi satu UTXO dengan nilai total yang sama.
  • Penggabungan tidak dapat membelanjakan dana atau mengubah pemilik.
  • Penggabungan dapat dilakukan secara internal tanpa memengaruhi UX pengguna akhir.
Penggabungan membelanjakan lima UTXO milik Alice yang masing-masing bernilai 1 USDC dan membuat satu UTXO baru senilai 5 USDC untuk Alice. Jumlah penggabungan yang diperlukan untuk membelanjakan seluruh saldo dalam satu transfer bergantung pada jumlah UTXO yang menyimpannya: Setiap penggabungan merupakan satu transaksi Solana dengan bukti ZK dan mengubah hingga 36 UTXO menjadi satu. Karena hasil penggabungan bersifat deterministik, bukti penggabungan dan bukti transfer dibuat secara paralel.

Contoh Penggunaan Instruksi Penggabungan

Aplikasi Anda dapat melakukan penggabungan pada dua tahap:
  • Saat menyinkronkan saldo privat: ketika dompet dibuka kuncinya, dompet privat dibuka, aplikasi dilanjutkan, jaringan tersambung kembali, terjadi celah stream, atau dompet dipulihkan.
  • Sebelum transfer: ketika transfer memerlukan lebih dari 36 UTXO.
Penggabungan berjalan tanpa tanda tangan pengguna. Ring kustom menetapkan izin penggabungannya sendiri. Saat menggunakan dompet privat tersemat, penggabungan dilakukan untuk Anda secara internal.
Sebagai contoh, dompet privat menyimpan 1.296 USDC dalam 1.296 UTXO setelah menerima 1.296 transfer privat yang masing-masing bernilai 1 USDC. Satu transfer dapat membelanjakan maksimal 36 UTXO, sehingga dompet membelanjakan saldo dalam dua tahap:
  1. Sebanyak 36 transaksi penggabungan berjalan secara paralel dan membuat 36 UTXO yang masing-masing bernilai 36 USDC.
  2. Satu transfer dengan 36 input membelanjakan seluruh saldo 1.296 USDC.

Konkurensi UTXO

Pengguna dapat membelanjakan saldo privat segera setelah transaksi berstatus final. Saldo privat dapat dibelanjakan secara bersamaan ketika terbagi di beberapa UTXO. Setiap UTXO dapat dibelanjakan dalam transaksi terpisah pada saat yang sama. Sebagai contoh, saldo yang terdiri dari tiga UTXO senilai 100 USDC dapat mendanai tiga transfer hingga 100 USDC sekaligus. Dompet memilih UTXO yang akan dibelanjakan. Tiga UTXO Alice yang masing-masing bernilai 100 USDC mendanai tiga transfer pada saat yang sama, satu UTXO per transfer. Satu UTXO hanya dapat dibelanjakan satu kali. Untuk batas throughput protokol, lihat State Merkle Tree dan Forester.

Pelajari Lebih Lanjut

Overview

Ring, jaminan privasi, dan alur transaksi.

Architecture

Cara dompet, layanan RPC, dan program Solana berinteraksi.

Encryption and Privacy Guarantees

Cara aset dienkripsi dan peran keypair terlindung.

Custom Enterprise Rings

Pelajari cara mengonfigurasi Ring kustom.

Tidak menemukan yang Anda cari?

Hubungi kami! Telegram | Email | Kontak