Skip to main content
  1. Приватный перевод перемещает токены внутри кольца между приватными кошельками.
  2. Приватные переводы отправляются одной транзакцией Solana на адрес кошелька Solana.

Перевод: что является приватным

Кольцо без ограничений доступа обеспечивает конфиденциальность благодаря шифрованию суммы и актива. Пользовательское кольцо можно настроить как конфиденциальное или анонимное (с шифрованием отправителя, получателя, актива и суммы).

Как работает перевод

Приватный перевод работает аналогично публичному переводу Solana:
  1. Баланс SOL или SPL пользователя шифруется в блокчейне.
  2. Пользователь расшифровывает приватное состояние, кошелёк формирует перевод, а владелец подписывает его.
    • Получите зашифрованное состояние с помощью специальных методов RPC. Только пользователь может локально расшифровать балансы.
    • Кошелёк задаёт сумму и получателя, а затем запрашивает ZK-доказательство. По умолчанию поставщик RPC создаёт ZK-доказательство и возвращает его.
  3. Среда выполнения Solana проверяет подписи и вызывает Solana Privacy Program, которая проверяет ZK-доказательство, не раскрывая зашифрованное состояние.
  4. Приложение отслеживает статус по хешу транзакции Solana.
  1. Баланс SOL или SPL пользователя публично доступен в блокчейне.
  2. Кошелёк считывает публичное состояние, формирует перевод, а владелец подписывает его.
  3. Среда выполнения Solana проверяет подписи и вызывает System Program или Token Program, которая обновляет публичный баланс.
  4. Приложение отслеживает статус по хешу транзакции Solana.
Это высокоуровневая схема транзакции для конфиденциального кольца без ограничений доступа. Сравните её с пользовательскими кольцами в разделе Высокоуровневая схема транзакции.

Начало работы

1

Предварительные требования

Для примеров на TypeScript требуются Node.js 24 или более поздней версии, pnpm 11.18.0 и Solana CLI.
Источник: sdk-libs/ts
Добавьте ключ API Helius:
.env
По умолчанию в примерах в качестве плательщика используется кошелёк Solana CLI. На балансе плательщика должны быть SOL в devnet. См. Как получить SOL в devnet.
2

Перевод на приватный баланс

  • SDK возвращает инструкции. Приложение подписывает и отправляет их.
  • sendAndConfirmFactory формирует транзакцию Kit, отправляет её и возвращает подпись вместе со слотом включения.
В этом примере входные UTXO выбираются вручную. Вспомогательные средства кошелька из SDK могут выбрать и зарезервировать их за вас. Рекомендации по выбору входов приведены в разделе Выбор UTXO.
  • В примере расходуются средства из приватного токен-аккаунта Solana, созданного предыдущим внесением. Перевод может расходовать несколько UTXO.
  • transferUtxo выбирает один приватный токен-аккаунт Solana из этого баланса.
  • ProofInputUtxo.fromKeypair подготавливает выбранный UTXO как вход доказательства с использованием пары ключей приватного кошелька отправителя.
  • Из пары ключей выводится нуллификатор, который помечает входной UTXO как потраченный, при этом актив и сумма остаются зашифрованными.
  • senderAddress — это отправителя. Перевод расходует средства из этого кошелька.
  • [transferInput] содержит список выбранных UTXO отправителя. Перевод может расходовать несколько UTXO.
  • senderSigner.address — адрес Solana плательщика комиссии. Комиссию может оплатить спонсор газа.
  • recipient.shieldedAddress() — защищённый адрес получателя. Выход перевода шифруется с помощью ключа просмотра получателя.
  • SOL_MINT выбирает SOL. При переводе SPL или Token 2022 передаётся адрес выпуска токена.
  • TRANSFER_AMOUNT указывается в базовых единицах актива. Для SOL используются лампорты. Для активов SPL и Token 2022 используются базовые единицы токена.
  • transfer.sign авторизует переход состояния, шифрует актив и сумму и создаёт входные данные для системы доказательства с нулевым разглашением.
  • assets — реестр активов, используемый для определения поддерживаемых приватных активов.
  • senderKeys использует LocalKeys.fromKeypair(sender, client.proofService) для авторизации создания доказательства с помощью ключей отправителя.
  • client.proveTransact создаёт доказательство с нулевым разглашением на основе подписанного перевода и возвращает сериализованные данные инструкции.
  • Доказательство подтверждает, что отправитель владеет входами и может расходовать их, не раскрывая зашифрованный актив или сумму.
  • payer подписывает и оплачивает транзакцию Solana. Комиссию может оплатить спонсор газа.
  • inputTree и outputTree — это client.tree, дерево Меркла состояния, которое содержит потраченные UTXO и принимает выход получателя и сдачу отправителя.
  • await transactInstruction локально выводит адреса аккаунтов нуллификаторов и возвращает инструкцию. Аккаунты нуллификаторов помечают входные UTXO как потраченные, чтобы приватный баланс нельзя было потратить дважды.
  • data содержит доказательство с нулевым разглашением и зашифрованные выходы, созданные на предыдущем шаге.
  • Приватный перевод перемещает актив только между приватными балансами. В него не передаются публичные аккаунты Solana или токен-аккаунты.
  • sendAndConfirm подписывает и отправляет transferInstruction как транзакцию Solana.
  • После подтверждения возвращается слот включения, используемый для ограничения запроса к индексатору.

Полный пример кода

Клонируйте и запустите пример:
В примерах используется конфиденциальное кольцо в локальной сети/devnet, доступное здесь.
deposit_transfer_withdraw.ts

Связанные руководства

Deposit

Withdraw

Read a Private Balance

Read Private History

Не нашли то, что искали?

Свяжитесь с нами! Telegram | Электронная почта | Контакты