Перейти к основному контенту

Бесшовный онбординг с zkLogin

· 6 мин чтения
Dora Noda
Software Engineer

Как устранить сложности с кошельками, сохранить поток пользователей и спрогнозировать рост

Что, если бы ваше Web3-приложение имело такой же простой процесс регистрации, как и современный Web2-сервис? В этом и заключается основное обещание zkLogin на блокчейне Sui. Он работает как OAuth для Sui, позволяя пользователям входить в систему с помощью знакомых учетных записей Google, Apple, X и других. Доказательство с нулевым разглашением затем надежно связывает эту Web2-личность с ончейн-адресом Sui — без всплывающих окон кошелька, сид-фраз и оттока пользователей.

Эффект реален и ощутим. Учитывая сотни тысяч уже существующих аккаунтов zkLogin, тематические исследования сообщают о значительном росте конверсии пользователей: она подскочила с печальных 17 % до здоровых 42 % после устранения традиционных барьеров в виде кошельков. Давайте разберем, как это работает и что это может дать вашему проекту.


Почему кошельки убивают конверсию новых пользователей

Вы создали инновационное dApp, но воронка привлечения пользователей дает течь. Виновник почти всегда один и тот же: кнопка «Connect Wallet». Стандартный онбординг в Web3 — это лабиринт из установки расширений, предупреждений о сид-фразах и викторин по крипто-терминологии.

Для новичков это огромный барьер. UX-исследователи зафиксировали ошеломляющий отток в 87 % в тот момент, когда появлялся запрос на подключение кошелька. В показательном эксперименте простое перемещение этого запроса на более поздний этап процесса оформления заказа увеличило процент завершения до 94 %. Даже у пользователей, интересующихся криптовалютой, основной страх заключается в следующем: «Я могу потерять свои средства, если нажму не ту кнопку». Устранение этого единственного пугающего шага является ключом к экспоненциальному росту.


Как работает zkLogin (простыми словами)

zkLogin изящно обходит проблему кошелька, используя технологии, которым уже доверяет каждый пользователь интернета. Магия происходит за кулисами в несколько быстрых шагов:

  1. Эфемерная пара ключей: Когда пользователь хочет войти в систему, в его браузере локально генерируется временная пара ключей для одной сессии. Представьте это как временный ключ доступа, действительный только для этого сеанса.
  2. Процесс OAuth: Пользователь входит в систему с помощью своего аккаунта Google, Apple или другой социальной сети. Ваше приложение встраивает уникальное значение (nonce) в этот запрос на вход.
  3. ZKP-сервис: После успешного входа сервис ZKP (Zero-Knowledge Proof) генерирует криптографическое доказательство. Это доказательство подтверждает: «Этот токен OAuth авторизует владельца временного ключа», не раскрывая личные данные пользователя в блокчейне.
  4. Вычисление адреса: JWT-токен пользователя (JSON Web Token) от OAuth-провайдера объединяется с уникальной солью (salt) для детерминированной генерации их постоянного адреса Sui. Соль хранится в секрете либо на стороне клиента, либо в защищенном бэкенде.
  5. Отправка транзакции: Ваше приложение подписывает транзакции временным ключом и прикрепляет ZK-доказательство. Валидаторы Sui проверяют доказательство ончейн, подтверждая легитимность транзакции без необходимости использования традиционного кошелька со стороны пользователя.

Пошаговое руководство по интеграции

Готовы внедрить это? Вот краткое руководство с использованием TypeScript SDK. Принципы идентичны для Rust или Python.

1. Установите SDK

Пакет @mysten/sui включает все необходимые вспомогательные функции для zklogin.

pnpm add @mysten/sui

2. Сгенерируйте ключи и Nonce

Сначала создайте эфемерную пару ключей и nonce, привязанный к текущей эпохе в сети Sui.

const keypair = new Ed25519Keypair();
const { epoch } = await suiClient.getLatestSuiSystemState();
const nonce = generateNonce(keypair.getPublicKey(), Number(epoch) + 2, generateRandomness());

3. Перенаправление на OAuth

Сформируйте соответствующий URL-адрес для входа через OAuth для используемого вами провайдера (например, Google, Facebook, Apple) и перенаправьте пользователя.

4. Декодирование JWT и получение соли пользователя

После того как пользователь войдет в систему и будет перенаправлен обратно, получите id_token из URL. Используйте его для получения специфической для пользователя соли из вашего бэкенда, а затем вычислите его адрес Sui.

const jwt = new URLSearchParams(window.location.search).get('id_token')!;
const salt = await fetch('/api/salt?jwt=' + jwt).then(r => r.text());
const address = jwtToAddress(jwt, salt);

5. Запрос ZK-доказательства

Отправьте JWT сервису-пруверу (prover), чтобы получить ZK-доказательство. Для разработки вы можете использовать публичный прувер от Mysten. В продакшене вам следует развернуть собственный или использовать сервис вроде Enoki.

const proof = await fetch('/api/prove', {
method:'POST',
body: JSON.stringify({ jwt, ... })
}).then(r => r.json());

6. Подписание и отправка

Теперь создайте транзакцию, установите отправителем zkLogin-адрес пользователя и выполните её. SDK автоматически берет на себя прикрепление zkLoginInputs (доказательства). ✨

const tx = new TransactionBlock();
tx.moveCall({ target:'0x2::example::touch_grass' }); // Любой вызов Move
tx.setSender(address);
tx.setGasBudget(5_000_000);

await suiClient.signAndExecuteTransactionBlock({
transactionBlock: tx,
zkLoginInputs: proof // Магия происходит здесь
});

7. Сохранение сессии

Для более удобного взаимодействия с пользователем зашифруйте и сохраните пару ключей и соль в IndexedDB или локальном хранилище. Не забывайте менять их каждые несколько эпох для повышения безопасности.


Шаблон прогнозирования KPI

Разница, которую привносит zkLogin, не просто качественная; она поддается количественной оценке. Сравните типичную воронку адаптации с воронкой на базе zkLogin:

Этап воронкиТипичный (с поп-апом кошелька)С zkLoginРазница
Лендинг → Вход100 %100 %
Вход → Кошелек готов15 % (установка, сид-фраза)55 % (вход через соцсети)+40 п. п.
Кошелек готов → Первая транзакция~23 %~90 %+67 п. п.
Общая конверсия транзакций~3 %≈ 25‑40 %~8‑13×

👉 Что это значит: Для кампании, привлекающей 10 000 уникальных посетителей, это разница между 300 ончейн-действиями в первый день и более чем 2 500.


Лучшие практики и нюансы

Чтобы сделать процесс еще более плавным, примите во внимание эти советы для профессионалов:

  • Используйте спонсируемые транзакции (Sponsored Transactions): Оплачивайте комиссии за первые несколько транзакций ваших пользователей. Это устраняет любые трения и создает невероятный вау-эффект.
  • Осторожно обращайтесь с солью (Salts): Изменение соли пользователя приведет к генерации нового адреса. Делайте это только в том случае, если у вас есть надежный путь восстановления доступа для них.
  • Показывайте адрес Sui: После регистрации покажите пользователям их ончейн-адрес. Это позволит продвинутым пользователям позже импортировать его в традиционный кошелек, если они того пожелают.
  • Предотвращайте циклы перезагрузки: Кэшируйте JWT и эфемерную пару ключей до истечения срока их действия, чтобы пользователю не приходилось повторно входить в систему.
  • Мониторьте задержку прувера (Prover Latency): Следите за временем цикла генерации доказательства. Если оно превышает 2 секунды, рассмотрите возможность размещения регионального прувера для поддержания высокой скорости работы.

В чем ценность BlockEden.xyz

В то время как zkLogin совершенствует пользовательский интерфейс, его масштабирование создает новые задачи для бэкенда. Именно здесь на помощь приходит BlockEden.xyz.

  • Уровень API: Наши высокопроизводительные RPC-узлы с гео-маршрутизацией гарантируют, что ваши транзакции zkLogin будут обрабатываться с минимальной задержкой, независимо от местоположения пользователя.
  • Наблюдаемость: Получите готовые дашборды для отслеживания ключевых показателей, таких как задержка доказательства (proof latency), соотношение успешных и неудачных операций, а также состояние вашей воронки конверсии.
  • Комплаенс: Для приложений, работающих с фиатом, наш опциональный модуль KYC обеспечивает легальный он-рамп (on-ramp) напрямую через подтвержденную личность пользователя.

Готовы к запуску?

Эра неуклюжих и пугающих процессов работы с кошельками закончилась. Запустите песочницу zkLogin, подключите эндпоинт полной ноды от BlockEden и наблюдайте, как график регистраций ползет вверх — при этом вашим пользователям даже не придется слышать слово «кошелек». 😉