Skip to main content
  1. Thao tác rút tiền chuyển token từ số dư riêng tư sang số dư Solana công khai.
  2. Khoản rút được gửi trong một giao dịch Solana duy nhất đến địa chỉ ví Solana.

Rút tiền: Thông tin nào là riêng tư

Ring không cần cấp quyền có tính bảo mật, trong đó số lượng và tài sản được mã hóa. Có thể cấu hình Ring tùy chỉnh ở chế độ bảo mật hoặc ẩn danh (mã hóa người gửi, người nhận, tài sản và số lượng).

Cách hoạt động của thao tác rút tiền

Thao tác rút tiền hoạt động tương tự một giao dịch chuyển Solana công khai:
  1. Số dư SOL hoặc SPL của người dùng được mã hóa onchain.
  2. Người dùng giải mã trạng thái riêng tư, ví tạo giao dịch rút tiền và chủ sở hữu ký.
    • Truy xuất trạng thái mã hóa bằng các phương thức RPC chuyên dụng. Chỉ người dùng mới có thể giải mã số dư cục bộ.
    • Ví thiết lập số lượng và người nhận, sau đó yêu cầu bằng chứng ZK. Theo mặc định, nhà cung cấp RPC tạo và trả về bằng chứng ZK.
  3. Môi trường thực thi Solana xác minh các chữ ký và gọi Solana Privacy Program. Chương trình này xác minh bằng chứng ZK mà không tiết lộ trạng thái mã hóa.
  4. Ứng dụng theo dõi trạng thái thông qua hàm băm giao dịch Solana.
  1. Số dư SOL hoặc SPL của người dùng được công khai onchain.
  2. Ví đọc trạng thái công khai, tạo giao dịch chuyển và chủ sở hữu ký.
  3. Môi trường thực thi Solana xác minh các chữ ký và gọi System Program hoặc Token Program để cập nhật số dư công khai.
  4. Ứng dụng theo dõi trạng thái thông qua hàm băm giao dịch Solana.
Đây là luồng giao dịch cấp cao cho Ring bảo mật không cần cấp quyền. So sánh với các Ring tùy chỉnh trong phần khái niệm.

Bắt đầu

1

Điều kiện tiên quyết

Các ví dụ TypeScript yêu cầu Node.js 24 trở lên, pnpm 11.18.0 và Solana CLI.
Nguồn: sdk-libs/ts
Thêm khóa API Helius:
.env
Theo mặc định, các ví dụ sử dụng ví Solana CLI làm bên thanh toán. Bên thanh toán phải có SOL trên devnet. Xem Cách nhận SOL trên devnet.
2

Rút tiền về số dư công khai

  • SDK trả về các chỉ thị. Ứng dụng ký và gửi chúng.
  • sendAndConfirmFactory tạo một giao dịch Kit, gửi giao dịch đó rồi trả về chữ ký cùng slot đã được ghi nhận.
  • Ví dụ sử dụng Tài khoản token Solana riêng tư còn lại sau giao dịch chuyển trước đó. Một lần rút tiền có thể sử dụng nhiều UTXO.
  • withdrawalUtxo chọn một Tài khoản token Solana riêng tư từ số dư đó.
  • ProofInputUtxo.fromKeypair chuẩn bị UTXO đã chọn làm đầu vào bằng chứng bằng cặp khóa ví riêng tư của người gửi.
  • Cặp khóa tạo nullifier để đánh dấu UTXO đầu vào là đã được sử dụng, trong khi tài sản và số lượng đầu vào vẫn được mã hóa.
  • senderAddress là của người gửi. Khoản rút được lấy từ ví này.
  • [withdrawalInput] liệt kê các UTXO đã chọn của người gửi. Một lần rút tiền có thể sử dụng nhiều UTXO.
  • senderSigner.address là địa chỉ Solana của người trả phí. Nhà tài trợ phí gas có thể thanh toán khoản phí này.
  • WithdrawalTarget.sol là người nhận Solana công khai. Người nhận có thể là chủ sở hữu hoặc bên thứ ba.
  • SOL_MINT chọn SOL. Khi rút SPL hoặc Token 2022, hãy truyền địa chỉ mint của token.
  • WITHDRAW_AMOUNT được biểu thị bằng đơn vị cơ sở của tài sản. SOL sử dụng lamport. Tài sản SPL và Token 2022 sử dụng đơn vị cơ sở của token.
  • withdrawal.sign cấp quyền chuyển đổi trạng thái, mã hóa khoản tiền thừa riêng tư còn lại và tạo đầu vào cho trình chứng minh không kiến thức.
  • assets là sổ đăng ký tài sản dùng để phân giải các tài sản riêng tư được hỗ trợ.
  • senderKeys sử dụng LocalKeys.fromKeypair(sender, client.proofService) để cấp quyền tạo bằng chứng bằng các khóa của người gửi.
  • client.proveTransact tạo bằng chứng không kiến thức từ giao dịch rút tiền đã ký và trả về dữ liệu chỉ thị đã tuần tự hóa.
  • Bằng chứng cho thấy người gửi sở hữu và có thể sử dụng các đầu vào. Tài sản và số lượng được rút là công khai. Số lượng đầu vào và tiền thừa vẫn được mã hóa.
  • payer ký và thanh toán phí cho giao dịch Solana. Nhà tài trợ phí gas có thể thanh toán khoản phí này.
  • inputTree và outputTree là client.tree, cây Merkle trạng thái chứa các UTXO đã sử dụng và nhận khoản tiền thừa riêng tư của người gửi.
  • withdrawal là TransactWithdrawal.sol, tài khoản Solana công khai của người nhận.
  • await transactInstruction tạo cục bộ các địa chỉ tài khoản nullifier và trả về chỉ thị. Các tài khoản nullifier đánh dấu UTXO đầu vào là đã được sử dụng để ngăn việc chi tiêu hai lần từ một số dư riêng tư.
  • data chứa bằng chứng không kiến thức và khoản tiền thừa mã hóa được tạo ở bước trước.
  • Thao tác rút tiền chuyển tài sản từ số dư riêng tư sang tài khoản Solana công khai. Thao tác này truyền tài khoản công khai của người nhận.
  • sendAndConfirm ký và gửi withdrawalInstruction dưới dạng một giao dịch Solana.
  • Quá trình xác nhận trả về slot đã được ghi nhận, dùng để kiểm soát thời điểm truy xuất từ trình lập chỉ mục.

Ví dụ mã đầy đủ

Sao chép kho lưu trữ và chạy ví dụ:
Các ví dụ sử dụng một Ring bảo mật trên local/devnet tại đây.
deposit_transfer_withdraw.ts

Hướng dẫn liên quan

Deposit

Transfer

Read a Private Balance

Read Private History

Không tìm thấy nội dung bạn đang tìm kiếm?

Hãy liên hệ với chúng tôi! Telegram | Email | Liên hệ