Skip to main content
  1. Penarikan memindahkan token dari saldo privat ke saldo Solana publik.
  2. Penarikan dikirim dalam satu transaksi Solana ke alamat dompet Solana.

Penarikan: Bagian yang 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 Penarikan

Penarikan bekerja serupa dengan transfer Solana publik:
  1. Saldo SOL atau SPL milik pengguna dienkripsi secara onchain.
  2. Pengguna mendekripsi status privat, dompet membuat penarikan, 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 milik pengguna bersifat publik secara onchain.
  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

Tarik ke Saldo Publik

  • SDK mengembalikan instruksi. Aplikasi menandatangani dan mengirimkannya.
  • sendAndConfirmFactory membuat transaksi Kit, mengirimkannya, serta mengembalikan tanda tangan dan slot tempat transaksi berhasil masuk.
  • Contoh ini membelanjakan Private Solana Token Account yang tersisa setelah transfer sebelumnya. Penarikan dapat membelanjakan beberapa UTXO.
  • withdrawalUtxo 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 tersebut memperoleh nullifier yang menandai UTXO input sebagai telah dibelanjakan, sementara aset dan jumlah input tetap terenkripsi.
  • senderAddress adalah milik pengirim. Penarikan membelanjakan saldo dari dompet ini.
  • [withdrawalInput] mencantumkan UTXO pilihan pengirim. Penarikan dapat membelanjakan beberapa UTXO.
  • senderSigner.address adalah alamat Solana milik pembayar biaya. Sponsor gas dapat membayar biaya tersebut.
  • WithdrawalTarget.sol adalah penerima Solana publik. Penerima dapat berupa pemilik atau pihak ketiga.
  • SOL_MINT memilih SOL. Penarikan SPL atau Token 2022 meneruskan mint token.
  • WITHDRAW_AMOUNT dinyatakan dalam unit dasar aset. SOL menggunakan lamport. Aset SPL dan Token 2022 menggunakan unit dasar token.
  • withdrawal.sign mengotorisasi transisi status, mengenkripsi kembalian privat yang tersisa, dan 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 penarikan yang ditandatangani dan mengembalikan data instruksi yang diserialisasi.
  • Bukti tersebut menunjukkan bahwa pengirim memiliki dan dapat membelanjakan input. Aset dan jumlah yang ditarik bersifat publik. Jumlah input dan kembalian tetap terenkripsi.
  • payer menandatangani dan membayar transaksi Solana. Sponsor gas dapat membayar biaya tersebut.
  • inputTree dan outputTree adalah client.tree, pohon Merkle status yang berisi UTXO yang telah dibelanjakan dan menerima kembalian privat milik pengirim.
  • withdrawal adalah TransactWithdrawal.sol, akun penerima Solana publik.
  • 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 berisi bukti zero-knowledge dan kembalian terenkripsi yang dihasilkan pada langkah sebelumnya.
  • Penarikan memindahkan aset dari saldo privat ke akun Solana publik. Penarikan tersebut meneruskan akun penerima publik.
  • sendAndConfirm menandatangani dan mengirimkan withdrawalInstruction sebagai transaksi Solana.
  • Konfirmasi menghasilkan slot tempat transaksi berhasil masuk, yang digunakan untuk membatasi pengambilan data oleh pengindeks.

Contoh Kode Lengkap

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

Panduan Terkait

Deposit

Transfer

Read a Private Balance

Read Private History

Tidak menemukan yang Anda cari?

Hubungi kami! Telegram | Email | Kontak