Skip to main content
  1. Một giao dịch chuyển riêng tư di chuyển token trong một Ring giữa các ví riêng tư.
  2. Giao dịch chuyển riêng tư được gửi trong một giao dịch Solana duy nhất đến địa chỉ ví Solana.

Chuyển tài sản: Nội dung nào là riêng tư

Ring không cần cấp quyền có tính bảo mật, với 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 giao dịch chuyển tài sản

Một giao dịch chuyển riêng tư hoạt động tương 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 trên chuỗi.
  2. Người dùng giải mã trạng thái riêng tư, ví tạo giao dịch chuyể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 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 trên chuỗi.
  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 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 dành 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

Chuyển đến số dư riêng tư

  • SDK trả về các lệnh. Ứng dụng ký và gửi các lệnh đó.
  • sendAndConfirmFactory tạo một giao dịch Kit, gửi giao dịch đó và 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 tạo từ khoản nạp trước đó. Một giao dịch chuyển có thể sử dụng nhiều UTXO.
  • transferUtxo 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 ra nullifier để đánh dấu UTXO đầu vào là đã được sử dụng, trong khi tài sản và số lượng vẫn được mã hóa.
  • senderAddress là của người gửi. Giao dịch chuyển sử dụng tài sản từ ví này.
  • [transferInput] liệt kê các UTXO đã chọn của người gửi. Một giao dịch chuyể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.
  • recipient.shieldedAddress() là Địa chỉ được bảo vệ của người nhận. Đầu ra được chuyển sẽ được mã hóa bằng khóa xem của người nhận.
  • SOL_MINT chọn SOL. Với giao dịch chuyển SPL hoặc Token 2022, hãy truyền mint của token.
  • TRANSFER_AMOUNT được tính theo đơ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.
  • transfer.sign cho phép chuyển đổi trạng thái, mã hóa tài sản và số lượng, đồng thời tạo đầu vào cho trình tạo bằng chứng không tiết lộ.
  • 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) để cho phép 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 tiết lộ từ giao dịch chuyển đã ký và trả về dữ liệu lệnh được 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 mà không tiết lộ tài sản hoặc số lượng đã mã hóa.
  • payer ký và thanh toán 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 đầu ra của người nhận cùng tiền thừa của người gửi.
  • await transactInstruction tạo cục bộ địa chỉ tài khoản nullifier và trả về lệnh. Các tài khoản nullifier đánh dấu UTXO đầu vào là đã được sử dụng để số dư riêng tư không thể bị chi tiêu hai lần.
  • data chứa bằng chứng không tiết lộ và các đầu ra đã mã hóa được tạo ở bước trước.
  • Giao dịch chuyển riêng tư chỉ di chuyển tài sản giữa các số dư riêng tư. Giao dịch không truyền tài khoản Solana hoặc tài khoản token công khai.
  • sendAndConfirm ký và gửi transferInstruction 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

Withdraw

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ệ