Skip to main content
Số dư riêng tư được lưu trữ trong các UTXO (đầu ra giao dịch chưa được chi tiêu). Có thể xem UTXO như các tài khoản token SPL riêng tư, với hai điểm khác biệt cốt lõi:
  1. UTXO không phải là tài khoản Solana nên không cần được miễn tiền thuê.
  2. Số dư của UTXO được mã hóa trên chuỗi.
Bố cục dữ liệu UTXO tương tự như tài khoản token SPL:
  • Chủ sở hữu – cặp khóa Solana, PDA hoặc khóa P-256.
  • Tài sản – mint (SOL, SPL hoặc Token-2022).
  • Số lượng – số đơn vị của asset, tính theo đơn vị nhỏ nhất.
  • Dữ liệu – UTXO có thể lưu trữ dữ liệu tùy ý, chẳng hạn như chủ sở hữu của các token ký quỹ.
  • Dữ liệu chương trình và chính sách – cấu hình tuân thủ Ring không bắt buộc.
Một tài khoản token Solana riêng tư. Chương trình Quyền riêng tư Solana sở hữu một Tài khoản Token Riêng tư, được mở rộng thành các trường UTXO: chủ sở hữu, tài sản, số lượng, dữ liệu, dữ liệu chính sách và ID chương trình chính sách.
Tài khoản token Solana.

Số dư riêng tư

Số dư riêng tư là tổng của tất cả UTXO thuộc một tài sản do ví riêng tư sở hữu. Ví hiển thị một số dư, bất kể số dư riêng tư bao gồm một hay nhiều UTXO. Một giao dịch chuyển riêng tư có thể chi tiêu nhiều UTXO cùng lúc. Một Ví Riêng tư được nối bằng các đường nét đứt đến nhiều UTXO, mỗi UTXO nắm giữ một lượng của một tài sản. Số dư ví là tổng của các UTXO.

Chuyển riêng tư

Giao dịch chuyển riêng tư bằng UTXO hoạt động khác với giao dịch chuyển công khai bằng tài khoản token SPL:
  • Giao dịch chuyển từ tài khoản token SPL cập nhật amount.
  • Giao dịch chuyển riêng tư bằng UTXO không cập nhật amount của UTXO. Thay vào đó, giao dịch chuyển riêng tư chi tiêu các UTXO hiện có và tạo UTXO mới cho người nhận cũng như cho số dư còn lại của người gửi.
Tuy vậy, đối với người dùng, giao dịch chuyển công khai bằng tài khoản token Solana và giao dịch chuyển riêng tư bằng UTXO mang lại trải nghiệm tương tự nhau. Ví dụ: Alice có 50 USDC và gửi cho Bob 35 USDC.
  • Với tài khoản token SPL, amount của Alice giảm từ 50 xuống 15, còn của Bob tăng thêm 35.
  • Với UTXO, Alice nắm giữ một UTXO có 50 USDC. Giao dịch chi tiêu UTXO hiện có và tạo hai UTXO mới: một UTXO có 35 USDC cho Bob và một UTXO có 15 USDC cho Alice.
Chi tiêu một UTXO

Chọn UTXO

Đối với giao dịch chuyển riêng tư, SDK chọn các UTXO chưa được chi tiêu có tổng giá trị đủ để chi trả số tiền bạn muốn chuyển. Thuật toán chọn UTXO chi tiêu ít UTXO nhất có thể cho mỗi giao dịch chuyển:
  1. SDK lọc các UTXO của bạn theo tài sản được gửi và sắp xếp chúng theo số lượng.
  2. SDK chọn số lượng UTXO cần thiết để chi trả số tiền chuyển. SDK chọn các UTXO lớn nhất trước cho đến khi đủ số tiền chuyển.
Ví dụ: Alice gửi cho Bob 80 USDC. Ba UTXO lớn nhất của cô ấy đủ để chi trả giao dịch chuyển: Alice gửi 80 USDC. Các UTXO của cô ấy được sắp xếp từ lớn nhất: 40, 25, 20, 10 và 5 USDC. SDK chọn 40, 25 và 20 USDC, đủ để chi trả 80 USDC, đồng thời không chọn 10 và 5 USDC. Ít UTXO hơn giúp giao dịch có kích thước nhỏ. Mỗi UTXO được chi tiêu làm tăng thêm 66 byte cho một tài khoản nullifier, tài khoản này đánh dấu UTXO là đã được chi tiêu. Tài khoản này ngăn UTXO . Ví dụ về các giao dịch chuyển riêng tư không có dữ liệu bổ sung hoặc chỉ thị khác:

Biến thể giao dịch

Mỗi giao dịch chuyển riêng tư sử dụng một biến thể giao dịch: một số lượng vị trí cố định dành cho các UTXO sẽ được chi tiêu và các UTXO mới sẽ được tạo. Các biến thể hỗ trợ từ 1 đến 36 UTXO được chi tiêu và mỗi biến thể có mạch ZK riêng. Mạch này chứng minh rằng các UTXO được chi tiêu là hợp lệ và các UTXO mới chứa cùng tổng số lượng. Nếu giao dịch chuyển cần nhiều hơn 36 UTXO, hãy hợp nhất chúng trước. SDK chọn một biến thể phù hợp với giao dịch chuyển và điền các vị trí không dùng bằng UTXO giả. UTXO giả không chứa giá trị và trông giống UTXO thật trên chuỗi.
Alice gửi cho Bob 30 USDC. UTXO lớn nhất của cô ấy đủ để chi trả giao dịch chuyển.UTXO 40 USDC của Alice được chi tiêu, còn các UTXO 25, 20, 10 và 5 USDC của cô ấy vẫn chưa được chi tiêu. Giao dịch tạo 30 USDC cho Bob và 10 USDC cho Alice.

Hợp nhất UTXO

Việc nhận nhiều giao dịch chuyển mà không chi tiêu có thể phân mảnh số dư riêng tư thành nhiều UTXO. Nếu một giao dịch chuyển cần nhiều hơn 36 UTXO, hãy hợp nhất chúng trước để người dùng có thể chi tiêu toàn bộ số dư trong một giao dịch chuyển. Hầu hết người dùng sẽ hiếm khi gặp số dư bị phân mảnh vì một giao dịch chuyển có thể chi tiêu tối đa 36 UTXO.
  • Một lần hợp nhất kết hợp các UTXO có cùng chủ sở hữu và tài sản thành một UTXO có cùng tổng giá trị.
  • Một lần hợp nhất không thể chi tiêu tiền hoặc thay đổi chủ sở hữu.
  • Quá trình hợp nhất có thể diễn ra ngầm mà không ảnh hưởng đến trải nghiệm của người dùng cuối.
Một lần hợp nhất chi tiêu năm UTXO, mỗi UTXO có 1 USDC, của Alice và tạo một UTXO mới có 5 USDC cho Alice. Số lần hợp nhất cần thiết để chi tiêu toàn bộ số dư trong một giao dịch chuyển phụ thuộc vào số lượng UTXO đang nắm giữ số dư đó: Mỗi lần hợp nhất là một giao dịch Solana có bằng chứng ZK và chuyển tối đa 36 UTXO thành một UTXO. Vì kết quả hợp nhất mang tính xác định, các bằng chứng hợp nhất và bằng chứng chuyển được tạo song song.

Ví dụ về cách sử dụng chỉ thị hợp nhất

Ứng dụng của bạn có thể hợp nhất tại hai thời điểm:
  • Khi đồng bộ hóa số dư riêng tư: khi mở khóa ví, mở ví riêng tư, tiếp tục ứng dụng, kết nối lại mạng, có khoảng trống trong luồng hoặc khôi phục ví.
  • Trước một giao dịch chuyển: khi giao dịch chuyển cần nhiều hơn 36 UTXO.
Các lần hợp nhất chạy mà không cần chữ ký của người dùng. Ring tùy chỉnh thiết lập quyền hợp nhất riêng. Khi sử dụng ví riêng tư nhúng, quá trình hợp nhất được thực hiện ngầm cho bạn.
Ví dụ: một ví riêng tư nắm giữ 1.296 USDC trong 1.296 UTXO sau khi nhận 1.296 giao dịch chuyển riêng tư, mỗi giao dịch có 1 USDC. Một giao dịch chuyển chi tiêu tối đa 36 UTXO, vì vậy ví chi tiêu số dư theo hai giai đoạn:
  1. 36 giao dịch hợp nhất chạy song song và tạo 36 UTXO, mỗi UTXO có 36 USDC.
  2. Một giao dịch chuyển có 36 đầu vào chi tiêu toàn bộ số dư 1.296 USDC.

Khả năng xử lý đồng thời của UTXO

Người dùng có thể chi tiêu số dư riêng tư ngay khi giao dịch được hoàn tất. Một số dư riêng tư có thể được chi tiêu đồng thời khi được chia thành nhiều UTXO. Mỗi UTXO có thể được chi tiêu trong một giao dịch riêng biệt cùng lúc. Ví dụ: số dư gồm ba UTXO, mỗi UTXO có 100 USDC, có thể cấp tiền cho ba giao dịch chuyển tối đa 100 USDC cùng lúc. Ví chọn các UTXO cần chi tiêu. Ba UTXO của Alice, mỗi UTXO có 100 USDC, cấp tiền cho ba giao dịch chuyển cùng lúc, mỗi giao dịch chuyển sử dụng một UTXO. Một UTXO chỉ có thể được chi tiêu một lần. Để biết các giới hạn thông lượng của giao thức, hãy xem Cây Merkle trạng thái và Forester.

Tìm hiểu thêm

Overview

Ring, các bảo đảm về quyền riêng tư và luồng giao dịch.

Architecture

Cách ví, dịch vụ RPC và chương trình Solana tương tác với nhau.

Encryption and Privacy Guarantees

Cách tài sản được mã hóa và vai trò của cặp khóa được che chắn.

Custom Enterprise Rings

Tìm hiểu cách cấu hình Ring tùy chỉnh.

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ệ