Langsung ke konten utama
  1. Transfer privat memindahkan token dalam sebuah Ring antar-dompet privat.
  2. Transfer privat dikirim dalam satu transaksi Solana ke alamat dompet Solana.

Transfer: Apa yang Bersifat Privat

Ring tanpa izin bersifat rahasia, dengan jumlah dan aset yang dienkripsi. Ring khusus dapat dikonfigurasi sebagai rahasia atau anonim (pengirim, penerima, aset, dan jumlah dienkripsi).

Cara Kerja Transfer

Transfer privat bekerja serupa dengan transfer Solana publik:
  1. Saldo SOL atau SPL pengguna dienkripsi secara on-chain.
  2. Pengguna mendekripsi status privat, dompet membuat transfer, dan pemilik menandatanganinya.
    • Ambil status terenkripsi dengan metode RPC khusus. Hanya pengguna yang dapat mendekripsi saldo secara lokal.
    • Dompet menetapkan jumlah dan penerima, lalu meminta bukti ZK. Secara default, penyedia RPC menghasilkan bukti ZK dan mengembalikannya.
  3. Runtime Solana memverifikasi tanda tangan dan memanggil Solana Privacy Program, yang memverifikasi bukti ZK tanpa mengungkapkan status terenkripsi.
  4. Aplikasi melacak status melalui hash transaksi Solana.
  1. Saldo SOL atau SPL pengguna tersedia secara publik di on-chain.
  2. Dompet membaca status publik, membuat transfer, dan pemilik menandatanganinya.
  3. Runtime Solana memverifikasi tanda tangan dan memanggil System Program atau Token Program, yang memperbarui saldo publik.
  4. Aplikasi melacak status melalui hash transaksi Solana.
Ini adalah alur transaksi tingkat tinggi untuk Ring rahasia tanpa izin. Bandingkan dengan Ring khusus dalam Alur Transaksi Tingkat Tinggi.

Mulai

1

Prasyarat

Contoh TypeScript memerlukan Node.js 24 atau versi yang lebih baru, pnpm 11.18.0, dan Solana CLI.
Tambahkan kunci API Helius:
.env
Contoh-contoh ini menggunakan dompet CLI Solana sebagai pembayar secara default. Pembayar harus memiliki SOL devnet. Lihat Cara Mendapatkan SOL Devnet.
2

Transfer ke Saldo Privat

  • SDK mengembalikan instruksi. Aplikasi menandatangani dan mengirimkannya.
  • sendAndConfirmFactory membuat transaksi Kit, mengirimkannya, lalu mengembalikan tanda tangan beserta slot tempat transaksi masuk.
Contoh ini memilih UTXO input secara manual. Helper dompet SDK dapat memilih dan mencadangkannya untuk Anda. Lihat Memilih UTXO untuk panduan pemilihan input.
  • Contoh ini membelanjakan Akun Token Solana Privat yang dibuat oleh deposit sebelumnya. Satu transfer dapat membelanjakan beberapa UTXO.
  • transferUtxo memilih satu Akun Token Solana Privat dari saldo tersebut.
  • ProofInputUtxo.fromKeypair menyiapkan UTXO yang dipilih sebagai input bukti dengan keypair dompet privat pengirim.
  • Keypair tersebut memperoleh nullifier yang menandai UTXO input sebagai telah dibelanjakan, sementara aset dan jumlahnya tetap terenkripsi.
  • senderAddress adalah milik pengirim. Transfer membelanjakan dana dari dompet ini.
  • [transferInput] mencantumkan UTXO yang dipilih pengirim. Satu transfer dapat membelanjakan beberapa UTXO.
  • senderSigner.address adalah alamat Solana pembayar biaya. Sponsor gas dapat membayar biaya tersebut.
  • recipient.shieldedAddress() adalah Alamat Terlindung penerima. Output yang ditransfer dienkripsi dengan viewing key penerima.
  • SOL_MINT memilih SOL. Transfer SPL atau Token 2022 meneruskan mint token.
  • TRANSFER_AMOUNT dinyatakan dalam unit dasar aset. SOL menggunakan lamport. Aset SPL dan Token 2022 menggunakan unit dasar token.
  • transfer.sign mengotorisasi transisi status, mengenkripsi aset dan jumlah, serta menghasilkan input untuk pembukti zero-knowledge.
  • assets adalah registri aset yang digunakan untuk menentukan aset privat yang didukung.
  • senderKeys menggunakan LocalKeys.fromKeypair(sender, client.proofService) untuk mengotorisasi pembuktian dengan kunci pengirim.
  • client.proveTransact menghasilkan bukti zero-knowledge dari transfer yang ditandatangani dan mengembalikan data instruksi yang diserialisasi.
  • Bukti tersebut menunjukkan bahwa pengirim memiliki dan dapat membelanjakan input tanpa mengungkapkan aset atau jumlah yang terenkripsi.
  • payer menandatangani dan membayar transaksi Solana. Sponsor gas dapat membayar biaya tersebut.
  • inputTree dan outputTree adalah client.tree, pohon Merkle status yang memuat UTXO yang telah dibelanjakan serta menerima output penerima dan kembalian pengirim.
  • await transactInstruction memperoleh alamat akun nullifier secara lokal dan mengembalikan instruksi. Akun nullifier menandai UTXO input sebagai telah dibelanjakan agar saldo privat tidak dapat dibelanjakan dua kali.
  • data memuat bukti zero-knowledge dan output terenkripsi yang dihasilkan pada langkah sebelumnya.
  • Transfer privat hanya memindahkan aset antar-saldo privat. Transfer ini tidak meneruskan akun Solana publik atau akun token.
  • sendAndConfirm menandatangani dan mengirimkan transferInstruction sebagai transaksi Solana.
  • Konfirmasi menghasilkan slot tempat transaksi masuk yang digunakan untuk membatasi pengambilan data pengindeks.

Contoh Kode Lengkap

Kloning dan jalankan contoh:
Contoh menggunakan Ring rahasia di local/devnet di sini.
deposit_transfer_withdraw.ts

Panduan Terkait

Deposit

Withdraw

Read a Private Balance

Read Private History

Tidak menemukan yang Anda cari?

Hubungi kami! Telegram | Email | Kontak