- UTXO не является аккаунтом Solana, поэтому ему не требуется освобождение от ренты.
- Его баланс зашифрован в блокчейне.
- Владелец — пара ключей Solana, PDA или ключ P-256.
- Актив — минт (SOL, SPL или Token-2022).
- Количество — число единиц
assetв минимальном номинале. - Данные — UTXO может хранить произвольные данные, например владельца токенов, переданных на условное депонирование.
- Данные программы и политики — необязательные настроенные параметры соответствия требованиям Ring.
- Diagram
- Code
Исходный код: Спецификация · sdk-libs/transaction/src/utxo/note.rs
View Solana token account
View Solana token account
- Diagram
- Code
Приватный баланс
Приватный баланс — это сумма всех UTXO одного актива, принадлежащих приватному кошельку. Кошелек отображает единый баланс независимо от того, состоит ли приватный баланс из одного или нескольких UTXO. В одной приватной передаче можно израсходовать несколько UTXO.Приватная передача
Приватные передачи с UTXO работают иначе, чем публичные передачи с аккаунтами токенов SPL:- Передача из аккаунта токенов SPL обновляет
amount. - Приватная передача с UTXO не обновляет
amountUTXO. Вместо этого приватные передачи расходуют существующие UTXO и создают новые UTXO для получателя и оставшегося баланса отправителя.
- При использовании аккаунтов токенов SPL значение
amountАлисы уменьшается с 50 до 15, а значение Боба увеличивается на 35. - При использовании UTXO Алисе принадлежит один UTXO на 50 USDC. Транзакция расходует существующий UTXO и создает два новых: один на 35 USDC для Боба и один на 15 USDC для Алисы.
- Transfer with one UTXO
- Transfer with multiple UTXOs
Выбор UTXO
Для приватных передач SDK выбирает неизрасходованные UTXO, покрывающие сумму, которую вы хотите передать. Алгоритм выбора UTXO расходует минимально возможное количество UTXO на одну передачу:- SDK фильтрует ваши UTXO по отправляемому активу и сортирует их по количеству.
- SDK выбирает столько UTXO, сколько необходимо для покрытия суммы передачи. Сначала он выбирает самые крупные UTXO, пока сумма передачи не будет покрыта.
Варианты транзакций
Каждая приватная передача использует вариант транзакции: фиксированное количество слотов для расходуемых и создаваемых UTXO. Варианты предусматривают от 1 до 36 расходуемых UTXO, и у каждого варианта есть собственная ZK-схема. Схема доказывает, что расходуемые UTXO действительны, а новые UTXO содержат ту же общую сумму. Если для передачи требуется более 36 UTXO, сначала объедините их. SDK выбирает подходящий для передачи вариант и заполняет неиспользуемые слоты фиктивными UTXO. Фиктивные UTXO не содержат ценности и выглядят в блокчейне как настоящие UTXO.- 1 spent, 2 new
- 2 spent, 2 new
- 3 spent, 3 new
- 4 spent, 3 new
Алиса отправляет Бобу 30 USDC. Ее крупнейший UTXO покрывает передачу.
Supported transaction variants
Supported transaction variants
Исходный код: Спецификация · Поддерживаемые варианты
Объединение UTXO
Получение множества переводов без расходования средств может фрагментировать приватный баланс между множеством UTXO. Если для передачи требуется более 36 UTXO, сначала объедините их, чтобы пользователь мог израсходовать весь баланс за одну передачу. Большинство пользователей редко сталкиваются с фрагментированным балансом, поскольку одна передача может израсходовать до 36 UTXO.- При объединении UTXO с одинаковыми владельцем и активом преобразуются в один UTXO с той же общей стоимостью.
- При объединении нельзя расходовать средства или менять владельца.
- Объединение может выполняться автоматически, не влияя на взаимодействие конечных пользователей с приложением.
Каждое объединение представляет собой одну транзакцию Solana с ZK-доказательством и преобразует до 36 UTXO в один.
Поскольку результат объединения детерминирован, доказательства объединения и доказательство передачи генерируются параллельно.
Пример использования инструкции объединения
Ваше приложение может выполнять объединение в двух случаях:- При синхронизации приватного баланса: при разблокировке кошелька, открытии приватного кошелька, возобновлении работы приложения, повторном подключении к сети, разрыве потока или восстановлении кошелька.
- Перед передачей: когда для передачи требуется более 36 UTXO.
Объединения выполняются без подписи пользователя. Пользовательские Rings задают собственные разрешения на объединение.
При использовании встроенного приватного кошелька объединение выполняется автоматически.
Example for Merge
Example for Merge
Например, после получения 1 296 приватных переводов по 1 USDC приватный кошелек содержит 1 296 USDC в 1 296 UTXO.
Одна передача может израсходовать не более 36 UTXO, поэтому кошелек расходует баланс в два этапа:
- 36 транзакций объединения выполняются параллельно и создают 36 UTXO по 36 USDC каждый.
- Одна передача с 36 входами расходует весь баланс в 1 296 USDC.
Параллельное расходование UTXO
Пользователи могут расходовать приватные балансы сразу после финализации транзакций. Приватный баланс можно расходовать параллельно, если он разделен между несколькими UTXO. Каждый UTXO можно одновременно расходовать в отдельной транзакции. Например, баланс из трех UTXO по 100 USDC может одновременно финансировать три передачи на сумму до 100 USDC каждая. Кошелек выбирает, какие UTXO расходовать.Подробнее
Overview
Rings, гарантии конфиденциальности и поток транзакций.
Architecture
Как взаимодействуют кошельки, службы RPC и программы Solana.
Encryption and Privacy Guarantees
Как шифруются активы и какую роль играет защищенная пара ключей.
Custom Enterprise Rings
Узнайте, как настроить пользовательский Ring.
Не нашли то, что искали?
Свяжитесь с нами! Telegram | Электронная почта | Контакты