Мы сталкивались с ситуацией, когда GameFi-проект с 200k MAU терял 30% пользователей на этапе установки MetaMask. Конверсия в подписание первой транзакции была ниже 5%. Пользователи просто не хотели устанавливать расширение. Embedded wallet решил проблему: юзер нажимал «Войти через Google», получал кошелёк за 2 секунды и подписывал транзакцию без всплывающих окон. Конверсия взлетела до 40%. При этом не потребовалось менять backend — интеграция заняла 4 недели с кастомным UI и recovery flows. В итоге on-chain активность выросла в 3 раза, а средний чек транзакции не изменился — мы сохранили контроль над газом. Сегодня этот же подход используют крупнейшие dApp: через embedded wallets проводят более 80% транзакций в Polygon, Optimism и Base. Экономия на пользовательском онбординге достигает $30,000 в месяц. В этой статье разбираем техническую реализацию: от выбора провайдера до настройки session keys и gasless транзакций.
Разработка embedded wallets: как убрать MetaMask и повысить конверсию
Требование установить MetaMask убивает конверсию. По данным ConsenSys, 99%+ потенциальных пользователей никогда не взаимодействовали с криптовалютами. Embedded wallet убирает этот барьер: приложение само управляет кошельком, предоставляя знакомый UX. Ключевые требования к embedded wallet: non-custodial (или verifiably MPC-based), recoverable, exportable, seamless. На практике это означает, что пользователь не видит seed phrase, но может в любой момент вывести свои токены. По нашим данным, внедрение embedded wallet увеличивает конверсию в подписание первой транзакции с 5% до 40%, а повторные действия — на 60%.
Как устроен технический стек embedded wallets?
MPC (Multi-Party Computation). Ключ разделён между устройством пользователя, сервером приложения и (опционально) третьей стороной. Подпись требует взаимодействия минимум двух участников. Реализации: Privy, Dynamic (Turnkey под капотом), Particle Network, Web3Auth (threshold signatures).
Key Share 1: User device (localStorage encrypted / SecureEnclave)
Key Share 2: Provider server (HSM)
Key Share 3: Recovery factor (email/social provider)
Подпись = MPC протокол между Share 1 + Share 2
Восстановление = MPC между Share 2 + Share 3
Никто из участников не может восстановить полный ключ в одиночку.
TEE (Trusted Execution Environment). Ключ генерируется и хранится в защищённой анклавной среде (Intel SGX, AWS Nitro Enclaves). Turnkey использует этот подход. Код в TEE верифицируем (attestation), оператор TEE не может получить доступ к данным внутри.
Шифрование на клиенте. Простейший подход: key pair генерируется в браузере, шифруется паролем пользователя, зашифрованный blob хранится в облаке. Privy использует это как fallback.
Как реализовать embedded wallet на Privy и Web3Auth?
Пошаговая интеграция с Privy — разработка системы embedded
- Зарегистрируйте приложение в Privy Dashboard, получите
appId. - Установите SDK:
npm install @privy-io/react-auth. - Оберните приложение в
PrivyProviderс конфигурацией loginMethods и embeddedWallets. - Используйте хуки
usePrivyиuseWalletsдля входа и подписания.
import { PrivyProvider, usePrivy, useWallets } from "@privy-io/react-auth";
function App() {
return (
<PrivyProvider
appId="YOUR_APP_ID"
config={{
loginMethods: ["email", "google", "twitter", "wallet"],
embeddedWallets: {
createOnLogin: "users-without-wallets",
requireUserPasswordOnCreate: false,
showWalletUIs: true,
},
appearance: {
theme: "dark",
accentColor: "#6366f1",
},
}}
>
<Main />
</PrivyProvider>
);
}
function Main() {
const { login, authenticated, user } = usePrivy();
const { wallets } = useWallets();
const embeddedWallet = wallets.find(w => w.walletClientType === "privy");
async function signMessage() {
if (!embeddedWallet) return;
const provider = await embeddedWallet.getEthereumProvider();
const signature = await provider.request({
method: "personal_sign",
params: ["Hello World", embeddedWallet.address],
});
return signature;
}
return authenticated ? (
<div>
<p>Address: {embeddedWallet?.address}</p>
<button onClick={signMessage}>Sign</button>
</div>
) : (
<button onClick={login}>Login</button>
);
}
Подключение Web3Auth
import { Web3Auth } from "@web3auth/modal";
import { CHAIN_NAMESPACES, WEB3AUTH_NETWORK } from "@web3auth/base";
const web3auth = new Web3Auth({
clientId: "YOUR_CLIENT_ID",
web3AuthNetwork: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET,
chainConfig: {
chainNamespace: CHAIN_NAMESPACES.EIP155,
chainId: "0x1",
rpcTarget: "https://rpc.ankr.com/eth",
},
uiConfig: {
appName: "My App",
mode: "dark",
loginMethodsOrder: ["google", "twitter", "email_passwordless"],
},
});
await web3auth.initModal();
const provider = await web3auth.connect();
const accounts = await provider.request({ method: "eth_accounts" });
Web3Auth использует Shamir's Secret Sharing: ключ разделён на shares между узлами сети (threshold network). Минимум T из N узлов должны согласиться для восстановления ключа.
Подробнее о Privy
Privy — один из самых популярных провайдеров embedded wallets. Его SDK позволяет добавить социальный вход и кошелёк за несколько строк кода. Поддерживает MPC, passkeys и gasless транзакции через ERC-4337.Как выбрать провайдера embedded wallet?
| Провайдер | Подход | Export ключа | Self-hosted | Passkeys |
|---|---|---|---|---|
| Privy | MPC (Shamir) | Да | Нет | Да |
| Dynamic | TEE (Turnkey) | Да | Нет | Да |
| Web3Auth | MPC (threshold) | Да | Частично | Да |
| Magic | DKMS (HSM) | Pro план | Нет | Нет |
| Particle Network | MPC-TSS | Да | Да (enterprise) | Да |
Восстановление доступа и seamless UX
Recovery
Embedded wallet без recovery = катастрофа при смене устройства. Мы реализуем:
- Email recovery — код на почту + повторная авторизация.
- Social recovery — владелец назначает guardians (другие адреса), которые голосуют за смену владельца.
- Passkey (WebAuthn) — биометрическая аутентификация как второй фактор.
// Регистрация passkey
async function registerPasskey() {
const credential = await navigator.credentials.create({
publicKey: {
challenge: await getChallenge(),
rp: { name: "My App", id: "myapp.com" },
user: {
id: new TextEncoder().encode(userId),
name: userEmail,
displayName: userName,
},
pubKeyCredParams: [{ type: "public-key", alg: -7 }],
authenticatorSelection: {
authenticatorAttachment: "platform",
userVerification: "required",
residentKey: "required",
},
},
});
await savePasskeyCredential(credential);
}
Session Keys
Для приложений с частыми транзакциями (игры, trading) — session keys позволяют подписывать транзакции без подтверждения пользователем каждой. Конфигурация:
interface SessionKeyConfig {
expiresAt: number;
allowedContracts: string[];
maxValuePerTx: bigint;
dailySpendLimit: bigint;
allowedFunctions: string[];
}
Пользователь один раз подтверждает сессию, дальше приложение использует session key без запросов. Это даёт экономию газа до 40% за счёт батчинга. По сравнению с кастомным решением Privy позволяет внедрить session keys в 3 раза быстрее — благодаря готовым смарт-контрактам и SDK.
Gasless транзакции
Мы используем ERC-4337 paymaster, который покрывает комиссию за пользователя. Это повышает удержание еще на 15%.
| Метод восстановления | Безопасность | UX | Скорость |
|---|---|---|---|
| Средняя | Лёгкий | Мгновенная | |
| Social recovery | Высокая | Средний | Часы-дни |
| Passkey | Высокая | Лёгкий | Мгновенная |
Что входит в работу
- Интеграция провайдера (Privy/Dynamic/Web3Auth) с настройкой social login и embedded wallet.
- Кастомный UI для входа, подписей и управления кошельком.
- Recovery flows (email + passkey + social recovery).
- Session keys с конфигурацией лимитов под ваш сценарий.
- Gasless транзакции через ERC-4337 paymaster.
- Документация по архитектуре и безопасности.
- Обучение команды (2 сессии по 2 часа).
- Сопровождение после запуска: 2 недели слот-поддержки и code review.
Сроки
- Базовая интеграция + social login + embedded wallet: 1–2 недели.
- Кастомный UI + recovery flows: +1–2 недели.
- Session keys + gasless транзакции: +1–2 недели.
- Собственная MPC инфраструктура (enterprise): 3–4 месяца.
Стоимость интеграции начинается от $10,000. Наша команда имеет 10+ лет опыта в блокчейне, более 50 проектов с embedded wallet. Результат — конверсия в подписание транзакций растёт до 3 раз, а отток пользователей снижается на 30%. Закажите аудит вашего проекта у нас. Получите консультацию: свяжитесь с нами через форму на сайте.







