- Приватный перевод перемещает токены внутри кольца между приватными кошельками.
- Приватные переводы отправляются одной транзакцией Solana на адрес кошелька Solana.
Перевод: что является приватным
- Default Ring
- Custom Rings
Кольцо без ограничений доступа обеспечивает конфиденциальность благодаря шифрованию суммы и актива.
Пользовательское кольцо можно настроить как конфиденциальное или анонимное (с шифрованием отправителя, получателя, актива и суммы).
Как работает перевод
Приватный перевод работает аналогично публичному переводу Solana:- Баланс SOL или SPL пользователя шифруется в блокчейне.
-
Пользователь расшифровывает приватное состояние, кошелёк формирует перевод, а владелец подписывает его.
- Получите зашифрованное состояние с помощью специальных методов RPC. Только пользователь может локально расшифровать балансы.
- Кошелёк задаёт сумму и получателя, а затем запрашивает ZK-доказательство. По умолчанию поставщик RPC создаёт ZK-доказательство и возвращает его.
- Среда выполнения Solana проверяет подписи и вызывает Solana Privacy Program, которая проверяет ZK-доказательство, не раскрывая зашифрованное состояние.
- Приложение отслеживает статус по хешу транзакции Solana.
Compare to Solana Transfer
Compare to Solana Transfer
- Баланс SOL или SPL пользователя публично доступен в блокчейне.
- Кошелёк считывает публичное состояние, формирует перевод, а владелец подписывает его.
- Среда выполнения Solana проверяет подписи и вызывает System Program или Token Program, которая обновляет публичный баланс.
- Приложение отслеживает статус по хешу транзакции Solana.
Это высокоуровневая схема транзакции для конфиденциального кольца без ограничений доступа.
Сравните её с пользовательскими кольцами в разделе Высокоуровневая схема транзакции.
Начало работы
- TypeScript Client
- Rust Client
1
Предварительные требования
Для примеров на TypeScript требуются Node.js 24 или более поздней версии, pnpm 11.18.0 и Solana CLI.
Connect to Endpoints
Connect to Endpoints
- Devnet
- Localnet
.env
2
Перевод на приватный баланс
Solana Kit send helper
Solana Kit send helper
- SDK возвращает инструкции. Приложение подписывает и отправляет их.
sendAndConfirmFactoryформирует транзакцию Kit, отправляет её и возвращает подпись вместе со слотом включения.
- SOL
- SPL
1. Select private token accounts to spend
1. Select private token accounts to spend
- В примере расходуются средства из приватного токен-аккаунта Solana, созданного предыдущим внесением. Перевод может расходовать несколько UTXO.
transferUtxoвыбирает один приватный токен-аккаунт Solana из этого баланса.
2. Prepare proof inputs
2. Prepare proof inputs
ProofInputUtxo.fromKeypairподготавливает выбранный UTXO как вход доказательства с использованием пары ключей приватного кошелька отправителя.- Из пары ключей выводится нуллификатор, который помечает входной UTXO как потраченный, при этом актив и сумма остаются зашифрованными.
3. Build and sign the confidential transfer
3. Build and sign the confidential transfer
senderAddress— это отправителя. Перевод расходует средства из этого кошелька.[transferInput]содержит список выбранных UTXO отправителя. Перевод может расходовать несколько UTXO.senderSigner.address— адрес Solana плательщика комиссии. Комиссию может оплатить спонсор газа.recipient.shieldedAddress()— защищённый адрес получателя. Выход перевода шифруется с помощью ключа просмотра получателя.SOL_MINTвыбирает SOL. При переводе SPL или Token 2022 передаётся адрес выпуска токена.TRANSFER_AMOUNTуказывается в базовых единицах актива. Для SOL используются лампорты. Для активов SPL и Token 2022 используются базовые единицы токена.transfer.signавторизует переход состояния, шифрует актив и сумму и создаёт входные данные для системы доказательства с нулевым разглашением.assets— реестр активов, используемый для определения поддерживаемых приватных активов.
4. Fetch the zero-knowledge proof
4. Fetch the zero-knowledge proof
senderKeysиспользуетLocalKeys.fromKeypair(sender, client.proofService)для авторизации создания доказательства с помощью ключей отправителя.client.proveTransactсоздаёт доказательство с нулевым разглашением на основе подписанного перевода и возвращает сериализованные данные инструкции.- Доказательство подтверждает, что отправитель владеет входами и может расходовать их, не раскрывая зашифрованный актив или сумму.
5. Build the transfer instruction
5. Build the transfer instruction
payerподписывает и оплачивает транзакцию Solana. Комиссию может оплатить спонсор газа.inputTreeиoutputTree— этоclient.tree, дерево Меркла состояния, которое содержит потраченные UTXO и принимает выход получателя и сдачу отправителя.await transactInstructionлокально выводит адреса аккаунтов нуллификаторов и возвращает инструкцию. Аккаунты нуллификаторов помечают входные UTXO как потраченные, чтобы приватный баланс нельзя было потратить дважды.dataсодержит доказательство с нулевым разглашением и зашифрованные выходы, созданные на предыдущем шаге.- Приватный перевод перемещает актив только между приватными балансами. В него не передаются публичные аккаунты Solana или токен-аккаунты.
6. Send like any Solana transaction
6. Send like any Solana transaction
sendAndConfirmподписывает и отправляетtransferInstructionкак транзакцию Solana.- После подтверждения возвращается слот включения, используемый для ограничения запроса к индексатору.
Полный пример кода
Клонируйте и запустите пример:В примерах используется конфиденциальное кольцо в локальной сети/devnet, доступное здесь.
deposit_transfer_withdraw.ts
Связанные руководства
Deposit
Withdraw
Read a Private Balance
Read Private History
Не нашли то, что искали?
Свяжитесь с нами! Telegram | Электронная почта | Контакты