Chuyển đến nội dung chính
  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 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 Luồng giao dịch cấp cao.

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.
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ụ này chọn các UTXO đầu vào theo cách thủ công. Các trình trợ giúp ví của SDK có thể chọn và đặt trước chúng cho bạn. Xem Chọn UTXO để biết hướng dẫn chọn đầu vào.
  • Ví dụ này sử dụng Tài khoản token Solana riêng tư được tạo bởi lần nạp tiền trước đó. Một lần 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. Lệnh chuyển sử dụng tiền từ ví này.
  • [transferInput] liệt kê các UTXO đã chọn của người gửi. Một lần chuyển có thể sử dụng nhiều UTXO.
  • senderSigner.address là địa chỉ Solana của bên 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. Lệnh chuyển SPL hoặc Token 2022 sẽ truyền vào địa chỉ mint của token.
  • TRANSFER_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.
  • 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 chứng minh 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ừ lệnh chuyể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 mà không tiết lộ tài sản hoặc số lượng đã mã hóa.
  • payer ký và thanh toán 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ộ 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 để 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.
  • Lệnh chuyển riêng tư chỉ di chuyển tài sản giữa các số dư riêng tư. Lệnh này không truyền vào tài khoản Solana công khai hoặc tài khoản token.
  • sendAndConfirm ký và gửi transferInstruction dưới dạng giao dịch Solana.
  • Quá trình xác nhận trả về slot nơi giao dịch được ghi nhận, dùng làm điều kiện cho thao tác truy xuất từ indexer.

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ệ