Skip to main content
  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 di konsep.

Mulai

1

Prasyarat

Contoh TypeScript memerlukan Node.js 24 atau versi yang lebih baru, pnpm 11.18.0, dan Solana CLI.
Sumber: sdk-libs/ts
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 membelanjakan Private Solana Token Account yang dibuat oleh deposit sebelumnya. Transfer dapat membelanjakan beberapa UTXO.
  • transferUtxo memilih satu Private Solana Token Account dari saldo tersebut.
  • ProofInputUtxo.fromKeypair menyiapkan UTXO yang dipilih sebagai input bukti dengan pasangan kunci dompet privat milik pengirim.
  • Pasangan kunci menghasilkan nullifier yang menandai UTXO input sebagai telah dibelanjakan, sementara aset dan jumlah tetap terenkripsi.
  • senderAddress adalah milik pengirim. Transfer membelanjakan dana dari dompet ini.
  • [transferInput] mencantumkan UTXO yang dipilih pengirim. Transfer dapat membelanjakan beberapa UTXO.
  • senderSigner.address adalah alamat Solana pembayar biaya. Sponsor gas dapat membayar biaya tersebut.
  • recipient.shieldedAddress() adalah Shielded Address milik penerima. Output transfer dienkripsi menggunakan kunci tampilan 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 menemukan aset privat yang didukung.
  • senderKeys menggunakan LocalKeys.fromKeypair(sender, client.proofService) untuk mengotorisasi pembuatan bukti dengan kunci pengirim.
  • client.proveTransact menghasilkan bukti zero-knowledge dari transfer yang telah ditandatangani dan mengembalikan data instruksi berseri.
  • Bukti tersebut menunjukkan bahwa pengirim memiliki dan dapat membelanjakan input tanpa mengungkapkan aset atau jumlah yang dienkripsi.
  • payer menandatangani dan membayar transaksi Solana. Sponsor gas dapat membayar biayanya.
  • inputTree dan outputTree adalah client.tree, yaitu pohon Merkle status yang berisi UTXO yang dibelanjakan serta menerima output penerima dan kembalian pengirim.
  • await transactInstruction menghasilkan alamat akun nullifier secara lokal dan mengembalikan instruksi. Akun nullifier menandai UTXO input sebagai telah dibelanjakan sehingga saldo privat tidak dapat dibelanjakan dua kali.
  • data berisi 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 oleh 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